Word Embedding: Word2Vec

1. 導(dǎo)入

??這是語言表示系列的第1篇牺堰,主要講述了分布式表示里的Word2vec方法蚌讼。該系列目前暫定有4篇語言的分布式表示(Distributed Representations)學(xué)習(xí)苍姜,分別是Word2Vec、Doc2Vec、字符級別的Word2Vec和Glove翼闽;幾篇詞語的分布式表示(Distributional Representations)禽捆,分別是:潛在語義分詞模型(LSA)笙什、潛在地理克雷分配模型(LDA)和隨機(jī)索引(random indexing);還有幾篇是文本特征胚想,分別講了:VSM琐凭、n-gram、詞袋和TF-IDF等浊服。
??參考[1] 提到:詞語的離散表示一般獨(dú)熱編碼(one-hot encode)统屈,句子或篇章一般用詞袋模型、TF-IDF模型牙躺、N元模型等進(jìn)行轉(zhuǎn)換(我的理解:這就是文本的特征工程)愁憔,這些方法還需要引入人工知識(shí)庫,比如同義詞詞典孽拷、上下位詞典等吨掌,才能有效地進(jìn)行后續(xù)的語義計(jì)算。對這種方法的改進(jìn)有基于聚類的詞表示脓恕,比如Brown聚類算法膜宋,通過聚類得到詞的類別簇來改進(jìn)詞的表示。詞語除了離散表示外還有分布式表示(Distributional Representations)和分散式表示(Distributed Representations):分布式表示基于Harris的分布式假設(shè):如果兩個(gè)詞的上下文相似进肯,那么這兩個(gè)詞也是相似的激蹲;而分散式表示也稱為分布式表示,分散式表示將詞語的潛在語法或語義特征分散式地存儲(chǔ)在一組神經(jīng)元中(該層就是基于文本的深度學(xué)習(xí)網(wǎng)絡(luò)中的Embedding lookup 層)江掩,用稠密学辱、低維、連續(xù)的向量表示环形,也稱為嵌入(Embedding)策泣。上述兩種表示有一定的區(qū)別。 分散式表示是指一種語義分散存儲(chǔ)的表示形式抬吟,而分布式表示是通過分布式假設(shè)獲得的表示萨咕。 但這兩者并不對立,比如 Skip-Gram火本、 CBOW 和 glove等模型得到詞向量危队,即是分散式表示聪建,又是分布式表示。(我的理解:1茫陆、分布式表示得到的向量在使用的時(shí)候是不變的金麸。分散式表示得到的向量是隨著訓(xùn)練過程而更新的;2簿盅、在Encoder-Decoder神經(jīng)網(wǎng)絡(luò)中挥下,得到的中間語義向量就是分散式表示的一種;3桨醋、基于文本的深度學(xué)習(xí)網(wǎng)絡(luò)對Embedding層訓(xùn)練的1個(gè)Trick是在模型訓(xùn)練的開始階段不更新Embedding層參數(shù)棚瘟,到模型微調(diào)的時(shí)候再更新,防止過擬合)


語言表示模型劃分.png

2. Word Embedding的一種實(shí)現(xiàn):Word2Vec

??根據(jù)維基百科的概念喜最,Word embedding是指把一個(gè)維數(shù)為所有詞的數(shù)量的高維空間嵌入到一個(gè)維數(shù)低得多的連續(xù)空間向量中偎蘸,每個(gè)單詞或詞組被映射為實(shí)數(shù)域上的向量。其實(shí)就是把One-hot表示的詞轉(zhuǎn)化成分布式表示的詞瞬内,好處當(dāng)然是可以消除詞的語義鴻溝禀苦。關(guān)于分布式表示確實(shí)地降低了維度,但是能不能化簡計(jì)算這個(gè)問題遂鹊,在這篇蘇劍林同學(xué)的博文里有提到,并不會(huì)維度降低可以減少計(jì)算量蔗包。下面我會(huì)搬運(yùn)其中一部分進(jìn)來秉扑。
?? 搬運(yùn)中 ...
?? 搬運(yùn)中 ...
?? Word2Vec還有一個(gè)有趣的特性,Word Analogy调限,這里有一個(gè)Word Analogy的討論舟陆。
?? Word2Vec就是Word Embedding的一種方法,而且是目前為止效果最好的詞向量表示方法耻矮。

3. Word2Vec的原理

??Word2Vec可以看做是通過神經(jīng)網(wǎng)絡(luò)來訓(xùn)練N-gram語言模型秦躯,并在訓(xùn)練過程中求出word所對應(yīng)的vector的方法,根據(jù)語言模型的不同裆装,可以分為CBOW(連續(xù)詞袋模型)和Skip-gram兩種模型踱承,而根據(jù)兩種降低訓(xùn)練復(fù)雜度的方法又可以分為Hierarchical Softmax和Negative Sampling,根據(jù)排列組合哨免,Word2Vec有4種實(shí)現(xiàn)方式茎活。

3.1 連續(xù)詞袋模型(Continuous Bag-of-Word Model / CBOW)

