Doc2Vec的一個輕量級介紹

2021-02-19 小小挖掘機

作者:Gidi Shperber

編譯:ronghuaiyang

在這篇文章中,你將學習什麼是doc2vec,它是如何構建的,它與word2vec有什麼關係,你可以用它做什麼,沒有數學公式。

介紹

文本文檔的數字表示是機器學習中的一個具有挑戰性的任務。這種表示形式可以用於多種目的,例如:文檔檢索、web搜索、垃圾郵件過濾、主題建模等。

然而,沒有很多好的技術可以做到這一點。許多任務使用眾所周知的但過於簡單的方法如詞袋(BOW),但結果將大多是平庸的,因為BOW丟掉了許多微妙的可能的良好的表示,比如考慮單詞的順序。

LDA也是一種常見的主題建模技術(從文本中提取主題/關鍵字),但它很難調試,結果也很難評估。

在這篇文章中。我將回顧doc2vec的方法,在2014年由Mikilov和Le提出,我們要通過這篇文章提到很多次。值得一提的是,Mikilov也是word2vec的作者之一。

Doc2vec是一個非常好的技術。它很容易使用,結果很好,而且從它的名字就可以看出來,它主要基於word2vec。我們先來簡單介紹一下word2vec。

word2vec

word2vec是一個眾所周知的概念,用於從單詞中生成表示向量。

網上有很多關於word2vec的好教程,但是如果描述doc2vec而沒有word2vec,就沒有意義了,所以我就簡單介紹一下。

一般來說,當你喜歡使用單詞構建模型時,簡單地標記/one-hot編碼是一種可行的方法。然而,當使用這種編碼時,這些詞就失去了它們的意義。比如,如果我們將Paris編碼為id_4, France編碼為id_6, power編碼為id_8,那麼France與power的關係將與Paris相同。我們希望France和Paris能比France和power更接近。

2013年在這篇文章:https://arxiv.org/abs/1301.3781中提出的word2vec,可以給你每個單詞的數字表示,並且能夠捕獲上述關係。這是機器學習中一個更廣泛概念的一部分——特徵向量。

這種表示法封裝了詞與詞之間的不同關係,如同義詞、反義詞或類似的東西,如這個:

圖1:國王對王后就像男人對女人。寫關於word2vec不附加這個內容是非法的

Word2vec算法

這是怎麼做到的呢?word2vec表示使用兩種算法:連續的單詞袋模型(CBOW)和跳躍模型( Skip-Gram)。

連續詞袋模型

連續的單詞包在當前單詞周圍創建一個滑動窗口,從「上下文」 — 周圍的單詞來預測它。每個單詞都表示為一個特徵向量。經過訓練,這些向量就變成了詞向量。

圖2:CBOW算法示意圖:用單詞「the」,「cat」,「sat」來預測「on」

如前所述,表示相似單詞的向量對於不同的距離度量是相近的,並且額外地封裝了數值關係,如上面的king-queen=man。

Skip gram

第二種算法,在同一篇文章中有描述,與CBOW完全相反:我們不是每次預測一個單詞,而是使用一個單詞來預測所有周圍的單詞(「上下文」)。Skip gram比CBOW慢得多,但是對於不經常出現的單詞,它被認為更準確。

Doc2vec

在理解了word2vec是什麼之後,理解doc2vec是如何工作的就容易多了。

如前所述,doc2vec的目標是創建文檔的數字表示,而不管其長度如何。但與單詞不同的是,文檔不是以單詞這樣的邏輯結構出現的,因此必須找到另一種方法。

Mikilov和Le使用的概念很簡單,但很聰明:他們使用了word2vec模型,並添加了另一個向量(下面的段落ID),如下所示:

圖3:PV-DM模型

如果你對上面的示意圖感到很熟悉,那是因為它是CBOW模型的一個小擴展。但是,除了使用單詞來預測下一個單詞之外,我們還添加了另一個特徵向量,它對於每個文檔是唯一的。

因此,當訓練單詞向量W時,也訓練了文檔向量D,在訓練結束時,它就有了文檔的數字表示。

上面的模型稱為Distributed Memory version of Paragraph Vector(PV-DM)。它就像一個記憶體,記住當前上下文缺少的內容 — 或者作為段落的主題。單詞向量表示單詞的概念,而文檔向量表示文檔的概念。

在word2vec中,可以使用另一種類似於skip-gram的算法,即Distributed Bag of Words version of Paragraph Vector (PV-DBOW)。

圖4:PV-DBOW模型

在這裡,這個算法實際上更快(與word2vec相反),並且消耗更少的內存,因為不需要保存詞向量。

