詞向量與Embedding之間的關係?

2021-10-03 17:22:01 字數 2888 閱讀 4293

詞向量,英文名叫word embedding,按照字面意思,應該是詞嵌入。說到詞向量,不少讀者應該會立馬想到google出品的word2vec,大牌效應就是不一樣。另外,用keras之類的框架還有乙個embedding層,也說是將詞id對映為向量。由於先入為主的意識,大家可能就會將詞向量跟word2vec等同起來,而反過來問「embedding是哪種詞向量?」這類問題,尤其是對於初學者來說,應該是很混淆的。事實上,哪怕對於老手,也不一定能夠很好地說清楚。

這一切,還得從one hot說起…

1. one-hot:

one hot,中文可以翻譯為「獨熱」,是最原始的用來表示字、詞的方式。為了簡單,本文以字為例,詞也是類似的。假如詞表中有「科、學、空、間、不、錯」六個字,one hot就是給這六個字分別用乙個0-1編碼:

那麼,如果表示「科學」這個詞,那麼就可以用矩陣

大家可能感覺到問題了,有多少個字,就得有多少維向量,假如有1萬字,那麼每個字向量就是1萬維(常用的字可能不多,幾千個左右,但是按照詞的概念來看,常用的詞可能就有十幾萬了)。於是就出來了連續向量表示,比如用100維的實數向量來表示乙個字,這樣就大大降低了維度,降低了過擬合的風險,等等。初學者是這樣說的,不少專家也是這樣說的。

然而事實是:放屁!放屁!放屁!重要的事情說三遍。

給大家出道題大家給明白了:給兩個任意實數型的100階矩陣讓你算它們的乘積,可能沒幾個人能夠算出來;可是,給你兩個1000階的矩陣,但其中乙個是one hot型(每一行只有乙個元素為1,其它都是0)的矩陣,讓你相乘,你很快就能算出來了,不信你就試試。

看出問題來了吧?one hot矩陣是龐大,但是人家好算,你那個什麼鬼實數矩陣,雖然維度小,但是算起來還麻煩呢(雖然這點計算量對於計算機來說算不了什麼)!當然,更深刻的原因還在下面。

2.embedding

我們真的去算一次

左邊的形式表明,這是乙個以2x6的one hot矩陣的為輸入、中間層節點數為3的全連線神經網路層,但你看右邊,不就相當於在wij這個矩陣中,取出第1、2行,這不是跟所謂的字向量的查表(從表中找出對應字的向量)是一樣的嗎?事實上,正是如此!這就是所謂的embedding層,embedding層就是以one hot為輸入、中間層節點為字向量維數的全連線層!而這個全連線層的引數,就是乙個「字向量表」!從這個層面來看,字向量沒有做任何事情!它就是one hot,別再嘲笑one hot的問題了,字向量就是one hot的全連線層的引數!

那麼,字向量、詞向量這些,真的沒有任何創新了嗎?有的,從運算上來看,基本上就是通過研究發現,one hot型的矩陣相乘,就像是相當於查表,於是它直接用查表作為操作,而不寫成矩陣再運算,這大大降低了運算量。再次強調,降低了運算量不是因為詞向量的出現,而是因為把one hot型的矩陣運算簡化為了查表操作。這是運算層面的。思想層面的,就是它得到了這個全連線層的引數之後,直接用這個全連線層的引數作為特徵,或者說,用這個全連線層的引數作為字、詞的表示,從而得到了字、詞向量,最後還發現了一些有趣的性質,比如向量的夾角余弦能夠在某種程度上表示字、詞的相似度。

對了,有人詬病,word2vec只是乙個三層的模型,算不上「深度」學習,事實上,算上one hot的全連線層,就有4層了,也基本說得上深度了。

從何而來 #

等等,如果把字向量當做全連線層的引數(這位讀者,我得糾正,不是「當做」,它本來就是),那麼這個引數你還沒告訴我怎麼得到呢!答案是:我也不知道怎麼得來呀。神經網路的引數不是取決你的任務嗎?你的任務應該問你自己呀,怎麼問我來了?你說word2vec是無監督的?那我再來澄清一下。

嚴格來講,神經網路都是有監督的,而word2vec之類的模型,準確來說應該是「自監督」的,它事實上訓練了乙個語言模型,通過語言模型來獲取詞向量。所謂語言模型,就是通過前n個字**下乙個字的概率,就是乙個多分類器而已,我們輸入one hot,然後連線乙個全連線層,然後再連線若干個層,最後接乙個softmax分類器,就可以得到語言模型了,然後將大批量文字輸入訓練就行了,最後得到第乙個全連線層的引數,就是字、詞向量表,當然,word2vec還做了大量的簡化,但是那都是在語言模型本身做的簡化,它的第一層還是全連線層,全連線層的引數就是字、詞向量表。

這樣看,問題就比較簡單了,我也沒必要一定要用語言模型來訓練向量吧?對呀,你可以用其他任務,比如文字情感分類任務來有監督訓練。因為都已經說了,就是乙個全連線層而已,後面接什麼,當然自己決定。當然,由於標籤資料一般不會很多,因此這樣容易過擬合,因此一般先用大規模語料無監督訓練字、詞向量,降低過擬合風險。注意,降低過擬合風險的原因是可以使用無標籤語料預訓練詞向量出來(無標籤語料可以很大,語料足夠大就不會有過擬合風險),跟詞向量無關,詞向量就是一層待訓練引數,有什麼本事降低過擬合風險?

最後,解釋一下為什麼這些字詞向量會有一些性質,比如向量的夾角余弦、向量的歐氏距離都能在一定程度上反應字詞之間的相似性?這是因為,我們在用語言模型無監督訓練時,是開了視窗的,通過前n個字**下乙個字的概率,這個n就是視窗的大小,同乙個視窗內的詞語,會有相似的更新,這些更新會累積,而具有相似模式的詞語就會把這些相似更新累積到可觀的程度。我舉個例子,「忐」、「忑」這兩個字,幾乎是連在一起用的,更新「忐」的同時,幾乎也會更新「忑」,因此它們的更新幾乎都是相同的,這樣「忐」、「忑」的字向量必然幾乎是一樣的。「相似的模式」指的是在特定的語言任務中,它們是可替換的,比如在一般的泛化語料中,「我喜歡你」中的「喜歡」,以及一般語境下的「喜歡」,替換為「討厭」後還是乙個成立的句子,因此「喜歡」與「討厭」必然具有相似的詞向量,但如果詞向量是通過情感分類任務訓練的,那麼「喜歡」與「討厭」就會有差異較大的詞向量。

詞向量與句向量概述

比較常見的詞向量表示方式 glove fasttext wordrank tfidf bow word2vec 詞向量一般看作是文件特徵,不同詞向量有不同用法,主要有四類詞向量 1.hash演算法及衍生 2.bow演算法延伸 3.word2vec延伸 4.lda主題延伸 乙個詞一列向量 hash演算...

學習筆記 詞向量與詞嵌入

詞 向量 叫做 詞向量化 文字向量化 vectorize 是指將文字轉換為數值張量的過程 多種實現方法 將文字分割為單詞,並將每個單詞轉換為乙個向量。將文字分割為字元,並將每個字元轉換為乙個向量。提取單詞或字元的 n gram n元 並將每個 n gram 轉換為乙個向量。n gram 是多個連續單...

詞向量 如何評價詞向量的好壞

詞向量 詞嵌入或者稱為詞的分布式表示,區別於以往的獨熱表示,已經成為自然語言任務中的乙個重要工具,對於詞向量並沒有直接的方法可以評價其質量,下面介紹幾種間接的方法。對於詞向量的評價更多還是應該考慮對實際任務的收益,脫離的實際任務很難確定a模型就一定比b好,畢竟詞向量方法更多是一種工具。學生 上課 0...