?? CBOW也被稱為連續(xù)詞袋模型,是一個(gè)3層神經(jīng)網(wǎng)絡(luò)琢唾,如下圖所示载荔,神經(jīng)網(wǎng)絡(luò)的輸入層是當(dāng)前單詞w(t)的前n-1個(gè)詞w(t-n+1) ~ w(t-1) 和后n-1個(gè)詞w(t+1) ~ w(t+n-1),與n-gram不同采桃,n-gram是前n-1個(gè)詞預(yù)測第n個(gè)詞懒熙,神經(jīng)網(wǎng)絡(luò)的輸出層是當(dāng)前單詞w(t)丘损。CBOW是神經(jīng)網(wǎng)絡(luò)語言模型(Neural Network Language Model / NNLM)的一種,NNLM的介紹參見Deep Learning in NLP (一)詞向量和語言模型工扎,參考文獻(xiàn)[3] 提到徘钥,區(qū)別有3點(diǎn):1、(從輸入層到投影層的操作)NNLM是通過拼接定庵,CBOW是通過累加求和 2吏饿、(隱藏層)NNLM有隱藏層,CBOW沒有隱藏層 3蔬浙、(輸出層)NNLM是線性結(jié)構(gòu)猪落,CBOW是樹形結(jié)構(gòu)。

CBOW模型的網(wǎng)絡(luò)結(jié)構(gòu)示意圖.png

?? CBOW在Hierarchical Softmax下的加速在3.3.1畴博。

3.2 Skip-gram Model

??Skip-gram模型剛好是CBOW模型反過來笨忌,如下圖所示:Skip-gram模型的輸入時(shí)當(dāng)前詞w(t),輸出是當(dāng)前詞的前n-1個(gè)詞w(t-n+1) ~ w(t-1) 和當(dāng)前詞的后n個(gè)詞 w(t+1) ~ w(t+n-1)俱病。 其中投影層其實(shí)是多余的官疲,只是方便比較,是一個(gè)恒等投影亮隙。


Skip-gram的3層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu).png

??

3.3 Hierarchical Softmax

3.3.1 CBOW + Hierarchical Softmax

??


CBOW+Hierarchical Softmax模型的網(wǎng)絡(luò)結(jié)構(gòu)示意圖.png

3.3.2 Skip-gram + Hierarchical Softmax

??


Skip-gram + Hierarchical Softmax模型的網(wǎng)絡(luò)結(jié)構(gòu)示意圖.png

3.4 Negative Sampling

4. Word2Vec的實(shí)現(xiàn)和技巧

4.1 哈夫曼樹的構(gòu)造

??

4.2 負(fù)采樣

??

5. Word2Vec的Tricks

5.1 n-gram的n如何設(shè)置

??

6. Word2Vec的使用:gensim.models.Word2Vec

6.1 輸入途凫、輸出和流程

??輸入:已經(jīng)分詞好的語料,標(biāo)準(zhǔn)的格式為句子的序列溢吻,每個(gè)句子是一個(gè)單詞列表维费。
??輸出:Word2Vec模型
??流程:
????1、建立一個(gè)空的模型對象:model = gensim.model2.Word2Vec()
????2促王、遍歷一次語料庫建立詞典:model.build_vocab(sentences)
????3犀盟、第2次遍歷語料庫簡歷神經(jīng)網(wǎng)絡(luò)模型:model.train(sentences)

6.2 相關(guān)參數(shù)

??gensim.models.Word2Vec(sentences=None, size=100, alpha=0.025, window=5, min_count=5, max_vocab_size=None, sample=1e-3, seed=1, workers=3, min_alpha=0.0001,
sg=0, hs=0, negative=5, cbow_mean=1, hashfxn=hash, iter=5, null_word=0,
trim_rule=None, sorted_vocab=1, batch_words=MAX_WORDS_IN_BATCH, compute_loss=False)
????sentences:可迭代對象,提供了BrownCorpus和Text8Corpus兩個(gè)語料庫的可迭代對象蝇狼,同時(shí)提供了如果分詞好的語料是一行一個(gè)句子阅畴,單詞之間用空格隔開,使用gensim.models.word2vec.LineSentence(corpus_file_path)可以幫忙處理得到標(biāo)準(zhǔn)的輸入格式
????sg:訓(xùn)練方式:CBOW或Skip-gram
????size:詞向量維度
????alpha:初始學(xué)習(xí)率迅耘,會(huì)慢慢降到min_alpha
????windows:n-gram里的n
????min_count:忽略出現(xiàn)次數(shù)少于min_count的單詞
????max_vocab_size:限制詞典大小贱枣,超出這個(gè)數(shù)時(shí)會(huì)把出現(xiàn)次數(shù)最少的數(shù)去掉
????sample:
????seed:
????workers:worker threads個(gè)數(shù)
????hs:是否使用Hierarchical Softmax
????negative:負(fù)采樣的個(gè)數(shù):通常5-20
????cbow_mean:if 0, use the sum of the context word vectors. If 1 (default), use the mean. Only applies when cbow is used.
????hashfxn:hash function to use to randomly initialize weights, for increased training reproducibility. Default is Python's rudimentary built in hash function.
????iter:在語料庫上的迭代次數(shù)
??build_vocab(sentences, keep_raw_vocab=False, trim_rule=None, progress_per=10000, update=False)
????trim_rule:vocabulary trimming rule, specifies whether certain words should remain in the vocabulary, be trimmed away, or handled using the default (discard if word count < min_count). Can be None (min_count will be used), or a callable that accepts parameters (word, count, min_count) and returns either utils.RULE_DISCARD, utils.RULE_KEEP or utils.RULE_DEFAULT. Note: The rule, if given, is only used to prune vocabulary during build_vocab() and is not stored as part of the model.
????keep_raw_vocab:
????update:If true, the new provided words in word_freq dict will be added to model's vocab.
??model.train(sentences, total_examples=None, total_words=None, epochs=None, start_alpha=None, end_alpha=None, word_count=0, queue_factor=2, report_delay=1.0, compute_loss=None)
????total_examples:To support linear learning-rate decay from (initial) alpha to min_alpha, and accurate progres-percentage logging, either total_examples (count of sentences) or total_words (count of raw words in sentences) MUST be provided. 如果和上一步驟的語料庫一樣,設(shè)置為corpus_count
????epochs:必須設(shè)置豹障。To avoid common mistakes around the model's ability to do multiple training passes itself, an explicit epochs argument MUST be provided. In the common and recommended case, where train() is only called once, the model's cached iter value should be supplied as epochs value.

