'Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越'

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們將每個單詞表示為d維向量。我們用d = 6。從這個句子中,我們想為每個單詞創建一個單詞向量。

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們將每個單詞表示為d維向量。我們用d = 6。從這個句子中,我們想為每個單詞創建一個單詞向量。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

現在我們來考慮如何填充這些值。我們希望以這樣一種方式填充值,即向量以某種方式表示單詞及其上下文、含義或語義。一種方法是創建一個共現矩陣。

共現矩陣是一個矩陣,它包含出現在語料庫(或訓練集)中所有其他單詞旁邊的每個單詞的計數。讓我們把這個矩陣可視化。

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們將每個單詞表示為d維向量。我們用d = 6。從這個句子中,我們想為每個單詞創建一個單詞向量。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

現在我們來考慮如何填充這些值。我們希望以這樣一種方式填充值,即向量以某種方式表示單詞及其上下文、含義或語義。一種方法是創建一個共現矩陣。

共現矩陣是一個矩陣,它包含出現在語料庫(或訓練集)中所有其他單詞旁邊的每個單詞的計數。讓我們把這個矩陣可視化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們將每個單詞表示為d維向量。我們用d = 6。從這個句子中,我們想為每個單詞創建一個單詞向量。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

現在我們來考慮如何填充這些值。我們希望以這樣一種方式填充值,即向量以某種方式表示單詞及其上下文、含義或語義。一種方法是創建一個共現矩陣。

共現矩陣是一個矩陣,它包含出現在語料庫(或訓練集)中所有其他單詞旁邊的每個單詞的計數。讓我們把這個矩陣可視化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

注意,通過這個簡單的矩陣,我們可以獲得非常有用的見解。例如,請注意,單詞“love”和“like”都包含1,表示它們與名詞(NLP和dogs)的計數,它們的“I”的計數也是1,這意味著單詞必須是某種動詞。有了比一個句子更大的數據集,您可以想象這種相似性將變得更加清晰,因為“like”、“love”和其他同義詞將開始具有類似的單詞向量,因為它們在類似的上下文中使用。

現在,儘管這是一個很好的起點,我們注意到每個單詞的維度會隨著語料庫的大小線性增加。如果我們有一百萬個單詞(在NLP標準中不是很多),我們就會有一個百萬×百萬大小的矩陣,這個矩陣非常稀疏(很多0)。在存儲效率方面肯定不是最好的。在尋找最優的方法來表示這些詞向量方面已經取得了許多進展。其中最著名的是Word2Vec。

過去的方法

向量空間模型(VSMs)在一個連續的向量空間中表示(嵌入)單詞,在這個空間中,語義相似的單詞映射成的點相互靠近(“彼此嵌入到附近”)。VSMs在NLP中有著悠久而豐富的歷史,但所有的方法都或多或少地依賴於分佈假設,即出現在相同上下文中的詞具有相同的語義。利用這一原則的不同方法可分為兩類:

  1. 基於計數的方法(如潛在語義分析)
  2. 預測方法(如神經概率語言模型)

區別是:

基於計數的方法計算某個單詞在大型文本語料庫中與相鄰單詞共出現的頻率,然後將這些計數統計信息映射成每個單詞的小而密集的向量。

預測模型直接試圖通過學習小的、密集的嵌入向量(考慮模型的參數)來預測相鄰單詞。

Word2vec是一種從原始文本中學習嵌入詞的高效預測模型。它有兩種風格,連續的詞袋模型(CBOW)和跳格模型。從算法上來說,這些模型是相似的,CBOW從源上下文詞預測目標詞,而skip-gram則相反,從目標詞預測源上下文詞。

在接下來的討論中,我們將重點討論skip-gram模型。

其中的數學

神經概率語言模型使用極大似然原理進行傳統的訓練,給定前一個單詞h(表示“歷史”),使用softmax函數表示下一個單詞wt(表示“目標”)的概率,並使得整個概率最大化。

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們將每個單詞表示為d維向量。我們用d = 6。從這個句子中,我們想為每個單詞創建一個單詞向量。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

現在我們來考慮如何填充這些值。我們希望以這樣一種方式填充值,即向量以某種方式表示單詞及其上下文、含義或語義。一種方法是創建一個共現矩陣。

共現矩陣是一個矩陣,它包含出現在語料庫(或訓練集)中所有其他單詞旁邊的每個單詞的計數。讓我們把這個矩陣可視化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

注意,通過這個簡單的矩陣,我們可以獲得非常有用的見解。例如,請注意,單詞“love”和“like”都包含1,表示它們與名詞(NLP和dogs)的計數,它們的“I”的計數也是1,這意味著單詞必須是某種動詞。有了比一個句子更大的數據集,您可以想象這種相似性將變得更加清晰,因為“like”、“love”和其他同義詞將開始具有類似的單詞向量,因為它們在類似的上下文中使用。

現在,儘管這是一個很好的起點,我們注意到每個單詞的維度會隨著語料庫的大小線性增加。如果我們有一百萬個單詞(在NLP標準中不是很多),我們就會有一個百萬×百萬大小的矩陣,這個矩陣非常稀疏(很多0)。在存儲效率方面肯定不是最好的。在尋找最優的方法來表示這些詞向量方面已經取得了許多進展。其中最著名的是Word2Vec。

過去的方法

向量空間模型(VSMs)在一個連續的向量空間中表示(嵌入)單詞,在這個空間中,語義相似的單詞映射成的點相互靠近(“彼此嵌入到附近”)。VSMs在NLP中有著悠久而豐富的歷史,但所有的方法都或多或少地依賴於分佈假設,即出現在相同上下文中的詞具有相同的語義。利用這一原則的不同方法可分為兩類:

  1. 基於計數的方法(如潛在語義分析)
  2. 預測方法(如神經概率語言模型)

區別是:

基於計數的方法計算某個單詞在大型文本語料庫中與相鄰單詞共出現的頻率,然後將這些計數統計信息映射成每個單詞的小而密集的向量。

預測模型直接試圖通過學習小的、密集的嵌入向量(考慮模型的參數)來預測相鄰單詞。

Word2vec是一種從原始文本中學習嵌入詞的高效預測模型。它有兩種風格,連續的詞袋模型(CBOW)和跳格模型。從算法上來說,這些模型是相似的,CBOW從源上下文詞預測目標詞,而skip-gram則相反,從目標詞預測源上下文詞。

在接下來的討論中,我們將重點討論skip-gram模型。

其中的數學

神經概率語言模型使用極大似然原理進行傳統的訓練,給定前一個單詞h(表示“歷史”),使用softmax函數表示下一個單詞wt(表示“目標”)的概率,並使得整個概率最大化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

其中score(wt, h)計算目標詞wt與上下文h的兼容性(通常使用點積)。

我們通過在訓練集中最大化它的對數似然來訓練這個模型:

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們將每個單詞表示為d維向量。我們用d = 6。從這個句子中,我們想為每個單詞創建一個單詞向量。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

現在我們來考慮如何填充這些值。我們希望以這樣一種方式填充值,即向量以某種方式表示單詞及其上下文、含義或語義。一種方法是創建一個共現矩陣。

共現矩陣是一個矩陣,它包含出現在語料庫(或訓練集)中所有其他單詞旁邊的每個單詞的計數。讓我們把這個矩陣可視化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

注意,通過這個簡單的矩陣,我們可以獲得非常有用的見解。例如,請注意,單詞“love”和“like”都包含1,表示它們與名詞(NLP和dogs)的計數,它們的“I”的計數也是1,這意味著單詞必須是某種動詞。有了比一個句子更大的數據集,您可以想象這種相似性將變得更加清晰,因為“like”、“love”和其他同義詞將開始具有類似的單詞向量,因為它們在類似的上下文中使用。

