NLP-Word2Vec(1)

蔡明樺
NLP自然語言處理
9 min readNov 2, 2020

(一)Introduction 前言

不知道大家有沒有想過,有一種方法可以找出每個單詞的向量,並透過每個單詞的向量找出與其他單詞的相似度,如下圖

Word Vector & Similarity

可以發現KingWoman的相似距離相較於QueenWoman更加接近。

不僅如此,還可以透過簡易的運算將單詞做轉換,例如

此次,我們要介紹的方法是由Tomas Mikolov et al.於2013年提出的Distributed Representations of Words and Phrases and their Compositionality,在NLP界中堪稱經典的Word2Vec,近幾年被廣泛的使用,如文本分析、前感分析、問題解答、概念連結等等。

(二)Word Embedding 詞向量

在詳述Word2Vec的方法前,我們必須先瞭解何謂詞向量,即所謂的Word Embedding。

為何需要將單詞轉成向量?

文字是一種高層次的抽象知識本體,每個物種都有自己的語言,如何在機器語言與人類語言中搭建一個彼此可以理解的橋樑,一直是NLP中最大的挑戰,而Word Embedding的出現無疑是最大的救星。

Word Embedding將單詞映射於矩陣空間,使得機器可以透過轉換後的矩陣,對單詞進行分析及運算,詞向量的表達方式有下列幾種。

1.One-hot encoding

單詞依照10組合而成,1於每個單詞中只允許出現一次,是故n個單詞會有n個維度。

空間維度高且離散,電腦需要較大的運算成本,且每個單詞的距離相同

2.Co-Occurrence

舉例來說,我們給定兩個句子

Sentence 1: “all that glitters is not gold”

Sentence 2: “all is well that ends well”

要建立Co-Occurrence前,必須先設定滑動窗口的大小,並依序掃描

sliding windows scan on context

將出現在同窗口的單詞視為鄰近單詞,紀錄出現次數,例如上圖STARTall於上下句中,同窗口出現兩次,故於下表中記為2,其餘以此類推。

Co-Occurrence table

單詞之間有關連,空間維度高且離散,運算成本高

3.Distributed Representations

Distributed Representations

期望用較低的空間維度來表達單詞,並且相似的詞能保有「關聯性」

概述完上述三種Word Embedding的方法後,我們瞭解到要產生Distributed Representations有多種方法,Word2Vec為其一。

(三)Word2Vec

Word2Vec架構分為兩種

兩個架構最大的差別在於,CBOW使用目標詞的上下文作為輸入,輸出目標詞,反之則為Skip-gram。

我們讓Word2Vec做多道填空題, 幫助模型瞭解單詞的涵義,在解題的過程中產生詞向量,產生的詞向量可以視為解題的副產物

整個Word2Vec的架構分為輸入層、映射層、隱藏層及輸出層

Word2Vec architecture

Input Layer:

一般而言我們會將訓練的文本資料經過one-hot encoding處理,所以輸入(出)層的輸入維度會等同於單詞數量,用於模型輸入。

Hidden Layer:

主要目的是為了學習詞向量,如果隱藏層有100個維度,可以想像成利用這100個維度去學習詞向量。

Projection Layer:

Projection Layer是一個由單詞數量 * 特徵數量(隱藏層維度)所構成的矩陣,可以想像成該矩陣每一列都代表著一個單詞的對應向量,由每一個詞向量堆疊而成。在訓練的意涵上,其作用是將上下文的連續單詞,映射至一個連續空間。

Output Layer:

Projection Layer經過激發函數(activation function)softmax處理,把詞向量轉換成 0~1 之間的數值,可以想像成模型在訓練過程(解填空題)的過程中,會試著去預測,並給予每個單詞一個機率,所有單詞機率加起來總合為1,機率最大的單詞為該次訓練(填空題)的輸出(答案)。

下面我們會將Word2Vec訓練的過程分步驟講解。

Step 1.

給定訓練文本,為了方便解釋,我們簡化輸入的文本

Input document : Pig drink water. Men drink water.

經過停用詞的處理後,轉換成One-hot encoding,作為模型的輸入。

One-hot encoding as input

Step 2.

我們來看輸入層與隱藏層之間的運算方式,假設我們輸入pig,其對應的矩陣為[1, 0, 0, 0 ,0],將其與Projection Matix做矩陣乘法的運算。

矩陣運算的過程中,由於輸入矩陣皆為one-hot encoding,於是產生如同查表的特性。

Matrix Operations

是故每個單詞所對應的空間向量,由此而生。

至於Projection Matrix怎麼產生的,就在下一個步驟。

Step 3.

上個步驟中,我們提到模型最終會為每一個單詞輸出一個機率,舉例來說

Input document : Pig drink water. Men drink water.

今天出一道填空題給模型,輸入drink這個單詞,在文本中,waterdrink後面,故我們希望模型可以輸出water。

model predict

上圖中,predict probability可以視為當模型輸入drink時,每個單詞的機率,以eat(0.67)為最高,這與我們的期望輸出不符合,我們希望water的預測機率是最高的,故我們需要計算與期望輸出的差距,最小化該差距。

calculate loss

有了與期望輸出的差距(loss)後,透過倒傳遞(back propagation)的方式更新模型權重,直到loss最小化,即完成模型的訓練,最後從已經訓練完畢的模型中得到Projection Matrix。

  • 上述提到的倒傳遞(back propagation)、損失(loss)、激發函數(activation function),包含但不僅限於目標函數(objective function)、損失函數(loss function)等等,我們會另外開一篇專門講解。

(四)Conclusion

最後,我們總結一下Word2Vec的優缺點

advantage:

  1. 降維
  2. 單詞間保有關聯性
  3. 非監督式學習,減少前處理的成本
  4. 訓練快速且消耗空間小
  5. 應用廣泛,不僅限於文本

disadvantage:

  1. 詞彙量太大,softmax不好訓練,即便後來提出的負採樣(Negative sampling)與hierarchical softmax,仍有其限制
  2. 滑動窗口的限制,無法完整瞭解整篇文章的主旨
  3. 詞與向量為1對1的關係,無法表達一詞多義

最後聊一聊我個人的想法,當時能提出這樣架構,於現今來說仍然是富有創意且極不容易的,作者挑脫傳統的思維框架,將我們想要的結果,隱藏在模型的解題的過程中。個人認為所有NLP的問題,都可以用此方法做一個快速的初探,對資料分佈有一定的理解後,方便進一步分析與應用,在這裡補充一下Word2Vec兩個框架的用途,在efficient estimation of word representations in vector space中提到CBOW適合用於syntactic task,而Skip-gramsyntactic task有較優的表現,大家可以針對自己的問題選擇適合的框架使用。

Reference:

  1. https://arxiv.org/pdf/1301.3781.pdf(Efficient Estimation of Word Representations in Vector Space)
  2. https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf
  3. https://zh.wikipedia.org/wiki/Word2vec
  4. https://www.slideshare.net/ywchen88/word2vec-70245972
  5. https://www.quora.com/What-are-the-advantages-and-disadvantages-of-Word2vec-and-GloVe

****************************************************************** 謝謝大家花費寶貴的時間閱讀這篇文章,裡面包含了一些個人理解,如果有任何問題或內容有誤,請務必留言或寄信給我,再次感謝大家~~~

信箱: caps9129@gmail.com

--

--