一、需求描述

业务需求的目标是识别出目标词汇的同义词和相关词汇,如下为部分目标词汇(主要用于医疗问诊):

尿
痘痘
发冷
呼吸困难
恶心

数据源是若干im数据,那么这里我们选择google 的word2vec模型来训练同义词和相关词。

二、数据处理

数据处理考虑以下几个方面:
1. 从hive中导出不同数据量的数据
2. 过滤无用的训练样本(例如字数少于5)
3. 准备自定义的词汇表
4. 准备停用词表

三、工具选择

选择python 的gensim库,由于先做预研,数据量不是很大,选择单机就好,暂时不考虑spark训练。后续生产环境计划上spark。

详细的gensim中word2vec文档

上述文档有关工具的用法已经很详细了,就不多说。

分词采用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. 学习速率
4. 窗口大小

在调参上,并没有花太多精力,因为目测结果还好,到时上线使用前再仔细调整。

六、模型的实际效果

目标词 同义词相关词
尿 尿液,撒尿,尿急,尿尿有,尿到,内裤,尿意,小解,前列腺炎,小便
痘痘 逗逗,豆豆,痘子,小痘,青春痘,红痘,长痘痘,粉刺,讽刺,白头
发冷 发烫,没力,忽冷忽热,时冷时热,小柴胡,头昏,嗜睡,38.9,头晕,发寒
呼吸困难 气来,气紧,窒息,大气,透不过气,出不上,濒死,粗气,压气,心律不齐
恶心 闷,力气,呕心,胀气,涨,不好受,不进,晕车,闷闷,精神

七、可以跑的CODE

import codecs
import jieba
import gensim
from gensim.models.word2vec import LineSentencedef read_source_file(source_file_name):try:file_reader = codecs.open(source_file_name, 'r', 'utf-8',errors="ignore")lines = file_reader.readlines()print("Read complete!")file_reader.close()return linesexcept:print("There are some errors while reading.")def write_file(target_file_name, content):file_write = codecs.open(target_file_name, 'w+', 'utf-8')file_write.writelines(content)print("Write sussfully!")file_write.close()def separate_word(filename,user_dic_file, separated_file):print("separate_word")lines = read_source_file(filename)#jieba.load_userdict(user_dic_file)stopkey=[line.strip() for line in codecs.open('stopword_zh.txt','r','utf-8').readlines()]output = codecs.open(separated_file, 'w', 'utf-8')num = 0for line in lines:num = num + 1if num% 10000 == 0:print("Processing line number: " + str(num))seg_word_line = jieba.cut(line, cut_all = True)wordls = list(set(seg_word_line)-set(stopkey))if len(wordls)>0:word_line = ' '.join(wordls) + '\n'output.write(word_line)output.close()return separated_filedef build_model(source_separated_words_file,model_path):print("start building...",source_separated_words_file)model = gensim.models.Word2Vec(LineSentence(source_separated_words_file), size=200, window=5, min_count=5, alpha=0.02, workers=4)       model.save(model_path)print("build successful!", model_path)return modeldef get_similar_words_str(w, model, topn = 10):result_words = get_similar_words_list(w, model)    return str(result_words)def get_similar_words_list(w, model, topn = 10):result_words = []try:similary_words = model.most_similar(w, topn=10)print(similary_words)for (word, similarity) in similary_words:result_words.append(word)print(result_words)except:print("There are some errors!" + w)return result_wordsdef load_models(model_path):return gensim.models.Word2Vec.load(model_path)if "__name__ == __main__()":filename = "d:\\data\\dk_mainsuit_800w.txt" #source fileuser_dic_file = "new_dict.txt" # user dic fileseparated_file = "d:\\data\\dk_spe_file_20170216.txt" # separeted words filemodel_path = "information_model0830" # model file#source_separated_words_file = separate_word(filename, user_dic_file, separated_file)source_separated_words_file = separated_file    # if separated word file exist, don't separate_word againbuild_model(source_separated_words_file, model_path)# if model file is exist, don't buile modl model = load_models(model_path)words = get_similar_words_str('头痛', model)print(words)

