Word2VecDoc2Vec總結

轉自:http://www.cnblogs.com/maybe2030/p/5427148.html

  • 目錄:
    • 1、詞向量
    • 2、Distributed representation詞向量表示
    • 3、word2vec算法思想
    • 4、doc2vec算法思想
    • 5、Doc2Vec主要參數詳解
    • 總結:

目錄:

1、詞向量

自然語言理解的問題要轉化為機器學習的問題,第一步肯定是要找一種方法把這些符號數學化。
  NLP 中最直觀,也是到目前為止最常用的詞表示方法是 One-hot Representation,這種方法把每個詞表示為一個很長的向量。這個向量的維度是詞表大小,其中絕大多數元素為 0,只有一個維度的值為 1,這個維度就代表了當前的詞。
  舉個栗子,
  “話筒”表示為 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 …]
  “麥克”表示為 [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 …]
  每個詞都是茫茫 0 海中的一個 1。
  這種 One-hot Representation 如果采用稀疏方式存儲,會是非常的簡潔:也就是給每個詞分配一個數字 ID。比如剛才的例子中,話筒記為 3,麥克記為 8(假設從 0 開始記)。如果要編程實現的話,用 Hash 表給每個詞分配一個編號就可以了。這么簡潔的表示方法配合上最大熵、SVM、CRF 等等算法已經很好地完成了 NLP 領域的各種主流任務。
  當然這種表示方法也存在一個重要的問題就是“詞匯鴻溝”現象:任意兩個詞之間都是孤立的。光從這兩個向量中看不出兩個詞是否有關系,哪怕是話筒和麥克這樣的同義詞也不能幸免于難。此外,這種表示方法還容易發生維數災難,尤其是在Deep Learning相關的一些應用中。

2、Distributed representation詞向量表示

既然上述這種易于理解的One-hot Representation詞向量表示方式具有這樣的重要缺陷,那么就需要一種既能表示詞本身又可以考慮語義距離的詞向量表示方法,這就是我們接下來要介紹的Distributed representation詞向量表示方法。

  Distributed representation 最早由 Hinton在 1986 年提出。它是一種低維實數向量,這種向量一般長成這個樣子:

[0.792, ?0.177, ?0.107, 0.109, ?0.542, …]

  維度以 50 維和 100 維比較常見,當然了,這種向量的表示不是唯一的。
  Distributed representation 最大的貢獻就是讓相關或者相似的詞,在距離上更接近了(看到這里大家有沒有想到普通hash以及simhash的區別呢?有興趣的同學請見博客《[Algorithm] 使用SimHash進行海量文本去重》)。向量的距離可以用最傳統的歐氏距離來衡量,也可以用 cos 夾角來衡量。用這種方式表示的向量,“麥克”和“話筒”的距離會遠遠小于“麥克”和“天氣”。可能理想情況下“麥克”和“話筒”的表示應該是完全一樣的,但是由于有些人會把英文名“邁克”也寫成“麥克”,導致“麥克”一詞帶上了一些人名的語義,因此不會和“話筒”完全一致。

  將 word映射到一個新的空間中,并以多維的連續實數向量進行表示叫做“Word Represention” 或 “Word Embedding”。自從21世紀以來,人們逐漸從原始的詞向量稀疏表示法過渡到現在的低維空間中的密集表示。用稀疏表示法在解決實際問題時經常會遇到維數災難,并且語義信息無法表示,無法揭示word之間的潛在聯系。而采用低維空間表示法,不但解決了維數災難問題,并且挖掘了word之間的關聯屬性,從而提高了向量語義上的準確度。

3、word2vec算法思想

