NLP自然语言处理—文本分类入门
前言
NLP作為機(jī)器學(xué)習(xí)三大熱門(mén)領(lǐng)域之一,現(xiàn)在的發(fā)展也是越來(lái)越完備,從2012年神經(jīng)網(wǎng)絡(luò)崛起之后,自然語(yǔ)言領(lǐng)域就迎來(lái)了春天,特別是當(dāng)預(yù)訓(xùn)練方法橫空出世之后,NLP作為最先嘗到預(yù)訓(xùn)練甜頭的先鋒,可以說(shuō)是如虎添翼。雖然我個(gè)人做NLP方面的東西比較少(主要是窮,設(shè)備有限,跑不動(dòng)模型),但是在結(jié)構(gòu)化數(shù)據(jù)挖掘中有時(shí)候還是會(huì)遇到NLP相關(guān)的問(wèn)題,比如在某些電商問(wèn)題中,很多數(shù)據(jù)是文本數(shù)據(jù),這些數(shù)據(jù)還是需要用到NLP的一些處理方法。
以后的發(fā)展中會(huì)遇到更多關(guān)于NLP的問(wèn)題,所以對(duì)于NLP領(lǐng)域一定要有了解,就算達(dá)不到精通的程度,但也一定要知道怎么去解決一個(gè)NLP問(wèn)題。本次文章就結(jié)合一個(gè)相對(duì)入門(mén)數(shù)據(jù)集,運(yùn)用機(jī)器學(xué)習(xí)的方法去解決一個(gè)NLP項(xiàng)目最最最基礎(chǔ)的流程!
數(shù)據(jù)集下載地址:https://pan.baidu.com/s/1sQO83_dThPOl4M8pdwmNPQ
提取碼:DJNB
文本數(shù)據(jù)預(yù)處理
TF-IDF(詞袋模型)
TF-IDF(term frequency–inverse document frequency)是一種用于信息檢索與數(shù)據(jù)挖掘的常用加權(quán)技術(shù)。TF是詞頻(Term Frequency),IDF是逆文本頻率指數(shù)(Inverse Document Frequency)。詞袋模型是NLP領(lǐng)域最常見(jiàn)的文本預(yù)處理方法之一,當(dāng)前我們處理文本數(shù)據(jù)的時(shí)候最常見(jiàn)的兩種方法,一種是TF-IDF,另外一種是Word2Vec(詞向量模型),Word2Vec后面的項(xiàng)目我可能也會(huì)用。本次數(shù)據(jù)集相對(duì)簡(jiǎn)單,初步采用TF-IDF方法。下面是TF-IDF的計(jì)算方法:
計(jì)算方法相對(duì)來(lái)說(shuō)還是比較簡(jiǎn)單易懂的。
舉個(gè)例子
一段文本數(shù)據(jù)
word=[‘I love china’,‘I am chinese’,‘I come from china’,‘so I am chinese’]
我們可以看看詞頻的統(tǒng)計(jì)結(jié)果:
然后再搭配TfidfTransformer計(jì)算TF-IDF
看看最終TF-IDF的計(jì)算結(jié)果:
整個(gè)流程和計(jì)算方法就是上面這樣!
TF-IDF模型處理文本代碼:
import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics import f1_score,accuracy_score from sklearn.metrics import confusion_matrix import seaborn as sns #讀取訓(xùn)練數(shù)據(jù)集 train = pd.read_csv('train.csv',sep='\t') train['text_split'] = train['text'].apply(lambda x: str(x.split())) #加載TF-IDF模型,這里我們直接采用TfidfVectorizer模型,就不用像前面那樣按照兩部來(lái)走,直接一步完成,一樣的效果 TFIDF = TfidfVectorizer(analyzer='word',ngram_range=(1,2),min_df=3, max_df=0.9, use_idf=True,max_features = 3000,smooth_idf=True, sublinear_tf=True) #用詞袋模型構(gòu)建數(shù)據(jù) train_TFIDF = TFIDF.fit_transform(train['text_split'])數(shù)據(jù)集劃分及模型訓(xùn)練
本來(lái)現(xiàn)在最流行的NLP訓(xùn)練模型都是深度學(xué)習(xí)模型,特別是像Transformer,bert這樣強(qiáng)大的預(yù)訓(xùn)練模型,還有LSTM,TextCNN等等這些神經(jīng)網(wǎng)絡(luò)模型,它們做出來(lái)的效果都非常好,但是由于我的電腦計(jì)算能力有限,深度學(xué)習(xí)模型跑起來(lái)太費(fèi)勁了,我嘗試用LGB這種速度已經(jīng)非常快的集成模型都要跑幾個(gè)小時(shí),所以我在這里還是選擇了用傳統(tǒng)的機(jī)器學(xué)習(xí)模型進(jìn)行演示,模型選用LR線性回歸模型,做出來(lái)效果也還是非常不錯(cuò)。
代碼如下:
import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import f1_score,accuracy_score from sklearn.metrics import confusion_matrix import seaborn as sns #接著上面代碼寫(xiě) X_train = train_TFIDF y_train = train['label'] #劃分訓(xùn)練集和驗(yàn)證集 x_train, x_valid, y_train, y_valid = train_test_split(X_train, y_train, test_size=0.2) clf = LogisticRegression(C=4, n_jobs=16) clf.fit(x_train, y_train) #對(duì)驗(yàn)證集進(jìn)行預(yù)測(cè) y_pred = clf.predict(x_valid) acc=accuracy_score(y_valid,y_pred) f1=f1_score(y_valid,y_pred, average='macro') print("LR驗(yàn)證集ACC:"+str(acc)+" "+"LR驗(yàn)證集F1-score:"+str(f1)) classes=train['label'].unique() cm = confusion_matrix(y_pred,y_valid,labels=classes) df=pd.DataFrame(cm,index=classes,columns=classes) plt.figure(figsize=(20, 20)) sns.heatmap(df,annot=True,cmap="Set3") plt.show()我們看看在驗(yàn)證集上面的準(zhǔn)確率ACC和F1-score值,預(yù)測(cè)的準(zhǔn)確率可以達(dá)到90%以上,證明模型效果還是不錯(cuò)的:
混淆矩陣可視化:
我們可以通過(guò)混淆矩陣看到我們對(duì)于每一個(gè)類別的預(yù)測(cè)情況,可以看到整體的預(yù)測(cè)效果還是不錯(cuò)的,對(duì)于某些類別預(yù)測(cè)錯(cuò)誤我們可以再深入探究,后續(xù)可以深度挖掘文本信息。
模型改進(jìn)
我們上面用到的只是一個(gè)最簡(jiǎn)單的詞袋模型加一個(gè)線性回歸模型,這樣都能達(dá)到90%以上的準(zhǔn)確率還是很可觀的,我們還可以嘗試對(duì)文本進(jìn)行更加復(fù)雜的預(yù)處理,或者有條件的朋友可以運(yùn)用預(yù)訓(xùn)練模型或者神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練,效果肯定比現(xiàn)在好很多,還可以嘗試多模型融合,效果也可以大大提升。
寫(xiě)在最后
NLP到此可以算一個(gè)初步入門(mén),但是這還遠(yuǎn)遠(yuǎn)不夠,還有很多好的方法還等待我們學(xué)習(xí),慢慢加油!
本人才疏學(xué)淺,如果有錯(cuò)誤或者理解不到位的地方請(qǐng)指正!
總結(jié)
以上是生活随笔為你收集整理的NLP自然语言处理—文本分类入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 武大计算机科学与技术考研,2018武汉大
- 下一篇: 全能终端神器——MobaXterm体验