現在,儘管這是一個很好的起點,我們注意到每個單詞的維度會隨著語料庫的大小線性增加。如果我們有一百萬個單詞(在NLP標準中不是很多),我們就會有一個百萬×百萬大小的矩陣,這個矩陣非常稀疏(很多0)。在存儲效率方面肯定不是最好的。在尋找最優的方法來表示這些詞向量方面已經取得了許多進展。其中最著名的是Word2Vec。

過去的方法

向量空間模型(VSMs)在一個連續的向量空間中表示(嵌入)單詞,在這個空間中,語義相似的單詞映射成的點相互靠近(“彼此嵌入到附近”)。VSMs在NLP中有著悠久而豐富的歷史,但所有的方法都或多或少地依賴於分佈假設,即出現在相同上下文中的詞具有相同的語義。利用這一原則的不同方法可分為兩類:

  1. 基於計數的方法(如潛在語義分析)
  2. 預測方法(如神經概率語言模型)

區別是:

基於計數的方法計算某個單詞在大型文本語料庫中與相鄰單詞共出現的頻率,然後將這些計數統計信息映射成每個單詞的小而密集的向量。

預測模型直接試圖通過學習小的、密集的嵌入向量(考慮模型的參數)來預測相鄰單詞。

Word2vec是一種從原始文本中學習嵌入詞的高效預測模型。它有兩種風格,連續的詞袋模型(CBOW)和跳格模型。從算法上來說,這些模型是相似的,CBOW從源上下文詞預測目標詞,而skip-gram則相反,從目標詞預測源上下文詞。

在接下來的討論中,我們將重點討論skip-gram模型。

其中的數學

神經概率語言模型使用極大似然原理進行傳統的訓練,給定前一個單詞h(表示“歷史”),使用softmax函數表示下一個單詞wt(表示“目標”)的概率,並使得整個概率最大化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

其中score(wt, h)計算目標詞wt與上下文h的兼容性(通常使用點積)。

我們通過在訓練集中最大化它的對數似然來訓練這個模型:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這為語言建模提供了一個適當規範化的概率模型。

同樣的參數也可以用一個稍微不同的公式來表示,它清楚地顯示了選擇變量(或參數),這個變量是為了最大化這個目標而改變的。

我們的目標是找到對預測當前單詞周圍單詞有用的詞表示。特別是,我們希望最大化整個語料庫的平均對數概率:

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們將每個單詞表示為d維向量。我們用d = 6。從這個句子中,我們想為每個單詞創建一個單詞向量。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

現在我們來考慮如何填充這些值。我們希望以這樣一種方式填充值,即向量以某種方式表示單詞及其上下文、含義或語義。一種方法是創建一個共現矩陣。

共現矩陣是一個矩陣,它包含出現在語料庫(或訓練集)中所有其他單詞旁邊的每個單詞的計數。讓我們把這個矩陣可視化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

注意,通過這個簡單的矩陣,我們可以獲得非常有用的見解。例如,請注意,單詞“love”和“like”都包含1,表示它們與名詞(NLP和dogs)的計數,它們的“I”的計數也是1,這意味著單詞必須是某種動詞。有了比一個句子更大的數據集,您可以想象這種相似性將變得更加清晰,因為“like”、“love”和其他同義詞將開始具有類似的單詞向量,因為它們在類似的上下文中使用。

現在,儘管這是一個很好的起點,我們注意到每個單詞的維度會隨著語料庫的大小線性增加。如果我們有一百萬個單詞(在NLP標準中不是很多),我們就會有一個百萬×百萬大小的矩陣,這個矩陣非常稀疏(很多0)。在存儲效率方面肯定不是最好的。在尋找最優的方法來表示這些詞向量方面已經取得了許多進展。其中最著名的是Word2Vec。

過去的方法

向量空間模型(VSMs)在一個連續的向量空間中表示(嵌入)單詞,在這個空間中,語義相似的單詞映射成的點相互靠近(“彼此嵌入到附近”)。VSMs在NLP中有著悠久而豐富的歷史,但所有的方法都或多或少地依賴於分佈假設,即出現在相同上下文中的詞具有相同的語義。利用這一原則的不同方法可分為兩類:

  1. 基於計數的方法(如潛在語義分析)
  2. 預測方法(如神經概率語言模型)

區別是:

基於計數的方法計算某個單詞在大型文本語料庫中與相鄰單詞共出現的頻率,然後將這些計數統計信息映射成每個單詞的小而密集的向量。

預測模型直接試圖通過學習小的、密集的嵌入向量(考慮模型的參數)來預測相鄰單詞。

Word2vec是一種從原始文本中學習嵌入詞的高效預測模型。它有兩種風格,連續的詞袋模型(CBOW)和跳格模型。從算法上來說,這些模型是相似的,CBOW從源上下文詞預測目標詞,而skip-gram則相反,從目標詞預測源上下文詞。

在接下來的討論中,我們將重點討論skip-gram模型。

其中的數學

神經概率語言模型使用極大似然原理進行傳統的訓練,給定前一個單詞h(表示“歷史”),使用softmax函數表示下一個單詞wt(表示“目標”)的概率,並使得整個概率最大化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

其中score(wt, h)計算目標詞wt與上下文h的兼容性(通常使用點積)。

我們通過在訓練集中最大化它的對數似然來訓練這個模型:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這為語言建模提供了一個適當規範化的概率模型。

同樣的參數也可以用一個稍微不同的公式來表示,它清楚地顯示了選擇變量(或參數),這個變量是為了最大化這個目標而改變的。

我們的目標是找到對預測當前單詞周圍單詞有用的詞表示。特別是,我們希望最大化整個語料庫的平均對數概率:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這個方程本質上是說,在當前單詞wt上,大小為c 的窗口內,觀察某個特定單詞的概率p。這個概率取決於當前單詞wt和某個參數theta的設置(由我們的模型決定)。我們希望設置這些參數theta,使這個概率在整個語料庫中最大化。

基本參數化:Softmax模型

基本的skip-gram模型通過softmax函數定義了概率p,正如我們前面看到的那樣。如果我們認為wi是一個獨熱編碼向量,維數是N,theta是維數為N * K的嵌入矩陣在我們的詞彙表中有N個單詞而我們學出來的嵌入表示的維數是K,那麼我們可以定義:

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們將每個單詞表示為d維向量。我們用d = 6。從這個句子中,我們想為每個單詞創建一個單詞向量。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

現在我們來考慮如何填充這些值。我們希望以這樣一種方式填充值,即向量以某種方式表示單詞及其上下文、含義或語義。一種方法是創建一個共現矩陣。

共現矩陣是一個矩陣,它包含出現在語料庫(或訓練集)中所有其他單詞旁邊的每個單詞的計數。讓我們把這個矩陣可視化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

注意,通過這個簡單的矩陣,我們可以獲得非常有用的見解。例如,請注意,單詞“love”和“like”都包含1,表示它們與名詞(NLP和dogs)的計數,它們的“I”的計數也是1,這意味著單詞必須是某種動詞。有了比一個句子更大的數據集,您可以想象這種相似性將變得更加清晰,因為“like”、“love”和其他同義詞將開始具有類似的單詞向量,因為它們在類似的上下文中使用。

現在,儘管這是一個很好的起點,我們注意到每個單詞的維度會隨著語料庫的大小線性增加。如果我們有一百萬個單詞(在NLP標準中不是很多),我們就會有一個百萬×百萬大小的矩陣,這個矩陣非常稀疏(很多0)。在存儲效率方面肯定不是最好的。在尋找最優的方法來表示這些詞向量方面已經取得了許多進展。其中最著名的是Word2Vec。

過去的方法

