什麼是詞向量?

2021-09-16 21:08:29 字數 4629 閱讀 5429

什麼是詞向量?

我們組實訓選擇的主題是與自然語言識別相關的,那麼就不得不學習和了解一下自然語言識別中非常重要和基礎的。於是我對於自己對詞向量的學習進行了以下的總結。

簡而言之,詞向量技術是將詞轉化成為稠密向量,並且對於相似的詞,其對應的詞向量也相近。

一、詞的表示

在自然語言處理任務中,首先需要考慮詞如何在計算機中表示。通常,有兩種表示方式:one-hot representation和distribution representation。

1.1離散表示(one-hot representation)

傳統的基於規則或基於統計的自然語義處理方法將單詞看作乙個原子符號 

被稱作one-hot representation。one-hot representation把每個詞表示為乙個長向量。這個向量的維度是詞表大小,向量中只有乙個維度的值為1,其餘維度為0,這個維度就代表了當前的詞。 

例如: 

蘋果 [0,0,0,1,0,0,0,0,0,……] 

one-hot representation相當於給每個詞分配乙個id,這就導致這種表示方式不能展示詞與詞之間的關係。另外,one-hot representation將會導致特徵空間非常大,但也帶來乙個好處,就是在高維空間中,很多應用任務線性可分。

1.2分布式表示(distribution representation)

word embedding指的是將詞轉化成一種分布式表示,又稱詞向量。分布 

式表示將詞表示成乙個定長的連續的稠密向量。

分布式表示優點: 

(1)詞之間存在相似關係: 

是詞之間存在「距離」概念,這對很多自然語言處理的任務非常有幫助。 

(2)包含更多資訊: 

詞向量能夠包含更多資訊,並且每一維都有特定的含義。在採用one-hot特徵時,可以對特徵向量進行刪減,詞向量則不能。

二、如何生成詞向量

本小節來簡單介紹詞向量的生成技術。生成詞向量的方法有很多,這些方法都依照乙個思想:任一詞的含義可以用它的周邊詞來表示。生成詞向量的方式可分為:基於統計的方法和基於語言模型(language model)的方法。

2.1 基於統計方法

2.1.1 共現矩陣

通過統計乙個事先指定大小的視窗內的word共現次數,以word周邊的共現詞的次數做為當前word的vector。具體來說,我們通過從大量的語料文字中構建乙個共現矩陣來定義word representation。 

例如,有語料如下: 

i like deep learning. 

i like nlp. 

i enjoy flying. 

則其共現矩陣如下:

矩陣定義的詞向量在一定程度上緩解了one-hot向量相似度為0的問題,但沒有解決資料稀疏性和維度災難的問題。

2.1.2 svd(奇異值分解)

既然基於co-occurrence矩陣得到的離散詞向量存在著高維和稀疏性的問 

題,乙個自然而然的解決思路是對原始詞向量進行降維,從而得到乙個稠密的連續詞向量。 

對2.1.1中矩陣,進行svd分解,得到矩陣正交矩陣u,對u進行歸一化得到矩陣如下:

svd得到了word的稠密(dense)矩陣,該矩陣具有很多良好的性質:語義相近的詞在向量空間相近,甚至可以一定程度反映word間的線性關係。

2.2語言模型(language model)

語言模型生成詞向量是通過訓練神經網路語言模型nnlm(neural network language model),詞向量做為語言模型的附帶產出。nnlm背後的基本思想是對出現在上下文環境裡的詞進行**,這種對上下文環境的**本質上也是一種對共現統計特徵的學習。 

較著名的採用neural network language model生成詞向量的方法有:skip-gram、cbow、lbl、nnlm、c&w、glove等。接下來,以目前使用最廣泛cbow模型為例,來介紹如何採用語言模型生成詞向量。

2.2.1 cbow(continuous bag-of-word)

生成word的distribution representation的模型有很多,生成的向量效 

果差距不大(生成向量的效果更取決於良好的訓練資料)。本節以cbow模型中的層次化的softmax為例,介紹如何採用神經網路生成詞向量。 

cbow模型是**上下文已知的情況下,當前詞出現的概率。上下文的選取採用視窗方式,即只將當前詞視窗範圍內的詞作為上下文。中心詞概率公式如下: 

p(wt|wt-k,wt-(k-1)…,wt-1,wt+1,wt+2…,wt+k)= p(wt|context) 

cbow模型去掉了最耗時的隱層,從輸入層到隱層的操作是對上下文詞向量進行求和(word2vec**對以上下文詞向量的加權平均來表示context)。 

從隱層到輸出層則利用上下文詞向量和做為輸入,輸出的是視窗中心位置所有詞出現的概率。利用softmax求中心詞概率,公式表示如下: 

p(w_t│context)=e^(-g(w_t,context))/(∑_(v∈v)▒e^(-g(v,context)) ) 

其中,context表示上下文詞向量和,v表示詞表,wt表示中心詞,g表示能量函式。由上式可看出,分母計算比較密集,時間複雜度o|v|。由上式可以看出,分母的計算複雜度與詞表規模相關,當語料較大時,計算變的非常耗時。解決這一問題是對詞進行多分類/聚類,例如,5000詞的語料,聚成100類,則時間複雜度由5000縮減至50。