什么是word2vec?你可以理解為word2vec就是將詞表征為實數值向量的一種高效的算法模型,其利用深度學習的思想,可以通過訓練,把對文本內容的處理簡化為 K 維向量空間中的向量運算,而向量空間上的相似度可以用來表示文本語義上的相似。
Word2vec輸出的詞向量可以被用來做很多 NLP 相關的工作,比如聚類、找同義詞、詞性分析等等。如果換個思路, 把詞當做特征,那么Word2vec就可以把特征映射到 K 維向量空間,可以為文本數據尋求更加深層次的特征表示
Word2vec 使用的詞向量不是我們上述提到的One-hot Representation那種詞向量,而是 Distributed representation 的詞向量表示方式。其基本思想是 通過訓練將每個詞映射成 K 維實數向量(K 一般為模型中的超參數),通過詞之間的距離(比如 cosine 相似度、歐氏距離等)來判斷它們之間的語義相似度.其采用一個 三層的神經網絡 ,輸入層-隱層-輸出層。有個核心的技術是 根據詞頻用Huffman編碼 ,使得所有詞頻相似的詞隱藏層激活的內容基本一致,出現頻率越高的詞語,他們激活的隱藏層數目越少,這樣有效的降低了計算的復雜度。而Word2vec大受歡迎的一個原因正是其高效性,Mikolov 在論文中指出,一個優化的單機版本一天可訓練上千億詞。
這個三層神經網絡本身是 對語言模型進行建模 ,但也同時 獲得一種單詞在向量空間上的表示 ,而這個副作用才是Word2vec的真正目標。
Word2Vec實際上是兩種不同的方法:Continuous Bag of Words (CBOW) 和 Skip-gram。CBOW的目標是根據上下文來預測當前詞語的概率。Skip-gram剛好相反:根據當前詞語來預測上下文的概率(如下圖所示)。這兩種方法都利用人工神經網絡作為它們的分類算法。起初,每個單詞都是一個隨機 N 維向量。經過訓練之后,該算法利用 CBOW 或者 Skip-gram 的方法獲得了每個單詞的最優向量。
這里寫圖片描述

取一個適當大小的窗口當做語境,輸入層讀入窗口內的詞,將它們的向量(K維,初始隨機)加和在一起,形成隱藏層K個節點。輸出層是一個巨大的二叉樹,葉節點代表語料里所有的詞(語料含有V個獨立的詞,則二叉樹有|V|個葉節點)。而這整顆二叉樹構建的算法就是Huffman樹。這樣,對于葉節點的每一個詞,就會有一個全局唯一的編碼,形如”010011”,不妨記左子樹為1,右子樹為0。接下來,隱層的每一個節點都會跟二叉樹的內節點有連邊,于是對于二叉樹的每一個內節點都會有K條連邊,每條邊上也會有權值。
這里寫圖片描述

對于語料庫中的某個詞w_t,對應著二叉樹的某個葉子節點,因此它必然有一個二進制編碼,如”010011”。在訓練階段,當給定上下文,要預測后面的詞w_t的時候,我們就從二叉樹的根節點開始遍歷,這里的目標就是預測這個詞的二進制編號的每一位。即對于給定的上下文,我們的目標是使得預測詞的二進制編碼概率最大。形象地說,我們希望在詞向量與根節點相連經過 logistic 計算得到 bit=1 的概率盡量接近0,在第二層,希望其bit=1的概率盡量接近1,這么一直下去,我們把一路上計算得到的概率相乘,即得到目標詞w_t在當前網絡下的概率P(w_t),那么對于當前這個 sample的殘差就是1-P(w_t),于是就可以使用梯度下降法訓練這個網絡得到所有的參數值了。顯而易見,按照目標詞的二進制編碼計算到最后的概率 值就是歸一化的。
  Hierarchical Softmax用Huffman編碼構造二叉樹,其實借助了分類問題中,使用一連串二分類近似多分類的思想。例如我們是把所有的詞都作為輸出,那么“桔 子”、“汽車”都是混在一起。給定w_t的上下文,先讓模型判斷w_t是不是名詞,再判斷是不是食物名,再判斷是不是水果,再判斷是不是“桔子”。
  但是在訓練過程中,模型會賦予這些抽象的中間結點一個合適的向量,這個向量代表了它對應的所有子結點。因為真正的單詞公用了這些抽象結點的向量,所 以Hierarchical Softmax方法和原始問題并不是等價的,但是這種近似并不會顯著帶來性能上的損失同時又使得模型的求解規模顯著上升。
  沒有使用這種二叉樹,而是直接從隱層直接計算每一個輸出的概率——即傳統的Softmax,就需要對|V|中的每一個詞都算一遍,這個過程時間復雜 度是O(|V|)的。而使用了二叉樹(如Word2vec中的Huffman樹),其時間復雜度就降到了O(log2(|V|)),速度大大地加快了。
  現在這些詞向量已經捕捉到上下文的信息。我們可以利用基本代數公式來發現單詞之間的關系(比如,“國王”-“男人”+“女人”=“王后”)。這些詞向量可以代替詞袋用來預測未知數據的情感狀況。該模型的優點在于不僅考慮了語境信息還壓縮了數據規模(通常情況下,詞匯量規模大約在300個單詞左右而不是之前 模型的100000個單詞)。因為神經網絡可以替我們提取出這些特征的信息,所以我們僅需要做很少的手動工作。但是由于文本的長度各異,我們可能需要利用所有詞向量的平均值作為分類算法的輸入值,從而對整個文本文檔進行分類處理。

