本文還是一篇不講具體原理細節的博客,只寫一些3者之間的區別優劣問題,建議先搞懂原理再看,有疑問或者有新的見解,歡迎留言提出。
1. 從one-hot開始
優點:一是解決了分類器不好處理離散數據的問題,二是在一定程度上也起到了擴充特徵的作用。
缺點:在文本特徵表示上有些缺點就非常突出了。首先,它是一個詞袋模型,不考慮詞與詞之間的順序(文本中詞的順序信息也是很重要的);其次,它假設詞與詞相互獨立(在大多數情況下,詞與詞是相互影響的);最後,它得到的特徵是離散稀疏的。
既然有了問題,那就需要解決,怎樣能把詞向量的維度變小呢?主流的辦法就是通過訓練,將每個詞都映射到一個較短的詞向量上來。所有的這些詞向量就構成了向量空間,最後還發現了一些有趣的性質,比如向量的夾角餘弦能夠在某種程度上表示字、詞的相似度。這個過程稱爲word embedding。
2.爲什麼word2vec這些字詞向量會有一些性質?
這是因爲,我們在用語言模型無監督訓練時,是開了窗口的,通過前n個字預測下一個字的概率,這個n就是窗口的大小,同一個窗口內的詞語,會有相似的更新,這些更新會累積,而具有相似模式的詞語就會把這些相似更新累積到可觀的程度。
我舉個例子,“忐”、“忑”這兩個字,幾乎是連在一起用的,更新“忐”的同時,幾乎也會更新“忑”,因此它們的更新幾乎都是相同的,這樣“忐”、“忑”的字向量必然幾乎是一樣的。“相似的模式”指的是在特定的語言任務中,它們是可替換的,比如在一般的泛化語料中,“我喜歡你”中的“喜歡”,以及一般語境下的“喜歡”,替換爲“討厭”後還是一個成立的句子,因此“喜歡”與“討厭”必然具有相似的詞向量,但如果詞向量是通過情感分類任務訓練的,那麼“喜歡”與“討厭”就會有差異較大的詞向量。
3.爲什麼引入bert?
原因很簡單,因爲word2vec不夠完善,它只考慮了句子中詞與詞之間的關係,降低了詞空間,引入了詞與詞之間的向量關係。
BERT優於以前的方法,因爲它是第一個用於預訓練NLP的無監督、深度雙向的系統
預訓練的表示可以是上下文無關(context-free)的,也可以是上下文相關(contextual)的,並且上下文相關表示還可以是單向的或雙向的。上下文無關的模型,比如word2vec或GloVe,會爲詞彙表中的每個單詞生成單個“word embedding”表示,因此bank在bank deposit(銀行存款)和river bank(河岸)中具有相同的表示。上下文相關則會根據句子中的其他單詞生成每個單詞的表示。
4.最後一提
以上模型都是nlp中的
最後感謝@楊曦鈅的指點。