之前我們講到的機器學習,都是把各種資料啊,標籤啊,特徵啊處理一下,面對的大部分都是數字。

那麼文字學習將是一個全新的,充滿挑戰和樂趣的領域。它有著和之前我們學的內容非常不一樣的特點,一起來看一下吧

詞袋

數字是有大小的,可以計算的,那麼文字呢?單詞怎麼辦?這裡介紹一種巧妙地辦法,把單詞轉化成向量

想象一個詞袋,袋子裡面裝了很多單詞,現在有兩個片語:NICE DAY 和 A VERY NICE DAY,就可以對應詞袋寫出向量

[機器學習] 文字學習

但是詞袋並不能識別不同的語序,而且你把同一封郵件複製貼上10次,得到的也是10倍的向量,不是同一個向量

因此詞袋的特點就是:

1。 不考慮詞語出現的順序,每個出現過的詞彙單獨作為一列特徵

2。 這些不重複的特徵詞彙集合為詞表

3。 每一個文字都可以在很長的詞表上統計出一個很多列的特徵向量

4。 如果每個文字都出現的詞彙,一般被標記為 停用詞 不計入特徵向量

停止詞

有一些單詞經常在文字中出現,但是又是low-information的,並不能給我們提供什麼有效的資訊,例如:and, will, the, hi,have等等。這些詞就叫做

停止詞

,可以在處理之前去掉這些資料

Sklearn中的詞袋

這裡我們要用到的詞袋是Sklearn中的模組,Sklearn的countvectorizer,和我們前面講到的詞袋一樣,只不過這個是一個更大的詞袋,裡面有更多的詞彙。不過countvectorizer也是一個只考慮詞彙在文字中出現的頻率的方法,他並不會識別出這句話的意思是什麼,

下面是網站給出的示例,可以直接在Python終端執行來看一下:

[機器學習] 文字學習

從NLTK中獲取停止詞

NLTK是Natural Language Tool Kit,是Python的自然語言處理工具箱,我們要獲得的停止詞(Stop Words)就來自這裡。

為了獲取停止詞,我們先下載nltk的語料庫,下載方法如下:

>>>

import

nltk

>>>

nltk

download

()

showing

info

https

//

raw

githubusercontent

com

/

nltk

/

nltk_data

/

gh

-

pages

/

index

xml

True

如果你還沒有下載nltk,參考[機器學習] 專案準備工作中的最後一部分安裝nltk包

透過上面兩行程式碼,就會彈出nltk下載視窗,然後選擇

all-corpora

,下載,等待幾分鐘即可

[機器學習] 文字學習

安裝完畢之後可以嘗試看一下這裡面的停止詞都有什麼

>>>

from

nltk。corpus

import

stopwords

>>>

sw

=

stopwords

words

“english”

>>>

sw

0

u

‘i’

>>>

sw

10

u

“you‘ve”

>>>

len

sw

179

可以看到第0個停止詞是“i”,第10個是“your”

可以透過

len(sw)

看到共有179個停止詞

詞幹化

在英語中,經常有一些詞雖然不同,但是表達的意思基本上是一樣的,比方說unresponsive, response, responsivity, responsiveness, respond,他們的詞根是

respons

,因此可以用詞根(或者叫詞幹)來代替那些詞,這樣就可以節省空間。畢竟原來的詞要有五維陣列才可以表示,而現在用一維陣列就可以表示了。

用NLTK進行詞幹化

詞幹化的過程是很複雜的,幸好,已經有人編寫了相關的處理程式碼,幫助我們把詞彙詞幹化。程式碼如下:

>>>

from

nltk。stem。snowball

import

SnowballStemmer

>>>

stemmer

=

SnowballStemmer

“english”

>>>

stemmer

stem

“responsiveness”

u

’respons‘

可以看到responsiveness的詞幹就是respons,如果要用其他的語言,改變SnowballStemmer中的引數即可

順序

前面提到的詞袋和詞幹化,那麼我們在處理文字的時候,是把文字放在詞袋,然後詞幹化,還是先詞幹化再詞袋呢?

假設我們正在討論“responsibility is responsive to responsible people”這一段文字,如果你直接將這段文字放入詞袋,你得到的就是:

[is:1

people: 1

responsibility: 1

responsive: 1

responsible:1]

然後再運用詞幹化,你會得到

[is:1

people:1

respon:1

respon:1

respon:1]

如果你一開始就進行詞幹化,你就會直接獲得這個詞袋了:

[is:1

people:1

respon:3]

顯然,第二個詞袋很可能是你想要的,所以在此處先進行詞幹化可使你獲得正確的答案。

TF-IDF

TF-IDF(term frequency–inverse document frequency)是一種用於資訊檢索與資料探勘的常用加權技術。TF意思是詞頻(Term Frequency),I

DF意思是逆文字頻率指數(Inverse Document Frequency)

TF-IDF是一種統計方法,用以評估一字詞對於一個檔案集或一個語料庫中的其中一份檔案的重要程度。字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。TF-IDF加權的各種形式常被搜尋引擎應用,作為檔案與使用者查詢之間相關程度的度量或評級。

舉個例子,假如“I come to China to travel。“ 這句話中,China和Travel各出現一次,to出現兩次,to的頻率顯然更高。但是我們能說to就是這句話的關鍵詞嗎?

不能,因為to本身就是非常常見的單詞,而China和travel則不常見,

因此China的詞頻為1不代表China的重要性就低

,因此就要用到TF-IDF來進行預處理

TF就是我們剛剛計算的詞頻,to為2,China為1,而IDF反應了一個詞在所有文字中出現的頻率,假如這個詞經常出現,那麼它的權值就低,不常出現的反而權值高

對這一部分想有更深入瞭解的可以看這篇文章

好啦,這就是文字處理的方法

你的

是對作者莫大的支援哦~

如果你想看其他的關於機器學習的一些知識,可以關注我的

知乎專欄

本專欄目錄: