NLP《詞彙表示方法(二)詞嵌入表示》
用one-hot向量的方式表示詞彙無法得到詞語之間的相似性和聯絡性,這個不符合我們的語言習慣,我們很多詞語都是有聯絡的。
比如:語義上,“橘子”和“蘋果”,都是水果。“你”和“你們”只是複數的區別。“go”和“went”是時態的差異。但是都是具有某種相似性的。然鵝,one-hot向量一開始就把各個代詞看成了各個類別,之間毫無關聯性。除此之外,且維度很高,資料十分稀疏,不利於計算和儲存。
因此我們需要一個更加合理的詞彙表示方式。
一:Word Embedding
詞嵌入最粗淺的理解,每個詞被對映到低維連續向量,如下所示:
爺爺: (-0.065, -0.035, 0.019, -0.026, 0.085,…)
奶奶: (-0.019, -0.076, 0.044, 0.021,0.095,…)
珠江: (0.027, 0.013, 0.006, -0.023, 0.014, …)
這個低維度的空間有這樣的特徵,相似的詞對映到相似方向 – 語義相似性被編碼了,Cosine相似度衡量方向,相類似的詞彙被對映到一個相近的向量位置。這樣一來,我們不再使用稀疏且獨立的one-hot向量了,而是換成了一個低維度稠密的,且可以表徵詞彙相似度的一個向量來表徵一個詞彙。
如上圖所示,具有相似性質的詞彙可以對映到相似位置的向量位置上,這樣能表示出詞彙之間的相似性,這就很符合語言習慣了,有利於後續的一些應用,打好基礎,這個是很有用的,尤其是在語言詞彙上下文中,相似的上下文是希望得到相似的預測結果的。
比如句子預測(語言模型):
句子A:I want one cup of orange juice.
句子B:I want one cup of apple ?.
怎麼猜出這個橫線的詞語是啥?我們能看到上下文的句子是很類似的,如果我們能根據某個語言模型得出,“orange”和“apple”是很類似的向量,那麼就可以通過學習第一句話,就能預測出第二句話的內容也是“juice”,因為是很相似的一句話。這個有些類似於小時候小學語文中學習的造詞造句,通過類比和相似度進行學習。
再比如NER(命名實體識別)問題:
已知句子A:Tom is an orange farmer. –》Tom是一個人名實體
已知句子B:Mike is an apple farmer. –》Mike是一個人名實體
預測句子C:Robert is a pear cultivator. –》?是一個人名實體
我們能看出來句子的結構很相似,如果我們使用嵌入空間的向量來表示單詞,我們會發現,“orange”和“apple”和“pear”是很相近的詞語,“farmer”和“cultivator”是相似的詞語,那麼通過學習前倆句子的標記,我們也就能順利成章的理解出待預測句子的命名實體了。
如上兩個例子就是嵌入空間,詞彙相似度帶來的好處。
另一方面,假如,我們有詞彙10000個,如果使用one-hot向量,這個向量就是10000維度的,整個詞彙表就是10000X10000的矩陣V。現在我們想將他們對映到一個低維度稠密的空間,假如每個向量是300維度的,那麼嵌入空間的詞彙表的大小就是300X10000的矩陣E,大大減少了儲存空間。也減少了計算量。這個300的空間維度是自定義的,你想多少就多少,一般是取100~500 之間比較常見了,達到了降維的效果(之前學習的人臉檢測中,也是把一個高維度的人臉影像經過一個CNN對映到一個128維度的向量,用這個向量來表示人臉的距離相似度,吶,跟這個是很類似的概念了,都是把高維稀疏且獨立的資料對映到低維稠密且具有相似度的空間上)。
從另一個角度來看,在V空間內,每一個原始的one-hot向量v_i都表示一個詞彙,在E的低維度嵌入空間,每個e_i也表示同樣一個詞彙,怎麼對應起來呢?由於我們定義他們的詞彙的下標i是一樣的。就是簡單地根據下標look up詞彙表的操作了。如果換成數學計算就是。
e_i = E * v_i。
通過上述式子就能簡單的從one-hot向量轉換到低維空間的表示向量。
詞嵌入的好處是,不僅達到了降維的效果,還能表示詞語之間的相似程度,因為予以相近的詞彙在嵌入向量空間中更加距離接近(歐式距離或者是餘弦距離)。
最後問題來了,怎麼得到這個空間呢?注意到我們上述的數學計算公式了吧,輸入可以是one-hot向量,引數矩陣是E,誒?引數?說到這裡是不是有點眉目了,初始化引數,學習引數,梯度下降這些概念是不是就出來了。
我們給一下思路啊,我們得先定義一個語言模型,就是預測句子人話的概率,輸入資料就是整個嵌入空間的向量,還要給定上下文,將輸入的資料(嵌入空間的向量作為引數)進行模型學習,輸出就是應該預測到的那個詞語,通過這樣的監督學習,最大化這個預測模型,求出引數。下面我們將學習神經網路模型,word2vec模型來學習如何得到這個詞向量。具體做法且看後面的學習。
相關文章
- NLP《詞彙表示方法(一)one-hot向量表示》
- 詞向量表示:word2vec與詞嵌入
- LLM中詞向量的表示和詞嵌入的一些疑問
- 正規表示式 ? 量詞
- 正規表示式查詢相似單詞的方法
- 正規表示式關鍵詞解析
- NLP 中不同詞嵌入技術的比較 - KDnuggets
- ACL 2019 | Few-shot Learning學習詞表外的詞表示
- 請收好這份NLP熱門詞彙解讀
- nlp基礎之詞、子詞或字元字元
- 數串排序 關鍵詞 sorted lambda表示式排序
- 常用詞彙
- NLP之中文分詞中文分詞
- nlp基礎之-詞彙表構建的具體做法
- NLP ——句向量表示
- Python文字處理NLP:分詞與詞雲圖Python分詞
- SharePoint詞彙表
- 【詞向量表示】Word2Vec原理及實現
- 完整的牛津3000詞彙表及牛津5000詞彙表
- 《精通比特幣》第二版詞彙表比特幣
- 文字情感分析(二):基於word2vec和glove詞向量的文字表示
- 【詞向量表示】Item2Vec、DeepWalk、Node2vec、EGES詞向量生成演算法演算法
- NLP領域的ImageNet時代:詞嵌入已死,語言模型當立模型
- 使用 FastText 實現詞嵌入AST
- elasticsearch之使用正規表示式自定義分詞邏輯Elasticsearch分詞
- C++ 一元謂詞對應的lambda表示式C++
- JS正規表示式從入門到入土(5)—— 量詞JS
- 非法詞彙過濾
- 7-12詞彙
- 11-11詞彙
- android 入門- 詞彙Android
- 白話Angular詞彙Angular
- 正規表示式{n,m}量詞(至少n次,最多m次)
- 韋氏詞典新增詞彙:加密貨幣和ICO加密
- 雷達氣象相關詞彙(二 偏振參量)
- NLP領域的ImageNet時代到來:詞嵌入「已死」,語言模型當立模型
- notepad++ 利用正規表示式批次刪除關鍵詞所在行
- 中文NLP筆記:3. 關鍵詞提取的幾個方法筆記