文本轉化爲向量

假如有一句話"I am a student"。用向量來表示每個單詞,採用one hot 編碼表示方式:
I -> [1,0,0,0]
am -> [0,1,0,0]
a -> [0,0,1,0]
student -> [0,0,0,1]
我們會發現兩個缺點:
(1)單詞向量之間的內積爲0,它們相互獨立。這與實際情況是矛盾的,單詞之間是有一定的聯繫,比如woman與girl,dog與dogs。
(2)one hot編碼使得向量非常稀疏。每個單詞向量的維度跟單詞的個數有關,如果語料庫中單詞很多,會導致向量的維度非常高。
會出現這些問題,那麼有沒有更加合理的對單詞用向量表達?當然有,那就是word embedding。word embedding是將高維稀疏的向量映射爲低維稠密的向量。

自然語言是一套用來表達含義的複雜系統。在這套系統中,詞是表義的基本單元。在機器學習中,如何使用向量表示詞?顧名思義,詞向量是用來表示詞的向量,通常也被認爲是詞的特徵向量。近年來,詞向量已逐漸成爲自然語言處理的基礎知識。NLP(自然語言處理)裏面,最細粒度的是 詞語,詞語組成句子,句子再組成段落、篇章、文檔。所以處理 NLP 的問題,首先就要拿詞語開刀。詞語,是人類的抽象總結,是符號形式的,所以需要把他們轉換成數值形式,或者說——嵌入到一個數學空間裏,這種嵌入方式,就叫詞嵌入(word embedding)。詞嵌入是一種映射類型,它允許具有相似含義的單詞具有相似的表示。

下面介紹幾種word embedding方法。

1、word2vec

Word2vec,就是詞嵌入 的一種。簡單點來說就是把一個詞語轉換成對應向量的表達形式,來讓機器讀取數據。
1.1word2vec
word2vec的目的是把單詞轉化爲向量。word2vec有兩種模型:CBOW(continuous bag of words)和skip-gram。
詳細介紹請閱讀論文原文地址
1.2CBOW
CBOW模型是把一個詞的上下文作爲輸入,來預測這個詞本身。
在這裏插入圖片描述
1.3skip-gram
skip-gram模型是把一個詞作爲輸入,來預測這個詞的上下文。
在這裏插入圖片描述
雖然Word2Vec成功地處理了由獨熱向量引起的問題,但是它有幾個限制。最大的挑戰是它不能表示訓練數據集中沒有出現的單詞。即使使用包含更多詞彙的更大的訓練集,一些很少使用的罕見詞彙也永遠無法映射到向量。

2、doc2vec

doc2vec是2014年提出的,原文地址

doc2Vec 或者叫做 paragraph2vec, sentence embeddings,是一種非監督式算法,可以獲得 sentences/paragraphs/documents 的向量表達,是 word2vec 的拓展。學出來的向量可以通過計算距離來找 sentences/paragraphs/documents 之間的相似性,可以用於文本聚類,對於有標籤的數據,還可以用監督學習的方法進行文本分類,例如經典的情感分析問題。
2.1 A distributed memory model
訓練句向量的方法和詞向量的方法非常類似。訓練詞向量的核心思想就是說可以根據每個單詞的上下文預測,也就是說上下文的單詞對是有影響的。那麼同理,可以用同樣的方法訓練doc2vec。例如對於一個句子i want to drink water,如果要去預測句子中的單詞want,那麼不僅可以根據其他單詞生成feature, 也可以根據其他單詞和句子來生成feature進行預測。因此doc2vec的框架如下所示:
在這裏插入圖片描述
每個段落/句子都被映射到向量空間中,可以用矩陣的一列來表示。每個單詞同樣被映射到向量空間,可以用矩陣的一列來表示。然後將段落向量和詞向量級聯或者求平均得到特徵,預測句子中的下一個單詞。

這個段落向量/句向量也可以認爲是一個單詞,它的作用相當於是上下文的記憶單元或者是這個段落的主題,所以我們一般叫這種訓練方法爲Distributed Memory Model of Paragraph Vectors(PV-DM)

2.2Paragraph Vector without word ordering: Distributed bag of words
還有一種訓練方法是忽略輸入的上下文,讓模型去預測段落中的隨機一個單詞。就是在每次迭代的時候,從文本中採樣得到一個窗口,再從這個窗口中隨機採樣一個單詞作爲預測任務,讓模型去預測,輸入就是段落向量。如下所示:
在這裏插入圖片描述

3、TFIDF

TFIDF的主要思想是:如果某個詞或短語在一篇文章中出現的頻率TF高,並且在其他文章中很少出現,則認爲此詞或者短語具有很好的類別區分能力,適合用來分類。TFIDF實際上是:TF * IDF,TF詞頻(Term Frequency),IDF逆向文件頻率(Inverse Document Frequency)。TF表示詞條在文檔d中出現的頻率。IDF的主要思想是:如果包含詞條t的文檔越少,也就是n越小,IDF越大,則說明詞條t具有很好的類別區分能力。如果某一類文檔C中包含詞條t的文檔數爲m,而其它類包含t的文檔總數爲k,顯然所有包含t的文檔數n=m+k,當m大的時候,n也大,按照IDF公式得到的IDF的值會小,就說明該詞條t類別區分能力不強。但是實際上,如果一個詞條在一個類的文檔中頻繁出現,則說明該詞條能夠很好代表這個類的文本的特徵,這樣的詞條應該給它們賦予較高的權重,並選來作爲該類文本的特徵詞以區別與其它類文檔。這就是IDF的不足之處. 在一份給定的文件裏,詞頻(term frequency,TF)指的是某一個給定的詞語在該文件中出現的頻率。這個數字是對詞數(term count)的歸一化,以防止它偏向長的文件。(同一個詞語在長文件裏可能會比短文件有更高的詞數,而不管該詞語重要與否。)對於在某一特定文件裏的詞語來說,它的重要性可表示爲:以上式子中分子是該詞在文件中的出現次數,而分母則是在文件中所有字詞的出現次數之和。逆向文件頻率(inverse document frequency,IDF)是一個詞語普遍重要性的度量。某一特定詞語的IDF,可以由總文件數目除以包含該詞語之文件的數目,再將得到的商取對數得到。最後,計算TF和IDF的乘積。

TF=TF=\frac{在某一類中該詞條出現的次數}{該類中所有的詞條數目}

IDF=log(+1)IDF=log(\frac{語料庫中文檔總數}{包含該詞條的文檔數+1})

TFIDF=TFIDFTFIDF=TF*IDF

4、FastText

FastText是Facebook在2016年提出的Word2Vec的擴展。FastText不是將單個單詞輸入神經網絡,而是將單詞分解成幾個n-grams(子單詞)。例如,單詞apple的三元組是app、ppl和ple(忽略單詞邊界的開始和結束)。“apple”的嵌入向量是所有這些n-grams的和。在對神經網絡進行訓練後,我們將對給定訓練數據集的所有n-grams進行單詞嵌入。稀有單詞現在可以正確地表示了,因爲它們的一些n-grams很可能也出現在其他單詞中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章