向量空間模型(VSMs)在一個連續的向量空間中表示(嵌入)單詞,在這個空間中,語義相似的單詞映射成的點相互靠近(“彼此嵌入到附近”)。VSMs在NLP中有著悠久而豐富的歷史,但所有的方法都或多或少地依賴於分佈假設,即出現在相同上下文中的詞具有相同的語義。利用這一原則的不同方法可分為兩類:

  1. 基於計數的方法(如潛在語義分析)
  2. 預測方法(如神經概率語言模型)

區別是:

基於計數的方法計算某個單詞在大型文本語料庫中與相鄰單詞共出現的頻率,然後將這些計數統計信息映射成每個單詞的小而密集的向量。

預測模型直接試圖通過學習小的、密集的嵌入向量(考慮模型的參數)來預測相鄰單詞。

Word2vec是一種從原始文本中學習嵌入詞的高效預測模型。它有兩種風格,連續的詞袋模型(CBOW)和跳格模型。從算法上來說,這些模型是相似的,CBOW從源上下文詞預測目標詞,而skip-gram則相反,從目標詞預測源上下文詞。

在接下來的討論中,我們將重點討論skip-gram模型。

其中的數學

神經概率語言模型使用極大似然原理進行傳統的訓練,給定前一個單詞h(表示“歷史”),使用softmax函數表示下一個單詞wt(表示“目標”)的概率,並使得整個概率最大化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

其中score(wt, h)計算目標詞wt與上下文h的兼容性(通常使用點積)。

我們通過在訓練集中最大化它的對數似然來訓練這個模型:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這為語言建模提供了一個適當規範化的概率模型。

同樣的參數也可以用一個稍微不同的公式來表示,它清楚地顯示了選擇變量(或參數),這個變量是為了最大化這個目標而改變的。

我們的目標是找到對預測當前單詞周圍單詞有用的詞表示。特別是,我們希望最大化整個語料庫的平均對數概率:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這個方程本質上是說,在當前單詞wt上,大小為c 的窗口內,觀察某個特定單詞的概率p。這個概率取決於當前單詞wt和某個參數theta的設置(由我們的模型決定)。我們希望設置這些參數theta,使這個概率在整個語料庫中最大化。

基本參數化:Softmax模型

基本的skip-gram模型通過softmax函數定義了概率p,正如我們前面看到的那樣。如果我們認為wi是一個獨熱編碼向量,維數是N,theta是維數為N * K的嵌入矩陣在我們的詞彙表中有N個單詞而我們學出來的嵌入表示的維數是K,那麼我們可以定義:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

值得注意的是,在學習完了之後,矩陣theta可以被認為是一個嵌入查找表矩陣

在結構上,它是一個簡單的三層神經網絡。

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們將每個單詞表示為d維向量。我們用d = 6。從這個句子中,我們想為每個單詞創建一個單詞向量。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

現在我們來考慮如何填充這些值。我們希望以這樣一種方式填充值,即向量以某種方式表示單詞及其上下文、含義或語義。一種方法是創建一個共現矩陣。

共現矩陣是一個矩陣,它包含出現在語料庫(或訓練集)中所有其他單詞旁邊的每個單詞的計數。讓我們把這個矩陣可視化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

注意,通過這個簡單的矩陣,我們可以獲得非常有用的見解。例如,請注意,單詞“love”和“like”都包含1,表示它們與名詞(NLP和dogs)的計數,它們的“I”的計數也是1,這意味著單詞必須是某種動詞。有了比一個句子更大的數據集,您可以想象這種相似性將變得更加清晰,因為“like”、“love”和其他同義詞將開始具有類似的單詞向量,因為它們在類似的上下文中使用。

現在,儘管這是一個很好的起點,我們注意到每個單詞的維度會隨著語料庫的大小線性增加。如果我們有一百萬個單詞(在NLP標準中不是很多),我們就會有一個百萬×百萬大小的矩陣,這個矩陣非常稀疏(很多0)。在存儲效率方面肯定不是最好的。在尋找最優的方法來表示這些詞向量方面已經取得了許多進展。其中最著名的是Word2Vec。

過去的方法

向量空間模型(VSMs)在一個連續的向量空間中表示(嵌入)單詞,在這個空間中,語義相似的單詞映射成的點相互靠近(“彼此嵌入到附近”)。VSMs在NLP中有著悠久而豐富的歷史,但所有的方法都或多或少地依賴於分佈假設,即出現在相同上下文中的詞具有相同的語義。利用這一原則的不同方法可分為兩類:

  1. 基於計數的方法(如潛在語義分析)
  2. 預測方法(如神經概率語言模型)

區別是:

基於計數的方法計算某個單詞在大型文本語料庫中與相鄰單詞共出現的頻率,然後將這些計數統計信息映射成每個單詞的小而密集的向量。

預測模型直接試圖通過學習小的、密集的嵌入向量(考慮模型的參數)來預測相鄰單詞。

Word2vec是一種從原始文本中學習嵌入詞的高效預測模型。它有兩種風格,連續的詞袋模型(CBOW)和跳格模型。從算法上來說,這些模型是相似的,CBOW從源上下文詞預測目標詞,而skip-gram則相反,從目標詞預測源上下文詞。

在接下來的討論中,我們將重點討論skip-gram模型。

其中的數學

神經概率語言模型使用極大似然原理進行傳統的訓練,給定前一個單詞h(表示“歷史”),使用softmax函數表示下一個單詞wt(表示“目標”)的概率,並使得整個概率最大化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

其中score(wt, h)計算目標詞wt與上下文h的兼容性(通常使用點積)。

我們通過在訓練集中最大化它的對數似然來訓練這個模型:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這為語言建模提供了一個適當規範化的概率模型。

同樣的參數也可以用一個稍微不同的公式來表示,它清楚地顯示了選擇變量(或參數),這個變量是為了最大化這個目標而改變的。

我們的目標是找到對預測當前單詞周圍單詞有用的詞表示。特別是,我們希望最大化整個語料庫的平均對數概率:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這個方程本質上是說,在當前單詞wt上,大小為c 的窗口內,觀察某個特定單詞的概率p。這個概率取決於當前單詞wt和某個參數theta的設置(由我們的模型決定)。我們希望設置這些參數theta,使這個概率在整個語料庫中最大化。

基本參數化:Softmax模型

基本的skip-gram模型通過softmax函數定義了概率p,正如我們前面看到的那樣。如果我們認為wi是一個獨熱編碼向量,維數是N,theta是維數為N * K的嵌入矩陣在我們的詞彙表中有N個單詞而我們學出來的嵌入表示的維數是K,那麼我們可以定義:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

值得注意的是,在學習完了之後,矩陣theta可以被認為是一個嵌入查找表矩陣

在結構上,它是一個簡單的三層神經網絡。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

  1. 以3層神經網絡為例。(1個輸入層+ 1個隱藏層+ 1個輸出層)
  2. 餵它一個詞,訓練它預測它的鄰接詞。
  3. 刪除最後一層(輸出層),保留輸入層和隱藏層。
  4. 現在,從詞彙表中輸入一個單詞。在隱藏層給出的輸出是輸入詞的“詞嵌入”。

這種參數化有一個主要缺點,限制了它在非常大的公司的情況下的有用性。具體來說,我們注意到為了計算模型的單個前向傳遞,我們必須對整個語料庫詞彙表進行求和,以便計算softmax函數。在大型數據集上,這是非常昂貴的,因此為了計算效率,我們尋求該模型的替代近似。

提高計算效率

對於word2vec中的特徵學習,我們不需要一個完整的概率模型。CBOW和skip-gram模型使用二元分類目標(邏輯迴歸)進行訓練,以便在相同的上下文中從k個虛構的(噪聲)詞~w中區分出真實的目標詞(wt)。

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們將每個單詞表示為d維向量。我們用d = 6。從這個句子中,我們想為每個單詞創建一個單詞向量。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

