目录
中文语料处理
法一:语料处理为列表
法二:语料是文件(处理为迭代器)
对一个目录下的所有文件生效(法1)
对一个目录下的所有文件生效(法2)
class : gensim.models.word2vec.PathLineSentences
对于单个文件语料,使用LineSentence
语料库获取语料
word2vec中文语料处理及模型训练实践
python gensim训练 word2vec的中文语料格式是什么样的呢?很多经验贴或是忽略了这个地方,或是没有详细说明,此博文详细说明及实践语料的处理方式,并汇总数种语料加载方式。
从文章word2vec词向量训练使用(python gensim)对word2vec的介绍,我们了解到Word2Vec第一个参数sentences要求是是预处理后的训练语料库,需要输入一个可迭代的列表,但是对于较大的语料库,可以考虑直接从磁盘/网络传输句子的迭代。
如果是句子,需要进行分词
如果是文件,需要将文件处理为每一行对应一个句子(已经分词,以空格隔开),实例处理过程见文末。
把Python内置列表当作输入很方便,但当输入量很大的时候,大会占用大量内存。
Gensim需要输入一个可迭代的列表,可以是迭代器,没有必要把一切东西都保存在内存中,提供一个语句,加载处理它,忘记它,加载另一个语句。
一般我们的语料是在文件中存放的,首先,需要保证语料文件内部每一行对应一个句子(已经分词,以空格隔开),方法见上。
对一个目录下的所有文件生效(法1)
这些文件已经被分词好了,如果还需要进一步预处理文件中的单词,如移除数字,提取命名实体… 所有的这些都可以在MySentences 迭代器内进行,保证给work2vec的是处理好的迭代器。
对一个目录下的所有文件生效(法2)
class : gensim.models.word2vec.PathLineSentences
对于单个文件语料,使用LineSentence
class: gensim.models.word2vec.LineSentence
每一行对应一个句子(已经分词,以空格隔开),我们可以直接用LineSentence把txt文件转为所需要的格式。
LineSentence功能解释:Iterate over a file that contains sentences: one line = one sentence. Words must be already preprocessed and separated by whitespace(对包含句子的文件进行迭代:一行=一句话。单词必须经过预处理,并由空格分隔)
gensim.models.word2vec.LineSentence(source, max_sentence_length=10000, limit=None) 预处理类,限制句子最大长度,文档最大行数 拿到了分词后的文件,在一般的NLP处理中,会需要去停用词。由于word2vec的算法依赖于上下文,而上下文有可能就是停词。因此对于word2vec,我们可以不用去停词。
语料库获取语料
class gensim.models.word2vec.Text8Corpus
(实践部分代码改编自链接)原始小说语料下载《人民的名义》