但凡谈及自然语言处理,我们都会想到词向量,那么怎么快速地获得词向量呢?最简单的方法就是word2vec。本文不深究word2vec的原理,网上很多细致深入的解读,大家可以自行搜索。今天总结一下如何快速训练自己的词向量,作为参考个人的手册。

1、 语料

丰富、高质量的语料是词向量成功第一步。

前两天学到一个名词,叫自监督学习,word2vec就是其中一种。自己监督自己,很容受到噪声的干扰,如果数据不干净,结果也会谬以千里。

word2vec虽然不是统计算法,但是训练过程中很大程度上在理解上下文,在理解共现关系。丰富的语料,才能保证对词语正确的理解。很多低频词由于训练不足,词向量基本是随机初始化的,导致在计算词语top-n相似词语的时候出现一些匪夷所思的噪声。

所以请一定多获取数据,多思考怎么把数据过滤得更干净。

2、分词

词向量,词向量,故名思义,首先要有词语,使用分词工具把语料分割为词语序列。

中文分词哪家强?常用的有jieba、ltp(哈工大)、thulac(清华)…这几种分词工具各有优劣。不过对于具体领域的任务,我们通常通过加载额外的领域词典,来对分词工具进行补充。这里可能还涉及领域内的新词发现,不展开了。

如果你觉得这些工具都是垃圾,可以自行训练分词模型,常用的有动态规划,隐马尔可夫,以及深度学习分词算法。

3、构建词向量模型

gensim正式登场,其实可以直接使用word2vec库,但是个人觉得gensim库功能更全面,推荐使用。

  • 读取语料,如果你的数据很少,那就简单,把数据全部读到内存中。存到一个二位数组里,[[w1,w2,…], …], 里面的数组表述文本,外面表示所有文本的集合。但是当你的语料很大时,建议逐步加载。官方建议定义一个数据读取的类:
class MyCorpus(object):"""An interator that yields sentences (lists of str)."""def __init__(self, corpus_file, stopwords_dict=None):self.corpus_file = corpus_fileself.stopwords_dict = stopwords_dictdef __iter__(self):count = 0for line in open(self.corpus_file):# assume there's one document per line, tokens separated by whitespaceif self.stopwords_dict is not None:# 过滤停用词line_seg = line.split(" ")line_seg = [w for w in line_seg if w not in stopwords_dict]line = " ".join(line_seg)count += 1if count % 10000 == 0:print(f"load {count} lines ...")yield utils.simple_preprocess(line)

也可以使用gensim的函数:gensim.models.word2vec.PathLineSentences。

  • 模型训练,
sentences = MyCorpus(input_file, stopwords_dict=stopwords_dict)
gensim.models.Word2Vec(sentences, size=vec_size, window=5, min_count=5, sample=1e-5, workers=8, sg=0)
model.wv.save_word2vec_format(output_file, binary=False)

其中size表示词向量的维度;window表示生成训练数据的窗口;min_count表示最小的词频,小于最小词频的词语会被直接过滤掉,不会参与模型训练;sample是正样本降采样的概率大小,来降低高频词的训练次数,避免过度拟合;worker多线程数;sg选训练模式,1表示使用skip-gram(通过当前词语预测上下文词语),0表示使用cbow(通过上下文词语预测当前词语)。

最终通过model.wv.save_word2vec_format把模型保存下来。

4、应用

词向量的应用,最直观的就是计算近义词了,比如你输入“如花”,可能召回“似玉”。

  • 加载模型
 model = gensim.models.KeyedVectors.load_word2vec_format(output_file)
  • 计算top-n相似词
topn_simi_words = model.most_similar("如花", topn=K)

除计算近义词,比较炫酷的应用是通过词向量减法来获取一些潜在关系,比如王子-公主=国王-王后,这也是当年词向量出来后,给的demo,让人觉得眼前一亮。此外,现在训练深度学习模型,通常喜欢预训练词向量,克服标注数据不足的问题。

词向量让我们能够从几何的角度理解语义,并可视化,是一个从抽象到具体的炫酷过程。虽然咱们只是观众,忍不住要欢呼,牛逼!词向量很容易推广到其他类型的iterm,只要能够能到有意义的iterm序列,就能得到iterm向量。最近有野心者觉得一切皆可embedding,一切可以向量化,你觉得可能么?