現在我們來考慮如何填充這些值。我們希望以這樣一種方式填充值,即向量以某種方式表示單詞及其上下文、含義或語義。一種方法是創建一個共現矩陣。

共現矩陣是一個矩陣,它包含出現在語料庫(或訓練集)中所有其他單詞旁邊的每個單詞的計數。讓我們把這個矩陣可視化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

注意,通過這個簡單的矩陣,我們可以獲得非常有用的見解。例如,請注意,單詞“love”和“like”都包含1,表示它們與名詞(NLP和dogs)的計數,它們的“I”的計數也是1,這意味著單詞必須是某種動詞。有了比一個句子更大的數據集,您可以想象這種相似性將變得更加清晰,因為“like”、“love”和其他同義詞將開始具有類似的單詞向量,因為它們在類似的上下文中使用。

現在,儘管這是一個很好的起點,我們注意到每個單詞的維度會隨著語料庫的大小線性增加。如果我們有一百萬個單詞(在NLP標準中不是很多),我們就會有一個百萬×百萬大小的矩陣,這個矩陣非常稀疏(很多0)。在存儲效率方面肯定不是最好的。在尋找最優的方法來表示這些詞向量方面已經取得了許多進展。其中最著名的是Word2Vec。

過去的方法

向量空間模型(VSMs)在一個連續的向量空間中表示(嵌入)單詞,在這個空間中,語義相似的單詞映射成的點相互靠近(“彼此嵌入到附近”)。VSMs在NLP中有著悠久而豐富的歷史,但所有的方法都或多或少地依賴於分佈假設,即出現在相同上下文中的詞具有相同的語義。利用這一原則的不同方法可分為兩類:

  1. 基於計數的方法(如潛在語義分析)
  2. 預測方法(如神經概率語言模型)

區別是:

基於計數的方法計算某個單詞在大型文本語料庫中與相鄰單詞共出現的頻率,然後將這些計數統計信息映射成每個單詞的小而密集的向量。

預測模型直接試圖通過學習小的、密集的嵌入向量(考慮模型的參數)來預測相鄰單詞。

Word2vec是一種從原始文本中學習嵌入詞的高效預測模型。它有兩種風格,連續的詞袋模型(CBOW)和跳格模型。從算法上來說,這些模型是相似的,CBOW從源上下文詞預測目標詞,而skip-gram則相反,從目標詞預測源上下文詞。

在接下來的討論中,我們將重點討論skip-gram模型。

其中的數學

神經概率語言模型使用極大似然原理進行傳統的訓練,給定前一個單詞h(表示“歷史”),使用softmax函數表示下一個單詞wt(表示“目標”)的概率,並使得整個概率最大化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

其中score(wt, h)計算目標詞wt與上下文h的兼容性(通常使用點積)。

我們通過在訓練集中最大化它的對數似然來訓練這個模型:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這為語言建模提供了一個適當規範化的概率模型。

同樣的參數也可以用一個稍微不同的公式來表示,它清楚地顯示了選擇變量(或參數),這個變量是為了最大化這個目標而改變的。

我們的目標是找到對預測當前單詞周圍單詞有用的詞表示。特別是,我們希望最大化整個語料庫的平均對數概率:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這個方程本質上是說,在當前單詞wt上,大小為c 的窗口內,觀察某個特定單詞的概率p。這個概率取決於當前單詞wt和某個參數theta的設置(由我們的模型決定)。我們希望設置這些參數theta,使這個概率在整個語料庫中最大化。

基本參數化:Softmax模型

基本的skip-gram模型通過softmax函數定義了概率p,正如我們前面看到的那樣。如果我們認為wi是一個獨熱編碼向量,維數是N,theta是維數為N * K的嵌入矩陣在我們的詞彙表中有N個單詞而我們學出來的嵌入表示的維數是K,那麼我們可以定義:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

值得注意的是,在學習完了之後,矩陣theta可以被認為是一個嵌入查找表矩陣

在結構上,它是一個簡單的三層神經網絡。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

  1. 以3層神經網絡為例。(1個輸入層+ 1個隱藏層+ 1個輸出層)
  2. 餵它一個詞,訓練它預測它的鄰接詞。
  3. 刪除最後一層(輸出層),保留輸入層和隱藏層。
  4. 現在,從詞彙表中輸入一個單詞。在隱藏層給出的輸出是輸入詞的“詞嵌入”。

這種參數化有一個主要缺點,限制了它在非常大的公司的情況下的有用性。具體來說,我們注意到為了計算模型的單個前向傳遞,我們必須對整個語料庫詞彙表進行求和,以便計算softmax函數。在大型數據集上,這是非常昂貴的,因此為了計算效率,我們尋求該模型的替代近似。

提高計算效率

對於word2vec中的特徵學習,我們不需要一個完整的概率模型。CBOW和skip-gram模型使用二元分類目標(邏輯迴歸)進行訓練,以便在相同的上下文中從k個虛構的(噪聲)詞~w中區分出真實的目標詞(wt)。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

從數學上看,目標(對於每個樣本)是進行最大化

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們將每個單詞表示為d維向量。我們用d = 6。從這個句子中,我們想為每個單詞創建一個單詞向量。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

現在我們來考慮如何填充這些值。我們希望以這樣一種方式填充值,即向量以某種方式表示單詞及其上下文、含義或語義。一種方法是創建一個共現矩陣。

共現矩陣是一個矩陣,它包含出現在語料庫(或訓練集)中所有其他單詞旁邊的每個單詞的計數。讓我們把這個矩陣可視化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

注意,通過這個簡單的矩陣,我們可以獲得非常有用的見解。例如,請注意,單詞“love”和“like”都包含1,表示它們與名詞(NLP和dogs)的計數,它們的“I”的計數也是1,這意味著單詞必須是某種動詞。有了比一個句子更大的數據集,您可以想象這種相似性將變得更加清晰,因為“like”、“love”和其他同義詞將開始具有類似的單詞向量,因為它們在類似的上下文中使用。

現在,儘管這是一個很好的起點,我們注意到每個單詞的維度會隨著語料庫的大小線性增加。如果我們有一百萬個單詞(在NLP標準中不是很多),我們就會有一個百萬×百萬大小的矩陣,這個矩陣非常稀疏(很多0)。在存儲效率方面肯定不是最好的。在尋找最優的方法來表示這些詞向量方面已經取得了許多進展。其中最著名的是Word2Vec。

過去的方法

向量空間模型(VSMs)在一個連續的向量空間中表示(嵌入)單詞,在這個空間中,語義相似的單詞映射成的點相互靠近(“彼此嵌入到附近”)。VSMs在NLP中有著悠久而豐富的歷史,但所有的方法都或多或少地依賴於分佈假設,即出現在相同上下文中的詞具有相同的語義。利用這一原則的不同方法可分為兩類:

  1. 基於計數的方法(如潛在語義分析)
  2. 預測方法(如神經概率語言模型)

區別是:

基於計數的方法計算某個單詞在大型文本語料庫中與相鄰單詞共出現的頻率,然後將這些計數統計信息映射成每個單詞的小而密集的向量。

預測模型直接試圖通過學習小的、密集的嵌入向量(考慮模型的參數)來預測相鄰單詞。

Word2vec是一種從原始文本中學習嵌入詞的高效預測模型。它有兩種風格,連續的詞袋模型(CBOW)和跳格模型。從算法上來說,這些模型是相似的,CBOW從源上下文詞預測目標詞,而skip-gram則相反,從目標詞預測源上下文詞。

在接下來的討論中,我們將重點討論skip-gram模型。

其中的數學

神經概率語言模型使用極大似然原理進行傳統的訓練,給定前一個單詞h(表示“歷史”),使用softmax函數表示下一個單詞wt(表示“目標”)的概率,並使得整個概率最大化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

