1. 程式人生 > 實用技巧 >有誰可以解釋下word embedding?

有誰可以解釋下word embedding?

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

li Eta

li Eta

機器學習話題的優秀回答者

316 人贊同了該回答

word embedding的意思是:給出一個文件,文件就是一個單詞序列比如 “A B A C B F G”, 希望對文件中每個不同的單詞都得到一個對應的向量(往往是低維向量)表示。
比如,對於這樣的“A B A C B F G”的一個序列,也許我們最後能得到:A對應的向量為[0.1 0.6 -0.5],B對應的向量為[-0.2 0.9 0.7] (此處的數值只用於示意)

之所以希望把每個單詞變成一個向量,目的還是為了方便計算,比如“求單詞A的同義詞”,就可以通過“求與單詞A在cos距離下最相似的向量”來做到。

word embedding不是一個新的topic,很早就已經有人做了,比如bengio的paper“Neural probabilistic language models”,這其實還不算最早,更早的時候,Hinton就已經提出了distributed representation的概念“Learning distributed representations of concepts”(只不過不是用在word embedding上面) ,AAAI2015的時候問過Hinton怎麼看google的word2vec,他說自己20年前就已經搞過了,哈哈,估計指的就是這篇paper。

總之,常見的word embedding方法就是先從文字中為每個單詞構造一組features,然後對這組feature做distributed representations,哈哈,相比於傳統的distributed representations,區別就是多了一步(先從文件中為每個單詞構造一組feature)。

既然word embedding是一個老的topic,為什麼會火呢?原因是Tomas Mikolov在Google的時候發的這兩篇paper:“Efficient Estimation of Word Representations in Vector Space”、“Distributed Representations of Words and Phrases and their Compositionality”。

這兩篇paper中提出了一個word2vec的工具包,裡面包含了幾種word embedding的方法,這些方法有兩個特點。一個特點是速度快,另一個特點是得到的embedding vectors具備analogy性質。analogy性質類似於“A-B=C-D”這樣的結構,舉例說明:“北京-中國 = 巴黎-法國”。Tomas Mikolov認為具備這樣的性質,則說明得到的embedding vectors性質非常好,能夠model到語義。

這兩篇paper是2013年的工作,至今(2015.8),這兩篇paper的引用量早已經超好幾百,足以看出其影響力很大。當然,word embedding的方案還有很多,常見的word embedding的方法有:
1. Distributed Representations of Words and Phrases and their Compositionality
2. Efficient Estimation of Word Representations in Vector Space
3. GloVe Global Vectors forWord Representation
4. Neural probabilistic language models
5. Natural language processing (almost) from scratch
6. Learning word embeddings efficiently with noise contrastive estimation
7. A scalable hierarchical distributed language model
8. Three new graphical models for statistical language modelling
9. Improving word representations via global context and multiple word prototypes

word2vec中的模型至今(2015.8)還是存在不少未解之謎,因此就有不少papers嘗試去解釋其中一些謎團,或者建立其與其他模型之間的聯絡,下面是paper list
1. Neural Word Embeddings as Implicit Matrix Factorization
2. Linguistic Regularities in Sparse and Explicit Word Representation
3. Random Walks on Context Spaces Towards an Explanation of the Mysteries of Semantic Word Embeddings
4. word2vec Explained Deriving Mikolov et al.’s Negative Sampling Word Embedding Method
5. Linking GloVe with word2vec
6. Word Embedding Revisited: A New Representation Learning and Explicit Matrix Factorization Perspective

編輯於2015-08-27

31610 條評論

分享

收藏感謝收起

知乎使用者

知乎使用者

218 人贊同了該回答

題主問的是embedding的含義,樓上幾位的回答都是拿word embedding說了一通,也沒解釋出embedding的含義。我來說一下。
Embedding在數學上表示一個maping, f: X -> Y, 也就是一個function,其中該函式是injective(就是我們所說的單射函式,每個Y只有唯一的X對應,反之亦然)和structure-preserving (結構儲存,比如在X所屬的空間上X1 < X2,那麼對映後在Y所屬空間上同理 Y1 < Y2)。那麼對於word embedding,就是將單詞word對映到另外一個空間,其中這個對映具有injective和structure-preserving的特點。

通俗的翻譯可以認為是單詞嵌入,就是把X所屬空間的單詞對映為到Y空間的多維向量,那麼該多維向量相當於嵌入到Y所屬空間中,一個蘿蔔一個坑。

word embedding,就是找到一個對映或者函式,生成在一個新的空間上的表達,該表達就是word representation。

推廣開來,還有image embedding, video embedding, 都是一種將源資料對映到另外一個空間

編輯於2016-10-24

21811 條評論

分享

收藏感謝

李韶華

李韶華

研究者

98 人贊同了該回答

(基於我之前做的一個slides編寫。slides完整版:https://sites.google.com/site/shaohua03/intro-word-embedding.pdf

詞嵌入最粗淺的理解

o 詞對映到低維連續向量(如圖)

cat: (-0.065, -0.035, 0.019, -0.026, 0.085,…)

dog: (-0.019, -0.076, 0.044, 0.021,0.095,…)

table: (0.027, 0.013, 0.006, -0.023, 0.014, …)

o 相似詞對映到相似方向 -- 語義相似性被編碼了

o Cosine相似度衡量方向

1cd37c9bac3b7503801d5a812d1a1b01_b.png

詞嵌入可以做類比題 o v(“國王”) – v(“王后”) ≈ v(“男”) – v(“女”) o v(“英國”) + v(“首都”) ≈ v(“倫敦”) o 反映出語義空間中的線性關係 o詞嵌入編碼了語義空間中的線性關係, 向量的不同部分對應不同的語義 o 質疑:然而並沒有什麼x用? o 兩個句子: A含“英國”,“首都”,不含“倫敦”;B含“倫敦” o 所有詞的詞向量的和表示句子 o 兩個句子仍會比較相似

相似詞對映到相似方向:為什麼 o 基本假設:“相似”詞的鄰居詞分佈類似 o 倒推:兩個詞鄰居詞分佈類似 → 兩個詞語義相近 o 寵物 主人 餵食 蹭 喵 o 寵物 主人 餵食 咬 汪 o v(“貓”)≈v(“狗”) o Apple: tree red growth design music company engineering executive o v(“apple”)≈v(“orange”), v(“apple”)≈v(“microsoft”)

詞嵌入的優點 傳統one-hot編碼: “天氣”: (1,0,0…,0),“氣候”: (0,1,0,…0) 權力/的/遊戲: (1,0,0,1,1,0,0, …) 冰/與/火/之/歌: (0,1,1,0,0,1,1,…) o 維度高(幾千–幾萬維稀疏向量),資料稀疏 o 沒有編碼不同詞之間的語義相似性 o 難以做模糊匹配 詞嵌入: o 維度低(100 – 500維), 連續向量,方便機器學習模型處理 o 無監督學習,容易獲得大語料 o 天然有聚類後的效果 o 一個向量可以編碼一詞多義 (歧義的問題需另外處理) o 罕見詞也可以學到不錯的表示:“風姿綽約” ≈ “漂亮”

Word2vec 簡介

o Mikolov 2013, Distributed Representations of Words and Phrases and their Compositionality

o 使用最廣泛的詞嵌入方法

o 速度快,效果好,容易擴充套件

o 原因:簡單(Less is more)

Word2vec 模型

o 迴歸連結函式:

3b23a444f87f18cda108ec352c0f25bd_b.png

o P(w_k|w_i) \propto \exp(\tilde{v}_{w_k}^T v_{w_i} ) (分母是歸一化項,可暫時忽略)

o \tilde{v}_{w_k}v_{w_i} 方向相似: 預測的 P(w_k|w_i)

方向不同: 預測的概率小

o w_k經常出現在w_i周圍,P(w_k|w_i) 大,驅使 \tilde{v}_{w_k}v_{w_i} 指向相似方向

o \tilde{v}_{w_i}v_{w_i} 兩套詞向量,使用時只保留一套

o 沒有耗時的矩陣乘,只留一個softmax變換,所以效率高

o 優化用隨機梯度遞降,罕見詞不會主導優化目標

o 罕見詞的統計資料噪音(隨機性)很大;常用詞的統計資料比較穩定,偏差很小

o 與之相對,基於矩陣分解的演算法經常被罕見詞主導優化目標,導致overfit噪音

編輯於2017-06-30

988 條評論

分享

收藏感謝收起

YJango

YJango

日本會津大學 人機介面實驗室博士在讀

43 人贊同了該回答

YJango的Word Embedding--介紹 - 知乎專欄

該篇主要是討論為什麼要做word embedding:

gitbook閱讀地址:Word Embedding介紹

目錄

  • 單詞表達
    • One hot representation
    • Distributed representation
  • Word embedding
    • 目的
      • 資料量角度
      • 神經網路分析
    • 訓練簡述

至於word embedding的詳細訓練方法在下一節描述。

單詞表達

先前在卷積神經網路的一節中,提到過圖片是如何在計算機中被表達的。 同樣的,單詞也需要用計算機可以理解的方式表達後,才可以進行接下來的操作。

One hot representation

程式中編碼單詞的一個方法是one hot encoding。

例項:有1000個詞彙量。排在第一個位置的代表英語中的冠詞"a",那麼這個"a"是用[1,0,0,0,0,...],只有第一個位置是1,其餘位置都是0的1000維度的向量表示,如下圖中的第一列所示。

v2-09e1bda72c4b903e25db203ab4aa6dc6_b.png

也就是說,

在one hot representation編碼的每個單詞都是一個維度,彼此independent。

Distributed representation

然而每個單詞彼此無關這個特點明顯不符合我們的現實情況。我們知道大量的單詞都是有關。

語義:girl和woman雖然用在不同年齡上,但指的都是女性。

複數:word和words僅僅是複數和單數的差別。

時態:buy和bought表達的都是“買”,但發生的時間不同。

所以用one hot representation的編碼方式,上面的特性都沒有被考慮到。

我們更希望用諸如“語義”,“複數”,“時態”等維度去描述一個單詞。每一個維度不再是0或1,而是連續的實數,表示不同的程度。

目的

但是說到底,為什麼我們想要用Distributed representation的方式去表達一個單詞呢?

資料量角度

這需要再次記住我們的目的:

機器學習:從大量的個樣本 {\{(x_i,y_i)^N_{i=1}}\} 中,尋找可以較好預測未見過 x_{new} 所對應 y_{new} 的函式 f:x\rightarrow y

例項:在我們日常生活的學習中,大量的 {\{(x_i,y_i)^N_{i=1}}\} 就是歷年真題, x_i 是題目,而 y_i 是對應的正確答案。高考時將會遇到的 x_{new} 往往是我們沒見過的題目,希望可以通過做題訓練出來的解題方法 f:x\rightarrow y 來求解出正確的 y_{new}

如果可以見到所有的情況,那麼只需要記住所有的 x_i 所對應的 y_i 就可以完美預測。但正如高考無法見到所有型別的題一樣,我們無法見到所有的情況。這意味著,

機器學習需要從 有限的例子中尋找到合理的 f

高考有兩個方向提高分數:

  • 方向一:訓練更多的資料:題海戰術。
  • 方向二:加入先驗知識:儘可能排除不必要的可能性。

問題的關鍵在於訓練所需要的資料量上。同理,如果我們用One hot representation去學習,那麼每一個單詞我們都需要例項資料去訓練,即便我們知道"Cat"和"Kitty"很多情況下可以被理解成一個意思。為什麼相同的東西卻需要分別用不同的資料進行學習?

神經網路分析

假設我們的詞彙只有4個,girl, woman, boy, man,下面就思考用兩種不同的表達方式會有什麼區別。

One hot representation

儘管我們知道他們彼此的關係,但是計算機並不知道。在神經網路的輸入層中,每個單詞都會被看作一個節點。 而我們知道訓練神經網路就是要學習每個連線線的權重。如果只看第一層的權重,下面的情況需要確定4*3個連線線的關係,因為每個維度都彼此獨立,girl的資料不會對其他單詞的訓練產生任何幫助,訓練所需要的資料量,基本就固定在那裡了。

v2-e153aa561b6d729f5023e077eb7f204c_b.png

Distributed representation

我們這裡手動的尋找這四個單詞之間的關係 f 。可以用兩個節點去表示四個單詞。每個節點取不同值時的意義如下表。 那麼girl就可以被編碼成向量[0,1],man可以被編碼成[1,1](第一個維度是gender,第二個維度是age)。

v2-a6c5f337408f1e3ec31d67074a830bd6_b.png

那麼這時再來看神經網路需要學習的連線線的權重就縮小到了2*3。同時,當送入girl為輸入的訓練資料時,因為它是由兩個節點編碼的。那麼與girl共享相同連線的其他輸入例子也可以被訓練到(如可以幫助到與其共享female的woman,和child的boy的訓練)。

v2-764d83497fecd09920e19cfd91fb1dd8_b.png

Word embedding也就是要達到第二個神經網路所表示的結果,降低訓練所需要的資料量。

而上面的四個單詞可以被拆成2個節點的是由我們人工提供的先驗知識將原始的輸入空間經過 f (上圖中的黃色箭頭)投射到了另一個空間(維度更小),所以才能夠降低訓練所需要的資料量。 但是我們沒有辦法一直人工提供,機器學習的宗旨就是讓機器代替人力去發現pattern。

Word embedding就是要從資料中自動學習到輸入空間到Distributed representation空間的 對映 f

訓練方法

問題來了,我們該如何自動尋找到類似上面的關係,將One hot representation轉變成Distributed representation。 我們事先並不明確目標是什麼,所以這是一個無監督學習任務。

無監督學習中常用思想是:當得到資料 {\{(x_i,y_i)^N_{i=1}}\} 後,我們又不知道目標(輸出)時,

  • 方向一:從各個輸入 \{{x_i}^N_{i=1}\} 之間的關係找目標。 如聚類。
  • 方向二:並接上以目標輸出 y_i 作為新輸入的另一個任務 g:y \rightarrow z ,同時我們知道的對應 z_i 值。用資料 {\{(x_i,z_i)^N_{i=1}}\} 訓練得到 k:x \rightarrow z ,也就是 z=g(f(x)) ,中間的表達 y=g(x) 則是我們真正想要的目標。如生成對抗網路。

Word embedding更偏向於方向二。 同樣是學習一個 k:x \rightarrow z ,但訓練後並不使用 k ,而是隻取前半部分的 f:x \rightarrow y

到這裡,我們希望所尋找的 k:x \rightarrow z 既有標籤 z_i ,又可以讓 f(x) 所轉換得到的 y 的表達具有Distributed representation中所演示的特點。

同時我們還知道,

單詞意思需要放在特定的上下文中去理解。

那麼具有相同上下文的單詞,往往是有聯絡的。

例項:那這兩個單詞都狗的品種名,而上下文的內容已經暗指了該單詞具有可愛,會舔人的特點。

  • 這個可愛的 泰迪 舔了我的臉。
  • 這個可愛的 金巴 舔了我的臉。

而從上面這個例子中我們就可以找到一個 k:x \rightarrow z :預測上下文。

用輸入單詞 x 作為中心單詞去預測其他單詞 z 出現在其周邊的可能性。

我們既知道對應的 z 。而該任務 k 又可以讓 f(x) 所轉換得到的 y 的表達具有Distributed representation中所演示的特點。 因為我們讓相似的單詞(如泰迪和金巴)得到相同的輸出(上下文),那麼神經網路就會將泰迪的輸入 x金巴的輸入 x經過神經網路 f(x) 得到幾乎相同的和泰迪的輸出 y 金巴的輸出 y

用輸入單詞作為中心單詞去預測周邊單詞的方式叫做:Word2Vec The Skip-Gram Model

用輸入單詞作為周邊單詞去預測中心單詞的方式叫做:Continuous Bag of Words (CBOW)

編輯於2017-07-12

431 條評論

分享

收藏感謝收起

知乎使用者

知乎使用者

25 人贊同了該回答

竟然沒人提分散式假設(distributional hypothesis)。

總的來說,word embedding就是一個詞的低維向量表示(一般用的維度可以是幾十到幾千)。有了一個詞的向量之後,各種基於向量的計算就可以實施,如用向量之間的相似度來度量詞之間的語義相關性。其基於的分散式假設就是出現在相同上下文(context)下的詞意思應該相近所有學習word embedding的方法都是在用數學的方法建模詞和context之間的關係。

如何得到word embedding?主要分為兩種:基於矩陣分解和基於預測,可參見論文[1].

基於矩陣分解

  1. 首先基於語料庫構建word context共現矩陣M,矩陣中每個單元可以是二值的表示是否二者共現,也可以是經過處理後的,如共現頻率,共現的TF-IDF,共現的mutual information, point-wise mutual information和positive point-wise mutual information,還可以根據一些規則對單元值進行過濾(比如超過某個值後截斷, Stanford的Glove用的這種方式[2]),等等。很多可衡量二個物件之間關聯的指標都可以用來作為矩陣中每個單元的值。
  2. 得到矩陣之後,就可以進行矩陣分解,這裡的矩陣分解可以是SVD分解 [4];,也可以是直接分解成兩個子矩陣的形式,即M=AB [2]; 還可以是低秩矩陣分解。

基於矩陣分解(SVD)的方法我看到的最早的論文是1992年Schutze的文章[7].

這裡如果不進行矩陣分解(降維),也可以得到一個詞的向量表示(矩陣的行),只不過維度太高(詞典大小),不方便計算。

基於預測

這種方法就是所謂的基於神經網路的方法了。其核心思想就是先用向量代表各個詞,然後通過一個預測目標函式學習這些向量的引數。比如給定當前詞預測視窗範圍內的上下文詞;給定周圍幾個詞,預測中間這個詞;給定前邊幾個詞,預測下一個詞(語言模型)。比如Bengio 2000年在NIPS上提出的neural language model [7],給定前n給詞預測下一個詞出現的概率;Hinton 2007年提出的用Restricted Boltzmann Machine作為language model, Collobert提出用CNN預測上下文詞[8]。給定xx預測xxx的模型的輸入都是詞的向量,然後通過中間各種NN模型預測下一個詞的概率。通過優化目標函式,最後得到這些向量的值。

比如word2vec中直接用二者的向量表示的內積來表示二者之間的關聯,如下圖公式 [3] (這裡的向量是待學習的引數):

v2-14b925d7dc009967eb6ed17801510447_b.png

------------------------

基於矩陣分解和基於預測的模型之間有什麼關聯?Levy在文章[3]中證明了基於預測的SGNS (word2vec)和基於PMI的矩陣分解是等價的,二者差了一個常數。

各種各樣的上下文:

既然語料庫中的上下文可以反映一個詞的語義資訊,那麼其他種類的上下文呢?於是各種各樣的上下文被提出來,如topic, 如knowledge base相關聯的詞或物件,一個詞的內部組成結構(部首,詞根詞綴,詞的定義詞, 多語言之間的一一對應的物件,句法樹中特定dependency的詞,和詞對應的圖片,和詞對應的音訊等等。所有這些資訊都可以反應一個詞的語義資訊,即semantic evidence。於是各種整合不同context的方法也被提出來了 multi-view, multi-modal, multi-source [5,6]。

1. Baroni, Marco, Georgiana Dinu, and Germán Kruszewski. “Don’t Count, Predict! A Systematic Comparison of Context-Counting vs. Context-Predicting Semantic Vectors.” In Proceedings of the 52nd Annual Meeting of the Association for Computational Linguistics (ACL), 238–247. Baltimore, MD, USA, 2014. http://anthology.aclweb.org/P/P14/P14-1023.pdf.

2.Pennington, Jeffrey, Richard Socher, and Christopher D. Manning. “Glove: Global Vectors for Word Representation.” In Proceedings of the Conference on Empirical Methods in Natural Language Processing (EMNLP), 1532--1543, 2014. http://nlp.stanford.edu/projects/glove/glove.pdf.

3. Levy, Omer, and Yoav Goldberg. “Neural Word Embedding as Implicit Matrix Factorization.” In Proceedings of NIPS, 2177–2185, 2014. http://papers.nips.cc/paper/5477-scalable-non-linear-learning-with-adaptive-polynomial-expansions.

4. Levy, Omer, Yoav Goldberg, and Ido Dagan. “Improving Distributional Similarity with Lessons Learned from Word Embeddings.” Transactions of the Association for Computational Linguistics 3 (2015): 211–225.

5. Faruqui, Manaal. “Diverse Context for Learning Word Representations.” Carnegie Mellon University, 2016. http://www.manaalfaruqui.com/.

6. Li, Yingming, Ming Yang, and Zhongfei Zhang. “Multi-View Representation Learning: A Survey from Shallow Methods to Deep Methods.” arXiv:1610.01206 [Cs], October 3, 2016. http://arxiv.org/abs/1610.01206.

7. Schutze, Hinrich. “Dimensions of Meaning.” In Proceedings of Supercomputing, 787–796. IEEE, 1992. http://ieeexplore.ieee.org/abstract/document/236684/.

8. Collobert, Ronan, and Jason Weston. “A Unified Architecture for Natural Language Processing: Deep Neural Networks with Multitask Learning,” 160–67. ACM, 2008.

編輯於2017-07-13

252 條評論

分享

收藏感謝收起

Brad

Brad

30 人贊同了該回答

我覺得這是一篇很好的文章可以幫助理解word embedding:
Deep Learning, NLP, and Representations
http://colah.github.io/posts/2014-07-NLP-RNNs-Representations/
如果不愛看英文的話,中文版也有:
深度學習、自然語言處理和表徵方法

編輯於2016-01-30

302 條評論

分享

收藏感謝

劉通

劉通

歡迎學術溝通,做自然語言處理方面,郵箱[email protected]

2 人贊同了該回答

WordEmbedding是文字挖掘的內容。文字挖掘的根本任務是分析文字,當前對文字進行分析基本上就是在兩個層次:詞彙和文件。(也有一些體系分為:詞彙、句子和文件,其實句子也屬於文件,俗稱“短文字”)。

因此,只要將詞彙和文件進行數值化處理,就可以進行大部分的語言分析任務了。傳統的思路有兩種:

思路1: 直接對文件進行數值化處理,分析時需要用到詞彙時,把詞彙視為特殊的文件

思路2:先對詞彙進行數值化處理,然後再將文件的分析問題轉化為對詞彙集合的分析問題

WordEmbedding主要指基於思路2的技術實現,即WordEmbedding主要用於對詞彙進行數值化處理。每個詞對應一個數,就可以進行文字比較分析了。當然,為了豐富一下詞彙的含義,可以把每個詞對應成一個向量。

轉載於:https://my.oschina.net/airship/blog/1516531