1. 程式人生 > >NLP︱詞向量經驗總結(功能作用、高維視覺化、R語言實現、大規模語料、延伸拓展)

NLP︱詞向量經驗總結(功能作用、高維視覺化、R語言實現、大規模語料、延伸拓展)

R語言由於效率問題,實現自然語言處理的分析會受到一定的影響,如何提高效率以及提升詞向量的精度是在當前軟體環境下,比較需要解決的問題。

筆者認為還存在的問題有:

1、如何在R語言環境下,大規模語料提高執行效率?

2、如何提高詞向量的精度,或者說如何衡量詞向量優劣程度?

3、詞向量的功能性作用還有哪些值得開發?

4、關於語義中的歧義問題如何消除?

5、詞向量從”詞“往”短語“的跨越?

轉載請註明出處以及作者(Matt),歡迎喜歡自然語言處理一起討論~

————————————————————————————————————————————————

一、大規模語料提高執行效率

從訓練引數、優化訓練速度入手。

1、訓練引數

訓練引數的選擇是提高效率的關鍵之處,一些經驗引數訓練的經驗(一部分來源小橋流水部落格):

  1. window在5~8,我用的8,感覺還不錯,CBOW一般在5,SKIP在10左右比較適合;
  2. 其他的可以參考:

· 架構:skip-gram(慢、對罕見字有利)vs CBOW(快)

· 訓練演算法:分層softmax(對罕見字有利)vs 負取樣(對常見詞和低緯向量有利)

· 欠取樣頻繁詞:可以提高結果的準確性和速度(適用範圍1e-3到1e-5)

· 文字(window)大小:skip-gram通常在10附近,CBOW通常在5附近

詞嵌入的質量也非常依賴於上下文視窗大小的選擇。通常大的上下文視窗學到的詞嵌入更反映主題資訊,而小的上下文視窗學到的詞嵌入更反映詞的功能和上下文語義資訊。

1、維數,一般來說,維數越多越好(300維比較優秀),當然也有例外;

2、訓練資料集大小與質量。訓練資料集越大越好,覆蓋面廣,質量也要儘量好。

3、引數設定,一般如windows,iter、架構選擇比較相關。

2、優化訓練速度

  1. 選擇cbow模型,根據經驗cbow模型比skip-gram模型快很多,並且效果並不比skip-gram差,感覺還好一點;

  2. 執行緒數設定成跟cpu核的個數一致;

  3. 迭代次數5次差不多就已經可以了;

3、使用Glove訓練詞向量(text2vec包)

————————————————————————————————————————————————

二、詞向量表示精度

不同的詞向量表達方式也有著不同的優劣勢,

現在比較多見的詞向量表示方式:GloVe、fasttext、wordRank、tfidf-BOW、word2vec

根據Ranking演算法得到的wordRank,與 word2vec、fastText三者對比 

相似詞的尋找方面極佳,詞類比方面不同資料集有不同精度。

不過,上述都是實驗資料,從實際效果來看,TFIDF-BOW的效果,在很多情況下比這些高階詞向量表示的方式還要好,而且操作簡單,值得推廣!

——————————————————————————————————————————————————————

三、詞向量的功能、作用

1、詞向量的可加性

詞向量有一個潛力非常大的性質,就是向量之間的可加性,比如兩個案例:

Vector(巴黎)-Vector(法國)+Vector(義大利)≈Vector(羅馬)

Vector(king)-Vector(man)+Vector(woman)≈Vector(queen)

大致的流程就是king的woman約等於queen,當然為什麼要減去man,這裡man會干擾king詞,所以減去。

差即是投影,就是一個單詞在不同上下文中的相對出現。平均兩個向量更好,而不是取其總和。

2、消除歧義

上面king-man就是消除歧義的一種方式,這裡要用到線性代數的方式,king-man之後就把man這層意思消除掉了。

不過,得先大規模識別歧義詞,有待後續研究。