其中score(wt, h)計算目標詞wt與上下文h的兼容性(通常使用點積)。

我們通過在訓練集中最大化它的對數似然來訓練這個模型:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這為語言建模提供了一個適當規範化的概率模型。

同樣的參數也可以用一個稍微不同的公式來表示,它清楚地顯示了選擇變量(或參數),這個變量是為了最大化這個目標而改變的。

我們的目標是找到對預測當前單詞周圍單詞有用的詞表示。特別是,我們希望最大化整個語料庫的平均對數概率:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這個方程本質上是說,在當前單詞wt上,大小為c 的窗口內,觀察某個特定單詞的概率p。這個概率取決於當前單詞wt和某個參數theta的設置(由我們的模型決定)。我們希望設置這些參數theta,使這個概率在整個語料庫中最大化。

基本參數化:Softmax模型

基本的skip-gram模型通過softmax函數定義了概率p,正如我們前面看到的那樣。如果我們認為wi是一個獨熱編碼向量,維數是N,theta是維數為N * K的嵌入矩陣在我們的詞彙表中有N個單詞而我們學出來的嵌入表示的維數是K,那麼我們可以定義:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

值得注意的是,在學習完了之後,矩陣theta可以被認為是一個嵌入查找表矩陣

在結構上,它是一個簡單的三層神經網絡。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

  1. 以3層神經網絡為例。(1個輸入層+ 1個隱藏層+ 1個輸出層)
  2. 餵它一個詞,訓練它預測它的鄰接詞。
  3. 刪除最後一層(輸出層),保留輸入層和隱藏層。
  4. 現在,從詞彙表中輸入一個單詞。在隱藏層給出的輸出是輸入詞的“詞嵌入”。

這種參數化有一個主要缺點,限制了它在非常大的公司的情況下的有用性。具體來說,我們注意到為了計算模型的單個前向傳遞,我們必須對整個語料庫詞彙表進行求和,以便計算softmax函數。在大型數據集上,這是非常昂貴的,因此為了計算效率,我們尋求該模型的替代近似。

提高計算效率

對於word2vec中的特徵學習,我們不需要一個完整的概率模型。CBOW和skip-gram模型使用二元分類目標(邏輯迴歸)進行訓練,以便在相同的上下文中從k個虛構的(噪聲)詞~w中區分出真實的目標詞(wt)。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

從數學上看,目標(對於每個樣本)是進行最大化

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

當模型將高概率賦給真實的詞,低概率賦給噪聲詞時,該目標達到了最大化。從技術上講,這被稱為負採樣,它提出的更新在極限上近似於softmax函數的更新。但從計算上來說,它特別有吸引力,因為計算損失函數現在只根據我們選擇的(k)噪聲詞的數量進行縮放,而不是根據詞彙表(V)中的所有詞進行縮放,這使得訓練速度快得多。像Tensorflow這樣的包使用了一個非常類似的損失函數,稱為噪聲對比估計(NCE)損失。

Skip-gram模型中的直覺

作為一個例子,我考慮這樣的數據集:

the quick brown fox jumped over the lazy dog

我們首先形成一個詞的數據集和它們出現的上下文。現在,讓我們繼續使用普通的定義,並將“上下文”定義為目標詞的左邊和右邊的單詞窗口。使用窗口大小為1,我們就得到了(上下文、目標)對的數據集。

([the, brown], quick), ([quick, fox], brown), ([brown, jumped], fox), ...

回想一下,skip-gram顛倒了上下文和目標,試圖從目標詞中預測每個上下文詞,因此任務變成了從“quick”中預測“the”和“brown”、從“brown”中預測“quick”和“fox”中預測,等等。

因此,我們的數據集將(輸入,輸出)對變為:

(quick, the), (quick, brown), (brown, quick), (brown, fox), ...

目標函數是在整個數據集上定義的,但是我們通常使用隨機梯度下降(SGD),一次使用一個樣本(或batch_size個樣本的“批量”,其中通常有16 <= batch_size <= 512)來優化它。我們來看看這個過程的一個步驟。

讓我們想象在訓練步驟中,我們觀察上面的第一個訓練案例,目標是從quick中預測the。我們從一些噪聲分佈中選擇num_noise個噪聲(對比)樣本,通常是unigram分佈(unigram假定每個單詞的出現獨立於所有其他單詞的出現。例如,我們可以把生成過程看作是擲骰子的序列),P(w)

為了簡單起見,我們假設num_noise=1,並選擇sheep作為一個噪聲示例。接下來,我們計算這一對觀測到樣本對以及噪聲樣本的損失,即目標在時間步' t '變成了:

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們將每個單詞表示為d維向量。我們用d = 6。從這個句子中,我們想為每個單詞創建一個單詞向量。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

現在我們來考慮如何填充這些值。我們希望以這樣一種方式填充值,即向量以某種方式表示單詞及其上下文、含義或語義。一種方法是創建一個共現矩陣。

共現矩陣是一個矩陣,它包含出現在語料庫(或訓練集)中所有其他單詞旁邊的每個單詞的計數。讓我們把這個矩陣可視化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

注意,通過這個簡單的矩陣,我們可以獲得非常有用的見解。例如,請注意,單詞“love”和“like”都包含1,表示它們與名詞(NLP和dogs)的計數,它們的“I”的計數也是1,這意味著單詞必須是某種動詞。有了比一個句子更大的數據集,您可以想象這種相似性將變得更加清晰,因為“like”、“love”和其他同義詞將開始具有類似的單詞向量,因為它們在類似的上下文中使用。

現在,儘管這是一個很好的起點,我們注意到每個單詞的維度會隨著語料庫的大小線性增加。如果我們有一百萬個單詞(在NLP標準中不是很多),我們就會有一個百萬×百萬大小的矩陣,這個矩陣非常稀疏(很多0)。在存儲效率方面肯定不是最好的。在尋找最優的方法來表示這些詞向量方面已經取得了許多進展。其中最著名的是Word2Vec。

過去的方法

向量空間模型(VSMs)在一個連續的向量空間中表示(嵌入)單詞,在這個空間中,語義相似的單詞映射成的點相互靠近(“彼此嵌入到附近”)。VSMs在NLP中有著悠久而豐富的歷史,但所有的方法都或多或少地依賴於分佈假設,即出現在相同上下文中的詞具有相同的語義。利用這一原則的不同方法可分為兩類:

  1. 基於計數的方法(如潛在語義分析)
  2. 預測方法(如神經概率語言模型)

區別是:

基於計數的方法計算某個單詞在大型文本語料庫中與相鄰單詞共出現的頻率,然後將這些計數統計信息映射成每個單詞的小而密集的向量。

預測模型直接試圖通過學習小的、密集的嵌入向量(考慮模型的參數)來預測相鄰單詞。

Word2vec是一種從原始文本中學習嵌入詞的高效預測模型。它有兩種風格,連續的詞袋模型(CBOW)和跳格模型。從算法上來說,這些模型是相似的,CBOW從源上下文詞預測目標詞,而skip-gram則相反,從目標詞預測源上下文詞。

在接下來的討論中,我們將重點討論skip-gram模型。

其中的數學

神經概率語言模型使用極大似然原理進行傳統的訓練,給定前一個單詞h(表示“歷史”),使用softmax函數表示下一個單詞wt(表示“目標”)的概率,並使得整個概率最大化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

其中score(wt, h)計算目標詞wt與上下文h的兼容性(通常使用點積)。

我們通過在訓練集中最大化它的對數似然來訓練這個模型:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這為語言建模提供了一個適當規範化的概率模型。

同樣的參數也可以用一個稍微不同的公式來表示,它清楚地顯示了選擇變量(或參數),這個變量是為了最大化這個目標而改變的。