在這篇文章中,作者聲明他們推薦使用這兩種算法的組合,儘管PV-DM模型更優,並且通常會自己就可以得到最先進的結果。

doc2vec模型可按以下方式使用:對於訓練,需要一組文檔。每個單詞生成一個單詞向量W,每個文檔生成一個文檔向量D。該模型還為softmax隱層訓練權重。在推理階段,可以使用一個新的文檔,然後固定所有的權值來計算文檔向量。

模型評估和一點想法

這種無監督模型的問題在於,它們沒有被訓練去完成它們本來要完成的任務。比如說, word2vec訓練完成語料庫中的包圍詞,但用於估計詞之間的相似度或關係。因此,衡量這些算法的性能可能具有挑戰性。我們已經看到了「國王」、「皇后」、「男人」、「女人」的例子,但我們想讓它成為一種評估機器學習模型的嚴格方法。

因此,在訓練這些算法時,我們應該注意相關的度量。word2vec的一個可能的度量標準是對上述示例的概括,稱為類比推理。它包含許多類似的組合,如下:

happy happily — furious furiously

immediate immediately — infrequent infrequently

slowing slowed — sleeping slept

spending spent — striking struck

這個任務的成功之處在於,當計算匹配對之間的距離時,可以得到非常接近的結果。

數據集在http://download.tensorflow.org/data/questions-words.txt。

Doc2vec在文章中測試了兩個任務:第一個是情緒分析,第二個類似於上面的類比推理。

這是文章中的三段。這些段落的數據集被用來比較模型。很容易看出哪兩個比較接近:

這個數據集(據我所知沒有共享)用來比較一些模型,doc2vec是最好的:

現實中的挑戰 - ScaleAbout

我的一個客戶,使用機器學習方法來進行you-tube視頻到內容文章的匹配。Doc2vec似乎是一個很好的匹配方法。

有個例子是這樣的,有一篇文章,是關於在家裡用樹樁做燈的,在文章的底部,可以看到4部木工相關的視頻。

ScaleAbout當前的模型使用標籤機制對視頻和文章進行標註(「topic modeling」),並測量標籤之間的距離。

ScaleAbout有一些與客戶主題相關的語料庫。比如說,有一個10萬手動標記的文件「do it yourself」,就像上面說過的,是給出版商準備的。每篇文章有17個可能的標籤。如「家居裝飾」、「園藝」、「改建及翻新」等。在這個實驗中,我們決定嘗試使用doc2vec和其他一些模型來預測標籤。

ScaleAbout目前最好的模型是一個卷積神經網絡,它建立在word2vec的基礎上,在預測文檔標籤方面達到了70%的準確率。

Doc2vec模型本身是一個無監督的方法,所以需要稍微調整一下「參與」這個比賽。幸運的是,在大多數情況下,我們可以使用一些技巧:如果你還記得,在圖3中我們添加了另一個文檔向量,它對於每個文檔都是惟一的。如果你想一下,可以添加更多的向量,它們不一定是唯一的:例如,如果我們的文檔有標籤(實際上我們有),我們可以添加它們,並得到它們作為向量的表示。

此外,它們不必是唯一的。通過這種方式,我們可以將17個標記中的一個添加到唯一的文檔標記中,並為它們創建一個doc2vec表示!見下圖:

圖5:帶標籤向量的doc2vec模型

我們使用gensim實現了doc2vec。下面是gensim TaggedDocument:

gensim TaggedDocument。SENT_3是惟一的文檔id,remodeling和renovating是標記

使用gensim doc2vec非常簡單。像往常一樣,模型應該被初始化,訓練幾個階段:

然後我們可以檢查每個唯一的文檔與每個標籤的相似度,這樣做:

預測與文檔相似度最高的標籤。

使用這種方法,我們在100K篇文章中只訓練了10K篇,我們的準確率就達到了74%,比以前更好。

總結

我們已經看到,通過一些調整,我們可以從一個已經非常有用的word2vec模型中獲得更多。這很好,因為正如前面所說,在我看來,表示文檔的標記和匹配還有很長的路要走。

此外,這表明,這是一個很好的例子,說明機器學習模型如何封裝了更多的能力,而不僅僅是它們所訓練的特定任務。這可以在深度CNNs中看到,它訓練用於對象分類,但也可以用於語義分割或聚類圖像。

最後,如果你有一些與文檔相關的任務 — 這可能是一個很好的模型!

英文原文:https://medium.com/wisio/a-gentle-introduction-to-doc2vec-db3e8c0cce5e