6.3 模型的使用

??模型的保存:
??模型的加載:
??獲取詞向量:
??計(jì)算1個(gè)詞的最近似詞冯事,倒排序:
??計(jì)算2個(gè)詞之間的余弦相似度:
??計(jì)算2個(gè)集合之間的余弦相似度:
??選出集合中不同類的詞語:

7. 連詞成句和連詞成篇

8.1 連詞成句

8.2 連詞成篇

7. 后記

??1、Sentence2Vec和Doc2Vec
??2血公、語言模型其實(shí)就是看一句話是不是正常人說出來的昵仅。這玩意很有用,比如機(jī)器翻譯、語音識(shí)別得到若干候選之后摔笤,可以利用語言模型挑一個(gè)盡量靠譜的結(jié)果够滑。語言模型形式化的描述就是給定一個(gè)字符串,看它是自然語言的概率 P(w1,w2,…,wt)吕世。w1 到 wt 依次表示這句話中的各個(gè)詞彰触。有個(gè)很簡單的推推論:
???? P(w1,w2,…,wt) = P(w1)×P(w2|w1)×P(w3|w1,w2)×…×P(wt|w1,w2,…,wt?1)
常用的語言模型都是在近似地求 P(w1,w2,…,wt)。比如 n-gram 模型就是用 P(wt|wt?n+1,…,wt?1) 近似表示前者命辖。NNLM就是用神經(jīng)網(wǎng)絡(luò)來近似計(jì)算n-gram况毅。

參考
[1] 中文信息處理發(fā)展報(bào)告:http://202.119.24.249/cache/10/03/cips-upload.bj.bcebos.com/6707f4dec86696713877d94afa2fab44/cips2016.pdf
[2] 詞向量和Embedding究竟是怎么回事?: http://kexue.fm/archives/4122/
[3] Word2Vec中的數(shù)學(xué):https://spaces.ac.cn/usr/uploads/2017/04/2833204610.pdf
[4] Deep Learning實(shí)戰(zhàn)之Word2Vec:https://spaces.ac.cn/usr/uploads/2017/04/146269300.pdf

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尔艇,一起剝皮案震驚了整個(gè)濱河市尔许,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌终娃,老刑警劉巖味廊,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異棠耕,居然都是意外死亡余佛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門窍荧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辉巡,“玉大人,你說我怎么就攤上這事蕊退『炻龋” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵咕痛,是天一觀的道長。 經(jīng)常有香客問我喇嘱,道長茉贡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任者铜,我火速辦了婚禮腔丧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘作烟。我一直安慰自己愉粤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布拿撩。 她就那樣靜靜地躺著衣厘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上影暴,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天错邦,我揣著相機(jī)與錄音,去河邊找鬼型宙。 笑死撬呢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妆兑。 我是一名探鬼主播魂拦,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搁嗓!你這毒婦竟也來了芯勘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤谱姓,失蹤者是張志新(化名)和其女友劉穎借尿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屉来,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡路翻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茄靠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茂契。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖慨绳,靈堂內(nèi)的尸體忽然破棺而出掉冶,到底是詐尸還是另有隱情,我是刑警寧澤脐雪,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布厌小,位于F島的核電站,受9級特大地震影響战秋,放射性物質(zhì)發(fā)生泄漏璧亚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一脂信、第九天 我趴在偏房一處隱蔽的房頂上張望癣蟋。 院中可真熱鬧,春花似錦狰闪、人聲如沸疯搅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幔欧。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間琐馆,已是汗流浹背规阀。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘦麸,地道東北人谁撼。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像滋饲,于是被迫代替她去往敵國和親厉碟。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容