Word Embedding 編碼矩陣

技術與方法

Moris
NLP & Speech Recognition Note
10 min readJun 14, 2019

--

Bag of Words (BoW)

BoW 是一種將句子拆解成每個詞出現次數的方法,例如我將以下兩個句子拆解

I like apple.
{"I": 1, "like": 1, "apple": 1}
I like mango.
{"I": 1, "like": 1, "mango": 1}

這方法乍看之下分析出了句子的組成,但是卻忽略掉了很重要的次序關係,會使得以下兩句的結果完全相同

I like apple, but I don't like mango.
I like mango, but I don't like apple.

bag of words而言,有如下缺點:1.沒有考慮到單詞的順序,2.忽略了單詞的語義資訊。因此這種方法對於短文字效果很差,對於長文字效果一般,通常在科研中用來做baseline

Word Vector

使用一個向量來表示每一個詞(vector representation),如此一來,就能把一段由許多詞組成的文句,轉換成一個個詞向量來表示,並把這樣數值化的資料,送到模型裡做後續的應用。

一組好的詞向量,會使意思相似的詞在向量空間上比較靠近彼此,甚至詞義上的關聯可以用詞向量在空間中的關係來表示,如下圖所示

取自tensorflow官網

Word Embedding

Word Embedding的概念。如果將word看作文本的最小單元,可以將Word Embedding理解為一種映射,其過程是:將文本空間中的某個word,通過一定的方法,映射或者說嵌入(embedding)到另一個數值向量空間(之所以稱之為embedding,是因為這種表示方法往往伴隨著一種降維的意思

Word Embedding的輸入

Word Embedding的輸入是將原始文本中的一組不重疊的詞彙,將這些詞彙放置到一個dictionary裡,這個dictionary就可以看作是Word Embedding的一個輸入
假設有句子:apple on a apple tree => [“apple”, “on”, “a”, “tree”]

Word Embedding的輸出

Word Embedding的輸出就是每個word的向量表示。對於上文中的原始輸入,每個word都對應了一種數值表示。例如,apple對應的vector就是[1, 0, 0, 0],a對應的vector就是[0, 0, 1, 0],各種機器學習應用可以基於這種word的數值表示來構建各自的模型。

Frequency based embedding

基於頻率的Word Embedding又可細分為如下幾種:

  • Count Vector
  • TF-IDF Vector

Count Vector

假設有一個語料庫C,其中有D個文檔:{d1, d2, …, dD},C中一共有N個word。這N個word構成了原始輸入的dictionary,我們據此可以生成一個矩陣M,其規模是D X N

該矩陣便是一個counter vector matrix。每個文檔用詞向量的組合來表示,每個詞的權重用其出現的次數來表示。
當然,如果語料庫十分龐大,那麼dictionary的規模亦會十分龐大,因此上述矩陣必然是稀疏的,會給後續運算帶來很大的麻煩。通常的做法是選取出現次數最頻繁的那些詞來構建dictionary(例如,top 10,000個詞),這樣會有效縮減上述矩陣的規模

TF-IDF Vector

對於一個word,如果在特定文檔裡出現的頻率高,而在整個語料庫裡出現的頻率低,那麼這個word對於該文檔的重要性就比較高。

因此我們可以引入逆文檔頻率IDF(Inverse Document Frequency)的概念:IDF=log(N/n)。其中,N代表語料庫中文檔的總數,n代表某個word在幾個文檔中出現過;當一個word出現地越頻繁,那麼IDF就越小。

顯然,IDF用於懲罰那些常用詞彙,而TF用於獎勵那些在特定文檔中出現頻繁的詞彙。二者的乘積TF X IDF用來表示詞彙的權重

  • tf (term frequency ):詞頻,計算該詞語在文章所出現的次數
  • idf ( inverse document frequency ):逆文檔頻率,衡量該字詞的重要性

字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。也就是說,當 tf 值很高,而 df 值很低,這時得到的權重值就能夠把常見的關鍵字濾掉。詳細數學原理可參考維基百科

Predicted Based Embedding

基於預測的Word Embedding又可細分為如下幾種:

  • Word2vec
  • Doc2Vec
  • GloVe

1. Word2vec:

由Google的Tomas Mikolov研究團隊所創造。

相關圖片

word2vec 提出了兩種訓練詞向量的方法,分別稱作 CBOW 和 Skipgram。

CBOW 模型輸入前後詞(contex word)詞向量,要預測出可能的目標詞(target word), 將每個單詞的上下文作為輸入,並嘗試預測與上下文對應的單詞。考慮我們的例子: Have a great day.

Skipgram 模型則是輸入目標詞詞向量,預測出可能的前後詞。

這裡說的預測是透過下圖所示的方法:輸入詞先透過查表(lookup)得到詞向量,接著通過一個矩陣(也可解釋為通過一層類神經網路),預測共現(co-occur)的詞的機率。

2. Doc2Vec :

是一種非監督式演算法,可以獲得 sentences/paragraphs/documents 的向量表達,是 word2vec 的拓展。學出來的向量可以通過計算距離來找 sentences/paragraphs/documents 之間的相似性,可以用於文字聚類,對於有標籤的資料,還可以用監督學習的方法進行文字分類,例如經典的情感分析問題。

Doc2vec相對於word2vec不同之處在於,在輸入層,增添了一個新的文檔向量Paragraph vector,Paragraph vector可以被看作是另一個詞向量

Doc2vec也有兩種訓練方式,一種是PV-DM(Distributed Memory Model of paragraph vectors)類似於word2vec中的CBOW模型,如圖一:

另一種是PV-DBOW(Distributed Bag of Words of paragraph vector類似於Word2vec中的skip-gram模型,如圖二:

3. GloVe:

GloVe的全稱叫Global Vectors for Word Representation,它是一個基於全局詞頻統計(count-based & overall statistics)的詞表徵(word representation)工具,它可以把一個單詞表達成一個由實數組成的向量,這些向量捕捉到了單詞之間一些語義特性,比如相似性(similarity)、類比性(analogy)等。我們通過對向量的運算,比如歐幾里得距離或者cosine相似度,可以計算出兩個單詞之間的語義相似性。

由史丹佛(Stanford)研究團隊所創造。

GloVe綜合了LSA、CBOW的優點,訓練更快、對於大規模語料算法的擴展性也很好、在小語料或者小向量上性能表現也很好。

Word Embedding的應用

現今流行的Word Embedding算法攜帶了語義信息且維度經過壓縮便於運算,因此有了很多用武之地,例如:

  • 計算相似度,比如man和woman的相似度比man和apple的相似度高
  • 在一組單詞中找出與眾不同的一個,例如在如下詞彙列表中:[dog, cat, chicken, boy],利用詞向量可以識別出boy和其他三個詞不是一類。
  • 直接進行詞的運算,例如經典的:woman+king-man =queen
  • 由於攜帶了語義信息,還可以計算一段文字出現的可能性,也就是說,這段文字是否通順。

Word Embedding實作

以下將針對

  • word2Vec : 找出相似的word
  • Doc2Vec : 找出相似的文檔
  • TF-IDF Vector
  • Glove

分別用Gemsim以及jieba斷詞套件進行實作,分別以英文及中文作為範例

gensim是一個python的自然語言處理庫,能夠將文檔根據TF-IDF, LDA, LSI 等模型轉化成向量模式,以便進行進一步的處理。此外,gensim還實現了word2vec功能,能夠將單詞轉化為詞向量

gensim配置

pip install — upgrade gensim

NLTK配置

pip install nltk
# 安裝 NLTK 相關套件會出現以下介面
nltk.download()

安裝 all-corpora 以及 popular package

word2Vec & Doc2Vec

參考來源:

gensim使用方法以及例子

Word Embedding的发展和原理简介

NLTK 初學指南(一):簡單易上手的自然語言工具箱-探索篇

NLTK-初學指南-二-由外而內-從語料庫到字詞拆解-上手篇

Python 過濾字母和數字

以 gensim 訓練中文詞向量

用gensim doc2vec計算文本相似度

gensim-doc2vec实战

gensim訓練word2vec和doc2vec

models.deprecated.doc2vec — Deep learning with paragraph2vec

--

--

Moris
NLP & Speech Recognition Note

An AI engineer who loves deep learning technology and is willing to share resources and learn new technologies