也許你寄希望於一個詞向量能捕獲所有的語義資訊(例如run即是動車也是名詞),但是什麼樣的詞向量都不能很好地進行凸顯。 
這篇論文有一些利用詞向量的辦法:Improving Word Representations Via Global Context And Multiple Word Prototypes(Huang et al. 2012) 
解決思路:對詞視窗進行聚類,並對每個單詞詞保留聚類標籤,例如bank1, bank2等

3、詞聚類

通過聚類,可以去挖掘一些關於某詞的派生詞;或者尋找相同主題時,可以使用。

4、詞向量的短語組合word2phrase

通過詞向量構造一些短語組合,要分成兩步來探索:

(1)詞語如何連結起來?(參考論文

(2)連結起來,用什麼方法來記錄組合短語?——平均數

比如”中國河“要變成一個專用短語,那麼可以用”中國“+”河“向量的平均數來表示,然後以此詞向量來找一些近鄰詞。

5、sense2vec

利用spacy把句子打散變成一些實體短語(名詞短語提取),然後利用word2vec變成sense向量,這樣的向量就可以用來求近似。譬如輸入nlp,出現的是ml,cv。

關於spacy這個python模組的介紹,可以看自然語言處理工具包spaCy介紹

關於Sense2vec可以參考部落格:https://explosion.ai/blog/sense2vec-with-spacy

sense2vec的demo網站

6、近義詞屬性

詞向量通過求近似,可以獲得很好的一個性質,除了可加性,就是近似性。可以將附近的近義詞進行聚合,當然詞向量的質量取決於訓練語料的好壞。同時,近義詞之中,反義詞是否能夠識別出來,也還是一個值得研究的話題。

7、詞的類比和線性空間

如果我們想要進行單詞比較(由a得到b,是因為由A得到B),可以認為對於每個詞w,我們有條件概率比的等式

d084d898ddf5c75b4976d1c99af799b539bc500e

以下就是一個案例:

9321fb125158be0345092482389244a44b8f6ce3

類比是可以找到單詞之間對等關係。條件概率比的等式如何轉換為單詞向量?

我們可以使用類比來表示單詞意思(如用向量改變性別),語法(如改變時態)或其他類比(如城市與其郵政編碼)。似乎類比不僅是單方面的技巧 - 我們可能可以一直使用它們來考慮問題,詳見:

George Lakoff, Mark Johnson, Metaphors We Live By(1980)

8、高維視覺化

——————————————————————————————————————————————————————

R語言中Word2vec的包有哪些?

R語言中的詞向量的包還是比較少的,而且大多數的應用都還不夠完善,筆者之前發現有李艦老師寫的tm.word2vec包 

tm.word2vec包裡面的內容太少了,只有一個呼叫函式比較有效,於是李艦老師又在github上自己寫了一個word2vec的函式,但是這個函式呼叫起來還不是特別方便。

於是國外有一神人,在李艦老師基礎上,借鑑李艦老師word2vec函式,開發了自己的包,wordVectors包(1000W單詞,4執行緒,20min左右),這個包相當優秀,不僅全部集成了李艦老師函式的優勢(可以多執行緒操作、自定義維度、自定義模型),還解決了如何讀取輸出檔案、消除歧義、詞雲圖、詞相似性等問題

近日發現了其他兩個:一個是text2vec,一個是rword2vec。其中text2vec是現在主要的研究方向:


——————————————————————————————————————————————————————

延伸一:大規模語料訓練方式

在大量語料下,進行訓練R語言效率超級低,而python相對較快。

一般來說用python的gensim和spark的mlib比較好。

但是筆者在使用過程中出現的情況是:

python的gensim好像只有cbow版本,

R語言,word2vec和glove好像都不能輸出txt格式,只有bin檔案。

同時大規模語料下,fasttext支援ngram向量化,用來搞文字分類還是很棒的。


——————————————————————————————————————————————————————

延伸二 : 論文經驗解讀《Baseline Needs More Love: On Simple Word-Embedding-Based Models and Associated Pooling Mechanisms》

文章來源:基線系統需要受到更多關注:基於詞向量的簡單模型 | ACL 2018論文解讀

■ 論文 | Baseline Needs More Love: On Simple Word-Embedding-Based Models and Associated Pooling Mechanisms

■ 連結 | https://www.paperweekly.site/papers/1987

■ 原始碼 | https://github.com/dinghanshen/SWEM

簡單的詞向量模型(Simple word-embedding model,SWEM),作者提出了下面幾種方法。

SWEM-aver:就是平均池化,對詞向量的按元素求均值。這種方法相當於考慮了每個詞的資訊。

SWEM-max:最大池化,對詞向量每一維取最大值。這種方法相當於考慮最顯著特徵資訊,其他無關或者不重要的資訊被忽略。

SWEM-concat:考慮到上面兩種池化方法資訊是互補的,這種變體是對上面兩種池化方法得到的結果進行拼接。

SWEM-hier:上面的方法並沒有考慮詞序和空間資訊,提出的層次池化先使用大小為 n 區域性視窗進行平均池化,然後再使用全域性最大池化。該方法其實類似我們常用的 n-grams 特徵。

1 幾款SWEM特點

SWEM-aver:綜合資訊

SWEM-max:互補的資訊,比較稀疏,個別詞語貢獻大;雖然效果一般,但是解釋力度很大,因為貢獻最大的就是幾個核心關鍵詞。

SWEM-concat:aver + max,綜合了前面兩者的優勢

SWEM-hier:N-grams的思想,在以上加入了一些詞序資訊

一般來說是:concat>aver>max

2 幾大任務

文件分類:主題分類

主題分類主要在意的是詞粒度,所以SWEM效果非常好(其中concat最好),CNN/LSTM

文件分類:情感分類

情感分類,詞序資訊比較重要,那麼CNN/LSTM更能夠捕捉。

其中SWEM-hier也有詞序資訊的考量,不過效果沒有CNN/LSTM好。

文件分類:本體分類

詞粒度的,SWEM-concat比較好

文字序列匹配(主要包括自然語言推理,問答中答案句選擇和複述識別任務

序列匹配對於關鍵詞更加敏感,所以SWEM更好。

序列標註:命名實體識別等任務

考慮詞序資訊,CNN/LSTM更好。

3、其他一些情況

詞向量維度

雖然維度越大,資訊越大,效果越好,但是差異不明顯。

資料集大小

小資料集對於詞序的考量更好,關鍵詞密度較低,所以CNN/LSTM更好。而SWEM模型,在長文字上效果更佳。

——————————————————————————————————————————————————————

延伸三:文字嵌入的經典模型與最新進展

  • 強/快的基線模型:FastText,Bag-of-Words(詞袋)

  • 最先進的模型:ELMo,Skip-Thoughts,Quick-Thoughts,InferSent,MILA/ MSR 的通用句子表示和 Google 的通用句子編碼器。

句向量的代表:

Google 的通用句子編碼器(https://arxiv.org/abs/1803.11175),於2018年初發布,採用相同的方法。他們的編碼器使用一個轉換網路,該網路經過各種資料來源和各種任務的訓練,目的是動態地適應各種自然語言理解任務。他們也給 TensorFlow 提供了一個預訓練的版本 https://www.tensorflow.org/hub/modules/google/universal-sentence-encoder/1。

相關推薦

NLP向量經驗總結功能作用高維視覺R語言實現大規模語料延伸拓展

R語言由於效率問題,實現自然語言處理的分析會受到一定的影響,如何提高效率以及提升詞向量的精度是在當前軟體環境下,比較需要解決的問題。 筆者認為還存在的問題有: 1、如何在R語言環境下,大規模語料提高執行效率? 2、如何提高詞向量的精度,或者說如何衡量詞向

基於Metronic的Bootstrap開發框架經驗總結8--框架功能總體介面介紹

在前面介紹了一系列的《基於Metronic的Bootstrap開發框架經驗總結》的隨筆文章,隨筆主要是介紹各個知識點的內容,對框架的總體性介面沒有很好的闡述,本篇隨筆主要介紹這個Bootstrap框架的總體性功能介面,介紹其中用到的知識點和整體性的介面。希望讀者對框架有一個更加直觀、真實的認識瞭解,介面設計以

基於Metronic的Bootstrap開發框架經驗總結12--頁面連結收藏夾功能實現

在一個系統裡面,往往有很多選單專案,每個選單項對應一個頁面,一般使用者只需要用到一些常用的功能,如果每次都需要去各個層次的選單裡面去找對應的功能,那確實有點繁瑣。特別是在選單繁多,而客戶又對系統整體不熟悉的情況下,如果有一個類似瀏覽器的收藏夾模組,把一些常用的選單連線儲存起來,每次從這個收藏夾主頁去找對應的頁

基於Metronic的Bootstrap開發框架經驗總結13--頁面連結收藏夾功能實現2利用Sortable進行拖動排序

在上篇隨筆《基於Metronic的Bootstrap開發框架經驗總結(12)--頁面連結收藏夾功能的實現》上,我介紹了連結收藏夾功能的實現,以及對收藏記錄的排序處理。該篇隨筆主要使用功能按鈕的方式移動收藏記錄,功能雖然實現的還算不錯,不過文章出來後,有讀者同行指出可以利用直接拖動的方式實現排序更方便,因此對其

java_web項目開發經驗總結

從數據 簡單 處理 開發 事務 傳輸 記錄 承載 基礎上   web項目就像一個動態的記事本,功能很強大,你最初的項目功能調研越給力,項目所能發揮的作用也就越給力。這是因為web網絡的強聯系性,大家都可以通過訪問到自己想要訪問的頁面,頁面裏既可以承載信息,也可以承載做事情的

基於MVC4+EasyUI的Web開發框架經驗總結5--使用HTML編輯控件CKEditor和CKFinder

err config 兩個 腳本 web開發 upload asp 正常 初始 http://www.cnblogs.com/wuhuacong/p/3780356.html Web開發上有很多HTML的編輯控件,如CKEditor、kindeditor等等,很多都做的很

基於MVC4+EasyUI的Web開發框架經驗總結2- 使用EasyUI的樹控件構建Web界面

set 應用 get ember trim ase str zab ble http://www.cnblogs.com/wuhuacong/p/3669575.html 最近花了不少時間在重構和進一步提煉我的Web開發框架上,力求在用戶體驗和界面設計方面,和Winfor

基於MVC4+EasyUI的Web開發框架經驗總結6--在頁面中應用下拉列表的處理

ica new web開發 don ext images 如果 bob 獲取 http://www.cnblogs.com/wuhuacong/p/3840321.html 在很多Web界面中,我們都可以看到很多下拉列表的元素,有些是固定的,有些是動態的;有些是字典內容,

基於MVC4+EasyUI的Web開發框架經驗總結8--實現Office文檔的預覽

討論 off info code .cn viewer 存在 nco app http://www.cnblogs.com/wuhuacong/p/3871991.html 基於MVC4+EasyUI的Web開發框架經驗總結(8)--實現Office文檔的預覽

基於Metronic的Bootstrap開發框架經驗總結17-- 使用 summernote插件實現HTML文檔的編輯和圖片插入操作

系統 cat 寫入 視頻 編寫 查看 absolute upload form 在很多場合,我們需要在線編輯HTML內容,然後在頁面上或者其他終端上(如小程序、APP應用等)顯示,編輯HTML內容的插件有很多,本篇介紹基於Bootstrap的 summernote插件實現H

基於Metronic的Bootstrap開發框架經驗總結18-- 在代碼生成工具Database2Sharp中集成對Bootstrap-table插件的分頁及排序支持

關註 基礎 表頭 數據 database 一定的 處理 tree的使用 適合 在我們開發系統界面,包括Web和Winform的都一樣,主要的界面就是列表展示主界面,編輯查看界面,以及一些輔助性的如導入界面,選擇界面等,其中列表展示主界面是綜合性的數據展示界面,一般往往需要對

多年iOS開發經驗總結

1、設定UILabel行間距 NSMutableAttributedString* attrString = [[NSMutableAttributedString  alloc] initWithString:label.text];

[找工作] 2019秋招|從春招到秋招,Java崗經驗總結收獲AT

部分 壓縮 今日頭條 順序 系統 現場 bat 圖片緩存 中心 轉自(有更多) https://blog.csdn.net/zj15527620802/article/month/2018/10 前言 找工作是一件辛酸而又難忘的歷程。經歷過焦慮、等待、希望,我們最終都

非985/211面試大廠校招經歷經驗總結安全工程師/滲透工程師

以下是我認識的一個剛畢業小朋友的面試經歷,面試的崗位是“安全工程師”。首先我要誇誇他!並非985,211的他,因為個人經歷和對安全行業的與熱愛,受到了阿里雲師傅的青睞,得到了實習的機會,今年畢業就能順利進大廠了!鼓掌୧(๑•̀◡•́๑)૭“ 崇拜他,才不是因為他本人長得高大帥氣”

HTTP介面自動化經驗總結Okhttp3 介面測試用例編寫

經過前面幾次的分享,我們已經有了方法和結果,那麼這篇文章我們就來寫測試用例。 首先我們新建一個TestNG class,名字為APITest,繼承我們的依賴方法DependeicesMethod 1.get介面測試 //測試Get方法,其餘校驗請自行新增 @Test

HTTP介面自動化經驗總結Okhttp3 介面測試框架搭建之資料處理

上篇文章寫了怎麼新建POST,GET方法。這篇文章介紹下該如何校驗。 因為我們在方法裡面都返回了String型別結果,String型別校驗起來比較麻煩。多數http介面返回的都是json形式。我們可以寫一個通用方法將String型別轉換為Map物件這樣校驗就比較方便準確了。廢話不多說直接上方法。

HTTP介面自動化經驗總結Okhttp3 介面測試框架搭建

搭建這套環境前,需要Eclipse安裝testNG,Maven 1.Eclipse安裝testNG https://mp.csdn.net/postedit/81868683 2.Eclipse安裝Maven http://www.cnblogs.com/pengyan-9826/p

HTTP介面自動化經驗總結介面自動化簡述

講介面自動化之前,先說說介面測試的優勢。      以下是我總結的幾點。 介面測試位於功能測試前,發現bug早修改早成本低。 介面測試的引數會比開發的引數更豐富,得到的結果更快更多。 能發現大部分介面未校驗的引數,省去我們功能測試輸入太多數值。

關於以太坊智慧合約在專案實戰過程中的設計及經驗總結1

此文已由作者蘇州授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗 1.智慧合約的概述 近幾年,區塊鏈概念的大風吹遍了全球各地,有的人覺得這是一個大風口,有的人覺得他是個泡沫。眾所周知,比特幣是區塊鏈1.0,而以太坊被稱為了區塊鏈2.0,而區塊鏈1.0和2.0最主要的差別就在於以太坊擁有

關於以太坊智慧合約在專案實戰過程中的設計及經驗總結2

此文已由作者蘇州授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗 7.智慧合約經驗分享 1)智慧合約開發的工具的問題 古人云“工欲善其事必先利其器”,同意良好的智慧合約的開發工具對智慧合約的開發效率有極大的提升。以下是一些比較好的智慧合約的開發組合: &nb