詞向量( Distributed Representation)工作原理是什麼?

能否舉個通俗的例子說明一下?


要將自然語言交給機器學習中的演算法來處理,通常需要首先將語言數學化,詞向量就是用來將語言中的詞進行數學化的一種方式。

一種最簡單的詞向量方式是 one-hot representation,就是用一個很長的向量來表示一個詞,向量的長度為詞典的大小,向量的分量只有一個 1,其他全為 0, 1 的位置對應該詞在詞典中的位置。但這種詞表示有兩個缺點:(1)容易受維數災難的困擾,尤其是將其用於 Deep Learning 的一些演算法時;(2)不能很好地刻畫詞與詞之間的相似性(術語好像叫做「辭彙鴻溝」)。

另一種就是你提到 Distributed Representation 這種表示,它最早是 Hinton 於 1986 年提出的,可以克服 one-hot representation 的缺點。其基本想法是:

通過訓練將某種語言中的每一個詞映射成一個固定長度的短向量(當然這裡的「短」是相對於 one-hot representation 的「長」而言的),將所有這些向量放在一起形成一個詞向量空間,而每一向量則為該空間中的一個點,在這個空間上引入「距離」,則可以根據詞之間的距離來判斷它們之間的(詞法、語義上的)相似性了。

為更好地理解上述思想,我們來舉一個通俗的例子:假設在二維平面上分布有 N 個不同的點,給定其中的某個點,現在想在平面上找到與這個點最相近的一個點,我們是怎麼做的呢?首先,建立一個直角坐標系,基於該坐標系,其上的每個點就唯一地對應一個坐標 (x,y);接著引入歐氏距離;最後分別計算這個詞與其他 N-1 個詞之間的距離,對應最小距離值的那個詞便是我們要找的詞了。

上面的例子中,坐標(x,y) 的地位相當於詞向量,它用來將平面上一個點的位置在數學上作量化。坐標系建立好以後,要得到某個點的坐標是很容易的,然而,在 NLP 任務中,要得到詞向量就複雜得多了,而且詞向量並不唯一,其質量也依賴於訓練語料、訓練演算法和詞向量長度等因素。

一種生成詞向量的途徑是利用神經網路演算法,當然,詞向量通常和語言模型捆綁在一起,即訓練完後兩者同時得到。用神經網路來訓練語言模型的思想最早由百度 IDL (深度學習研究院)的徐偉提出。 這方面最經典的文章要數 Bengio 於 2003 年發表在 JMLR 上的 A Neural Probabilistic Language Model,其後有一系列相關的研究工作,其中包括谷歌 Tomas Mikolov 團隊的 word2vec (word2vec -

Tool for computing continuous distributed representations of words.)。

最近了解到詞向量在機器翻譯領域的一個應用,報道(機器翻譯領域的新突破)是這樣的:

谷歌的 Tomas Mikolov 團隊開發了一種詞典和術語表的自動生成技術,能夠把一種語言轉變成另一種語言。該技術利用數據挖掘來構建兩種語言的結構模型,然後加以對比。每種語言詞語之間的關係集合即「語言空間」,可以被表徵為數學意義上的向量集合。在向量空間內,不同的語言享有許多共性,只要實現一個向量空間向另一個向量空間的映射和轉換,語言翻譯即可實現。該技術效果非常不錯,對英語和西語間的翻譯準確率高達 90%

