前言
最近两天在学习Word2Vec这个算法,它是NLP领域中非常常用的基础算法,它的作用就是将语料库中的词转化为向量,以便后续在词向量的基础上进行各种计算。这个算法的讲解可以从网络上很容易搜索到,这里就不赘述。
Word2Vec算法已经被实现和封装在Python库gensim中,可以很简单的调用。然而在这两天的尝试中,我发现由于gensim的API发生了变化,很多博客的内容已经不能使用,而且他们的使用说明也不是很清楚,所以决定写下这一篇博文。本文内容参考gensim官网教程,结合现有的博文,所有内容都经过亲自尝试,在当前gensim版本下应该完全work的。
安装gensim
安装很简单,就用pip安装:
pip install --upgrade gensim
或者对于conda的环境:
conda install -c conda-forge gensim
目前最新版本:3.4.0
依赖的相关环境:
Python >= 2.7 (tested with versions 2.7, 3.5 and 3.6)
NumPy >= 1.11.3
SciPy >= 0.18.1
Six >= 1.5.0
smart_open >= 1.2.1
常用功能
训练模型
常用的导入训练数据的方法有两种,第一种是使用Python的内置列表,一个简单的栗子:
# 导入gensim库
from gensim.models import Word2Vec
# 第一种输入方式:Python内置列表
sentences = [['first', 'sentence'], ['second', 'sentence']]
# 调用函数训练模型
model = Word2Vec(sentences) # 调用之后,Word2Vec的模型就训练好了
注意,sentences是一个“二维列表”,一个句子的单词在一个列表中,所有句子的列表在同一个列表中,即:[['第', '一', '个', '句子'], ['第', '二', '个', '句子']]
。如果这里搞错了,训练会很慢,而且训练出来的模型会不好使。
当数据集特别大的时候,使用上述第一种方法就需要消耗特别多的内存,gensim还支持使用迭代生成器的方式输入: