word2vec前世今生


word2vec前世今生

2013年,Google開源了一款用於詞向量計算的工具——word2vec,引起了工業界和學術界的關注。首先,word2vec可以在百萬數量級的詞典和上億的數據集上進行高效地訓練;其次,該工具得到的訓練結果——詞向量(word embedding),可以很好地度量詞與詞之間的相似性。隨着深度學習(Deep Learning)在自然語言處理中應用的普及,很多人誤以為word2vec是一種深度學習算法。其實word2vec算法的背后是一個淺層神經網絡。另外需要強調的一點是,word2vec是一個計算word vector的開源工具。當我們在說word2vec算法或模型的時候,其實指的是其背后用於計算word vector的CBoW模型和Skip-gram模型。很多人以為word2vec指的是一個算法或模型,這也是一種謬誤。接下來,本文將從統計語言模型出發,盡可能詳細地介紹word2vec工具背后的算法模型的來龍去脈。

Statistical Language Model

在深入word2vec算法的細節之前,我們首先回顧一下自然語言處理中的一個基本問題:如何計算一段文本序列在某種語言下出現的概率?之所為稱其為一個基本問題,是因為它在很多NLP任務中都扮演着重要的角色。例如,在機器翻譯的問題中,如果我們知道了目標語言中每句話的概率,就可以從候選集合中挑選出最合理的句子做為翻譯結果返回。

統計語言模型給出了這一類問題的一個基本解決框架。對於一段文本序列\(S=w_1, w_2, ... , w_T\),它的概率可以表示為:

\[P(S)=P(w_1, w_2, ..., w_T)=\prod_{t=1}^Tp(w_t|w_1, w_2, ..., w_{t-1}) \]

即將序列的聯合概率轉化為一系列條件概率的乘積。問題變成了如何去預測這些給定previous words下的條件概率\(p(w_t|w_1,w_2,...,w_{t-1})\)

由於其巨大的參數空間,這樣一個原始的模型在實際中並沒有什么卵用。我們更多的是采用其簡化版本——Ngram模型:

\[p(w_t|w_1, w_2, ..., w_{t-1}) \approx p(w_t|w_{t-n+1}, ..., w_{t-1}) \]

常見的如bigram模型(\(N=2\))和trigram模型(\(N=3\))。事實上,由於模型復雜度和預測精度的限制,我們很少會考慮\(N>3\)的模型。

我們可以用最大似然法去求解Ngram模型的參數——等價於去統計每個Ngram的條件詞頻。

為了避免統計中出現的零概率問題(一段從未在訓練集中出現過的Ngram片段會使得整個序列的概率為\(0\)),人們基於原始的Ngram模型進一步發展出了back-off trigram模型(用低階的bigram和unigram代替零概率的trigram)和interpolated trigram模型(將條件概率表示為unigram、bigram、trigram三者的線性函數)。此處不再贅述。感興趣者可進一步閱讀相關的文獻[3]。

Distributed Representation

不過,Ngram模型仍有其局限性。首先,由於參數空間的爆炸式增長,它無法處理更長程的context(\(N>3\))。其次,它沒有考慮詞與詞之間內在的聯系性。例如,考慮"the cat is walking in the bedroom"這句話。如果我們在訓練語料中看到了很多類似“the dog is walking in the bedroom”或是“the cat is running in the bedroom”這樣的句子,那么,即使我們沒有見過這句話,也可以從“cat”和“dog”(“walking”和“running”)之間的相似性,推測出這句話的概率[3]。然而, Ngram模型做不到。

這是因為,Ngram本質上是將詞當做一個個孤立的原子單元(atomic unit)去處理的。這種處理方式對應到數學上的形式是一個個離散的one-hot向量(除了一個詞典索引的下標對應的方向上是\(1\),其余方向上都是\(0\))。例如,對於一個大小為\(5\)的詞典:{"I", "love", "nature", "luaguage", "processing"},“nature”對應的one-hot向量為:\([0, 0, 1, 0, 0]\)。顯然,one-hot向量的維度等於詞典的大小。這在動輒上萬甚至百萬詞典的實際應用中,面臨着巨大的維度災難問題(the curse of dimensionality)

於是,人們就自然而然地想到,能否用一個連續的稠密向量去刻畫一個word的特征呢?這樣,我們不僅可以直接刻畫詞與詞之間的相似度,還可以建立一個從向量到概率的平滑函數模型,使得相似的詞向量可以映射到相近的概率空間上。這個稠密連續向量也被稱為word的distributed representation[3]。