我讀了一下那篇文章(http://arxiv.org/pdf/1309.4168.pdf),引言中介紹演算法工作原理的時候舉了一個例子,我覺得它可以幫助我們更好地理解詞向量的工作原理,特介紹如下:

考慮英語和西班牙語兩種語言,通過訓練分別得到它們對應的詞向量空間 E 和 S。從英語中取出五個詞 one,two,three,four,five,設其在 E 中對應的詞向量分別為 v1,v2,v3,v4,v5,為方便作圖,利用主成分分析(PCA)降維,得到相應的二維向量 u1,u2,u3,u4,u5,在二維平面上將這五個點描出來,如下圖左圖所示。類似地,在西班牙語中取出(與 one,two,three,four,five 對應的) uno,dos,tres,cuatro,cinco,設其在 S 中對應的詞向量分別為 s1,s2,s3,s4,s5,用 PCA 降維後的二維向量分別為 t1,t2,t3,t4,t5,將它們在二維平面上描出來(可能還需作適當的旋轉),如下圖右圖所示:

觀察左、右兩幅圖,容易發現:五個詞在兩個向量空間中的相對位置差不多,這說明兩種不同語言對應向量空間的結構之間具有相似性,從而進一步說明了在詞向量空間中利用距離刻畫詞之間相似性的合理性。


distrubted 表示一個個體用幾個編碼單元而不是一個編碼單元表示,即一個個體分布在幾個編碼單元上,主要是相對one-hot編碼中一個編碼單元表示一個個體。可以參考

Deep learning for signal and information Processing

「Distributed representation: a representation of the observed data in such a way that they are

modeled as being generated by the interactions of many hidden factors. A particular factor learned from configurations of other factors can often generalize well. Distributed representations form the basis of deep learning」


題意其實有些混淆。『詞向量( Distributed Representation)工作原理是什麼』既有Distributed Representation也有詞向量,其實分開來看更好。

Distributed Representation:一般不是One-hot representation其實基本都是Distributed Representation,只是一類表示學習方法的總稱。

詞向量:只要是用於表示詞語的向量都可以稱作詞向量,這類方法中word2vec比較出名,其實One-hot representation也可以作為詞向量。


既然題主說詞向量( Distributed Representation)的工作原理是什麼,應該不是問獲得詞向量演算法的原理。

那就舉個通俗的例子。

現代人看到寶馬,賓士這兩個詞,第一眼的反應多數都是汽車。但是如果拿給古人看,古人一定想不到汽車。

為什麼呢,因為古人沒有相關知識,只能從字面上去理解這兩個詞,即&<寶,馬&>,&<奔,馳&>。

拿給計算機,計算機看到的也是字面上的意思,這兩個字串是八竿子打不著(要是給計算機寶馬和寶劍,它倒是能發現這倆詞有點像)。

那怎麼才能讓計算機把這倆詞關係起來呢,這就是統計學習乾的事了,因為我們有很多資源可以利用,計算機可以利用一些演算法從這些資源中學習到詞之間的關係,就像人類一樣,天天聽別人說這車是寶馬,那車是賓士,久了就知道這倆東西都是車了。但是寶馬在有些語境里也未必是車,比如小說中xx身跨xx寶馬,這是寶馬指的是動物。

我們可以對辭彙引入一種向量表示,比如:

&<汽車,奢侈品,動物,動作,美食&>

統計學習的方法可以學習到每個詞的這種表示。它學到的可能是

寶馬 = &<0.5, 0.2, 0.2, 0.0, 0.1&>

賓士 = &<0.7, 0.2, 0.0, 0.1, 0.0&>

這樣,兩個字面上無關的辭彙,就連接起來了。

至於怎麼學來的,兩大常用方法:

統計共同出現的次數(LDA,一種貝葉斯概率模型)。

根據相似的上下文(word2vec,即NN)。

到這已偏題。


詞向量指的是將詞語向量化,即將詞語用一個向量表徵,或者說將一個詞語映射到到某個空間中的一個點,例如將「APPLE」這個詞表示為[0.2 0.2],「APPLE」就是2維歐幾里得空間上的一個點,如圖1所示。詞向量有很多種生成方式,比如one-hot、tf-idf、co-occurence matrix、神經網路等等。

圖1 詞向量示意圖

distributed representation是一種神經網路生成詞向量的方式,該方式有兩個特點:1、每個概念被多個神經元表徵,2、每個神經元參與多個概念的表徵。word2vec是distributed representation一種實現方式,word2vec的原理用J. R. Firth的話說就是「You shall know a word by the company it keeps」。以圖2(CBOW)為例,如果有一個句子「the cat sits one the mat」,在訓練的時候,將「the cat sits one the」作為輸入,預測出最後一個詞是「mat」。

圖2 word2vec原理示意

參考資料:

http://www.cs.toronto.edu/~bonner/courses/2014s/csc321/lectures/lec5.pdf

http://cs224d.stanford.edu/lectures/CS224d-Lecture2.pdf

https://www.tensorflow.org/tutorials/word2vec

An Intuitive Understanding of Word Embeddings: From Count Vectors to Word2Vec


小白答

首先Bag of words 自然語言處理中文本的每一個詞作為一個特徵。因此對應的特徵向量就是這些特徵的組合。基於這種思想的模型我們稱之為bag of words。

然後是one-hot 編碼

簡單的來說就是這個詞在詞典中的第n個,則設一個k維向量,第n個置1,其他都為0。

舉例:我[1,0,0,0,0]

我們表示出了單字,那麼特徵向量怎麼生成呢。

對的,每個詞的one-hot編碼對應位相加就OK了。這樣特徵向量的構建就完成啦。

**接下來我們說重點,詞向量。

我們上面得到了特徵向量,要是涉及詞很多詞典很大的情況下,試想我們會收穫一個超級n維的向量拿給機器學習模型去訓練(它會累死的啊呀?(? ? ?ω? ? ?)?)

而且我們忽略了單詞的語義!是不是!one-hot 只是表達出了這個詞是第幾個是不是!

解決這個問題的就是主角!重點!

詞向量!!

終於講到重點了。我好啰嗦。?(? ? ?ω? ? ?)?

它的實質呢就是把單詞映射到低維空間。

維度會控制在500維以內。

形式呢前面的答主已經說過了。我就不舉例了。

所以這樣兩個向量的夾角,就能用來計算向量之間的距離。這個就是我們說的 餘弦相似度。黑體黑體加粗!

合格的詞向量語義相近會被編碼到近的位置,而且向量相加會得到合理的語義。

例如:舉例語義計算。

笑笑 + 男票 = 全全

哈哈。對不起。開個玩笑。

補充論文

Turian Joseph, Lev Ratinov, and Yoshua Bengio. Word representations: a simple and general method for semi-supervised learning. Proceedings of the 48thAnnual Meeting of the Association for Computational Linguistics (ACL). 2010

僅供參考啦啦


先說詞向量長啥樣:[0.792, ?0.177, ?0.107, 0.109, ?0.542, ...],一般在50到100個緯度;第二個問題是「詞向量從哪裡來的?」,前面回答說了「一種生成詞向量的途徑是利用神經網路演算法」;然後再說工作原理:在我理解,科學家也不知道真正的原理是什麼,只是發現「用神經網路演算法」生成之後,有很多用處。

至於通俗說法,我覺得可以這麼理解,在人類古往今來積累的「辭彙」中,整體上看,每一句話(自然是由N個片語成)並非毫無關聯的隨機而來。(否則和猴子敲鍵盤有什麼區別呢?)但是這種關聯是什麼呢?這點所有人都搞不懂。

大教授用神經網路來回鼓搗(其實也是仿生人類大腦機制而已),發現神經網路這「葯」,還真能治一些病(機器翻譯)。這就牛X了唄!

不知道這樣說好不好理解。


推薦閱讀:

如何評價 2017 年 Jeff Dean 的關於使用 deep learning 做索引的論文?
澳大利亞和加拿大的機器學習工作崗位多嗎?
有哪些深度學習框架可以跑在超算集群上?
中科院說的深度學習指令集diannaoyu到底是什麼?
如何看待Jeff Dean&Hinton投到ICLR17的MoE的工作?

TAG:數據挖掘 | 機器學習 | 自然語言處理 | 深度學習DeepLearning |