Exemples de classification de texte en Python

PHPz
Libérer: 2023-06-09 20:22:37
original
1553 Les gens l'ont consulté

Exemple de classification de texte en Python

Avec le développement de l'intelligence artificielle et de la technologie de traitement du langage naturel, la classification de texte est devenue l'une des technologies les plus utilisées et elle peut jouer un rôle important dans les tâches de traitement du langage naturel. En tant que langage de programmation populaire, les puissantes bibliothèques de traitement du langage naturel et les bibliothèques d'apprentissage automatique de Python, telles que NLTK, Scikit-learn et Tensorflow, rendent la classification de texte très facile à mettre en œuvre dans Python.

Cet article présentera des exemples de classification de texte Python et démontrera comment utiliser Python pour la classification de texte à travers des exemples.

  1. Collecte et prétraitement des données

Avant la classification du texte, les données doivent être collectées, nettoyées et prétraitées. Ici, nous utiliserons un ensemble de données provenant d'une tâche d'analyse des sentiments à titre d'exemple. Cet ensemble de données contient deux catégories de critiques de films, représentant respectivement des sentiments positifs et négatifs. L'ensemble de données provient du site Web de critiques de films IMDb et peut être téléchargé sur http://ai.stanford.edu/~amaas/data/sentiment/.

Chaque commentaire de l'ensemble de données est un fichier texte avec la balise pos ou neg dans le nom du fichier. Nous pouvons utiliser la bibliothèque os de Python pour lire le fichier, puis stocker le texte et les étiquettes dans un Pandas DataFrame pour faciliter le traitement ultérieur. 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)
Copier après la connexion

然后,我们可以使用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))
Copier après la connexion

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

  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))
Copier après la connexion

Ensuite, nous pouvons utiliser la méthode groupby de Pandas pour compter la proportion de longueur de texte et d'étiquettes d'émotion dans l'ensemble de données.

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'])
Copier après la connexion
En exécutant le code ci-dessus, nous pouvons voir que le nombre de commentaires positifs et négatifs dans l'ensemble de données est à peu près le même et que les étiquettes de sentiment sont uniformément réparties.
    1. Extraction de fonctionnalités

    Avant la classification du texte, le texte doit être converti en une forme que l'ordinateur peut comprendre. Ici, nous utiliserons le modèle du sac de mots pour l'extraction de fonctionnalités.

    Le modèle du sac de mots est basé sur une hypothèse : l'importance de chaque mot dans le texte est égale, donc tous les mots du texte sont extraits pour former un vocabulaire (vocabulaire), puis chaque texte est représenté comme Un vecteur, chaque élément du vecteur représente le nombre de fois que le mot apparaît dans le texte.

      Dans Scikit-learn, vous pouvez utiliser CountVectorizer pour l'extraction de fonctionnalités.
    1. rrreee
    2. Le code ci-dessus convertit le texte en vecteurs Chaque texte est un vecteur clairsemé avec la dimension de la taille du vocabulaire. Comme vous pouvez le constater, cet ensemble de données contient un total de 250 000 entités, et la dimension est très élevée.

    Formation et évaluation de modèles

    🎜Formez-vous et évaluez à l'aide de plusieurs classificateurs dans Scikit-learn. Ici, nous utiliserons le classificateur de régression logistique, le classificateur Naive Bayes, le classificateur de machine à vecteurs de support et le classificateur de forêt aléatoire pour voir quel classificateur fonctionne le mieux. 🎜rrreee🎜Le code ci-dessus utilise l'ensemble de formation et l'ensemble de test pour évaluer chaque classificateur. Nous pouvons voir que le classificateur Naive Bayes fonctionne très bien à la fois sur l'ensemble d'entraînement et sur l'ensemble de test, atteignant un score F1 de 0,87 et une précision de 0,85. D’autres classificateurs ont obtenu des résultats légèrement moins bons, mais également de bons résultats. 🎜🎜🎜Conclusion🎜🎜🎜Cet article présente des exemples de classification de texte en Python, y compris la collecte et le prétraitement de données, l'extraction de fonctionnalités, ainsi que la formation et l'évaluation de modèles. Grâce à des exemples, nous avons appris à utiliser Python pour la classification de texte et à découvrir les algorithmes de classification de texte basés sur la régression logistique, les Bayes naïfs, les machines vectorielles de support et les forêts aléatoires. 🎜🎜Dans des situations réelles, nous devrons peut-être effectuer un traitement et une analyse plus approfondis des données textuelles, tels que la suppression des mots vides, la radicalisation, la représentation vectorielle de mots, etc., pour améliorer les performances de classification du texte. Dans le même temps, vous pouvez également essayer d'utiliser des modèles d'apprentissage profond, tels que les réseaux de neurones convolutifs (CNN) et les réseaux de neurones récurrents (RNN), pour la classification de textes. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!