gensim 中文语料训练 word2vec

gensim 的word2vec api参见:
https://radimrehurek.com/gensim/models/word2vec.html
本文说一下中文语料的使用,很简单。

1 word2vec api

看下api:

 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=in function hash>, iter=5, null_word=0,  
 trim_rule=None, sorted_vocab=1, batch_words=10000)
  1. 其中的sentences是句子列表,而每个句子又是词语的列表,即list[list]类型。 切记!!
  2. size是embedding纬度,即每个词的向量纬度
  3. window是窗口大小
  4. min_count用来做筛选,去除总的词频小于该值的词语
  5. 其他参数见上面的链接

2 中文语料的csv文件

采用的是csv格式的中文语料:

chnl,nid,doc
体育,18711252,大卫 李髌骨 韧带 撕裂 等待 MRI 篮球 521日 NBA 记者 MichaelC.Wright RamonaShelburne 联合 报道 消息 人士 透露 马刺 大卫 诊断 膝盖 韧带 撕裂 当地 时间 周日 接受 核磁共振 检查 确认 伤势 马刺 今天 主场 勇士 系列赛 比分 落后 李本场 比赛 进攻 落地 不幸 膝盖 提前 退出 比赛 今年 季后赛 李场 出战 4.1分 篮板 来源 Twitter
体育,18711231,尤文 双冠 剑指 欧冠 决赛 皇马 北京 时间 521日 尤文图斯 主场 血虐克 罗托 提前 夺得 意甲 冠军 史无前例 蝉联 意甲 518日 意大利杯 实现 杯赛 三连冠 目前 尤文 赛季 展现 强大 实力 目标 13年 拜仁 赛季 剑指 尤文 上一场 联赛 比赛 罗马 尤文 意大利杯 决赛 前景 担忧 斑马军团 完美 打消 拥趸 疑虑 顺利 夺得 赛季 冠军 头衔 尤文 处于 皮亚尼奇 赫迪拉 中场 主力 无法 出场 情况 完成 卫冕 赛季 尤文 想起 拜仁慕尼黑 当时 拥有 强大 罗贝里 组合 穆勒 拉姆 施魏 施泰格 进攻 防守 两端 强硬 会师 欧冠 决赛 罗本 一锤定音 拜仁 球迷 夜晚 流下 热泪 布冯 能够 年龄 耳朵杯 职业 生涯 集齐 世界杯
体育,18711230,花式 吐饼 看看 尼日利亚 老乡 北京 时间 521日 中超 继续 展开 较量 长春 亚泰 坐镇 经开 体育场 迎来 天津 泰达 挑战 。本场 比赛 陷入 保级 泥潭 试图 上半场 主场 作战 亚泰 发难 胡斯蒂 主罚 前场 任意球 亚泰 中卫 孙捷 力压 防守 球员 头槌 破门 主队 纪录 下半场 惠家康 精彩 边路 突破 助攻 德耶 闪电 扳平 比分 双方 起跑线 比赛 双方 制造 破门 机会 亚泰 获得 点球 良机 皮球 直接 送入 对方 门将 怀中 未能 破门 战罢 双方 握手言和 相比 平和 比分 双方 外援 浪费 进球 机会 唏嘘不已 亚泰 队长 
......

chnl, nid, doc分别是频道,新闻id,文本

3 实现

# -*- coding: utf-8 -*-

import pandas as pd
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence

df = pd.read_csv('体育.csv')
sentences = df['doc']
line_sent = []
for s in sentences:
    line_sent.append(s.split())  #句子组成list

model = Word2Vec(line_sent, 
                 size=300, 
                 window=5
                 min_count=1, 
                 workers=2)
model.save('./word2vec.model')
for i in model.vocab.keys(): #vocab是dict
    print type(i)
    print i
#model = Word2Vec.load('word2vec_model')
print model.wv['球员']

如果语料文件不是csv,而直接是训练的txt文件,可以使用LineSentence直接把文件读成正确的格式

#model = Word2Vec(LineSentence('体育.txt'), 
                  size=300, 
                  window=5
                  min_count=1, 
                  workers=2)

4 注意编码

训练用的编码格式要与使用model时的编码格式一致。
例如,如果文件是utf-8的文件,读取时没有转成unicode,则model使用时也要使用utf-8格式,例如model.wv[‘球队’]; 训练是用unicode,则使用model.wv[u’球队’]

你可能感兴趣的:(NLP)