NLPニューステキスト分類-タスク3

タスク3-機械学習に基づくテキスト分類

1.テキスト表現方法

ここにword2vecを挿入します。word2vecについて話す過程で、一般的にワンホットが導入されます。これは、テキスト表現の本質を詳細に明らかにする記事です(主にword2vec)。
word2vecの本質を数秒で理解する

1.1ワンホットワンホット
は、データマイニングタスクの操作と一致しています。つまり、各単語は個別のベクトルで表されます。具体的には、各単語/単語をインデックスにエンコードし、インデックスに従って値を割り当てます。
ワンホット表現の例は次のとおりです。
文1:北京天南門広場が大好き
文2:上海が大好き
最初にすべての文の単語にインデックスを付けます。つまり、各単語の番号を決定します。

{ 'I':1、 'Love':2、 'North':3、 'King':4、 'Tian':5、'Ann':6、 'Door':7、 'Hi':8、 ' Huan ':9、'上 ':10、'海 ':11 }ここには合計11の単語があるため、各単語を11次元のスパースベクトルに変換できます。



私:[1、0、0、0、0、0、0、0、0、0、0]
愛:[0、1、0、0、0、0、0、0、0、0、0]

海:[0、0、0、0、0、0、0、0、0、0、1]

1.2 Bag of Words
Bag of Words(Bag of Words)は、カウントベクトルとも呼ばれ、各ドキュメントの文字/単語は出現回数で表すことができます。
文1:北京天南門広場が大好き
文2:上海が好き
各単語の出現回数を直接カウントして値を割り当てる:
文1:北京天南門広場が大好き
[1、1、1、1、1、1、1
0、0、0、0]文2:上海が好き
[1、0、0、0、0、0、0、1、1、1、1]に変換

1.3N-gramN
-gramはCountVectorsに似ていますが、隣接する単語を新しい単語に追加してカウントします。
Nの値が2の場合、文1と文2は次のようになります。
文1:北北京京天天南門広場が大好き
文2:上海に行くのが好き

1.4 TF-IDF
TF-IDFスコアは、2つの部分で構成されます。最初の部分は期間頻度(期間頻度)、2番目の部分は逆文書頻度(逆文書頻度)です。その中で、コーパス内のドキュメントの総数を単語を含むドキュメントの数で割って計算し、対数を取ることは、ドキュメントの逆頻度です。

TF(t)=単語が現在のドキュメントに表示される回数/現在のドキュメントの単語の総数
IDF(t)= log_e(ドキュメントの総数/単語を含むドキュメントの総数)

2.機械学習に基づくテキスト分類

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer 	# Count Vectors + RidgeClassifier
from sklearn.feature_extraction.text import TfidfVectorizer     # TF-IDF +  RidgeClassifier
from sklearn.linear_model import RidgeClassifier
from sklearn.metrics import f1_score

#导入数据
train_df = pd.read_csv('datalab/72510/train_set.csv', sep='\t', nrows=15000)

# 方法一:基于Count Vectors + RidgeClassifier
vectorizer = CountVectorizer(max_features=3000) #对关键词集按照出现频率排序,只取前max_features个词作为关键词集
train_test = vectorizer.fit_transform(train_df['text']) #计算各个词语出现的次数
clf = RidgeClassifier()
clf.fit(train_test[:10000], train_df['label'].values[:10000]) #回归拟合
val_pred = clf.predict(train_test[10000:]) #预测
print(f1_score(train_df['label'].values[10000:], val_pred, average='macro')) #计算f1指标值
#输出为 0.654418775812

 # 方法二:基于TF-IDF +  RidgeClassifier
tfidf = TfidfVectorizer(ngram_range=(1,3), max_features=3000) #使特征可以为单个字或者3个字 
train_test = tfidf.fit_transform(train_df['text'])
clf = RidgeClassifier()
clf.fit(train_test[:10000], train_df['label'].values[:10000])
val_pred = clf.predict(train_test[10000:])
print(f1_score(train_df['label'].values[10000:], val_pred, average='macro'))
# 0.87193721737

おすすめ

転載: blog.csdn.net/DZZ18803835618/article/details/107570891