---
title: 'NLP技術之文字表示法 - 2 (Word2Vec)'
tags: NLP
---
NLP技術之文字表示法 - 2 (Word2Vec)
===
## Table of Contents
[TOC]
## 學習目標
* ==BOW== 的限制
* 第二種 文字表示方法:==Word2Vec==
* 具有`AI`、`機器學習`風味
---
==BOW的先天限制==
---
:::info
* BOW的設計目的:
* 為了做Information Retrieval,尋找哪些文章比較適合或跟我們輸入的input比較相像。
* 尋找可能的candidate
:::
1. 沒有考慮單字間的語意關聯
* 不是為了模擬語言知識而設計
2. 稀疏(sparsity)
* 高維度
* 每個維度,即是一個/一組字`(N-gram)`
* ==字詞的順序並不重要==
* Ex: 上萬個文件中,每一個文件僅選取100個代表字,Vector的維度會極高。可是,高維度裡,每一個文件卻只有100個字是有數值的。
3. 高維度的詛咒(Curse of dimentionality)
* 當維度增加時,點(文件)與點(文件)的距離相對地變得越來越無意義。
* 假設每一個文件都有100個key word,可是文件key word之間幾乎沒有太大的重疊。這時候,就算增加再多的維度,每一個文件之間算出來也不會太相像。
* 結論:
* ==高維度 -> 稀疏 -> 文件與文件的距離變得無意義==
Word2Vec
---
* 2013年,Google研發[`Word2Vec`方法](https://arxiv.org/pdf/1310.4546.pdf)
* 基本概念:
* ==Word Context== 文字(中間的)上下文
* 舉例:
* Intuition: 上下文代表語義
* Hypothesis: 用更簡單的模型以及更大的資料量來訓練,會得到更好的文字表示法。
* 透過上下文,找到`king` `man` `woman`的向量
* ==利用向量的組合,來表示字詞之間的關聯。==

```gherkin=
#3個與醫生有關的句子
1. "A medical" doctor "is a person who uses medicine to treat illness and injuries."
2. "Some medical" doctors "only work on certain diseases or injuries."
3. "Medical" doctors "examine, diagnose and treat patients."
|---> 上下文可以代表doctor(s) <---|
```
Word2Vec概念
---
* Two models:
* Continuous Bag-of-Words Model
* Continuous skip-gram model
* 利用類神經網路來學習字的權重(the weights of the word vectors)
* `想知道`字和字之間,其背後的關係。
* `不想知道`字的分類屬於哪一種。
* 聯想到`草船借箭`的故事
* ==諸葛亮(我)需要`箭`(字的權重),不需要`打仗`(分類)==
* 敵軍(機器學習的演算法)誤以為要`打仗`(分類)

---
Continuous Bag-of-Words Model
---

1. ==利用上下文== 來 ==預測目標字`eating`==
2. 透過視窗偏移,讓類神經網路學習的樣本數擴大
* Ex: (上下文的)視窗大小為 2 -> 目標字的`前兩個字`和`後兩個字`為輸入,讓類神經網路學習。
* 輸入:`I am` `good pizza` --> 預測:`eating`

* 接下來,視窗偏移
輸入:`am eating` `pizza now` --> 預測:`good`
* 接下來,視窗偏移
輸入:`eating good` `now` --> 預測:`pizza`
### One Hot Encoding (獨熱編碼)

* 一種 ==轉換==`分類數值(categorical variables)` 的方法
* 目的:
* 讓機器不會誤解維度間要比較大小。
* 假設有四種分類 1, 2, 3, 4
* Integer/label encoding: 1, 2, 3, 4
* 容易讓演算法誤解: 4 > 2
* One hot encoding: 0001, 0010, 0100, 1000
* Binary code
* 每一個維度只有在該分類存在時才會是 1
* 演算法會知道 ==維度間,不用比較大小==
* 優點:
* ==Word2Vec==可以幫助我們==將`向量`壓縮成一個`hidden layer`==!
* 當我們有1000個維度時,不需要用1000個維度的layer來表示。
* 將`6個`維度的值,壓縮成`3個`維度。

* 類神經網路訓練完成後,將得到`hidden layer`(向量)
* `I` 向量 => `[0.2, 0.13, 0.23]`
* 缺點:
* 無法處理罕見字
* 因為類神經網路是依靠樣本來學習的,故樣本數的大小將影響訓練的好壞。
* 如何解決?
* 使用 ==The skip gram algorithm==

---
Continuous skip-gram model
---
* ==預測上下文==,而非`目標字`
* ==利用目標字== 來 ==預測上下文==

* 優點:
* 可以處理罕見字(因為上下文通常常見)
* 語意的相似性可以分析出來
* `intelligent`和`smart`可能有非常相似的上下文
---

* 上下文很接近,所以會集中在一起。
---
* ##### tags: `NLP技術之文字表示法 - 2 (Word2Vec)`
* [一周論文 | Word2Vec 作者Tomas Mikolov 的三篇代表作](https://kknews.cc/zh-tw/news/69j4am.html)