事實上,這個概念在信息檢索(Information Retrieval)領域早就已經被廣泛地使用了。只不過,在IR領域里,這個概念被稱為向量空間模型(Vector Space Model,以下簡稱VSM)。

VSM是基於一種Statistical Semantics Hypothesis[4]:語言的統計特征隱藏着語義的信息(Statistical pattern of human word usage can be used to figure out what people mean)。例如,兩篇具有相似詞分布的文檔可以被認為是有着相近的主題。這個Hypothesis有很多衍生版本。其中,比較廣為人知的兩個版本是Bag of Words Hypothesis和Distributional Hypothesis。前者是說,一篇文檔的詞頻(而不是詞序)代表了文檔的主題;后者是說,上下文環境相似的兩個詞有着相近的語義。后面我們會看到,word2vec算法也是基於Distributional的假設。

那么,VSM是如何將稀疏離散的one-hot詞向量映射為稠密連續的distributional representation的呢?

簡單來說,基於Bag of Words Hypothesis,我們可以構造一個term-document矩陣\(A\):矩陣的行\(A_{i,:}\)對應着詞典里的一個word;矩陣的列\(A_{:,j}\)對應着訓練語料里的一篇文檔;矩陣里的元素\(A_{ij}\)代表着word \(w_i\)在文檔\(D_j\)中出現的次數(或頻率)。那么,我們就可以提取行向量做為word的語義向量(不過,在實際應用中,我們更多的是用列向量做為文檔的主題向量)。

類似地,我們可以基於Distributional Hypothesis構造一個word-context的矩陣。此時,矩陣的列變成了context里的word,矩陣的元素也變成了一個context窗口里word的共現次數。

注意,這兩類矩陣的行向量所計算的相似度有着細微的差異:term-document矩陣會給經常出現在同一篇document里的兩個word賦予更高的相似度;而word-context矩陣會給那些有着相同context的兩個word賦予更高的相似度。后者相對於前者是一種更高階的相似度,因此在傳統的信息檢索領域中得到了更加廣泛的應用。

不過,這種co-occurrence矩陣仍然存在着數據稀疏性和維度災難的問題。為此,人們提出了一系列對矩陣進行降維的方法(如LSI/LSA等)。這些方法大都是基於SVD的思想,將原始的稀疏矩陣分解為兩個低秩矩陣乘積的形式。

關於VSM更多的介紹,可以進一步閱讀文末的參考文獻[4]。

Neural Network Language Model

接下來,讓我們回到對統計語言模型的討論。鑒於Ngram等模型的不足,2003年,Bengio等人發表了一篇開創性的文章:A neural probabilistic language model[3]。在這篇文章里,他們總結出了一套用神經網絡建立統計語言模型的框架(Neural Network Language Model,以下簡稱NNLM),並首次提出了word embedding的概念(雖然沒有叫這個名字),從而奠定了包括word2vec在內后續研究word representation learning的基礎。

NNLM模型的基本思想可以概括如下:

  1. 假定詞表中的每一個word都對應着一個連續的特征向量;
  2. 假定一個連續平滑的概率模型,輸入一段詞向量的序列,可以輸出這段序列的聯合概率;
  3. 同時學習詞向量的權重和概率模型里的參數。

值得注意的一點是,這里的詞向量也是要學習的參數。

在03年的論文里,Bengio等人采用了一個簡單的前向反饋神經網絡\(f(w_{t-n+1},...,w_{t})\)來擬合一個詞序列的條件概率\(p(w_t|w_1,w_2,...,w_{t-1})\)。整個模型的網絡結構見下圖:

the neural network language model

我們可以將整個模型拆分成兩部分加以理解:

  1. 首先是一個線性的embedding層。它將輸入的\(N-1\)個one-hot詞向量,通過一個共享的\(D \times V\)的矩陣\(C\),映射為\(N-1\)個分布式的詞向量(distributed vector)。其中,\(V\)是詞典的大小,\(D\)是embedding向量的維度(一個先驗參數)。\(C\)矩陣里存儲了要學習的word vector。
  2. 其次是一個簡單的前向反饋神經網絡\(g\)。它由一個tanh隱層和一個softmax輸出層組成。通過將embedding層輸出的\(N-1\)個詞向量映射為一個長度為\(V\)的概率分布向量,從而對詞典中的word在輸入context下的條件概率做出預估:

\[p(w_i|w_1,w_2,...,w_{t-1}) \approx f(w_i, w_{t-1}, ..., w_{t-n+1}) = g(w_i, C(w_{t-n+1}), ..., C(w_{t-1})) \]

我們可以通過最小化一個cross-entropy的正則化損失函數來調整模型的參數\(\theta\)

\[L(\theta)=\frac{1}{T}\sum_t{\log{f(w_t, w_{t-1}, ..., w_{t-n+1})}}+R(\theta) \]

其中,模型的參數\(\theta\)包括了embedding層矩陣\(C\)的元素,和前向反饋神經網絡模型\(g\)里的權重。這是一個巨大的參數空間。不過,在用SGD學習更新模型的參數時,並不是所有的參數都需要調整(例如未在輸入的context中出現的詞對應的詞向量)。計算的瓶頸主要是在softmax層的歸一化函數上(需要對詞典中所有的word計算一遍條件概率)。

然而,拋卻復雜的參數空間,我們不禁要問,為什么這樣一個簡單的模型會取得巨大的成功呢?

仔細觀察這個模型就會發現,它其實在同時解決兩個問題:一個是統計語言模型里關注的條件概率\(p(w_t|context)\)的計算;一個是向量空間模型里關注的詞向量的表達。而這兩個問題本質上並不獨立。通過引入連續的詞向量和平滑的概率模型,我們就可以在一個連續空間里對序列概率進行建模,從而從根本上緩解數據稀疏性和維度災難的問題。另一方面,以條件概率\(p(w_t|context)\)為學習目標去更新詞向量的權重,具有更強的導向性,同時也與VSM里的Distributional Hypothesis不謀而合。

CBoW & Skip-gram Model

鋪墊了這么多,終於要輪到主角出場了。

不過在主角正式登場前,我們先看一下NNLM存在的幾個問題。

一個問題是,同Ngram模型一樣,NNLM模型只能處理定長的序列。在03年的論文里,Bengio等人將模型能夠一次處理的序列長度\(N\)提高到了\(5\),雖然相比bigram和trigram已經是很大的提升,但依然缺少靈活性。

因此,Mikolov等人在2010年提出了一種RNNLM模型[7],用遞歸神經網絡代替原始模型里的前向反饋神經網絡,並將embedding層與RNN里的隱藏層合並,從而解決了變長序列的問題。

另一個問題就比較嚴重了。NNLM的訓練太慢了。即便是在百萬量級的數據集上,即便是借助了40個CPU進行訓練,NNLM也需要耗時數周才能給出一個稍微靠譜的解來。顯然,對於現在動輒上千萬甚至上億的真實語料庫,訓練一個NNLM模型幾乎是一個impossible mission。

這時候,還是那個Mikolov站了出來。他注意到,原始的NNLM模型的訓練其實可以拆分成兩個步驟:

  1. 用一個簡單模型訓練出連續的詞向量;
  2. 基於詞向量的表達,訓練一個連續的Ngram神經網絡模型。
    而NNLM模型的計算瓶頸主要是在第二步。

如果我們只是想得到word的連續特征向量,是不是可以對第二步里的神經網絡模型進行簡化呢?

Mikolov是這么想的,也是這么做的。他在2013年一口氣推出了兩篇paper,並開源了一款計算詞向量的工具——至此,word2vec橫空出世,主角閃亮登場。

下面,我將帶領大家簡單剖析下word2vec算法的原理。有了前文的基礎,理解word2vec算法就變得很簡單了。

首先,我們對原始的NNLM模型做如下改造:

  1. 移除前向反饋神經網絡中非線性的hidden layer,直接將中間層的embedding layer與輸出層的softmax layer連接;
  2. 忽略上下文環境的序列信息:輸入的所有詞向量均匯總到同一個embedding layer;
  3. 將future words納入上下文環境

得到的模型稱之為CBoW模型(Continuous Bag-of-Words Model),也是word2vec算法的第一個模型:

CBoW Model

從數學上看,CBoW模型等價於一個詞袋模型的向量乘以一個embedding矩陣,從而得到一個連續的embedding向量。這也是CBoW模型名稱的由來。

CBoW模型依然是從context對target word的預測中學習到詞向量的表達。反過來,我們能否從target word對context的預測中學習到word vector呢?答案顯然是可以的:

Skip-gram Model

這個模型被稱為Skip-gram模型(名稱源於該模型在訓練時會對上下文環境里的word進行采樣)。

如果將Skip-gram模型的前向計算過程寫成數學形式,我們得到:

\[p(w_o|w_i)=\frac{e^{U_o \cdot V_i}}{\sum_j{e^{U_j \cdot V_i}}} \]

其中,\(V_i\)是embedding層矩陣里的列向量,也被稱為\(w_i\)的input vector。\(U_j\)是softmax層矩陣里的行向量,也被稱為\(w_j\)的output vector。

因此,Skip-gram模型的本質是計算輸入word的input vector與目標word的output vector之間的余弦相似度,並進行softmax歸一化。我們要學習的模型參數正是這兩類詞向量。

然而,直接對詞典里的\(V\)個詞計算相似度並歸一化,顯然是一件極其耗時的impossible mission。為此,Mikolov引入了兩種優化算法:層次Softmax(Hierarchical Softmax)和負采樣(Negative Sampling)。

Hierarchical Softmax[5]

層次Softmax的方法最早由Bengio在05年引入到語言模型中。它的基本思想是將復雜的歸一化概率分解為一系列條件概率乘積的形式:

\[p(v|context)=\prod_{i=1}^m{p(b_i(v)|b_1(v), ..., b_{i-1}(v), context)} \]

其中,每一層條件概率對應一個二分類問題,可以通過一個簡單的邏輯回歸函數去擬合。這樣,我們將對\(V\)個詞的概率歸一化問題,轉化成了對\(\log{V}\)個詞的概率擬合問題。

我們可以通過構造一顆分類二叉樹來直觀地理解這個過程。首先,我們將原始字典\(D\)划分為兩個子集\(D_1\)\(D_2\),並假設在給定context下,target word屬於子集\(D_1\)的概率\(p(w_t \in D_1|context)\)服從logistical function的形式:

\[p(w_t \in D_1|context)=\frac{1}{1+e^{-U_{D_{root}} \cdot V_{w_t}}} \]

其中,\(U_{D_{root}}\)\(V_{w_t}\)都是模型的參數。

接下來,我們可以對子集\(D_1\)\(D_2\)進一步划分。重復這一過程,直到集合里只剩下一個word。這樣,我們就將原始大小為\(V\)的字典\(D\)轉換成了一顆深度為\(\log V\)的二叉樹。樹的葉子節點與原始字典里的word一一對應;非葉節點則對應着某一類word的集合。顯然,從根節點出發到任意一個葉子節點都只有一條唯一路徑——這條路徑也編碼了這個葉子節點所屬的類別。

同時,從根節點出發到葉子節點也是一個隨機游走的過程。因此,我們可以基於這顆二叉樹對葉子節點出現的似然概率進行計算。例如,對於訓練樣本里的一個target word \(w_t\),假設其對應的二叉樹編碼為\(\{1, 0, 1, ..., 1\}\),則我們構造的似然函數為:

\[p(w_t|context)=p(D_1=1|context)p(D_2=0|D_1=1)\dots p(w_t|D_k=1) \]

乘積中的每一項都是一個邏輯回歸的函數。

我們可以通過最大化這個似然函數來求解二叉樹上的參數——非葉節點上的向量,用來計算游走到某一個子節點的概率。

層次Softmax是一個很巧妙的模型。它通過構造一顆二叉樹,將目標概率的計算復雜度從最初的\(V\)降低到了\(\log V\)的量級。不過付出的代價是人為增強了詞與詞之間的耦合性。例如,一個word出現的條件概率的變化,會影響到其路徑上所有非葉節點的概率變化,間接地對其他word出現的條件概率帶來不同程度的影響。因此,構造一顆有意義的二叉樹就顯得十分重要。實踐證明,在實際的應用中,基於Huffman編碼的二叉樹可以滿足大部分應用場景的需求。

Negative Sampling[6]

負采樣的思想最初來源於一種叫做Noise-Contrastive Estimation的算法[6],原本是為了解決那些無法歸一化的概率模型的參數預估問題。與改造模型輸出概率的層次Softmax算法不同,NCE算法改造的是模型的似然函數。

以Skip-gram模型為例,其原始的似然函數對應着一個Multinomial的分布。在用最大似然法求解這個似然函數時,我們得到一個cross-entropy的損失函數:

\[J(\theta)=-\frac{1}{T}\sum_{t=1}^T{\sum_{-c \leq j \leq c, j \neq 0}{\log p(w_{t+j}|w_t)}} \]

式中的\(p(w_{t+j}|w_t)\)是一個在整個字典上歸一化了的概率。