Word2Vec训练同义词模型相关推荐

  1. word2vec训练中文模型—wiki百科中文库

    ps:整理电脑文档,将之前的做的word2vec训练的中文模型实验记录做下poko,欢迎交流学习. 1.准备数据与预处理 注意事项:请将内存最好选择8g及以上的电脑,否则可能卡顿,并在开始时候安装好p ...

  2. 自然语言处理(NLP):06 word2vec训练中文模型-文本分类

    本章节主要研究内容:基于word2vec 提取特征 + 文本分类 finetune 就是用别人训练好的模型,加上我们自己的数据,来训练新的模型.finetune相当于使用别人的模型的前几层,来提取浅层 ...

  3. 利用word2vec训练词向量

    利用word2vec训练词向量 这里的代码是在pycharm上运行的,文件列表如下: 一.数据预处理 我选用的数据集是新闻数据集一共有五千条新闻数据,一共有四个维度 数据集:https://pan.b ...

  4. NLP之PTM:自然语言处理领域—预训练大模型时代的各种吊炸天大模型算法概述(Word2Vec→ELMO→Attention→Transfo→GPT系列/BERT系列等)、关系梳理、模型对比之详细攻略

    NLP之PTM:自然语言处理领域-预训练大模型时代的各种吊炸天大模型算法概述(Word2Vec→ELMO→Attention→Transformer→GPT系列/BERT系列等).关系梳理.模型对比之 ...

  5. 【NLP】word2vec词向量模型训练——基于tensorflow

    前言   维基百科中文数据训练word2vec词向量模型--基于gensim库   上文我们使用了 gensim 库中的 Word2vec 模块训练词向量模型,本篇我们通过 tensorflow 自己 ...

  6. 【NLP】维基百科中文数据训练word2vec词向量模型——基于gensim库

    前言   本篇主要是基于gensim 库中的 Word2Vec 模型,使用维基百科中文数据训练word2vec 词向量模型,大体步骤如下: 数据预处理 模型的训练 模型的测试 准备条件: Window ...

  7. NLP 利器 Gensim 来训练 word2vec 词向量模型的参数设置

    使用 Gensim 来训练 word2vec 词向量模型的参数设置 文章目录 一.最小频次 min_count 二.词向量维度 size 三.并行处理核心数 workers 我们可以使用一些参数设置来 ...

  8. 理解 Word2Vec 之 Skip-Gram 模型

    20211003 NLP系列:Word2Vec原始论文:Efficient Estimation of Word Representations in Vector Space - 简书 原始论文翻译 ...

  9. 理解 Word2Vec 之 Skip-Gram 模型【全】

    作者丨天雨粟 知乎专栏丨机器不学习 地址丨https://zhuanlan.zhihu.com/p/27234078 写在之前 专栏终于申请成功啦,不过现在正在申请改名中,可能要审核几天.后面我会不定 ...

最新文章

  1. 20210101 Barbalat引理
  2. hdu 2026 首字母变大写
  3. .net开源框架简介和通用技术选型建议
  4. 电脑屏保在哪里设置_手机屏保调成绿色能护眼?真的吗?
  5. 服务端_说说Netty服务端启动流程
  6. 详解异构计算FPGA基础知识
  7. npm -S -D -g i 有什么区别
  8. mysql单实例安装
  9. 从零开始搭二维激光SLAM --- Karto的后端优化与回环检测功能对比测试与分析
  10. 计算机网络医院拓扑图方案设计,【方案】某医院计算机网络综合布线系统设计...
  11. svn分支合并到主干,主干合并到分支
  12. flash发布html快捷键,flash快捷键大全
  13. matlab 改变图片比例尺,ps修改图片尺寸和比例尺方法图解
  14. flink job 提交模式
  15. 阴阳师1月服务器维护,《阴阳师》手游1月24日维护更新公告:新区「暖风春穗」集结开启!...
  16. 计算机学校特色,乐山市计算机学校:凝聚特色共成长 分享经验促提升
  17. 2020.6.6课堂小结
  18. [Leetcode] 625. Minimum Factorization 解题报告
  19. 中国农业机械融资租赁市场预测与投资战略报告(2023版)
  20. 2013年H1B携H4签证

热门文章

  1. 【OpenCV 例程200篇】19. 图像的圆形遮罩
  2. 全数字实时仿真平台SkyEye目标码覆盖率关键技术
  3. python动态爬取知乎_python爬虫从小白到高手 Day2 动态页面的爬取
  4. circle loss代码实现_Python全栈之路-23-使用Python实现Logistic回归算法
  5. 深入浅出理解HOG特征---梯度方向直方图
  6. grpc服务器和客户端互传数据
  7. 错误之Only one usage of each socket address (protocol/network address/port)解决办法
  8. unity3d 随机物体生成器 工具
  9. [CLR via C#]16. 数组
  10. Javascript中的事件冒泡