詞向量原始碼解析 (1)詞向量(詞表示)簡單介紹

2021-08-07 13:52:14 字數 2566 閱讀 4542

在未來的一段時間內,我會全面細緻的解析包括word2vec, glove, hyperwords, context2vec, ngram2vec等一系列詞向量(詞表示)工具包。用合理的向量去表示單詞是自然語言處理(nlp)領域中很經典很基本的乙個任務。 乙份高質量的詞向量或是詞表示是很多任務取得更好表現的關鍵。通過上面提到的工具包,我們可以得到高質量的詞向量(詞表示);也可以根據我們的需求,得到不同性質的詞向量(詞表示)。

這篇文章中首先簡單介紹一下詞向量(詞表示)。在後面我會統一用詞向量來代替詞向量(詞表示)。這裡簡單給詞向量乙個定義,詞向量就是要用某個固定維度的向量去表示單詞。舉乙個簡單的例子,在字典用我們會用幾千個常用詞去解釋每個單詞的意思,而詞向量中,我們用(比如)100維的實數向量去表示字典中的單詞。換一種說法,我們要把字典中每乙個單詞對映到某個維度(比如100維)的空間當中去,所以我們也可以把詞向量叫做空間向量模型(vector space model)。我們之所以要把單詞變成向量是因為我們需要把自然語言抽象成數學中的某個概念(這裡是向量),這樣才能對其進圖1,通過word2vec訓練的詞向量經過降維在二維空間中的狀況,** 行建模。換一種更具體直白的說法,之所以要把單詞變成固定維度的向量,是因為絕大多數的機器學習(machine learning)模型需要固定維度的向量作為輸入。

那究竟用什麼向量去表示單詞才是合理的呢?乙個符合直覺的想法是,相似的單詞應該有相似的詞向量,比如dog和cat這兩個單詞,他們的意思很相近,那麼他們的詞向量也應該很相似,或者說他們的詞向量在空間中位置很接近,距離很短。再比如eat和train這兩個單詞,他們的詞向量應該距離比較遠。圖1展示了通過word2vec訓練的詞向量經過降維在二維空間中的狀況。可以看到相似的單詞在空間中的距離也很接近

圖1,通過word2vec訓練的詞向量經過降維在二維空間中的狀況,**

我們應該怎樣做才能使得相似的單詞有相似的詞向量呢?幾乎有所的詞向量模型都利用了語言學中這樣的乙個規律:相似的單詞有著相似的上下文。這個規律叫distributional hypothesis。還是以dog和cat兩個單詞作為例子,他們是比較相似的單詞,他們在語料中的上下文也很相近。他們的上下文中一般都會出現關於動物,寵物的單詞或是短語。所以,目前主流的詞向量模型都是通過單詞在語料中的上下文來表示單詞。我們後面介紹的工具包中包括了各種各樣的詞向量模型。他們表面上千差萬別,但是本質都很相似,都是對單詞與其上下文的關係進行建模,從而得到高質量的單詞表示。

在仔細分析各種詞向量工具包的原始碼之前,我們再看一下得到的詞向量能做什麼。上面已經提到,詞向量會把相似的單詞對映到相似的空間中去。所以我們可以用詞向量找到和某個單詞相近的單詞。比如輸入beijing,會返回shanghai等單詞。除此之外,用word2vec訓練得到的詞向量還有另乙個比較優美的性質,詞模擬(word analogy)。我們點開questions-words.txt,第乙個例子就是athens greece baghdad iraq。在詞模擬任務中,我們需要通過前三個單詞,例如athens greece baghdad,推導出第四個單詞iraq。推導的過程就是雅典和希臘是首都的關係,巴格達和誰是首都的關係?答案是伊拉克。要做好這個任務,就要求我們還需要從詞向量中得到單詞之間關係的資訊,比如在上個例子中,這個關係就是『首都』。當年word2vec出現以後受到大家廣泛關注,乙個可能的原因就是大家驚訝於詞向量能在analogy資料集上取得這麼好的效果,原來詞向量還有這樣神奇的性質。

那詞向量為何有能力做好analogy這個任務呢?很多人都問過我,在word2vec中用vec('wife') + vec('king') - vec('queen')去尋找husband這個單詞,這種加加減減的操作看上去沒有什麼道理呀。我這裡先給乙個例子幫助大家直觀的理解,後面的文章還會再更仔細的去解釋。我們以king,queen這兩個單詞為例。假設語料中king周圍出現的單詞主要和『皇室』這個主題以及『男性』這個主題有關。queen周圍出現的單詞主要和『皇室』這個主題和『女性』這個主題有關。我們令vec('皇室')為所有有關皇室主題的單詞的詞向量的平均,vec('男性')和vec('女性')分別為所有有關男性,女性主題的詞向量的平均。我們在上乙個文章中提到過,單詞的語義能通過它在語料中的上下文中的資訊體現出來。我們這裡就認為vec('king') =1/2( vec('皇室') + vec('男性') ); vec('queen') =1/2( vec('皇室') + vec('女性') )。所以vec('king') - vec('queen')就等於 1/2( vec('男性')-vec('女性') )。同理,對於husband,wife這兩個單詞,husband周圍的單詞是關於伴侶和男性的主題,wife周圍的單詞是關於伴侶和女性的主題。vec('husband') - vec('wife')同樣等於1/2( vec('男性')-vec('女性') )。這樣 vec('husband') - vec('wife')就等於vec('king') - vec('queen'),我們就能輕易的通過三個詞,去推斷出第四個詞。而vec('king') - vec('queen')也很好的反映了男女性別這樣乙個關係。這樣看來analogy這樣看似神奇的性質是可以從distributional hypothesis中推導出來的。

詞向量 詞嵌入 word embedding

embedding 嵌入 embedding 嵌入,在數學上表示乙個對映f x y,是將x所在的空間對映到y所在空間上去,並且在x空間中每乙個x有y空間中唯一的y與其對應。嵌入,也就是把x在y空間中找到乙個位置嵌入,乙個x嵌入為乙個唯一的y。word embedding 詞嵌入 也就是把當前預料文字...

詞向量表示

介紹 lsa是基於滑動視窗的共現矩陣 co occurence 以及svd的方法,通過svd來對共現矩陣進行降維,從而獲得低維度的詞向量。實現 假設window長度為1 語料庫中包含三個句子 i like deep learning.i like nlp.i enjoy flying.通過滑動視窗可...

python生成詞向量 詞向量是如何生成的

遇到這個問題的時候,網上有個很經典的 word2vec的數學原理 上面一文解釋得很詳細,但小白入門會看得很蒙逼,不知道初始向量值是怎麼來的,全域性來呼叫是怎樣執行的。所以我就希望寫一篇文章,舉一些例子,去闡述這個詞向量到底是怎樣產生的。word2vec的數學原理 傳送門 word2vec數學原理 這...