首頁  >  文章  >  後端開發  >  Python中的文字分類實例

Python中的文字分類實例

PHPz
PHPz原創
2023-06-09 20:22:371593瀏覽

Python中的文字分類實例

隨著人工智慧和自然語言處理技術的發展,文字分類成為了廣泛應用的技術之一,它可以在自然語言處理任務中發揮重要作用。 Python作為一種流行的程式語言,其強大的自然語言處理庫和機器學習庫,如NLTK、Scikit-learn和Tensorflow等,使得文本分類在Python中變得非常容易實現。

本文將介紹Python文本分類的實例,並透過實例示範如何使用Python進行文字分類。

  1. 資料收集與預處理

在進行文字分類之前,需要收集、清洗和預處理資料。這裡我們將使用一個情感分析任務的資料集作為實例。此資料集包含兩個類別的電影評論,分別代表正面和負面情感。資料集來自電影評論網站IMDb,可在 http://ai.stanford.edu/~amaas/data/sentiment/ 中下載。

資料集中的每個評論都是一個文字文件,其中的標籤為文件名稱中的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))

以上程式碼將文字轉換為了向量,每個文字都是一個維度為詞彙表大小的稀疏向量。可以看到,該資料集中共有25萬個特徵,維度非常高。

  1. 模型訓練和評估

使用Scikit-learn中的多個分類器進行訓練和評估。這裡我們將使用邏輯迴歸分類器、樸素貝葉斯分類器、支援向量機分類器和隨機森林分類器,看看哪個分類器效能最好。

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'])

以上程式碼使用了訓練集和測試集對各個分類器進行了評估。我們可以看到,樸素貝葉斯分類器在訓練集和測試集上表現都非常好,達到了0.87的F1分數和0.85的準確率。其他分類器的性能略遜一籌,但也都表現良好。

  1. 結論

本文介紹了Python文本分類的實例,包括資料收集與預處理、特徵提取和模型訓練和評估。透過實例,我們學習如何使用Python進行文字分類,並且了解了基於邏輯迴歸、樸素貝葉斯、支援向量機和隨機森林的文本分類演算法。

在真實情況下,我們可能需要對文字資料進行更深入的處理和分析,例如移除停用詞、 stemming、詞向量表示等,以提高文字分類的表現。同時,也可以嘗試使用深度學習模型,例如卷積神經網路(CNN)和循環神經網路(RNN),來進行文字分類。

以上是Python中的文字分類實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn