一、需求描述
业务需求的目标是识别出目标词汇的同义词和相关词汇,如下为部分目标词汇(主要用于医疗问诊):
尿
痘痘
发冷
呼吸困难
恶心
数据源是若干im数据,那么这里我们选择google 的word2vec模型来训练同义词和相关词。
二、数据处理
数据处理考虑以下几个方面:
1. 从hive中导出不同数据量的数据
2. 过滤无用的训练样本(例如字数少于5)
3. 准备自定义的词汇表
4. 准备停用词表
三、工具选择
选择python 的gensim库,由于先做预研,数据量不是很大,选择单机就好,暂时不考虑spark训练。后续生产环境计划上spark。
上述文档有关工具的用法已经很详细了,就不多说。
分词采用jieba。
四、模型训练步骤简述
1.先做分词、去停用词处理
seg_word_line = jieba.cut(line, cut_all = True)
2.将分词的结果作为模型的输入
model = gensim.models.Word2Vec(LineSentence(source_separated_words_file), size=200, window=5, min_count=5, alpha=0.02, workers=4)
3.保存模型,方便以后调用,获得目标词的同义词
similary_words = model.most_similar(w, topn=10)
五、重要调参目标
比较重要的参数:
1. 训练数据的大小,当初只用了10万数据,训练出来的模型很不好,后边不断地将训练语料增加到800万,效果得到了明显的提升
2. 向量的维度,这是词汇向量的维数,这个会影响到计算,理论上来说维数大一点会好。
3. 学习速率