--- 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`的向量 * ==利用向量的組合,來表示字詞之間的關聯。== ![](https://i.imgur.com/d3Gzr1C.png) ```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) * `想知道`字和字之間,其背後的關係。 * `不想知道`字的分類屬於哪一種。 * 聯想到`草船借箭`的故事 * ==諸葛亮(我)需要`箭`(字的權重),不需要`打仗`(分類)== * 敵軍(機器學習的演算法)誤以為要`打仗`(分類) ![](https://i.imgur.com/gRMU72R.png =400x300) --- Continuous Bag-of-Words Model --- ![](https://i.imgur.com/wFgNmYM.png) 1. ==利用上下文== 來 ==預測目標字`eating`== 2. 透過視窗偏移,讓類神經網路學習的樣本數擴大 * Ex: (上下文的)視窗大小為 2 -> 目標字的`前兩個字`和`後兩個字`為輸入,讓類神經網路學習。 * 輸入:`I am` `good pizza` --> 預測:`eating` ![](https://i.imgur.com/sbkHHBt.png =300x150) * 接下來,視窗偏移 輸入:`am eating` `pizza now` --> 預測:`good` * 接下來,視窗偏移 輸入:`eating good` `now` --> 預測:`pizza` ### One Hot Encoding (獨熱編碼) ![](https://i.imgur.com/fCGBjyM.png =500x350) * 一種 ==轉換==`分類數值(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個`維度。 ![](https://i.imgur.com/znPKrhi.png =400x250) * 類神經網路訓練完成後,將得到`hidden layer`(向量) * `I` 向量 => `[0.2, 0.13, 0.23]` * 缺點: * 無法處理罕見字 * 因為類神經網路是依靠樣本來學習的,故樣本數的大小將影響訓練的好壞。 * 如何解決? * 使用 ==The skip gram algorithm== ![](https://i.imgur.com/Z0hAA2U.png) --- Continuous skip-gram model --- * ==預測上下文==,而非`目標字` * ==利用目標字== 來 ==預測上下文== ![](https://i.imgur.com/PXlcPFf.png) * 優點: * 可以處理罕見字(因為上下文通常常見) * 語意的相似性可以分析出來 * `intelligent`和`smart`可能有非常相似的上下文 --- ![](https://i.imgur.com/0EJRhIr.png) * 上下文很接近,所以會集中在一起。 --- * ##### tags: `NLP技術之文字表示法 - 2 (Word2Vec)` * [一周論文 | Word2Vec 作者Tomas Mikolov 的三篇代表作](https://kknews.cc/zh-tw/news/69j4am.html)