cbow採用了一種hierarchical softmax技術,利用哈夫曼樹對詞表進行分類,用一連串的二分類來近似多分類。

加入哈夫曼樹後,中心詞的概率可表示入下: 

p(w_t│context)=∏(i=1)^k▒〖p(d_i |q_i,context)〗=∏(i=1)^k▒〖σ(v_context^t*q_i)〗 

其中,v_context^t為視窗內詞的詞向量的加權平均,q_i為結點i的結點向量,σ(*)為神經網路啟用函式。從公式中可以看出,中心詞的概率是從根節點到詞所在的葉節點所走過路徑概率的乘積。 

對中心詞概率做極大似然估計,可得到模型的損失函式。損失函式如下: 

loss=-likelihood=-(1-code[j])log σ(v_context^t*q_i )-code[j]log⁡(1- σ(v_context^t*q_i )) 

code[j]為結點j的哈夫曼編碼。有了損失函式,就可以通過梯度下降法求得詞向量。注意,損失函式中有2個帶求引數,分別為〖詞向量(v〗_context^t)和結點向量〖(q〗_i)。 

可以看出,cbow模型是乙個語言模型。在訓練好後,語言模型的引數v_context^t作為副產出,得到詞向量。

三.詞向量的訓練

本節將分享我使用詞向量的一些經驗。

3.1詞向量效果的影響因素

(1)增加詞向量的維度能夠增加詞向量效果。 

(2)在同一領域語料下,語料越多越好,增加不相關領域語料將會降低詞向量效果。 

(3)大的上下文視窗學到的詞向量更反映主題資訊,而小的上下文視窗學到的詞向量更反映詞的功能和上下文語義資訊。 

(4)語料的純度越高(雜質少),詞向量效果越好。因此,在利用語料訓練詞向量時,進行預處理能夠提高詞向量的效果。

3.2詞向量的歧義問題

例如,詞」蘋果」可以指代水果也可以指代蘋果手機。在對「蘋果」 

進行訓練時,將會對其對應的詞向量向兩個方向拉伸,進而造成詞向量歧義。 

詞向量的歧義將會對詞向量的應用效果產生影響。例如,對蘋果進行序列標註,指代手機的蘋果應打上品牌詞標籤,而指代水果的蘋果對應打上產品詞標籤。對同乙個詞打上多種不同的標籤而採用同乙個詞向量,將降低詞性標註的效果。 

通常解決這一問題是對詞向量進行聚類,以多個向量來表示同乙個詞。 

例如,在rnns分詞專案時,發現字向量的歧義問題將影響分詞效果。因此,我按品類對字進行了聚類,得到的聚類效果如下: 

左邊是顏色中紅色的紅,可以看出它與其它顏色的距離較近。右邊是手 

機品類紅公尺手機的「紅」,可以看到它最相似的詞是「小」字,因為在京東的商品title裡,手機品類中紅公尺手機和小公尺手機出現的次數較多,進而使得「紅」字和「小」字的語境相似。

3.3 詞向量其它

還可以利用nnlm方法,將我們感興趣的其它實體生成向量。例如,我曾利用word2vec將每個sku(商品id)embedding成向量。我們將每個使用者某個月購買的母嬰類商品按序進行排列做為一條訓練樣本,例如:

其中,第一列user_id +』#』+使用者嬰兒年齡。其餘列為使用者購買的sku集合,並且購買的sku按購買時間順序排列。 

我們將訓練樣本輸入到word2vec中進行訓練,得到每個sku的向量表示。通過這種訓練樣本的構建方式,使使用者在相同年齡段(嬰兒)購買的商品相似。例如,在我們的向量中,如下兩個商品相似:

我們利用sku向量做為特徵,訓練模型**使用者年齡,準確率達90%。

四.總結

深度學習模型具有比傳統模型更強的特徵抽取能力。在自然語言處理中,傳統統計特徵包含的資訊量過少,這也一直限制著深度學習在自然語言處理中的應用。詞向量由於包含了更豐富的資訊,使得深度學習能夠處理絕大多數自然語言處理應用。 

詞向量雖然為深度學習在自然語言處理領域帶來了希望,但目前詞向量仍有許多不完善的地方,例如: 

雖然知道詞向量比統計特徵包含更多資訊,但並不知道詞向量包含了哪些 

資訊(如每維特徵代表的意義)。 

詞向量的訓練採用無監督方式,不能很好的利用先驗資訊。 

詞向量是神經網路語言模型的副產物,其損失函式不是由具體應用構建。 

因此,不是詞向量訓練的越好,應用效果就越好。

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

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

詞向量 如何評價詞向量的好壞

詞向量 詞嵌入或者稱為詞的分布式表示,區別於以往的獨熱表示,已經成為自然語言任務中的乙個重要工具,對於詞向量並沒有直接的方法可以評價其質量,下面介紹幾種間接的方法。對於詞向量的評價更多還是應該考慮對實際任務的收益,脫離的實際任務很難確定a模型就一定比b好,畢竟詞向量方法更多是一種工具。學生 上課 0...

什麼是詞嵌入(word embedding)

整理自知乎 embedding在數學上表示乙個maping,f x y,也就是乙個function。其中該函式是 那麼對於word embedding,就是將單詞word對映到另外乙個空間,其中這個對映具有injective和structure preserving的特點。通俗的翻譯可以認為是單詞嵌...