# Word Vector Representations: word2vec ###### tags: `StandfordCS224n` ## 如何讓電腦了解一個 word 的意義? ### 傳統方法 : 建立詞語庫 語言學家透過分類法則建立每個 word 之間的關聯資料庫,並建立 API 供 programmer 使用。 :::success WordNet 為其中最知名的英文詞語庫 [WordNet簡介](https://medium.com/pyladies-taiwan/nltk-%E5%88%9D%E5%AD%B8%E6%8C%87%E5%8D%97-%E4%B8%89-%E5%9F%BA%E6%96%BC-wordnet-%E7%9A%84%E8%AA%9E%E7%BE%A9%E9%97%9C%E4%BF%82%E8%A1%A8%E7%A4%BA%E6%B3%95-%E4%B8%8A%E4%B8%8B%E4%BD%8D%E8%A9%9E%E7%B5%90%E6%A7%8B%E7%AF%87-4874fb9b167a) ::: ### 詞語庫的問題 - 缺少細微的語意關係 - 缺少新創的單字 - 例如: ninja, selfie - 單詞的語意定義較主觀 - 需要大量人力建構 - 難以正確計算 word similarity - 兩個 word 的 one-hot encoding vector 彼此 *正交* > 考慮 *hotel* 跟 *motel* 這兩個 word > 假設其各自的 one-hot encoding vector 為 [0,1,0,0]、[0,0,1,0] > 因兩向量正交導致內積為 0 > cosine similarity 亦為 0 #### Distributional similarity based representations 為了改善詞語庫的問題,我們用另一種方式表達一個 word 的意義。 我們透過 **學習 word 的上下文之語意** 來推導出這個 word 的語意。例如要學習 *bank* 這個 word 的語意,則觀察 *bank* 在上萬個句子中所代表的語意,就能了解 *bank* 大多數表示 *銀行* 。 :::info 透過學習上下文的語意來判斷 word 的語意,即為 Skip-gram model 的核心精神 ::: ## 什麼是 Word2Vec :::success [Word2Vec 原始論文](https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf) ::: ### Word2Vec 的核心精神與演算法 Word2Vec 是個學習 word vector 的框架,其中有兩種模型分別為: 1. **Skip-gram(SG)** 給予 target word 並預測 context words 2. **Continuous Bag of Words (CBOW)** 透過 bag-of-words context 預測 target word Word2Vec 採用的兩種訓練方法: 1. **Hierarchical softmax** 2. **Negative sampling** 其中 **Skip-gram** 主要透過觀察文本中每個 center word 與其 context word 的語意關係,找出最適合 center word 的 vector representation。 ## Word2Vec : Skip-gram model ### 基本精神 在文本中,字詞與上下文之間大部分具有語意上的關係。因此一個字在文本中出現的機率,跟其上下文的單字出現的機率具有相關性。 例如 : > John is a *baseball* player 我們可以將上面的 *baseball* 替換成 *basketball* 或 *soccer* 等單字,因為這些單字的上下文都有一定程度的機率會出現 *player* 這個 word ,因此可以推斷 *baseball* 、 *basketball* 與 *soccer* 這三個 word 之間具有相似的語意。Skip-gram model 即利用此精神來求出 word vector。 ### 模型簡介 Skip-gram model 主要透過 center word 來計算 context word 出現的機率 ![](https://i.imgur.com/tPkDEyY.png) 以上圖為例,選定 *banking* 為 center word ($w_{t}$) , 並計算 *banking* 出現下,前後兩個 context word ($w_{t+j}$) 出現的機率 $P(w_{t+j}|w_t)$,因此我們的目標即為**最大化 $P(w_{t+j}|w_t)$**。 為此,我們會設計一個只有一層 hidden layer 的神經網路模型,並訓練此模型直到 loss function 收斂。然而我們最終不會使用這個模型,而是取出 input layer 與 hidden layer 之間的權重矩陣,這個矩陣中的 vector 即為 word vector ! ![](https://i.imgur.com/6MGVt7D.png) ### 數學推導 : Obejctive Function 對文本中每個位置 $t = 1,...,T$ ,預測 center word $w_j$ 與前後 $m$ 個 context word 同時出現的機率,可得 Likelihood $L(\theta)$ : $$ L(\theta) = \prod_{t=1}^{T} \ \prod_{-m \le j \le m \ ,\ j \ne 0} P(w_{t+j}|w_t\ ; \theta) $$ 而我們的目標為最大化 (maximize) $L(\theta)$。 然而 $L(\theta)$ 公式使用連續乘法可能導致 overflow 問題,因此將 objective function 改為 : $$ \begin{align*} J(\theta) = - \frac{1}{T} \log L(\theta) = - \frac{1}{T} \sum_{t=1}^{T} \sum_{-m \le j \le m \ , \ j \ne 0}\log P(w_{t+j} | w_{t} \ ; \theta) \end{align*} $$ 而因為取了負號,所以我們的目標為 **最小化 (minimize)** objetive function $J(\theta)$ 其中 $P(w_{t+j}|w_t;\theta)$透過以下公式計算: $$ P(o|c)=\frac{exp(u_o^Tv_c)}{\sum_{w\in V}exp(u^t_wv_c)} \\ v_w\ : vector\ of\ center\ word\ w \\ u_w\ : vector\ of\ context\ word\ w $$ :::info $P(o|c)$ 即透過softmax function計算機率! ::: ### Skip-gram model 的缺陷 觀察 $P(o|c)$ 的公式可以發現,其運算複雜度正比於 corpus 大小 $V$,而通常 corpus size介於 10^5^ 到 10^7^,因此訓練一個 Skip-graml model 所需的運算時間十分可觀。 ### Skip-gram model的改進 : Negative Sampling 原先在 training Skip-gram model時,我們透過將softmax layer 輸出的 vector 與 one-hot vector 進行 loss 運算,並將output vector中相對應的欄位數值修改為0或1。 ###### Reference [Word2Vec Tutorial - The Skip-Gram Model](http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/) [Standford CS224n 2019 winter:Lecture1](http://web.stanford.edu/class/cs224n/slides/cs224n-2019-lecture01-wordvecs1.pdf)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up