Heim  >  Artikel  >  Backend-Entwicklung  >  Beispiele für die Textklassifizierung in Python

Beispiele für die Textklassifizierung in Python

PHPz
PHPzOriginal
2023-06-09 20:22:371572Durchsuche

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.

  1. Datenerfassung und Vorverarbeitung

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. posneg。我们可以使用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))

运行以上代码,我们可以看到数据集中正面和负面评论的数量大致相同,情感标签分布均匀。

  1. 特征提取

在进行文本分类之前,需要将文本转换为计算机可以理解的形式。这里我们将使用词袋模型来进行特征提取。

词袋模型是基于一个假设:文本中的每个词的重要性都是相等的,因此将文本中所有的单词都提取出来,形成一个词汇表(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.
    1. Merkmalsextraktion

    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.

      In Scikit-learn können Sie CountVectorizer zur Merkmalsextraktion verwenden.
    1. rrreee
    2. Der obige Code wandelt Text in Vektoren um. Jeder Text ist ein spärlicher Vektor mit der Dimension der Vokabulargröße. Wie Sie sehen, enthält dieser Datensatz insgesamt 250.000 Features und die Dimension ist sehr hoch.

    Modellschulung und -bewertung

    🎜Trainieren und bewerten Sie mithilfe mehrerer Klassifikatoren in Scikit-learn. Hier verwenden wir den Logistic Regression Classifier, den Naive Bayes Classifier, den Support Vector Machine Classifier und den Random Forest Classifier, um herauszufinden, welcher Klassifikator die beste Leistung erbringt. 🎜rrreee🎜Der obige Code verwendet den Trainingssatz und den Testsatz, um jeden Klassifikator auszuwerten. Wir können sehen, dass der Naive Bayes-Klassifikator sowohl beim Trainingssatz als auch beim Testsatz eine sehr gute Leistung erbringt und einen F1-Score von 0,87 und eine Genauigkeit von 0,85 erreicht. Andere Klassifikatoren schnitten etwas schlechter ab, schnitten aber ebenfalls gut ab. 🎜🎜🎜Fazit🎜🎜🎜In diesem Artikel werden Beispiele für die Python-Textklassifizierung vorgestellt, einschließlich Datenerfassung und -vorverarbeitung, Merkmalsextraktion sowie Modelltraining und -bewertung. Anhand von Beispielen lernten wir, wie man Python zur Textklassifizierung verwendet, und lernten Textklassifizierungsalgorithmen kennen, die auf logistischer Regression, Naive Bayes, Support-Vektor-Maschinen und Zufallswäldern basieren. 🎜🎜In realen Situationen müssen wir möglicherweise eine eingehendere Verarbeitung und Analyse von Textdaten durchführen, z. B. das Entfernen von Stoppwörtern, Wortstamm, Wortvektordarstellung usw., um die Leistung der Textklassifizierung zu verbessern. Gleichzeitig können Sie auch versuchen, Deep-Learning-Modelle wie Convolutional Neural Networks (CNN) und Recurrent Neural Networks (RNN) zur Textklassifizierung zu 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn