使用维基百科英文语料训练word2vec.model

  1. 英文语料的获取
    该实验中所使用的语料
    使用全量维基百科语料集的一个子集,压缩包大小大约在170M,可通过链接下载。

  2. 文本数据的提取
    处理包括两个阶段,首先将xml的wiki数据转换为text格式,可以通过下面的脚本进行(源自:中英文维基百科语料上的word2vec实验):

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import print_function
import six
from gensim.corpora import WikiCorpus

if __name__ == '__main__':
    inp = "../Data/enwiki-latest-pages-articles1.xml-p10p30302.bz2"
    outp = "../Data/out_wiki.en.txt"
    space = " "
    i = 0

    output = open(outp, 'w', encoding="utf-8")
    wiki = WikiCorpus(inp, lemmatize=False, dictionary={})
    for text in wiki.get_texts():
        if(i % 1000 == 0):
            print(i)
        if six.PY3:
            output.write(' '.join(text) + '\n')
        else:
            output.write(space.join(text) + "\n")
        i = i + 1
    output.close()

  1. 模型训练
    文本提取完成后,进行模型的训练:
# -*- coding: utf-8 -*-
from gensim.models import Word2Vec

if __name__ == '__main__':
    input1 = "../Data/out_wiki.en.txt"

    output1 = "../Data/word2vec_model/word2vec.model"
    output2 = "../Data/word2vec_model/vector.model"

    sentences = []
    with open(input1, 'r', encoding='utf8', errors='ignore') as f:
        for line in f:
            if " " in line:
                sentences.append(line.split(" "))

    model = Word2Vec(size=200, window=5, min_count=5, workers=4)  # 定义word2vec 对象

    model.build_vocab(sentences)  # 建立初始训练集的词典
    model.train(sentences, total_examples=model.corpus_count, epochs=model.iter)  # 模型训练

    model.save(output1)  # 模型保存
    model.wv.save_word2vec_format(output2, binary=False)  # 词向量保存

'''
# 模型的训练和保存,下面两行同样可以训练,但是无法追加训练
model = Word2Vec(sentences, size=100, window=5, min_count=1, workers=4)
model.save("word2vec.model")
'''

我们在实际使用的时候,可能会有某些词语不在词典中,我们无法通过模型获取得到对应的词向量,因此可能需要追加训练,追加训练的代码如下:

# 增量训练
sentences = [['first', 'sentence'], ['second', 'sentence']]  # 初始训练集
more_sentence = [["hello", "world"]]  # 追加训练集

model = Word2Vec(size=100, window=5, min_count=1, workers=4)  # 定义word2vec 对象
model.build_vocab(sentences)  # 建立初始训练集的词典
model.train(sentences, total_examples=model.corpus_count, epochs=model.iter)  # 模型训练
print(model.wv['first'])  # 输出first的vector
# print(model.wv['hello']) 此时hello不在字典中,报错

model.build_vocab(more_sentence, update=True)  # 追加训练集到词典中
model.train(more_sentence, total_examples=model.corpus_count, epochs=model.iter)  # 追加训练
print(model.wv['hello'])  # 此时hello在字典中,不报错

  1. 模型使用
    常用的集中方法是:

    • 模型的加载:model = gensim.models.Word2Vec.load('../Data/word2vec_model/word2vec.model')
    • 获取词向量:可以使用 vector = model[word] 来获取
    • 获取与指定单词最相近的词语及其相似度分数:print(model.most_similar('car'))
    • 获取两个指定词语的相似程度:print(model.n_similarity(["mars"], ["earth"]))

其他更多的使用可以参考官方文档:gensim.Word2Vec

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值