4、doc2vec算法思想

然而,即使上述模型對詞向量進行平均處理,我們仍然忽略了單詞之間的排列順序對情感分析的影響。即上述的word2vec只是基于詞的維度進行”語義分析”的,而并不具有上下文的”語義分析”能力。
  作為一個處理可變長度文本的總結性方法,Quoc Le 和 Tomas Mikolov 提出了 Doc2Vec方法。除了增加一個段落向量以外,這個方法幾乎等同于 Word2Vec。和 Word2Vec 一樣,該模型也存在兩種方法:Distributed Memory(DM) 和 Distributed Bag of Words(DBOW)。DM 試圖在給定上下文和段落向量的情況下預測單詞的概率。在一個句子或者文檔的訓練過程中,段落 ID 保持不變,共享著同一個段落向量。DBOW 則在僅給定段落向量的情況下預測段落中一組隨機單詞的概率。
  以下內容摘自語義分析的一些方法(中篇)
  先看c-bow方法,相比于word2vec的c-bow模型,區別點有:
? 訓練過程中新增了paragraph id,即訓練語料中每個句子都有一個唯一的id。paragraph id和普通的word一樣,也是先映射成一個向量,即paragraph vector。paragraph vector與word vector的維數雖一樣,但是來自于兩個不同的向量空間。在之后的計算里,paragraph vector和word vector累加或者連接起來,作為輸出層softmax的輸入。在一個句子或者文檔的訓練過程中,paragraph id保持不變,共享著同一個paragraph vector,相當于每次在預測單詞的概率時,都利用了整個句子的語義。
? 在預測階段,給待預測的句子新分配一個paragraph id,詞向量和輸出層softmax的參數保持訓練階段得到的參數不變,重新利用梯度下降訓練待預測的句子。待收斂后,即得到待預測句子的paragraph vector。
這里寫圖片描述
sentence2vec相比于word2vec的skip-gram模型,區別點為:在sentence2vec里,輸入都是paragraph vector,輸出是該paragraph中隨機抽樣的詞。
這里寫圖片描述
下面是sentence2vec的結果示例。先利用中文sentence語料訓練句向量,然后通過計算句向量之間的cosine值,得到最相似的句子。可以看到句向量在對句子的語義表征上還是相當驚嘆的。

5、Doc2Vec主要參數詳解

D2V主要參數解釋:
model_dm = Doc2Vec(x_train,min_count=1, window = 3, size = size, sample=1e-3, negative=5, workers=4)

min_count:忽略所有單詞中單詞頻率小于這個值的單詞。
window:窗口的尺寸。(句子中當前和預測單詞之間的最大距離)
size:特征向量的維度
sample:高頻詞匯的隨機降采樣的配置閾值,默認為1e-3,范圍是(0,1e-5)。
negative: 如果>0,則會采用negativesampling,用于設置多少個noise words(一般是5-20)。默認值是5。
workers:用于控制訓練的并行數。