我們的目標是找到對預測當前單詞周圍單詞有用的詞表示。特別是,我們希望最大化整個語料庫的平均對數概率:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這個方程本質上是說,在當前單詞wt上,大小為c 的窗口內,觀察某個特定單詞的概率p。這個概率取決於當前單詞wt和某個參數theta的設置(由我們的模型決定)。我們希望設置這些參數theta,使這個概率在整個語料庫中最大化。

基本參數化:Softmax模型

基本的skip-gram模型通過softmax函數定義了概率p,正如我們前面看到的那樣。如果我們認為wi是一個獨熱編碼向量,維數是N,theta是維數為N * K的嵌入矩陣在我們的詞彙表中有N個單詞而我們學出來的嵌入表示的維數是K,那麼我們可以定義:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

值得注意的是,在學習完了之後,矩陣theta可以被認為是一個嵌入查找表矩陣

在結構上,它是一個簡單的三層神經網絡。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

  1. 以3層神經網絡為例。(1個輸入層+ 1個隱藏層+ 1個輸出層)
  2. 餵它一個詞,訓練它預測它的鄰接詞。
  3. 刪除最後一層(輸出層),保留輸入層和隱藏層。
  4. 現在,從詞彙表中輸入一個單詞。在隱藏層給出的輸出是輸入詞的“詞嵌入”。

這種參數化有一個主要缺點,限制了它在非常大的公司的情況下的有用性。具體來說,我們注意到為了計算模型的單個前向傳遞,我們必須對整個語料庫詞彙表進行求和,以便計算softmax函數。在大型數據集上,這是非常昂貴的,因此為了計算效率,我們尋求該模型的替代近似。

提高計算效率

對於word2vec中的特徵學習,我們不需要一個完整的概率模型。CBOW和skip-gram模型使用二元分類目標(邏輯迴歸)進行訓練,以便在相同的上下文中從k個虛構的(噪聲)詞~w中區分出真實的目標詞(wt)。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

從數學上看,目標(對於每個樣本)是進行最大化

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

當模型將高概率賦給真實的詞,低概率賦給噪聲詞時,該目標達到了最大化。從技術上講,這被稱為負採樣,它提出的更新在極限上近似於softmax函數的更新。但從計算上來說,它特別有吸引力,因為計算損失函數現在只根據我們選擇的(k)噪聲詞的數量進行縮放,而不是根據詞彙表(V)中的所有詞進行縮放,這使得訓練速度快得多。像Tensorflow這樣的包使用了一個非常類似的損失函數,稱為噪聲對比估計(NCE)損失。

Skip-gram模型中的直覺

作為一個例子,我考慮這樣的數據集:

the quick brown fox jumped over the lazy dog

我們首先形成一個詞的數據集和它們出現的上下文。現在,讓我們繼續使用普通的定義,並將“上下文”定義為目標詞的左邊和右邊的單詞窗口。使用窗口大小為1,我們就得到了(上下文、目標)對的數據集。

([the, brown], quick), ([quick, fox], brown), ([brown, jumped], fox), ...

回想一下,skip-gram顛倒了上下文和目標,試圖從目標詞中預測每個上下文詞,因此任務變成了從“quick”中預測“the”和“brown”、從“brown”中預測“quick”和“fox”中預測,等等。

因此,我們的數據集將(輸入,輸出)對變為:

(quick, the), (quick, brown), (brown, quick), (brown, fox), ...

目標函數是在整個數據集上定義的,但是我們通常使用隨機梯度下降(SGD),一次使用一個樣本(或batch_size個樣本的“批量”,其中通常有16 <= batch_size <= 512)來優化它。我們來看看這個過程的一個步驟。

讓我們想象在訓練步驟中,我們觀察上面的第一個訓練案例,目標是從quick中預測the。我們從一些噪聲分佈中選擇num_noise個噪聲(對比)樣本,通常是unigram分佈(unigram假定每個單詞的出現獨立於所有其他單詞的出現。例如,我們可以把生成過程看作是擲骰子的序列),P(w)

為了簡單起見,我們假設num_noise=1,並選擇sheep作為一個噪聲示例。接下來,我們計算這一對觀測到樣本對以及噪聲樣本的損失,即目標在時間步' t '變成了:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們的目標是更新嵌入參數theta,使這個目標函數最大化。我們通過推導關於嵌入參數的損失的梯度來實現這一點。

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們將每個單詞表示為d維向量。我們用d = 6。從這個句子中,我們想為每個單詞創建一個單詞向量。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

現在我們來考慮如何填充這些值。我們希望以這樣一種方式填充值,即向量以某種方式表示單詞及其上下文、含義或語義。一種方法是創建一個共現矩陣。

共現矩陣是一個矩陣,它包含出現在語料庫(或訓練集)中所有其他單詞旁邊的每個單詞的計數。讓我們把這個矩陣可視化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

注意,通過這個簡單的矩陣,我們可以獲得非常有用的見解。例如,請注意,單詞“love”和“like”都包含1,表示它們與名詞(NLP和dogs)的計數,它們的“I”的計數也是1,這意味著單詞必須是某種動詞。有了比一個句子更大的數據集,您可以想象這種相似性將變得更加清晰,因為“like”、“love”和其他同義詞將開始具有類似的單詞向量,因為它們在類似的上下文中使用。

現在,儘管這是一個很好的起點,我們注意到每個單詞的維度會隨著語料庫的大小線性增加。如果我們有一百萬個單詞(在NLP標準中不是很多),我們就會有一個百萬×百萬大小的矩陣,這個矩陣非常稀疏(很多0)。在存儲效率方面肯定不是最好的。在尋找最優的方法來表示這些詞向量方面已經取得了許多進展。其中最著名的是Word2Vec。

過去的方法

向量空間模型(VSMs)在一個連續的向量空間中表示(嵌入)單詞,在這個空間中,語義相似的單詞映射成的點相互靠近(“彼此嵌入到附近”)。VSMs在NLP中有著悠久而豐富的歷史,但所有的方法都或多或少地依賴於分佈假設,即出現在相同上下文中的詞具有相同的語義。利用這一原則的不同方法可分為兩類:

  1. 基於計數的方法(如潛在語義分析)
  2. 預測方法(如神經概率語言模型)

區別是:

基於計數的方法計算某個單詞在大型文本語料庫中與相鄰單詞共出現的頻率,然後將這些計數統計信息映射成每個單詞的小而密集的向量。

預測模型直接試圖通過學習小的、密集的嵌入向量(考慮模型的參數)來預測相鄰單詞。

Word2vec是一種從原始文本中學習嵌入詞的高效預測模型。它有兩種風格,連續的詞袋模型(CBOW)和跳格模型。從算法上來說,這些模型是相似的,CBOW從源上下文詞預測目標詞,而skip-gram則相反,從目標詞預測源上下文詞。

在接下來的討論中,我們將重點討論skip-gram模型。

其中的數學

神經概率語言模型使用極大似然原理進行傳統的訓練,給定前一個單詞h(表示“歷史”),使用softmax函數表示下一個單詞wt(表示“目標”)的概率,並使得整個概率最大化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

其中score(wt, h)計算目標詞wt與上下文h的兼容性(通常使用點積)。

我們通過在訓練集中最大化它的對數似然來訓練這個模型:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這為語言建模提供了一個適當規範化的概率模型。

同樣的參數也可以用一個稍微不同的公式來表示,它清楚地顯示了選擇變量(或參數),這個變量是為了最大化這個目標而改變的。

我們的目標是找到對預測當前單詞周圍單詞有用的詞表示。特別是,我們希望最大化整個語料庫的平均對數概率:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這個方程本質上是說,在當前單詞wt上,大小為c 的窗口內,觀察某個特定單詞的概率p。這個概率取決於當前單詞wt和某個參數theta的設置(由我們的模型決定)。我們希望設置這些參數theta,使這個概率在整個語料庫中最大化。

基本參數化:Softmax模型

基本的skip-gram模型通過softmax函數定義了概率p,正如我們前面看到的那樣。如果我們認為wi是一個獨熱編碼向量,維數是N,theta是維數為N * K的嵌入矩陣在我們的詞彙表中有N個單詞而我們學出來的嵌入表示的維數是K,那麼我們可以定義:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

值得注意的是,在學習完了之後,矩陣theta可以被認為是一個嵌入查找表矩陣

在結構上,它是一個簡單的三層神經網絡。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

  1. 以3層神經網絡為例。(1個輸入層+ 1個隱藏層+ 1個輸出層)
  2. 餵它一個詞,訓練它預測它的鄰接詞。
  3. 刪除最後一層(輸出層),保留輸入層和隱藏層。
  4. 現在,從詞彙表中輸入一個單詞。在隱藏層給出的輸出是輸入詞的“詞嵌入”。

這種參數化有一個主要缺點,限制了它在非常大的公司的情況下的有用性。具體來說,我們注意到為了計算模型的單個前向傳遞,我們必須對整個語料庫詞彙表進行求和,以便計算softmax函數。在大型數據集上,這是非常昂貴的,因此為了計算效率,我們尋求該模型的替代近似。

提高計算效率

對於word2vec中的特徵學習,我們不需要一個完整的概率模型。CBOW和skip-gram模型使用二元分類目標(邏輯迴歸)進行訓練,以便在相同的上下文中從k個虛構的(噪聲)詞~w中區分出真實的目標詞(wt)。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

從數學上看,目標(對於每個樣本)是進行最大化

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

當模型將高概率賦給真實的詞,低概率賦給噪聲詞時,該目標達到了最大化。從技術上講,這被稱為負採樣,它提出的更新在極限上近似於softmax函數的更新。但從計算上來說,它特別有吸引力,因為計算損失函數現在只根據我們選擇的(k)噪聲詞的數量進行縮放,而不是根據詞彙表(V)中的所有詞進行縮放,這使得訓練速度快得多。像Tensorflow這樣的包使用了一個非常類似的損失函數,稱為噪聲對比估計(NCE)損失。

Skip-gram模型中的直覺

作為一個例子,我考慮這樣的數據集:

the quick brown fox jumped over the lazy dog

我們首先形成一個詞的數據集和它們出現的上下文。現在,讓我們繼續使用普通的定義,並將“上下文”定義為目標詞的左邊和右邊的單詞窗口。使用窗口大小為1,我們就得到了(上下文、目標)對的數據集。

([the, brown], quick), ([quick, fox], brown), ([brown, jumped], fox), ...

回想一下,skip-gram顛倒了上下文和目標,試圖從目標詞中預測每個上下文詞,因此任務變成了從“quick”中預測“the”和“brown”、從“brown”中預測“quick”和“fox”中預測,等等。

因此,我們的數據集將(輸入,輸出)對變為:

(quick, the), (quick, brown), (brown, quick), (brown, fox), ...

目標函數是在整個數據集上定義的,但是我們通常使用隨機梯度下降(SGD),一次使用一個樣本(或batch_size個樣本的“批量”,其中通常有16 <= batch_size <= 512)來優化它。我們來看看這個過程的一個步驟。

讓我們想象在訓練步驟中,我們觀察上面的第一個訓練案例,目標是從quick中預測the。我們從一些噪聲分佈中選擇num_noise個噪聲(對比)樣本,通常是unigram分佈(unigram假定每個單詞的出現獨立於所有其他單詞的出現。例如,我們可以把生成過程看作是擲骰子的序列),P(w)

為了簡單起見,我們假設num_noise=1,並選擇sheep作為一個噪聲示例。接下來,我們計算這一對觀測到樣本對以及噪聲樣本的損失,即目標在時間步' t '變成了:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們的目標是更新嵌入參數theta,使這個目標函數最大化。我們通過推導關於嵌入參數的損失的梯度來實現這一點。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

然後,我們在漸變方向上邁出一小步,對嵌入進行更新。當這個過程在整個訓練集中重複進行時,就會產生“移動”每個單詞的嵌入向量的效果,直到模型成功地從噪聲詞中識別出真實詞為止。

我們可以把學過的向量投影到二維空間來形象化。當我們觀察這些可視化時,很明顯,這些向量捕獲了一些關於單詞及其相互關係的一般的、實際上非常有用的語義信息。

"
作者:Suvro Banerjee編譯:ronghuaiyang

導讀

做NLP現在離不開詞向量,詞向量給了我們一個非常好的單詞的向量表示,用一個有限長度的向量,可以表示出所有的詞,還可以表示出詞與詞之間的上下文相互關係,是不是很神奇?那麼,這麼神奇的東西到底是怎麼來的呢?今天的這篇文章會一點一點給大家說清楚。雖然有一點公式,但是總體上還是非常通俗易懂的,來看看吧。

讓我們通過推理,舉例和數學來揭祕word2vec

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

介紹

Word2Vec模型用於學習被稱為“詞嵌入”的詞的向量表示。這通常是作為預處理步驟來完成的,在此之後,學習到的向量被輸入判別模型(通常是RNN)來生成預測,完成各種各樣有趣的事情。

為什麼學習詞嵌入Why learn word embeddings

圖像和音頻處理系統使用豐富的高維數據集,對於圖像數據,這些數據編碼成為單個像素的強度組成的向量,因此所有信息都編碼在數據中,從而可以建立系統中各種實體(貓和狗)之間的關係。

但是,在自然語言處理系統中,傳統上它將單詞視為離散的原子符號,因此“cat”可以表示為Id537,“dog”表示為Id143。這些編碼是任意的,並且不向系統提供關於可能存在於各個符號之間的關係的有用信息。這意味著該模型在處理關於“狗”的數據(比如它們都是動物、四條腿、寵物等等)時,能夠利用的關於“貓”的知識非常少。

將單詞表示為惟一的、離散的id還會導致數據稀疏,這通常意味著我們可能需要更多的數據才能成功地訓練統計模型。使用向量表示可以克服其中一些障礙。

舉個例子:

傳統的自然語言處理方法涉及到語言學本身的許多領域知識。理解像音素和語素這樣的術語是相當標準的,因為有整個語言課程專門用於他們的研究。讓我們看看傳統的NLP是如何理解以下單詞的。

假設我們的目標是收集關於這個詞的一些信息(描述它的情感,找到它的定義,等等)。利用我們的語言領域知識,我們可以把這個詞分成三個部分。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們知道前綴un表示相反或相反的意思,我們知道ed可以指定單詞的時間段(過去時)。通過識別詞幹“興趣”的含義,我們可以很容易地推導出整個詞的定義和感情。看起來很簡單,對吧?然而,當你考慮英語中所有不同的前綴和後綴時,需要非常熟練的語言學家來理解所有可能的組合和含義。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

深層學習,在最基本的層面上,是關於表徵學習的。在這裡,我們將採用相同的方法,通過大型數據集創建單詞的表示。

詞向量

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們將每個單詞表示為d維向量。我們用d = 6。從這個句子中,我們想為每個單詞創建一個單詞向量。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

現在我們來考慮如何填充這些值。我們希望以這樣一種方式填充值,即向量以某種方式表示單詞及其上下文、含義或語義。一種方法是創建一個共現矩陣。

共現矩陣是一個矩陣,它包含出現在語料庫(或訓練集)中所有其他單詞旁邊的每個單詞的計數。讓我們把這個矩陣可視化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

