词嵌入与NLP
學(xué)習(xí)目標(biāo)
- 目標(biāo)
- 了解詞嵌入的優(yōu)勢
- 掌握詞嵌入的訓(xùn)練gensim庫的使用
- 應(yīng)用
- 無
在RNN中詞使用one_hot表示的問題
?
- 假設(shè)有10000個(gè)詞
- 每個(gè)詞的向量長度都為10000,整體大小太大
- 沒能表示出詞與詞之間的關(guān)系
- 例如Apple與Orange會更近一些,Man與Woman會近一些,取任意兩個(gè)向量計(jì)算內(nèi)積都為0
4.2.2 詞嵌入
定義:指把一個(gè)維數(shù)為所有詞的數(shù)量的高維空間嵌入到一個(gè)維數(shù)低得多的連續(xù)向量空間中,每個(gè)單詞或詞組被映射為實(shí)數(shù)域上的向量。
注:這個(gè)維數(shù)通常不定,不同實(shí)現(xiàn)算法指定維度都不一樣,通常在30~500之間。
如下圖所示:
?
4.2.2.1 特點(diǎn)
- 能夠體現(xiàn)出詞與詞之間的關(guān)系
- 比如說我們用Man - Woman,或者Apple - Orange,都能得到一個(gè)向量
- 能夠得到相似詞,例如Man - Woman = King - ?
- ? = Queen
?
4.2.2.3 算法類別
Bengio等人在一系列論文中使用了神經(jīng)概率語言模型使機(jī)器“習(xí)得詞語的分布式表示。
2013年,谷歌托馬斯·米科洛維(Tomas Mikolov)領(lǐng)導(dǎo)的團(tuán)隊(duì)發(fā)明了一套工具word2vec來進(jìn)行詞嵌入。
- skip-gram
算法學(xué)習(xí)實(shí)現(xiàn):https://www.tensorflow.org/tutorials/representation/word2vec
- CBow
下載gensim庫
pip install gensim
4.2.3 Word2Vec案例
4.2.3.1 訓(xùn)練語料
由于語料比較大,就提供了一個(gè)下載地址:http://www.sogou.com/labs/resource/cs.php
- 搜狗新聞中文語料(2.7G)
- 做中文分詞處理之后的結(jié)果
4.2.3.2 步驟
-
1、訓(xùn)練模型
-
2、測試模型結(jié)果
4.2.3.3 代碼
- 訓(xùn)練模型API
- from gensim import Word2Vec
- Word2Vec(LineSentence(inp), size=400, window=5, min_count=5)
- LineSentence(inp):把word2vec訓(xùn)練模型的磁盤存儲文件
- 轉(zhuǎn)換成所需要的格式,如:[[“sentence1”],[”sentence1”]]
- size:是每個(gè)詞的向量維度
- window:是詞向量訓(xùn)練時(shí)的上下文掃描窗口大小,窗口為5就是考慮前5個(gè)詞和后5個(gè)詞
- min-count:設(shè)置最低頻率,默認(rèn)是5,如果一個(gè)詞語在文檔中出現(xiàn)的次數(shù)小于5,那么就會丟棄
- 方法:
- inp:分詞后的文本
- save(outp1):保存模型
訓(xùn)練的代碼如下
if len(sys.argv) < 3:sys.exit(1)# inp表示語料庫(分詞),outp:模型inp, outp = sys.argv[1:3]model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5, workers=multiprocessing.cpu_count())model.save(outp)
import sys
import multiprocessingfrom gensim.models import Word2Vec
from gensim.models.word2vec import LineSentenceif __name__ == '__main__':if len(sys.argv) < 3:sys.exit(1)# inp表示語料庫(分詞),outp:模型inp, outp = sys.argv[1:3]model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5, workers=multiprocessing.cpu_count())model.save(outp)
運(yùn)行命令
python trainword2vec.py ./corpus_seg.txt ./model/*
指定好分詞的文件以及,保存模型的文件
- 加載模型測試代碼
- model = gensim.models.Word2Vec.load("*.model")
- model.most_similar('警察')
- model.similarity('男人','女人')
- most_similar(positive=['女人', '丈夫'], negative=['男人'], topn=1)
- model = gensim.models.Word2Vec.load("*.model")
improt gensim
gensim.models.Word2Vec.load("./model/corpus.model")model.most_similar("警察")Out:
[('警員', 0.6961891651153564),('保安人員', 0.6414757370948792),('警官', 0.6149201989173889),('消防員', 0.6082159876823425),('憲兵', 0.6013336181640625),('保安', 0.5982533693313599),('武警戰(zhàn)士', 0.5962344408035278),('公安人員', 0.5880240201950073),('民警', 0.5878666639328003),('刑警', 0.5800305604934692)]model.similarity('男人','女人')
Out: 0.8909852730435042model.most_similar(positive=['女人', '丈夫'], negative=['男人'], topn=1)
Out: [('妻子', 0.7788498997688293)]
4.2.4 總結(jié)
- 掌握gensim庫的詞向量訓(xùn)練和使用
總結(jié)
- 上一篇: 商城数据库表设计介绍
- 下一篇: seq2seq与Attention机制