model_dm.train(x_train, total_examples=model_dm.corpus_count, epochs=70)
total_examples:統計句子數
epochs:在語料庫上的迭代次數(epochs)。
這里寫圖片描述
Window:參數值為2時也就代表的如上圖所示的情景,這里2指的是單詞附近的前兩個詞和后兩個詞,之后會形成上圖右邊的訓練樣例,當模型訓練完畢后,你輸入一個單詞他會根據統計概率輸出較大概率的相關的詞。

總結:

非常不錯的一句話用來解釋深度學習為什么在NLP領域的發展不可觀的原因:
語言(詞、句子、篇章等)屬于人類認知過程中產生的高層認知抽象實體,而語音和圖像屬于較為底層的原始輸入信號,所以后兩者更適合做deep learning來學習特征。”

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456561.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456561.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456561.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubantu安裝pycharm破解+Linux基礎簡介

一、課程簡介 linux服務器配置及常用命令 Ubuntu centos 開發軟件配置及服務環境的搭建 軟件的安裝和配置 mysql數據庫使用、monDB使用、redius的使用 git的使用 html/css 課程學習方式 表達訓練 學習方法: linux學習基本上都是命令和配置 命令要多敲多記 …

《游戲視頻主播手冊》——2.2 哪些人適合做游戲主播

本節書摘來自異步社區《游戲視頻主播手冊》一書中的第2章,第2.2節,作者 王巖,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.2 哪些人適合做游戲主播 據不完全統計,目前國內有超過26000名活躍的游戲主播。所謂“活躍的…

Doc2Vec實踐

目錄:前言:第一步:首先我們需要拿到對應的數據,相關的代碼如下:第二步:拿到對應的數據后,就開始訓練數據生成對應的model,對應的代碼如下:第三步:得到生成的model后&…

Linux常用命令全網最全

一、linux文件系統結構 sudo apt-get install treetree --help #查看幫助tree -L 1 #顯示文件目錄 rootubuntu16 /# tree -L 1 . #系統根目錄,有且只有一個根目錄 ├── bin #存放常見的命令 ├── boot #系統啟動文件和核心文件都在這個目錄…

《開源思索集》一Source Code + X

本節書摘來異步社區《開源思索集》一書中的第1章,作者: 莊表偉 責編: 楊海玲, 更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 Source Code X 開源思索集最近,有一位來自學術界朋友,找到了我們這個開源的圈子…

機器學習中目標函數、損失函數以及正則項的通俗解釋

目錄:前言:1、什么是目標函數?2、損失函數3、正則化總結: 目錄: 前言: 今天看到一篇很精簡的文章來說明目標函數、損失函數以及正則項是什么。以下是文章正文。 轉自:https://xiaozhuanlan.…

Linux中的 硬鏈接ln和軟連接ln -s

文件都有文件名與數據,這在 Linux 上被分成兩個部分:用戶數據 (user data) 與元數據 (metadata)。用戶數據,即文件數據塊 (data block),數據塊是記錄文件真實內容的地方;而元數據則是文件的附加屬性,如文件…

干貨分享!DevExpressv16.2最新版演示示例等你來收!(上)

2019獨角獸企業重金招聘Python工程師標準>>> 為解決大家找資源難的問題,EVGET聯合DevExpress控件中文網盤點熱門的DevExpress資訊、Demo示例、版本升級及下載,以及各種教程推薦等。更多下載及資訊也可以在DevExpress控件中文網中找到&#xf…

一文看懂哈夫曼樹與哈夫曼編碼

轉自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299884.html 在一般的數據結構的書中,樹的那章后面,著者一般都會介紹一下哈夫曼(HUFFMAN)樹和哈夫曼編碼。哈夫曼編碼是哈夫曼樹的一個應用。哈夫曼編碼應用廣泛,如JPEG中…