而在NCE算法中,我們構造了這樣一個問題:對於一組訓練樣本<context, word>,我們想知道,target word的出現,是來自於context的驅動,還是一個事先假定的背景噪聲的驅動?顯然,我們可以用一個邏輯回歸的函數來回答這個問題:

\[p(D=1|w, context)=\frac{p(w|context)}{p(w|context)+kp_n(w)}=\sigma (\log p(w|context) - \log kp_n(w)) \]

這個式子給出了一個target word \(w\)來自於context驅動的概率。其中,\(k\)是一個先驗參數,表明噪聲的采樣頻率。\(p(w|context)\)是一個非歸一化的概率分布,這里采用softmax歸一化函數中的分子部分。\(p_n(w)\)則是背景噪聲的詞分布。通常采用word的unigram分布。

通過對噪聲分布的\(k\)采樣,我們得到一個新的數據集:<context, word, label>。其中,label標記了數據的來源(真實數據分布還是背景噪聲分布?)。在這個新的數據集上,我們就可以用最大化上式中邏輯回歸的似然函數來求解模型的參數。

而Mikolov在2013年的論文里提出的負采樣算法, 是NCE的一個簡化版本。在這個算法里,Mikolov拋棄了NCE似然函數中對噪聲分布的依賴,直接用原始softmax函數里的分子定義了邏輯回歸的函數,進一步簡化了計算:

\[p(D=1|w_o, w_i)=\sigma (U_o \cdot V_i) \]

此時,模型相應的目標函數變為:

\[J(\theta) = \log \sigma(U_o \cdot V_i) + \sum_{j=1}^k{E_{w_j \sim p_n(w)}[\log \sigma(- U_j \cdot V_i)]} \]

除了這里介紹的層次Softmax和負采樣的優化算法,Mikolov在13年的論文里還介紹了另一個trick:下采樣(subsampling)。其基本思想是在訓練時依概率隨機丟棄掉那些高頻的詞:

\[p_{discard}(w) = 1 - \sqrt{\frac{t}{f(w)}} \]

其中,\(t\)是一個先驗參數,一般取為\(10^{-5}\)\(f(w)\)\(w\)在語料中出現的頻率。

實驗證明,這種下采樣技術可以顯著提高低頻詞的詞向量的准確度。

Beyond the Word Vector

介紹完word2vec模型的算法和原理,我們來討論一些輕松點的話題——模型的應用。

13年word2vec模型橫空出世后,人們最津津樂道的是它學到的向量在語義和語法相似性上的應用——尤其是這種相似性居然對數學上的加減操作有意義[8]!最經典的一個例子是,\(v("King") - v("Man") + v("Woman") = v("Queen")\)。然而,這種例子似乎並沒有太多實際的用途。

除此之外,word2vec模型還被應用於機器翻譯和推薦系統領域。

Machine Translation[9]

與后來提出的在sentence level上進行機器翻譯的RNN模型不同,word2vec模型主要是用於詞粒度上的機器翻譯。

具體來說,我們首先從大量的單語種語料中學習到每種語言的word2vec表達,再借助一個小的雙語語料庫學習到兩種語言word2vec表達的線性映射關系\(W\)。構造的損失函數為:

\[J(W)=\sum_{i=1}^n{||Wx_i - z_i||^2} \]

在翻譯的過程中,我們首先將源語言的word2vec向量通過矩陣\(W\)映射到目標語言的向量空間上;再在目標語言的向量空間中找出與投影向量距離最近的word做為翻譯的結果返回。

其原理是,不同語言學習到的word2vec向量空間在幾何上具有一定的同構性。映射矩陣\(W\)本質上是一種空間對齊的線性變換。

Item2Vec[11]

本質上,word2vec模型是在word-context的co-occurrence矩陣基礎上建立起來的。因此,任何基於co-occurrence矩陣的算法模型,都可以套用word2vec算法的思路加以改進。

比如,推薦系統領域的協同過濾算法。

協同過濾算法是建立在一個user-item的co-occurrence矩陣的基礎上,通過行向量或列向量的相似性進行推薦。如果我們將同一個user購買的item視為一個context,就可以建立一個item-context的矩陣。進一步的,可以在這個矩陣上借鑒CBoW模型或Skip-gram模型計算出item的向量表達,在更高階上計算item間的相似度。

關於word2vec更多應用的介紹,可以進一步參考這篇文獻[10]。

Word Embedding

