文本數據如何向量化展開
因為最近每晚都忙於看球,所以挺長時間沒有更新,今天更新一個大家比較關注的問題,就是文本類數據如何向量化展開。
一
背景
首先介紹下文本向量化展開的用途,對語文本數據常見的應用場景大致有以下兩個個方面:
提取關鍵信息:包含關鍵詞、關鍵句、摘要句等
文本分類:將文本按照某種特徵維度,利用分類器進行分類,如情感分析
無論是要解決以上兩個場景中的哪一種,其實對於機器學習演算法而言,首先要做的都是文本向量化,也就是將字元串文字展開成可以向量表示的方式,這樣才可以通過演算法做分類。下面就通過一些真實的案例給大家演示下,如何做文本向量化,以及向量化方法之間的區別。
二
數據集準備
數據集採用的是我非常欣賞的一位攝影師在參觀完特列季亞科夫畫廊後的畫評,大家如果對攝影感興趣的話,強烈推薦她的公眾號"青影三弄"
數據如下圖:
數據分為兩個欄位,第一列是畫的名字,第二列是作者對於畫的點評。
三
具體方法
具體詞向量展開的方法有很多,我們分別來介紹:
1.按照詞頻展開
按照詞頻的方式展開是最基礎的詞向量展開方法。具體操作方式是先分詞,然後統計每一句每個詞出現的個數。
具體流程圖:
結果圖:
詞頻統計展示的是每個詞在每句話中出現的個數。如果是做語句分類的場景,構建數據的時候,矩陣每一列代表一個詞,每一行代表一個句子,每一個數據代表著每個詞在這句話中出現的個數。
優點:這種詞展開方式容易理解和實現,是文本分類中的常見用法。特別是當文本間語意內容差距較為明顯的時候,可以用這種方法快速分類
缺點:缺少訓練樣本句子間的差異比較,對於差異化細微的語句分析有比較差的效果
2.TF-IDF
TF-IDF也是詞向量展開的常用方法,其實相比於按照詞頻方法展開,TF-IDF更多的考慮了語句間詞頻的差異。比如,某一些助詞「的」、「地」、「得」,雖然在每句話中出現的頻率都很高,但是其實是沒有實際意義的。如果有一個詞X,在某一句話A中出現了非常多次,在其它話中出現的很少,那麼X就是A這句話的關鍵詞。更多的分析找出X這樣的詞,有助於我們更好地實現句子的分類,這就是TF-IDF的作用。
具體流程圖:
結果圖:
TF-IDF展示的是每個詞對於這句話的tf-idf值,這個值越大,表示這個詞對於這句話的語意影響越大。如果是作為語句分類的場景,那麼每句話每個詞的tf-idf值都可以當成特徵。
優點:更多地考慮了每個詞對於每個句的影響
缺點:缺少詞與詞之間的關係特徵
3.Word2Vec
word2vec也是常用的方式,它可以更多地表示詞和詞的之間的關係。比如有一句話是:
幾個囚犯湊在鐵柵窗前,欣賞著窗外的自由生活:孩子掉下的麵包屑引來了一群歡樂的鴿子
用word2vec計算之後,可以表示出每個詞的向量,這個向量會代表這個詞的實際含義。比如「囚犯」和「孩子」都是人,「麵包」是一種物品。那麼在詞向量距離里,表示囚犯「和「孩子」語音更近:
(「囚犯」-「孩子」)
具體流程圖:
結果圖:
每句話的最關鍵的詞的詞向量,就可以代表這句話的語意。在語意分類的場景下,通常可以使用這種方式去構建訓練集。
優點:考慮了詞與詞之間的含義的關聯
缺點:缺少每個詞與整體每句話主題之間的聯繫
4.LDA
LDA是基於貝葉斯理論的主題模型,可以通過LDA計算出訓練樣本中每個詞對應每句話主題的概率,並且可以向量表示。(具體實現方式可以在網上找下,這裡不多說)。
流程圖:
結果圖:
優點:可以快速的將句子展開成主題概率模型,也就是可以把每個句子通過一堆詞表示
缺點:缺少詞與詞上下文位置的關係描述。詞語出現在前後不同的位置對於語意有很大的影響,比如下面兩句話「我美不?」和「我不美。」就有天差地別的語意區別。這種問題可以根據ngram來解。
四
總結
今天具體介紹了四種詞向量的展開方式。這些方法都可以應用到語句分類前的詞向量展開數據建模中,具體要用哪種方法,其實是根據用戶自己的場景而定。要多考慮語句中關鍵詞的影響就可以考慮TF-IDF,如果想多考慮多個主題詞的影響,就可以用LDA。最穩妥的方式就是把TF-IDF、LDA、Word2vec這些方法的結果都作為特徵建模,然後代入演算法,如果是邏輯回歸演算法做分類,會自動權衡各個特徵的影響大小,生成模型。這也是業內主流的文本分類方法。
TAG:凡人機器學習 |