Rumah > Artikel > pembangunan bahagian belakang > Contoh klasifikasi teks dalam Python
Contoh klasifikasi teks dalam Python
Dengan perkembangan kecerdasan buatan dan teknologi pemprosesan bahasa semula jadi, klasifikasi teks telah menjadi salah satu teknologi yang digunakan secara meluas, dan ia boleh memainkan peranan penting dalam tugas pemprosesan bahasa semula jadi. Sebagai bahasa pengaturcaraan yang popular, pustaka pemprosesan bahasa semula jadi Python yang berkuasa dan perpustakaan pembelajaran mesin, seperti NLTK, Scikit-learn dan Tensorflow, menjadikan klasifikasi teks sangat mudah untuk dilaksanakan dalam Python.
Artikel ini akan memperkenalkan contoh klasifikasi teks Python dan menunjukkan cara menggunakan Python untuk pengelasan teks melalui contoh.
Sebelum pengelasan teks, data perlu dikumpul, dibersihkan dan dipraproses. Di sini kita akan menggunakan set data daripada tugas analisis sentimen sebagai contoh. Set data ini mengandungi dua kategori ulasan filem, masing-masing mewakili sentimen positif dan negatif. Set data datang daripada laman web ulasan filem IMDb dan boleh dimuat turun di http://ai.stanford.edu/~amaas/data/sentiment/.
Setiap ulasan dalam set data ialah fail teks yang ditandakan dengan sama ada pos
atau neg
dalam nama fail. Kita boleh menggunakan pustaka os
Python untuk membaca fail, dan kemudian menyimpan teks dan label ke dalam Pandas DataFrame untuk memudahkan pemprosesan seterusnya.
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)
Kemudian, kita boleh menggunakan kaedah groupby
Pandas untuk mengira perkadaran panjang teks dan label sentimen dalam set data.
# 统计文本长度 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))
Menjalankan kod di atas, kita dapat melihat bahawa bilangan komen positif dan negatif dalam set data adalah lebih kurang sama dan label sentimen diagihkan secara sama rata.
Sebelum pengelasan teks, teks perlu ditukar kepada bentuk yang boleh difahami oleh komputer. Di sini kita akan menggunakan model beg-of-words untuk pengekstrakan ciri.
Model bag-of-words adalah berdasarkan andaian: kepentingan setiap perkataan dalam teks adalah sama, jadi semua perkataan dalam teks diekstrak untuk membentuk perbendaharaan kata (perbendaharaan kata), dan kemudian setiap perkataan perkataan ialah Teks diwakili sebagai vektor, dan setiap elemen vektor mewakili bilangan kali perkataan itu muncul dalam teks.
Dalam Scikit-learn, anda boleh menggunakan CountVectorizer
untuk pengekstrakan ciri.
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))
Kod di atas menukar teks kepada vektor Setiap teks ialah vektor jarang dengan dimensi saiz perbendaharaan kata. Seperti yang anda lihat, terdapat sejumlah 250,000 ciri dalam set data ini dan dimensinya sangat tinggi.
Latih dan nilai menggunakan berbilang pengelas dalam Scikit-learn. Di sini kita akan menggunakan Pengelas Regresi Logistik, Pengelas Naive Bayes, Pengelas Mesin Vektor Sokongan dan Pengelas Hutan Rawak untuk melihat pengelas yang berprestasi terbaik.
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'])
Kod di atas menggunakan set latihan dan set ujian untuk menilai setiap pengelas. Kita dapat melihat bahawa pengelas Naive Bayes menunjukkan prestasi yang sangat baik pada kedua-dua set latihan dan set ujian, mencapai skor F1 0.87 dan ketepatan 0.85. Pengelas lain menunjukkan prestasi yang kurang baik, tetapi juga menunjukkan prestasi yang baik.
Artikel ini memperkenalkan contoh klasifikasi teks dalam Python, termasuk pengumpulan dan prapemprosesan data, pengekstrakan ciri dan latihan dan penilaian model. Melalui contoh, kami belajar cara menggunakan Python untuk pengelasan teks, dan mempelajari tentang algoritma pengelasan teks berdasarkan regresi logistik, Bayes naif, mesin vektor sokongan dan hutan rawak.
Dalam situasi sebenar, kami mungkin perlu melakukan pemprosesan dan analisis data teks yang lebih mendalam, seperti mengalih keluar perkataan henti, stemming, perwakilan vektor perkataan, dll., untuk meningkatkan prestasi pengelasan teks. Pada masa yang sama, anda juga boleh cuba menggunakan model pembelajaran mendalam, seperti rangkaian neural convolutional (CNN) dan rangkaian saraf berulang (RNN), untuk klasifikasi teks.
Atas ialah kandungan terperinci Contoh klasifikasi teks dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!