ML-训练自己的Word2Vec模型


前言

Word2Vec是Google推出的一款用于将自然语言映射为机器可以处理的向量的算法。是目前较为流行的一种重要算法,在自然语言处理界中有着广泛的应用。本篇博客就来为大家分享一下如何在Windows系统下使用Python语言训练自己的Word2Vec模型。

获取语料

如果要训练模型,首先需要大量的中文语料,不过不用担心,当前网络上已经有很多开源的语料库,不需要我们自己再去费力构建了。读者可以从这篇文章中挑选自己喜欢的语料库,在这里作者选择了搜狗的语料库,可以从这里下载。作者在这里下载了完整版的Zip版本。
下载后解压得到一个“news_tensite_xml.dat”文件

构建语料库

在刚刚获得的dat文件中,所有的数据都是以以下的形式存储的:

<doc>  
<url>http://news.sohu.com/20120612/n345428229.shtml</url>  
<docno>c172394d49da2142-69713306c0bb3300</docno>  
<contenttitle>这是标题</contenttitle>  
<content>这是内容</content>  
</doc>  

这样对于后面的训练是很不方便的,所以我们需要将所有的content标签内的内容提取出来构建成一个语料库。可以参考代码:

def parseSent(sentence):  
    # use Jieba to parse sentences
    seg_list = jieba.cut(sentence)
    output = ' '.join(list(seg_list)) # use space to join them
    return output

# only content is valid
pattern = "<content>(.*?)</content>"  
csvfile = codecs.open("corpus.csv", 'w', 'utf-8')  
with open("../datas/news.dat", "r",errors='ignore') as txtfile:  
    for line in txtfile.readlines():
        m = re.match(pattern, line)
        if m:
            segSent = parseSent(m.group(1))
            csvfile.write("%s" % segSent)
            print(1)
        print(0)

训练模型

当前网络上已经有很多库包含了word2vec的实现,这里使用了gensim中的word2vec模块。如果你没有安装的话需要先安装gensim

logging.basicConfig(format = '%(asctime)s : %(levelname)s : %(message)s', level = logging.INFO)  
sentences = word2vec.Text8Corpus("corpus.csv")  # 加载语料  
model = word2vec.Word2Vec(sentences, size = 400)  # 训练skip-gram模型,向量维度400维

# 保存模型,以便重用
model.save("corpus.model")  
# 对应的加载方式
# model = word2vec.Word2Vec.load("corpus.model")

# 以一种C语言可以解析的形式存储词向量
model.wv.save_word2vec_format("corpus.model.bin", binary = True)  

模型的简单使用

导入已经训练好的模型

model = word2vec.Word2Vec.load('corpus.model')  

获取某个词的词向量,比如说“你好”

vec = model['你好']  

参考文章

问答机器人的Python分类器


分享博文


评论博文


Last one :   ML-情感分析1-使用W2V与SVM进行情感分析

Next article :   DL-RNN循环神经网络原理