相關焦點

  • 【NLP】doc2vec原理及實踐
    也常常用於文本分類任務,後面會專門寫一篇文章介紹LDA模型和doc2vec的本質不同doc2vec是google的兩位大牛Quoc Le和Tomas Mikolov在2014年提出的,原始論文地址如下:https://cs.stanford.edu/~quocle/paragraph_vector.pdfDoc2Vec 或者叫做 paragraph2vec, sentence
  • 【算法】word2vec與doc2vec模型
    2 word2vec與doc2vec有什麼差異?3 如何做word2vec和doc2vec?深度學習掀開了機器學習的新篇章,目前深度學習應用於圖像和語音已經產生了突破性的研究進展。而Word2vec大受歡迎的一個原因正是其高效性,Mikolov 在論文中指出,一個優化的單機版本一天可訓練上千億詞。  這個三層神經網絡本身是 對語言模型進行建模 ,但也同時 獲得一種單詞在向量空間上的表示 ,而這個副作用才是Word2vec的真正目標。
  • Doc2vec原理解析及代碼實踐
    Doc2vec也可以叫做 Paragraph Vector、Sentence Embeddings,它可以獲得句子、段落和文檔的向量表達,是Word2Vec的拓展,其具有一些優點,比如不用固定句子長度,接受不同長度的句子做訓練樣本。Doc2vec算法用於預測一個向量來表示不同的文檔,該模型的結構潛在的克服了詞袋模型的缺點。
  • 【DS】Doc2Vec和Logistic回歸的多類文本分類
    2 您如何做文本分類?Doc2vec是一個NLP工具,用於將文檔表示為向量,是word2vec方法的推廣。為了理解doc2vec,最好理解word2vec方法。Doc2vec是一個NLP工具,用於將文檔表示為向量,是word2vec方法的推廣。為了理解doc2vec,最好理解word2vec方法。但是,完整的數學細節超出了本文的範圍。
  • Doc2vec在推薦系統中的應用(含算法原理、代碼實現)
    Doc2vec是Mikolov2014年提出的論文,也被成為Paragraph Vector,下面的內容分為三方面進行介紹,分別為:1、Doc2vec的算法原理如何學習得到Word的Vector表示一個非常流行的學習Word Vector的方法如下圖所示:一個非常流行的學習Word
  • 用 Doc2Vec 得到文檔/段落/句子的向量表達
    兩種實現方法用 Gensim 實現 Doc2Vec 訓練Doc2Vec 或者叫做 paragraph2vec, sentence embeddings,是一種非監督式算法,可以獲得 sentences/paragraphs/documents 的向量表達,是 word2vec 的拓展。
  • 文本深度表示模型—word2vec&doc2vec詞向量模型
    而Word2vec大受歡迎的一個原因正是其高效性,Mikolov 在論文中指出,一個優化的單機版本一天可訓練上千億詞。這個三層神經網絡本身是 對語言模型進行建模 ,但也同時 獲得一種單詞在向量空間上的表示 ,而這個副作用才是Word2vec的真正目標。
  • 文本深度表示模型——word2vec&doc2vec詞向量模型
    而Word2vec大受歡迎的一個原因正是其高效性,Mikolov 在論文中指出,一個優化的單機版本一天可訓練上千億詞。  這個三層神經網絡本身是 對語言模型進行建模 ,但也同時 獲得一種單詞在向量空間上的表示 ,而這個副作用才是Word2vec的真正目標。
  • 利用Doc2Vec 對 Quora 問題標籤聚類
    翻譯 | nick李、csnoooong 校對 | 凡江 整理 | 志豪原文連結:https://medium.com/@samriddhisinha/clustering-quora-question-tags-with-doc2vec-d4fb3c5177f7
  • word2vec模型深度解析
    【前言】word2vec是一個被廣泛應用的word embedding方法,由於最近研究需要,將算法模型研究了一下由於word2vec內容很多,這裡儘量講解核心內容,有不足之處還請指出!word2vec是輕量級的神經網絡,其模型僅僅包括輸入層、隱藏層和輸出層,模型框架根據輸入輸出的不同,主要包括CBOW和skip-gram模型,CBOW模型是通過上下文的內容預測中間的目標詞,而skip-gram則相反,通過目標詞預測其上下文的詞,通過最大化詞出現的概率,我們訓練模型可得到各個層之間的權重矩陣,我們所說的得到的word embedding vector就是從這個權重矩陣裡面得來的。
  • 【Word2Vec】深入淺出Word2Vec原理解析
    Word2Vec的網絡結構Word2Vec是輕量級的神經網絡,其模型僅僅包括輸入層、隱藏層和輸出層,模型框架根據輸入輸出的不同,主要包括CBOW和Skip-gram模型。Word2Vec基於層次Softmax的方式主要的精華部分都集中在了哈夫曼樹這部分,下面詳細介紹。4.1.2 CBOW的目標函數為了便於下面的介紹和公式的推導,這裡需要預先定義一些變量:既然已經引入了那麼多符號,我們通過一個簡單的例子把它們落到實處吧,我們考慮單詞w="足球"的情形。
  • 【NLP】從word2vec, ELMo到BERT
    word2vec說來也都是些俗套而樂此不疲一遍遍寫的句子,2013年Google的word2vec一出,讓NLP各個領域遍地開花,一時間好像不用上預訓練的詞向量都不好意思寫論文了。而word2vec是什麼呢?模型顯然就是一個「線性」語言模型。
  • 萬物皆Embedding,從經典的word2vec到深度學習基本操作item2vec
    的技術細節,為了保證一些初學者的知識是自洽的,我還是想在此之前詳細介紹一下深度學習的基本操作Embedding以及從word2vec到item2vec的模型原理。使embedding空前流行的word2vec對word的vector表達的研究早已有之,但讓embedding方法空前流行,我們還是要歸功於google的word2vec。我們簡單講一下word2vec的原理,這對我們之後理解AirBnB對loss function的改進至關重要。
  • 想學習Word2vec?用Numpy從Scratch開始帶你完整過一遍
    然而,我決定僅僅藉助Python和NumPy從頭開始實現一個Word2vec模型,之所以決定重新發明一遍輪子,是因為我想深入學習一下Word2vec,順便鞏固一下Numpy。詞語嵌入並沒有什麼花哨的東西,而是用數字的方式來表示詞彙的方法。更確切地說,是將詞彙映射到向量的方法。最直接的方法可以是使用一熱編碼,將每個字映射到一熱向量上。
  • 圖解word2vec
    一直是一種有效的詞嵌入的方法,本文把word2vec用圖解的方式進行,全篇沒有數學公式,非常通俗易懂,推薦初學者閱讀。我們繼續使用數據集中的下一個樣本進行相同的處理,然後是下一個樣本,直到我們覆蓋了數據集中的所有樣本。這就結束了一個epcho的訓練。我們繼續訓練多個epcho,然後我們就有了訓練好的模型,我們可以從中提取嵌入矩陣並將其用於任何其他應用。雖然這加深了我們對該過程的理解,但仍然不是word2vec實際上的訓練過程。
  • 白話Word2Vec
    比如N值為2,每取出一個詞(作為中心詞),就要使用該詞的前後各2個詞(作為環境詞),分別放到網絡訓練一次,一共要取4個環境詞。真實的Word2Vec前面部分介紹的簡化版Word2Vec過程實際上是為了便於大家理解而概括出來的。這個理想的模型當中存在一些無法迴避的問題,比如輸出的部分是一個50000維的One-Hot向量,因此數據經過網絡後應該得到的也是一個50000維的向量,對這個輸出向量進行Softmax計算所需的工作量將是一個天文數字。
  • 圖解 Word2Vec
    在本文中,我們將介紹嵌入的概念以及使用word2vec生成嵌入的機制。但是,讓我們從一個示例開始,以熟悉如何使用向量來表示事物。你是否知道五個數字(一個向量)可以代表你的個性?Personality Embeddings: What are you like?
  • 深入理解word2vec
    word2vec是一種基於神經網絡的語言模型,也是一種詞彙表徵方法。word2vec包括兩種結構:skip-gram(跳字模型)和CBOW(連續詞袋模型),但本質上都是一種詞彙降維的操作。  我們將NLP的語言模型看作是一個監督學習問題:即給定上下文詞,輸出中間詞,或者給定中間詞,輸出上下文詞。基於輸入和輸出之間的映射便是語言模型。
  • 詞彙星空:如何構建一個炫酷的 Word2Vec 可視化
    2.2數據與數據預處理我使用了GloVe項目的預訓練過的word2vec模型。我最開始渲染 Word2vec 圖的結果是數量龐大的數字集群。 word2vec模型真的很喜歡把數字放在一起(直觀上我認為這很有道理)。唉,這使得可視化變得無趣。
  • Word2Vec 與 GloVe 技術淺析與對比
    本文主要分為4部分:(1) 簡要介紹count-based methods和prediction-based methods的特點;(2) 從基礎的模型目標函數角度對 GloVe 和 word2vec 進行對比,得出的結論是二者本質上是類似的,但word2vec模型中包含些許缺陷;(3) 分析證明GloVe的模型的計算複雜度小於word2vec