本文為大家分享了Python文本特征抽取與向量化的具體代碼,供大家參考,具體內(nèi)容如下
假設(shè)我們剛看完諾蘭的大片《星際穿越》,設(shè)想如何讓機(jī)器來(lái)自動(dòng)分析各位觀眾對(duì)電影的評(píng)價(jià)到底是“贊”(positive)還是“踩”(negative)呢?
這類問(wèn)題就屬于情感分析問(wèn)題。這類問(wèn)題處理的第一步,就是將文本轉(zhuǎn)換為特征。
因此,這章我們只學(xué)習(xí)第一步,如何從文本中抽取特征,并將其向量化。
由于中文的處理涉及到分詞問(wèn)題,本文用一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明如何使用Python的機(jī)器學(xué)習(xí)庫(kù),對(duì)英文進(jìn)行特征提取。
1、數(shù)據(jù)準(zhǔn)備
Python的sklearn.datasets支持從目錄讀取所有分類好的文本。不過(guò)目錄必須按照一個(gè)文件夾一個(gè)標(biāo)簽名的規(guī)則放好。比如本文使用的數(shù)據(jù)集共有2個(gè)標(biāo)簽,一個(gè)為“net”,一個(gè)為“pos”,每個(gè)目錄下面有6個(gè)文本文件。目錄如下所示:
neg
1.txt
2.txt
......
pos
1.txt
2.txt
....
12個(gè)文件的內(nèi)容匯總起來(lái)如下所示:
neg: shit. waste my money. waste of money. sb movie. waste of time. a shit movie. pos: nb! nb movie! nb! worth my money. I love this movie! a nb movie. worth it!
2、文本特征
如何從這些英文中抽取情感態(tài)度而進(jìn)行分類呢?
最直觀的做法就是抽取單詞。通常認(rèn)為,很多關(guān)鍵詞能夠反映說(shuō)話者的態(tài)度。比如上面這個(gè)簡(jiǎn)單的數(shù)據(jù)集,很容易發(fā)現(xiàn),凡是說(shuō)了“shit”的,就一定屬于neg類。
當(dāng)然,上面數(shù)據(jù)集是為了方便描述而簡(jiǎn)單設(shè)計(jì)的。現(xiàn)實(shí)中一個(gè)詞經(jīng)常會(huì)有穆棱兩可的態(tài)度。但是仍然有理由相信,某個(gè)單詞在neg類中出現(xiàn)的越多,那么他表示neg態(tài)度的概率越大。
同樣我們注意到有些單詞對(duì)情感分類是毫無(wú)意義的。比如上述數(shù)據(jù)中的“of”,“I”之類的單詞。這類詞有個(gè)名字,叫“Stop_Word”(停用詞)。這類詞是可以完全忽略掉不做統(tǒng)計(jì)的。顯然忽略掉這些詞,詞頻記錄的存儲(chǔ)空間能夠得到優(yōu)化,而且構(gòu)建速度也更快。
把每個(gè)單詞的詞頻作為重要的特征也存在一個(gè)問(wèn)題。比如上述數(shù)據(jù)中的”movie“,在12個(gè)樣本中出現(xiàn)了5次,但是出現(xiàn)正反兩邊次數(shù)差不多,沒(méi)有什么區(qū)分度。而”worth“出現(xiàn)了2次,但卻只出現(xiàn)在pos類中,顯然更具有強(qiáng)烈的剛晴色彩,即區(qū)分度很高。
因此,我們需要引入TF-IDF(Term Frequency-Inverse Document Frequency,詞頻和逆向文件頻率)對(duì)每個(gè)單詞做進(jìn)一步考量。
TF(詞頻)的計(jì)算很簡(jiǎn)單,就是針對(duì)一個(gè)文件t,某個(gè)單詞Nt 出現(xiàn)在該文檔中的頻率。比如文檔“I love this movie”,單詞“l(fā)ove”的TF為1/4。如果去掉停用詞“I"和”it“,則為1/2。
新聞熱點(diǎn)
疑難解答
圖片精選