郵箱:huang.tian-yuan@qq.com
前文推送:
R語言自然語言處理:關(guān)鍵詞提取與文本摘要(TextRank)
我們之前講到的全部都是基于詞袋模型(Bag of Words)的方法,比如一個文檔某個詞出現(xiàn)了多少次,然后就記錄下來;進(jìn)而,我們可以根據(jù)逆文本頻率指數(shù)(IDF)來對其進(jìn)行優(yōu)化,但是它依然是基于詞袋模型。我們想象一下,一個矩陣,行是文檔,列是單詞,其中的數(shù)值是單詞在這個文檔中出現(xiàn)的次數(shù),或者是TF-IDF。
這個模型有兩個問題:
1. 如果單詞特別多,但是每個詞出現(xiàn)的次數(shù)又不一定很多的時候,我們得到一個巨大的稀疏矩陣。這樣存儲效率很低;
2. 這個模型對單詞出現(xiàn)的順序沒有任何記錄,因此“勇士打敗雷霆”和“雷霆打敗勇士”這兩個短語,在BOW模型中認(rèn)為意思是完全一樣的。
為此,科學(xué)家提出了詞嵌入模型。
詞嵌入(Word Embedding)是文本向量化的一種,概念上而言,它是指把一個維數(shù)為所有詞的數(shù)量的高維空間嵌入到一個維數(shù)低得多的連續(xù)向量空間中,每個單詞或詞組被映射為實數(shù)域上的向量。比如在上面的圖中,我們其實可以把第一列Mary向量化為(1,0,0),但是文檔變多的時候效率很低。我們?nèi)绻褂迷~嵌入技術(shù),就可以把向量的維度確定在一定范圍之內(nèi),然后利用一個數(shù)值向量來表征這個詞,從而來計算不同單詞之間的相互關(guān)系。利用這個方法,我們有辦法找到意思相近的關(guān)鍵詞,也可以找到一些詞的反義詞,還能夠計算詞與詞之間的距離。非常經(jīng)典的例子是,“國王-男性+女性=女王”。如果我們得到詞向量,我們就可以輕易地進(jìn)行這種計算,然后進(jìn)行文本的理解。
本來希望從word2vec的方法開始講實現(xiàn),但是發(fā)現(xiàn)R對word2vec的支持確實不完善,很多教程連數(shù)據(jù)都無法下載成功,但是有一個包卻非常優(yōu)秀,叫做text2vec。它不能做word2vec,但是卻能夠很好地實現(xiàn)GloVe。GloVe是基于word2vec的一個詞嵌入方法,是斯坦福大學(xué)研究者提出的,具體項目見[GloVe項目官網(wǎng)]
(https://nlp.stanford.edu/projects/glove/)
相關(guān)的R代碼在GloVe Word Embeddings(http://text2vec.org/glove.html),這是目前最新的版本,真實有效,簡單快捷。方法的輸入,是一段文字,輸出是每個詞的數(shù)值向量。有了這些向量,我們可以做詞的聚類,同時也可以用這些詞向量來對文檔進(jìn)行分類。此外,fastText也能夠?qū)卧~進(jìn)行向量化(<CRAN - Package fastrtext>https://cran.r-project.org/web/packages/fastrtext/index.html)。不僅單詞可以向量化,整個文檔也可以向量化,這個可以使用doc2vec模型,而R中也有相關(guān)的實現(xiàn)(<Doc2Vec function | R Documentation>https://www.rdocumentation.org/packages/textTinyR/versions/1.1.2/topics/Doc2Vec)。
也就是說,以后如果有需要對文檔進(jìn)行分類,或者對關(guān)鍵詞進(jìn)行分類,詞嵌入的技術(shù)能夠大大幫助我們提高結(jié)果的合理性。如果有必要,后期會進(jìn)行實踐操作,目前先介紹到這里。
——————————————