---
title: NLP_paper - Distributed representations of words and phrases and their compositionality
tags: self-learning, NLP
---
{%hackmd BkVfcTxlQ %}
# **_NLP_paper - Distributed representations of words and phrases and their compositionality_**
## NLP_paper - 單詞和短語的分佈式表示及其組成
> [name=BessyHuang] [time=Sat, Apr 4, 2020]
# **課程大綱**
[TOC]
:::warning
**_Reference:_**
* [詞向量的兩個經典論文的解讀](https://zhuanlan.zhihu.com/p/73949100)
* [詞向量(Word Vector)](https://tsupei.github.io/cs/nlp/2020/02/11/WordVector.html)
* [NLP 自然語言處理 – Word Embedding/Vector 詞嵌入/詞向量](https://allenlu2007.wordpress.com/2018/05/07/nlp-%E8%87%AA%E7%84%B6%E8%AA%9E%E8%A8%80%E8%99%95%E7%90%86-word-embedding-vector-%E8%A9%9E%E5%B5%8C%E5%85%A5-%E8%A9%9E%E5%90%91%E9%87%8F/)
* [深度學習和自然語言處理:詮釋詞向量的魅力](https://kknews.cc/zh-tw/education/l8keqx9.html)
* 翻譯
* [Distributed Representations of Words and Phrases and their Compositionality](https://blog.csdn.net/u010555997/article/details/76598666)
* [《Distributed Representations of Words and Phrases and their Compositionality》](https://www.jianshu.com/p/ac1b42374ede)
* [FB_paper intro](https://m.facebook.com/story.php?story_fbid=119005619699585&id=101557031444444)
:::
---
## **摘要**
* 本文提出幾種提高向量品質和訓練速度的`優化方法`。
* 為了提高速度
1. Negative Sample(負採樣)
2. Hierarchical Softmax
* Word representations 的固有限制
* 不關心詞序,且無法表示 idiomatic phrases(習慣用語)
* 如:無法簡單地將 "Canada/加拿大" 和 "Air/空中" 的含義,組合起來得到 "Canada Air/加拿大航空公司" 的含義
> ==故提出一種在文本中查找短語的簡單方法,並表明學習數百萬個 phrases 的 good vector representations 是可能的。==
>
---
## **前言**
* 計算詞向量的始祖
* Paper:`Efficient Estimation of Word Representations in Vector Space`
* Word2Vec 模型
* 2013年,由 Tomas Mikolov 等人提出。(Google)
* Word2vec 的兩種訓練模式

* Skip-gram (Continuous Skip-gram Model)
* 給定輸入字詞後,來預測上下文
* 相當於給你一個詞,讓你猜前面和後面可能出現什麼詞。
* CBOW (Continuous Bag-of-Words Model)
* 給定上下文,來預測輸出的字詞
* 相當於一句話中扣掉一個詞,讓你猜這個詞是什麼。
* 透過學習大量文本資料,將字詞用`數學向量`來代表其語意。並將字詞嵌入到一個空間後,讓`語意相似的單字`可以有`較近的距離`。
> 相似的字會具有相似的向量,故向量空間中類似的概念會聚集。
>
> 具有詞間推理(Analogical Inference)的關係。
> 如:France - Paris + Japan = Tokyo
>
* 作者提出:高品質的詞向量成為未來NLP應用的基礎【這一點成真了,這也是為何我們要經常回顧這篇論文】
---
## **Skip-gram 模型**
從一個字詞,
到產生這個字詞的詞向量(Word Vector),
再到預測其他可能會在那個字詞附近出現的詞彙的機率。
:::success
* 輸入(字詞):wine
* "wine" 這個字的「附近」?在訓練模型時定義一個範圍 "window size"
* 如:"wine" 的前後 5 個字都算是它的附近
* 如何從文本中產生訓練樣本?
* 統計輸入字詞前後 2 個 window size 的字詞。

* 預測輸入(字詞)附近之輸出(字詞)的出現機率
* 如:比起 (wine, NLP),可能會有較多 (wine, grape) 或 (wine, Bordeaux) 這樣的詞組。
* 機率高:"grape", "Bordeaux"
* 機率低:"NLP", "AI"
:::
* 將字詞用向量來表示
* 因為我們沒辦法直接把文字輸入機器讓他做辨識,必須要將他轉成向量的方式,機器才有辦法做數學的運算。
* 詞向量(word vector)
* 將詞彙轉換成能夠被機器理解的向量,且這個向量能有效反應出詞義。
* 近義詞之間有著相近的詞向量。如:紅茶、奶茶、綠茶都是飲料類,具備類似的詞向量。
* 常見方式:建立一個詞彙表後,然後用 one-hot 編碼。
> 假設從訓練文檔中抽取出 5 個不重複的單詞,組成詞彙表,那每一個詞彙就會是一個用 0 和 1 兩個數字表示的 5 維的向量。
> 
> Ex: "Queen" 在詞彙表中出現的位置是在第 2 個位置,用 one-hot 向量編碼表示,是一個第二個維度為 1,其他維度為 0 的一個 1 x 5 的向量。
>
### 特性/現象
* 具備類比(analogy)性質
* 若兩個單詞的前後文相近,兩單詞的詞向量就會相近。(出現很多詞都一樣,相同詞的出現頻率類似)
* 推斷:因為兩個單詞的鄰居詞分佈類似 => 兩個詞義相近
* 鄰居詞的分佈,間接反映了單詞粗略的語義
* 詞向量濃縮了鄰居詞的分佈(降維表示)


---
## **解決什麼問題?提高訓練模型的效率**
### Hierarchical softmax
* Use a binary Huffman tree
* 目的:賦予高頻詞彙更短的編碼,這樣一來,訓練過程就變快了。

### Negative Sampling (負採樣)
* 透過 negative sampling 隨機取樣的方式,希望把他們的權重降低一點,希望可以降低錯誤信號的影響。
* 好處
* 降低運算的負擔:讓每個訓練模型可以只更新一小部分的權重,而非整個神經網路的權重都被更新。
* 提高詞向量的訓練品質、訓練速度
> Ex: 若輸入字詞是 brown,window size 設為 2 時,(brown, dog) 會被視為 negative sample,那 model 學到的就會是「brown 這個字的周遭不該出現 dog」這樣的信號。
> 輸入字詞為 brown 時,會產生的樣本為 (brown, the), (brown, quick), (brown, fox), (brown, jumps)。換句話說,(brown, dog) 會被當作是 negative sample。
> 
### Subsampling of Frequent Words
* 對高頻單詞進行抽樣(subsampling),來減少`the ...`的訓練樣本數目
* 減少高頻單詞出現的頻率,可以讓整個模型學得更好、更均衡。
* 把太高頻的`停用字(stopwords)`丟掉,透過這樣的步驟可以提升速度,並且增加罕見字(rare word)的準確率。
---
## **本篇價值**
* distributed vector representations可以捕獲大量精確的句法和語義關係。
* 為接下來許多以詞向量為基礎的模型定下根基,以往使用神經網路(Neural Network)訓練詞向量耗時長,這篇論文提出了一些方法進行改善,不僅提升效能也大幅降低訓練成本。