最后,我想簡單闡述下我對word embedding的幾點思考。不一定正確,也歡迎大家提出不同的意見。

Word embedding最早出現於Bengio在03年發表的開創性文章中[3]。通過嵌入一個線性的投影矩陣(projection matrix),將原始的one-hot向量映射為一個稠密的連續向量,並通過一個語言模型的任務去學習這個向量的權重。這一思想后來被廣泛應用於包括word2vec在內的各種NLP模型中。

Word embedding的訓練方法大致可以分為兩類:一類是無監督或弱監督的預訓練;一類是端對端(end to end)的有監督訓練。

無監督或弱監督的預訓練以word2vec和auto-encoder為代表。這一類模型的特點是,不需要大量的人工標記樣本就可以得到質量還不錯的embedding向量。不過因為缺少了任務導向,可能和我們要解決的問題還有一定的距離。因此,我們往往會在得到預訓練的embedding向量后,用少量人工標注的樣本去fine-tune整個模型。

相比之下,端對端的有監督模型在最近幾年里越來越受到人們的關注。與無監督模型相比,端對端的模型在結構上往往更加復雜。同時,也因為有着明確的任務導向,端對端模型學習到的embedding向量也往往更加准確。例如,通過一個embedding層和若干個卷積層連接而成的深度神經網絡以實現對句子的情感分類,可以學習到語義更豐富的詞向量表達。

Word embedding的另一個研究方向是在更高層次上對sentence的embedding向量進行建模。

我們知道,word是sentence的基本組成單位。一個最簡單也是最直接得到sentence embedding的方法是將組成sentence的所有word的embedding向量全部加起來——類似於CBoW模型。

顯然,這種簡單粗暴的方法會丟失很多信息。

另一種方法借鑒了word2vec的思想——將sentence或是paragraph視為一個特殊的word,然后用CBoW模型或是Skip-gram進行訓練[12]。這種方法的問題在於,對於一篇新文章,總是需要重新訓練一個新的sentence2vec。此外,同word2vec一樣,這個模型缺少有監督的訓練導向。

個人感覺比較靠譜的是第三種方法——基於word embedding的端對端的訓練。Sentence本質上是word的序列。因此,在word embedding的基礎上,我們可以連接多個RNN模型或是卷積神經網絡,對word embedding序列進行編碼,從而得到sentence embedding。

這方面的工作已有很多。有機會,我會再寫一篇關於sentence embedding的綜述。

References

[1]: Mikolov, T., Chen, K., Corrado, G., & Dean, J. (2013, January 17). Efficient Estimation of Word Representations in Vector Space. arXiv.org.

[2]: Mikolov, T., Sutskever, I., Chen, K., Corrado, G., & Dean, J. (2013, October 17). Distributed Representations of Words and Phrases and their Compositionality. arXiv.org.

[3]: Bengio, Y., Ducharme, R., Vincent, P., & Janvin, C. (2003). A neural probabilistic language model. The Journal of Machine Learning Research, 3, 1137–1155.

[4]: Turney, P. D., & Pantel, P. (2010). From frequency to meaning: vector space models of semantics. Journal of Artificial Intelligence Research, 37(1).

[5]: Morin, F., & Bengio, Y. (2005). Hierarchical Probabilistic Neural Network Language Model. Aistats.

[6]: Mnih, A., & Kavukcuoglu, K. (2013). Learning word embeddings efficiently with noise-contrastive estimation, 2265–2273.

[7]: Mikolov, T., Karafiát, M., Burget, L., & Cernocký, J. (2010). Recurrent neural network based language model. Interspeech.

[8]: Mikolov, T., Yih, W., & Zweig, G. (2013). Linguistic Regularities in Continuous Space Word Representations. Hlt-Naacl.

[9]: Mikolov, T., Le, Q. V., & Sutskever, I. (2013, September 17). Exploiting Similarities among Languages for Machine Translation. arXiv.org.

[10]: Collobert, R., Weston, J., Bottou, L., Karlen, M., Kavukcuoglu, K., & Kuksa, P. (2011). Natural Language Processing (Almost) from Scratch. Journal of Machine Learning Research, 12(Aug), 2493–2537.

[11]: Barkan, O., & Koenigstein, N. (2016, March 14). Item2Vec: Neural Item Embedding for Collaborative Filtering. arXiv.org.

[12]: Le, Q. V., & Mikolov, T. (2014, May 16). Distributed Representations of Sentences and Documents. arXiv.org.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM