由于平时会用到很多的文本预处理,这里就系统的讲解一下Gensim是如何训练维基百科词向量模型的!!

其中训练好的模型,也就是最终生成的 **.model 文件,可以作为预训练词向量使用。

训练维基百科词向量模型的代码参见我的github:https://github.com/ly987/NLP

首先简单了解一下gensim:

自定义两句话,分词,以分好词的句子作为输入,使用 gensim 的 Word2Vec 训练词向量。

from gensim.models import word2vec
raw_sentences = ["the room is very hot", "the dog is very cute"]
sentences = [s.split() for s in raw_sentences]
print(sentences)        
# [['the', 'room', 'is', 'very', 'hot'], ['the', 'dog', 'is', 'very', 'cute']]
model = word2vec.Word2Vec(sentences, min_count=1)

print(model.similarity('dog', 'room'))      # 0.008617729

embedding_dim = model['dog'].shape[0]
# print('词向量的长度为{}'.format(embedding_dim))         # 100

print(model['dog'])     # 100维度的向量

print(model.most_similar(positive=['hot'], topn=10))
# 输出:
# [('room', 0.1527533233165741),
# ('dog', 0.09926721453666687),
# ('the', 0.06792610883712769),
# ('is', 0.03735002875328064),
# ('cute', 0.018039152026176453),
# ('very', -0.1967192143201828)]

print(model.most_similar(positive=['dog', 'room'], negative=['cute'], topn=1))
# 输出:
# [('very', 0.1005309671163559)]

下面我们开始训练维基百科数据:

一、下载维基百科数据

下载网址:https://dumps.wikimedia.org/zhwiki/

一般有两个版本,这里我们选用小点的那一个,在实际应用中,我们用1.7G训练的词向量作为预训练词向量。

下载好的文件格式就为 **.bz2

二、将下载好的维基百科文件的文件格式转化为 **.txt格式

使用github中分享的代码:process.py

在cmd中,将路径调至process.py和下载好的 **.bz2 文件目录下,运行:

python process.py zhwiki-latest-pages-articles.xml.bz2 wiki.zh.text

其中wiki.zh.text的名称可以自定义。

三、将 **.txt 文件的繁体字转化为楷体

使用软件:opencc

安装好opencc软件,将 **.txt 文件放置与 opencc.exe 同一目录下,在cmd中,将路径调至opencc的安装目录下,运行:

opencc -i wiki_texts.txt -o test.txt -c t2s.json

其中 test.txt 的名称可以自定义。

四、对 test.txt 分词

使用github中分享的代码:Testjieba.py

在cmd中,将路径调至Testjieba.py和下载好的文件目录下,运行:

python Testjieba.py

五、训练词向量

使用github中分享的代码:word2vec_model.py

在cmd中,将路径调至word2vec_model.py和下载好的文件目录下,运行:

python word2vec_model.py zh.jian.wiki.seg.txt wiki.zh.text.model wiki.zh.text.vector

其中 wiki.zh.text.model 和 wiki.zh.text.vector 的名称可以自定义。wiki.zh.text.model 即为最终训练好的词向量。

六、测试

使用刚刚训练好的 wiki.zh.text.model 来对句子进行词向量转化。

from gensim.models import Word2Vec
en_wiki_word2vec_model = Word2Vec.load('wiki.zh.text.model')
testwords = ['苹果','数学','学术','白痴','篮球']
for i in range(5):
    res = en_wiki_word2vec_model.most_similar(testwords[i])
    print (testwords[i])
    print (res)

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