小白如何快速训练词向量相关推荐

  1. word2vec预训练词向量+通俗理解word2vec+CountVectorizer+TfidfVectorizer+tf-idf公式及sklearn中TfidfVectorizer

    文章目录 文分类实(一) word2vec预训练词向量 2 数据集 3 数据预处理 4 预训练word2vec模型 canci 通俗理解word2vec 独热编码 word2vec (Continuo ...

  2. NLP-分类模型-2016-文本分类:FastText【使用CBOW的模型结构;作用:①文本分类、②训练词向量、③词向量模型迁移(直接拿FastText官方已训练好的词向量来使用)】【基于子词训练】

    <原始论文:Bag of Tricks for Efficient Text Classification> <原始论文:Enriching Word Vectors with Su ...

  3. 从零开始构建基于textcnn的文本分类模型(上),word2vec向量训练,预训练词向量模型加载,pytorch Dataset、collete_fn、Dataloader转换数据集并行加载

    伴随着bert.transformer模型的提出,文本预训练模型应用于各项NLP任务.文本分类任务是最基础的NLP任务,本文回顾最先采用CNN用于文本分类之一的textcnn模型,意在巩固分词.词向量 ...

  4. PyTorch在NLP任务中使用预训练词向量

    在使用pytorch或tensorflow等神经网络框架进行nlp任务的处理时,可以通过对应的Embedding层做词向量的处理,更多的时候,使用预训练好的词向量会带来更优的性能.下面分别介绍使用ge ...

  5. 如何用TensorFlow训练词向量

    前言 前面在<谈谈谷歌word2vec的原理>文章中已经把word2vec的来龙去脉说得很清楚了,接下去这篇文章将尝试根据word2vec的原理并使用TensorFlow来训练词向量,这里 ...

  6. DNN模型训练词向量原理

    转自:https://blog.csdn.net/fendouaini/article/details/79821852 1 词向量 在NLP里,最细的粒度是词语,由词语再组成句子,段落,文章.所以处 ...

  7. lstm数学推导_如何在训练LSTM的同时训练词向量?

    你本来也不用自己手动进行词向量更新啊,你搞这么一出最后收敛到0那不是必然的么? @霍华德 老师的答案已经给你推导出来了. 实际上你问的这个问题很简单--只要把Embedding层本身也当成模型参数的一 ...

  8. word2vec训练词向量 python_使用Gensim word2vector训练词向量

    注意事项 Skip-Gram models:输入为单个词,输出目标为多个上下文单词: CBOW models:输入为多个上下文单词,输出目标为一个单词: 选择的训练word2vec的语料要和要使用词向 ...

  9. 如何在jieba分词中加自定义词典_Pyspark Word2Vec + jieba 训练词向量流程

    摘要:用商品描述为语料库训练商品词向量为例,分享一下用pyspark自带word2vec+jieba分词训练词向量的流程. 工具:python,pyspark,jieba,pandas,numpy 数 ...

最新文章

  1. Virtual 2004中安装DOS以及实现文件共享的方法
  2. Openssl 生成证书server.key and server.crt
  3. java option请求_java – 如何说服spring 4.2将OPTIONS请求传递给控制器
  4. java更新新的知识要怎么知道_晟司小蒙告诉你,Java技术知识点,不定时更新!!!...
  5. 物联网、工业互联网大数据的特点
  6. 设计灵感|单色配色,如何让海报更出彩?
  7. 9月20日云栖精选夜读 | 如何轻松搞定数据科学面试:Python&R语言篇
  8. SQL 2005数据库函数基本应用
  9. GitHub项目下载链接
  10. 椭球体上某区域面积的求算,及该区域兰伯特投影与墨卡托投影到二维平面后面积对比...
  11. 3D模型欣赏:斯巴达女将军 长枪圆盾战士 性感美女
  12. 惠普服务器如何选择光驱启动不了系统,惠普笔记本bios设置光盘启动方法
  13. Bootstrap学习 - JavaScript插件
  14. 计算机无法读取配置文件,由于权限不足,无法读取配置文件
  15. c语言处理文本断句空格,c语言怎么断句
  16. 【转发】微信小程序详细图文教程
  17. 取得WINDOWS的管理员权限
  18. asp.net留言板管理源代码
  19. R数据分析|可视化|dplyr|Kaggle奥运会数据集(一)
  20. OSChina 周一乱弹 ——用电脑搞了个烹饪料理机 !

热门文章

  1. 使用Qt5编写一个学生管理系统
  2. 数字游戏:艺术家如何用大数据展现艺术
  3. 从收集到输出:盘点那些强大的知识库管理工具
  4. 异常检测与误用检测的差异
  5. Windows10 双网卡配置,轻松实现内外互通
  6. pytest:默认运行pytest,可手动修改运行方式
  7. python 归一化保存与加载
  8. react native友盟app统计
  9. Java基础常见面试题(一)
  10. Haorizi Support