注意,通過這個簡單的矩陣,我們可以獲得非常有用的見解。例如,請注意,單詞“love”和“like”都包含1,表示它們與名詞(NLP和dogs)的計數,它們的“I”的計數也是1,這意味著單詞必須是某種動詞。有了比一個句子更大的數據集,您可以想象這種相似性將變得更加清晰,因為“like”、“love”和其他同義詞將開始具有類似的單詞向量,因為它們在類似的上下文中使用。

現在,儘管這是一個很好的起點,我們注意到每個單詞的維度會隨著語料庫的大小線性增加。如果我們有一百萬個單詞(在NLP標準中不是很多),我們就會有一個百萬×百萬大小的矩陣,這個矩陣非常稀疏(很多0)。在存儲效率方面肯定不是最好的。在尋找最優的方法來表示這些詞向量方面已經取得了許多進展。其中最著名的是Word2Vec。

過去的方法

向量空間模型(VSMs)在一個連續的向量空間中表示(嵌入)單詞,在這個空間中,語義相似的單詞映射成的點相互靠近(“彼此嵌入到附近”)。VSMs在NLP中有著悠久而豐富的歷史,但所有的方法都或多或少地依賴於分佈假設,即出現在相同上下文中的詞具有相同的語義。利用這一原則的不同方法可分為兩類:

  1. 基於計數的方法(如潛在語義分析)
  2. 預測方法(如神經概率語言模型)

區別是:

基於計數的方法計算某個單詞在大型文本語料庫中與相鄰單詞共出現的頻率,然後將這些計數統計信息映射成每個單詞的小而密集的向量。

預測模型直接試圖通過學習小的、密集的嵌入向量(考慮模型的參數)來預測相鄰單詞。

Word2vec是一種從原始文本中學習嵌入詞的高效預測模型。它有兩種風格,連續的詞袋模型(CBOW)和跳格模型。從算法上來說,這些模型是相似的,CBOW從源上下文詞預測目標詞,而skip-gram則相反,從目標詞預測源上下文詞。

在接下來的討論中,我們將重點討論skip-gram模型。

其中的數學

神經概率語言模型使用極大似然原理進行傳統的訓練,給定前一個單詞h(表示“歷史”),使用softmax函數表示下一個單詞wt(表示“目標”)的概率,並使得整個概率最大化。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

其中score(wt, h)計算目標詞wt與上下文h的兼容性(通常使用點積)。

我們通過在訓練集中最大化它的對數似然來訓練這個模型:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這為語言建模提供了一個適當規範化的概率模型。

同樣的參數也可以用一個稍微不同的公式來表示,它清楚地顯示了選擇變量(或參數),這個變量是為了最大化這個目標而改變的。

我們的目標是找到對預測當前單詞周圍單詞有用的詞表示。特別是,我們希望最大化整個語料庫的平均對數概率:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

這個方程本質上是說,在當前單詞wt上,大小為c 的窗口內,觀察某個特定單詞的概率p。這個概率取決於當前單詞wt和某個參數theta的設置(由我們的模型決定)。我們希望設置這些參數theta,使這個概率在整個語料庫中最大化。

基本參數化:Softmax模型

基本的skip-gram模型通過softmax函數定義了概率p,正如我們前面看到的那樣。如果我們認為wi是一個獨熱編碼向量,維數是N,theta是維數為N * K的嵌入矩陣在我們的詞彙表中有N個單詞而我們學出來的嵌入表示的維數是K,那麼我們可以定義:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

值得注意的是,在學習完了之後,矩陣theta可以被認為是一個嵌入查找表矩陣

在結構上,它是一個簡單的三層神經網絡。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

  1. 以3層神經網絡為例。(1個輸入層+ 1個隱藏層+ 1個輸出層)
  2. 餵它一個詞,訓練它預測它的鄰接詞。
  3. 刪除最後一層(輸出層),保留輸入層和隱藏層。
  4. 現在,從詞彙表中輸入一個單詞。在隱藏層給出的輸出是輸入詞的“詞嵌入”。

這種參數化有一個主要缺點,限制了它在非常大的公司的情況下的有用性。具體來說,我們注意到為了計算模型的單個前向傳遞,我們必須對整個語料庫詞彙表進行求和,以便計算softmax函數。在大型數據集上,這是非常昂貴的,因此為了計算效率,我們尋求該模型的替代近似。

提高計算效率

對於word2vec中的特徵學習,我們不需要一個完整的概率模型。CBOW和skip-gram模型使用二元分類目標(邏輯迴歸)進行訓練,以便在相同的上下文中從k個虛構的(噪聲)詞~w中區分出真實的目標詞(wt)。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

從數學上看,目標(對於每個樣本)是進行最大化

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

當模型將高概率賦給真實的詞,低概率賦給噪聲詞時,該目標達到了最大化。從技術上講,這被稱為負採樣,它提出的更新在極限上近似於softmax函數的更新。但從計算上來說,它特別有吸引力,因為計算損失函數現在只根據我們選擇的(k)噪聲詞的數量進行縮放,而不是根據詞彙表(V)中的所有詞進行縮放,這使得訓練速度快得多。像Tensorflow這樣的包使用了一個非常類似的損失函數,稱為噪聲對比估計(NCE)損失。

Skip-gram模型中的直覺

作為一個例子,我考慮這樣的數據集:

the quick brown fox jumped over the lazy dog

我們首先形成一個詞的數據集和它們出現的上下文。現在,讓我們繼續使用普通的定義,並將“上下文”定義為目標詞的左邊和右邊的單詞窗口。使用窗口大小為1,我們就得到了(上下文、目標)對的數據集。

([the, brown], quick), ([quick, fox], brown), ([brown, jumped], fox), ...

回想一下,skip-gram顛倒了上下文和目標,試圖從目標詞中預測每個上下文詞,因此任務變成了從“quick”中預測“the”和“brown”、從“brown”中預測“quick”和“fox”中預測,等等。

因此,我們的數據集將(輸入,輸出)對變為:

(quick, the), (quick, brown), (brown, quick), (brown, fox), ...

目標函數是在整個數據集上定義的,但是我們通常使用隨機梯度下降(SGD),一次使用一個樣本(或batch_size個樣本的“批量”,其中通常有16 <= batch_size <= 512)來優化它。我們來看看這個過程的一個步驟。

讓我們想象在訓練步驟中,我們觀察上面的第一個訓練案例,目標是從quick中預測the。我們從一些噪聲分佈中選擇num_noise個噪聲(對比)樣本,通常是unigram分佈(unigram假定每個單詞的出現獨立於所有其他單詞的出現。例如,我們可以把生成過程看作是擲骰子的序列),P(w)

為了簡單起見,我們假設num_noise=1,並選擇sheep作為一個噪聲示例。接下來,我們計算這一對觀測到樣本對以及噪聲樣本的損失,即目標在時間步' t '變成了:

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

我們的目標是更新嵌入參數theta,使這個目標函數最大化。我們通過推導關於嵌入參數的損失的梯度來實現這一點。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

然後,我們在漸變方向上邁出一小步,對嵌入進行更新。當這個過程在整個訓練集中重複進行時,就會產生“移動”每個單詞的嵌入向量的效果,直到模型成功地從噪聲詞中識別出真實詞為止。

我們可以把學過的向量投影到二維空間來形象化。當我們觀察這些可視化時,很明顯,這些向量捕獲了一些關於單詞及其相互關係的一般的、實際上非常有用的語義信息。

Word2Vec揭祕: 這是深度學習中的一小步,卻是NLP中的巨大跨越

原文鏈接:https://medium.com/explore-artificial-intelligence/word2vec-a-baby-step-in-deep-learning-but-a-giant-leap-towards-natural-language-processing-40fe4e8602ba

更多文章,請關注微信公眾號:AI公園

"

相關推薦

推薦中...