解決:未能將管道連接到虛擬機: 所有的管道范例都在使用中。

虛擬機無端出現: VMware Workstation 無法連接到虛擬機。請確保您有權限運行該程序、訪問改程序使用的所有目錄以及訪問所有臨時文件目錄。未能將管道連接到虛擬機: 所有的管道范例都在使用中。 原因:Ubuntu開機慢到開不開,我就在任務管理器強制結束了…

tcpdf開發文檔(中文翻譯版)

2017年5月3日15:06:15 這個是英文翻譯版,我看過作者的文檔其實不太友善或者不方便閱讀,不如wiki方便 后面補充一些,結構性文檔翻譯 這是一部官方網站文檔,剩余大部分都是開發的時候和網絡總結來的 項目官網:https://t…

CCF推薦各種國際學術會議和期刊目錄

這是中國計算機學會推薦國際學術會議和期刊目錄2015年版本的內容, 主要羅列了國際上計算機相關的各個方向的頂級學術會議和期刊目錄(包含A、B、C三個等級)。 包含的方向有: 計算機體系結構/并行與分布計算/存儲系統計算機網絡網絡…

Linux基本操作【作業】

1.如何使用命令立即重啟linux操作系統? sudo reboot 2.如何查看/etc下的所有文件,并以列表格式顯示,并且顯示隱藏文件 cd /etc | ls -la 3.一次性創建 text/1/2/3/4 cd tmp mkdir -p text/1/2/3/4 (1&#xff…

開發日志_Jan.8.2017

這兩天繼續著手開發碰撞部分。 主要工作是寫碰撞類和運動線程類。碰撞主要在于算法,運動線程只要管理好就行了。 之前碰撞測試中(即還未添加完整碰撞算法時)遇到各種bug,疑似機器人和小球的定位點不明所造成的。昨天研究了下QT下的…

Nginx【學習筆記】

Nginx 1. nginx可以做什么? 可針對靜態資源高速高并發訪問及緩存。 可使用反向代理加速,并且可進行數據緩存。 具有簡單負載均衡、節點健康檢查和容錯功能。 支持遠程FastCGI服務的緩存加速。 支持FastCGI、Uwsgi、SCGI、Memcached Servers的加速和…

第四次作業類測試代碼+036+吳心怡

一、類圖 二、代碼 package application; public class Commission { /* * hp:耳機 80元 mpc:手機殼 10元 cpsp:手機貼膜 8元 */ public float calculate(String line) { int hp 0, mpc 0, cpsp 0; String[] input null; float money 0;…

LSI/LSA算法原理與實踐Demo

目錄:1、使用場景2、優缺點3、算法原理3.1、傳統向量空間模型的缺陷3.2、Latent Semantic Analysis (Latent Semantic Indexing)3.3、算法實例 4、文檔相似度的計算5、對應的實踐Demo 目錄: 1、使用場景 文本挖掘中,主題模型。聚類算法關注…

解決: ubuntu18.04沒有網絡直連

初次安裝ubuntu 18.04, 發現沒有網絡. 直接上我遇到的這個問題的解決方法 sudo service NetworkManager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service NetworkManager start 未能解決問題的方法有 修改/etc/netplan/*.yaml 修改/etc/NetworkMana…

Linux學習134 Unit 8

Unit8 ldap網絡帳號1.ldap是什么ldap目錄服務認證,和windows活動目錄類似,就是記錄數據的一種方式2.ldap客戶端所須軟件yum sssd krb5-workstation -y3.如何開啟ldap用戶認證authconfig-tui┌────────────────┤ Authentication Configu…

FastText原理總結

目錄:1、應用場景2、優缺點3、FastText的原理4、FastText詞向量與word2vec對比 目錄: 1、應用場景 fastText是一種Facebook AI Research在16年開源的一個文本分類器。 其特點就是fast。相對于其它文本分類模型,如SVM,Logistic …