Heim >Backend-Entwicklung >Python-Tutorial >Beispiele für die Textklassifizierung in Python
Textklassifizierungsbeispiel in Python
Mit der Entwicklung der künstlichen Intelligenz und der Technologie zur Verarbeitung natürlicher Sprache ist die Textklassifizierung zu einer der am weitesten verbreiteten Technologien geworden und kann eine wichtige Rolle bei Aufgaben der Verarbeitung natürlicher Sprache spielen. Als beliebte Programmiersprache machen Pythons leistungsstarke Bibliotheken zur Verarbeitung natürlicher Sprache und Bibliotheken für maschinelles Lernen wie NLTK, Scikit-learn und Tensorflow die Implementierung der Textklassifizierung in Python sehr einfach.
In diesem Artikel werden Beispiele für die Python-Textklassifizierung vorgestellt und anhand von Beispielen demonstriert, wie Python für die Textklassifizierung verwendet wird.
Vor der Textklassifizierung müssen Daten gesammelt, bereinigt und vorverarbeitet werden. Hier verwenden wir als Beispiel einen Datensatz aus einer Stimmungsanalyseaufgabe. Dieser Datensatz enthält zwei Kategorien von Filmkritiken, die jeweils positive und negative Stimmungen repräsentieren. Der Datensatz stammt von der Filmkritik-Website IMDb und kann unter http://ai.stanford.edu/~amaas/data/sentiment/ heruntergeladen werden.
Jeder Kommentar im Datensatz ist eine Textdatei mit dem Tag pos
oder neg
im Dateinamen. Wir können die os
-Bibliothek von Python verwenden, um die Datei zu lesen und dann den Text und die Beschriftungen in einem Pandas DataFrame zu speichern, um die spätere Verarbeitung zu erleichtern. pos
或neg
。我们可以使用Python的os
库来读取文件,然后将文本和标签存入一个Pandas的DataFrame中,方便后续的处理。
import os import pandas as pd # 读取文件 def read_data(folder): files = os.listdir(folder) data = {'text': [], 'sentiment': []} for file in files: with open(os.path.join(folder, file), 'r') as f: data['text'].append(f.read()) data['sentiment'].append(file.split('.')[0]) return pd.DataFrame.from_dict(data) # 读取数据集 train_folder = 'aclImdb/train' test_folder = 'aclImdb/test' train_data = read_data(train_folder) test_data = read_data(test_folder)
然后,我们可以使用Pandas的groupby
方法,统计数据集中文本长度和情感标签的占比。
# 统计文本长度 train_data['text_len'] = train_data['text'].apply(len) test_data['text_len'] = test_data['text'].apply(len) # 统计情感标签比例 train_sentiment_pct = train_data.groupby('sentiment').size() / len(train_data) test_sentiment_pct = test_data.groupby('sentiment').size() / len(test_data) print('Train Sentiment Distribution: {} '.format(train_sentiment_pct)) print('Test Sentiment Distribution: {} '.format(test_sentiment_pct))
运行以上代码,我们可以看到数据集中正面和负面评论的数量大致相同,情感标签分布均匀。
在进行文本分类之前,需要将文本转换为计算机可以理解的形式。这里我们将使用词袋模型来进行特征提取。
词袋模型是基于一个假设:文本中的每个词的重要性都是相等的,因此将文本中所有的单词都提取出来,形成一个词汇表(vocabulary),然后将每个文本表示为一个向量,向量的每个元素代表该词在该文本中出现的次数。
在Scikit-learn中,可以使用CountVectorizer
from sklearn.feature_extraction.text import CountVectorizer # 创建CountVectorizer对象 vectorizer = CountVectorizer(stop_words='english') # 将文本转换为向量 train_features = vectorizer.fit_transform(train_data['text']) test_features = vectorizer.transform(test_data['text']) # 打印特征维度 print('Train Feature Dimension: {}'.format(train_features.shape)) print('Test Feature Dimension: {}'.format(test_features.shape))Dann können wir die
groupby
-Methode von Pandas verwenden, um den Anteil der Textlänge und der Emotionsbezeichnungen im Datensatz zu zählen. from sklearn.linear_model import LogisticRegression from sklearn.naive_bayes import MultinomialNB from sklearn.svm import SVC from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import f1_score, accuracy_score # 训练和评估函数 def train_and_evalute(classifier, train_features, train_labels, test_features, test_labels): # 训练分类器 classifier.fit(train_features, train_labels) # 在训练集和测试集上计算F1分数和准确率 train_predictions = classifier.predict(train_features) test_predictions = classifier.predict(test_features) train_f1 = f1_score(train_labels, train_predictions, pos_label='pos') test_f1 = f1_score(test_labels, test_predictions, pos_label='pos') train_accuracy = accuracy_score(train_labels, train_predictions) test_accuracy = accuracy_score(test_labels, test_predictions) # 打印评估结果 print('Train F1 Score: {0:.3f}'.format(train_f1)) print('Test F1 Score: {0:.3f}'.format(test_f1)) print('Train Accuracy: {0:.3f}'.format(train_accuracy)) print('Test Accuracy: {0:.3f}'.format(test_accuracy)) # 训练和评估各个分类器 classifiers = [ ('Logistic Regression', LogisticRegression(max_iter=1000)), ('Multinomial Naive Bayes', MultinomialNB()), ('Support Vector Machine', SVC(kernel='linear')), ('Random Forest', RandomForestClassifier(n_estimators=100)) ] for classifier_name, classifier in classifiers: print(' {}'.format(classifier_name)) train_and_evalute(classifier, train_features, train_data['sentiment'], test_features, test_data['sentiment'])Wenn wir den obigen Code ausführen, können wir sehen, dass die Anzahl der positiven und negativen Kommentare im Datensatz ungefähr gleich ist und die Stimmungsbezeichnungen gleichmäßig verteilt sind.
Vor der Textklassifizierung muss der Text in eine Form umgewandelt werden, die der Computer verstehen kann. Hier verwenden wir das Bag-of-Words-Modell zur Merkmalsextraktion.
Das Bag-of-Words-Modell basiert auf einer Annahme: Die Bedeutung jedes Wortes im Text ist gleich, daher werden alle Wörter im Text extrahiert, um ein Vokabular (Vokabular) zu bilden, und dann wird jeder Text als dargestellt Ein Vektor. Jedes Element des Vektors stellt die Häufigkeit dar, mit der das Wort im Text vorkommt.
CountVectorizer
zur Merkmalsextraktion verwenden. Das obige ist der detaillierte Inhalt vonBeispiele für die Textklassifizierung in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!