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,对于大型的预料集,我们建议使用