Gensim 是我比较常用的一个 NLP 工具包,特别是其中的 word2vec 模块,它的具体 API 如下:
class gensim.models.word2vec.Word2Vec(
sentences=None,
size=100,
alpha=0.025,
window=5,
min_count=5,
max_vocab_size=None,
sample=0.001,
seed=1,
workers=3,
min_alpha=0.0001,
sg=0,
hs=0,
negative=5,
cbow_mean=1,
hashfxn=<built-in function hash>,
iter=5,
null_word=0,
trim_rule=None,
sorted_vocab=1,
batch_words=10000,
compute_loss=False)
模型创建
Gensim 中 word2vec 模型的输入是经过分词的句子列表,即是某个二位数组。但由于中文没有像英文那么自带天然的分词,所有这里我们简单采用 jieba 来进行分词处理。
# 引入 word2vec
from gensim.models import word2vec
# 引入日志配置
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
# 引入分词工具
import jieba
# 引入数据集
raw_sentences = ["但由于中文没有像英文那么自带天然的分词","所以我们第一步采用分词"]
# 切分词汇
sentences = []
for s in raw_sentences:
tmp = []
for item in jieba.cut(s):
tmp.append(item)
sentences.append(tmp)
# print(sentences)
# 构建模型
model = word2vec.Word2Vec(sentences, min_count=1)
# 进行词向量输出
model['中文']
但这种方法在数据集比较大的情况下会占用大量的 RAM,Gensim 本身只是要求能够迭代的有序句子列表,因此在工程实践中我们可以使用一些自定义的生成器,只在内存中保存单条语句,并且在导入内存之前进行分词操作。
Word2Vec 参数
- sentences: 可以是一个 list,对于大型的预料集,我们建议使用