1. 程式人生 > 實用技巧 >文字挖掘預處理之分詞 / 向量化 / TF-IDF / Hash trick 附程式碼 Demo

文字挖掘預處理之分詞 / 向量化 / TF-IDF / Hash trick 附程式碼 Demo

分詞(tokenizing)

對於一個句子,首先需要將其分為多個單詞或多個片語。

例如, “I come from New York" => "I/come from/New York"

通過標準語料庫,為了簡化計算,通常使用馬爾科夫假設,即每一個分詞出現的概率僅僅和前一個分詞有關,可以近似的計算出所有的分詞之間的二元條件概率。

利用語料庫建立的統計概率,對於一個新的句子,我們就可以通過計算各種分詞方法對應的聯合分佈概率,找到最大概率對應的分詞方法,即為最優分詞。

常用的分詞工具

  • 簡單的英文分詞不需要任何工具,通過空格和標點符號就可以分詞了,而進一步的英文分詞推薦使用

    nltk

  • 對於中文分詞,則推薦用結巴分詞(jieba

向量化(vectorize)與Hash Trick

詞袋模型

詞袋模型首先會進行分詞,在分詞之後,通過統計每個詞在文字中出現的次數,我們就可以得到該文字基於詞的特徵,如果將各個文字樣本的這些詞與對應的詞頻放在一起,就是我們常說的向量化。向量化完畢後一般也會使用TF-IDF進行特徵的權重修正,再將特徵進行標準化。 再進行一些其他的特徵工程後,就可以將資料帶入機器學習演算法進行分類聚類了。

每一維的向量依次對應了下面的19個詞。另外由於詞"I"在英文中是停用詞,不參加詞頻的統計。一共有19個詞,所以4個文字都是19維的特徵向量。

["I come to China to travel", 
    "This is a car polupar in China",          
    "I love tea and Apple ",   
    "The work is to write some papers in science"]

###

[[0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 1 0 0]
 [0 0 1 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 0]
 [1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0]
 [0 0 0 0 0 1 1 0 1 0 1 1 0 1 0 1 0 1 1]]

由於大部分的文字都只會使用詞彙表中的很少一部分的詞,因此我們的詞向量中會有大量的0。也就是說詞向量是稀疏的。在實際應用中一般使用稀疏矩陣來儲存。

由於詞彙量很大,所以向量化後的維度就很大,將對應的樣本對應特徵矩陣載入記憶體,有可能將記憶體撐爆,要進行特徵的降維,而Hash Trick就是非常常用的文字特徵降維方法。

Hash Trick 降維

在Hash Trick裡,我們會定義一個特徵Hash後對應的雜湊表的大小,這個雜湊表的維度會遠遠小於我們的詞彙表的特徵維度,因此可以看成是降維。具體的方法是,對應任意一個特徵名,我們會用Hash函式找到對應雜湊表的位置,然後將該特徵名對應的詞頻統計值累加到該雜湊表位置。

如果用數學語言表示,假如雜湊函式h使第i個特徵雜湊到位置j,即h(i)=j,則第i個原始特徵的詞頻數值ϕ(i)將累加到雜湊後的第j個特徵的詞頻數值ϕ上

TF-IDF (Term Frequency - Inverse Document Frequency)

  • TF 詞頻統計:文字中各個詞的出現頻率統計。
  • IDF 逆文字頻率:N代表語料庫中文字的總數,而N(x)代表語料庫中包含詞x的文字總數。

由以上可得,TF−IDF(x)=TF(x)∗IDF(x)

TF-IDF是非常常用的文字挖掘預處理基本步驟,但是如果預處理中使用了Hash Trick,則一般就無法使用TF-IDF了,因為Hash Trick後我們已經無法得到雜湊後的各特徵的IDF的值。使用了IF-IDF並標準化以後,我們就可以使用各個文字的詞特徵向量作為文字的特徵,進行分類或者聚類分析。

英文文字挖掘預處理

  1. 除去資料中非文字部分:直接用Python的正則表示式(re)刪除

  2. 拼寫檢查:pyenchant

  3. 拼寫更正:pyspellchecker

  4. 詞幹提取(stemming)和詞形還原(lemmatization): 在實際的英文文字挖掘預處理的時候,建議使用基於wordnet的詞形還原就可以。nltk中的WordNetLemmatizer類

  5. 轉化為小寫:lower()

  6. 引入停用詞: 在英文文字中有很多無效的詞,比如“a”,“to”,一些短詞,還有一些標點符號,這些我們不想在文字分析的時候引入,因此需要去掉,這些詞就是停用詞。download link

  7. 特徵處理: TfidfVectorizer類可以幫助我們完成向量化,TF-IDF和標準化三步。

Demo

spaCy自然語言文字處理庫 - 基本操作

文字挖掘預處理 - 分詞 / 向量化 / TF-IDF / Hash trick