Stanford CS224N 第二課: word2vec踩坑經驗分享

word2vec模型

  word2vec 模型有兩種: Continuous Skip-gram Model 和 Continuous Bag of Words Model (CBOW)。關於這兩個模型的描述能夠參考大神Mikolov的論文Efficient Estimation of Word Representations in Vector Spacepython

  本文不詳細介紹 Word2vec 的機制, 關於這方面的內容推薦查看 Stanford CS224N 的公開課, 結合視屏和PPT, 將課後做業作一遍,對 word2vec的理解會很深入。 另外推薦 Word2Vec Tutorial - The Skip-Gram Model, 文章直觀地講解了如何從神經網絡中獲得詞向量。linux

踩坑經驗一: Softmax Cross Entropy VS Negative Sampling Loss 

  對於一個初步入門了深度學習的小夥伴, 交叉熵要容易理解一點。交叉熵就是讓模型(好比神經網絡)的分佈儘量地擬合真實數據的分佈, 提及來也挺玄乎的,  這裏面有很多的奇技淫巧(調參數), 相信作過深度學習的小夥伴必定有深入的體會。然而對於Word2vec這樣的任務, 一個Vocabulary(不知道詞典 Vocabulary 爲什麼物的小夥伴, 第一次接觸到這個英文單詞的時候, 我也是一臉懵逼 :), Vocabulary 就是一個集合, 集合的內容是一個個單詞)中有hundreds or billions of words, 當有幾萬到幾個億的單詞時, 使用交叉熵是費時間的, 由於每一次計算交叉熵都要遍歷整個Vocabulary, 計算量很大。面試

  Negative Sampling Loss (負採樣) 就是用來解決交叉熵比較慢這個問題的。 仔細觀察負採樣函數的形式, 我對它的粗略理解是讓word pairs (詞對)中的兩個單詞的向量儘量的接近,其它詞向量與中心詞向量儘量的遠。負採樣中最難理解的是 noise distribution(噪聲分佈)函數, 至今仍然沒有Get到其中的精髓。 不過大佬說了, 這是根據實驗結果來肯定的。 ubuntu

踩坑經驗二: 在 Windows + python 3.0 環境下實現做業要求

  課堂做業的提示代碼是爲linux環境寫的, 用的是python 2.0版本。然而個人電腦用的是windows系統, 裝的是python 3.0版本。在實現做業的時候, 發如今對字符串進行編碼和解碼操做的時候, 老是不對, 改了一個下午和一個晚上, 也沒有改爲功。 尚未在虛擬機裏面試過, 不過聽說虛擬機裏面不能用顯卡。此次下定決心搭建一個ubuntu系統, 寫代碼方便一點。windows

sentences += [[w.lower().decode("utf-8").encode('latin1') for w in splitted]]

  這行代碼在 treebank.py 裏面。網絡

  在python 3.0 版本下面運行這行代碼的時候會報錯, 由於在python 3.0 當中, 字符串是沒有解碼操做的。 在 python 2.0 當中字符串等於 bytes, 能夠進行 decode(解碼操做)。哪位大佬要是成功解決了這個問題, 請留言,感激涕零。函數

  今天就暫時說這麼多, 之後想到別的,再添加。學習

相關文章
相關標籤/搜索