Word2vec原理及其Python实现
目录
一、为什么需要Word Embedding
二、Word2vec原理
1、CBOW模型
2、Skip-gram模型
三、行业上已有的预训练词向量
四、用Python训练自己的Word2vec词向量
一、为什么需要Word Embedding
在NLP(自然语言处理)里面,最细粒度的是词语,词语组成句子,句子再组成段落、篇章、文档。所以要处理 NLP 的问题,首先就要拿词语开刀。
举个简单例子,判断一个词语的情感,是积极还是消极。用机器学习的思路,我们有一系列样本(x,y),这里 x 是词语,y 是它们的情感类别,我们要构建 f(x)->y 的映射,但这里的数学模型 f(比如神经网络、SVM)只接受数值型输入,而 NLP 里的词语,是人类的抽象总结,是符号形式的(比如中文、英文、拉丁文等等),所以需要把他们转换成数值形式,或者说——嵌入到一个数学空间里,这种嵌入方式,就叫词嵌入(word embedding),而 Word2vec ,就是词嵌入( word embedding) 的一种。
也就是说,我们要怎么把一堆计算机不认识的词语表示成它认识的,从而继续为我们人类服务,达到人类的目的?这个途径就是词嵌入(word embedding):把人类理解的词语表示成在数学空间里的“词语”,这个数学空间里的“词语”能够帮助计算机去理解我们人类的语义,也就是说,知道哪些词的意思是相近的,等等,这体现在数学空间里的距离和概率等的概念上。
以上我们理解了在NLP领域word embedding的理由和重要性。
二、Word2vec原理
- Wordvec的目标是:将一个词表示成一个向量
- Word2vec中两个重要模型是:CBOW和Skip-gram模型
1、CBOW模型
- 如果是拿一个词语的上下文作为输入,来预测这个词语本身,则是 『CBOW 模型』
注意:在Hidden layer(隐藏层神经元)上没有激活功能,所以有些文章上的图示中没有标示出hidden layer,而是直接就到输出层,或者是将hidden layer称作为投影层,为什么呢,因为这个所谓的隐层的激活函数其实是线性的,所以有的人就不叫它隐藏层了,我后面就称它为投影层吧。后面的输出神经元使用softmax激活函数。
上图中我们可以理解为C个输入单词的维度是V维(可以理解为词库中共有V个词,那么V维onehot向量就可以唯一的表示这个词语),当语料库中的单词数量很多的时候,V值会超级大。
上面我们说到CBOW模型是拿一个词语的上下文作为输入,来预测这个词语本身(中心词周围的多个词来预测这个中心词),那么对应到上图中,输入就是有x1k、xCk、...、xck这些上下文词语共C个,每一个的长度是V,输出就是 y 这个中心词1个,长度也是V。在这个网络中我们的目的不是跟一般的神经网络一样去预测标签,而是想要得到完美的参数:权重,X和这个权重相乘能够唯一的表示这个词语,同时需要提到一点的是,这个词向量的维度(与隐含层节点数一致)一般情况下要远远小于词语总数 V 的大小,所以 Word2vec 本质上是一种降维操作。
Xin Rong 的论文《word2vec Parameter Learning Explained》中对Word2vec的理论完备由浅入深非常好懂,且直击要害,既有 high-level 的 intuition 的解释,也有细节的推导过程。
2、Skip-gram模型
如果是用一个词语作为输入,来预测它周围的上下文,那这个模型叫做『Skip-gram 模型』。分析与上面同理,论文里也有直观的说明。
三、行业上已有的预训练词向量
腾讯AI实验室:该语料库为超过800万个中文单词和短语提供了200维矢量表示,即嵌入,这些单词和短语是在大规模高质量数据上预先训练的。这些向量捕获中文单词和短语的语义含义,可以广泛应用于许多下游中文处理任务(例如,命名实体识别和文本分类)以及进一步的研究中。
四、用Python训练自己的Word2vec词向量
在python的第三方库gensim中有自带的Word2Vec函数来训练自己语料库的词向量,我的语料库数据存在sentence.txt文件中,每行为一句话,是经过分词和去停用词之后的数据,sg=1,是采用skip-gram来训练的意思。
from gensim.models.word2vec import Word2Vec# 读取数据,用gensim中的word2vec训练词向量
file = open('sentence.txt')
sss=[]
while True:ss=file.readline().replace('\n','').rstrip()if ss=='':breaks1=ss.split(" ")sss.append(s1)
file.close()
model = Word2Vec(size=200, workers=5,sg=1) # 生成词向量为200维,考虑上下5个单词共10个单词,采用sg=1的方法也就是skip-gram
model.build_vocab(sss)
model.train(sss,total_examples = model.corpus_count,epochs = model.iter)
model.save('./data/gensim_w2v_sg0_model') # 保存模型
new_model = gensim.models.Word2Vec.load('w2v_model') # 调用模型
sim_words = new_model.most_similar(positive=['女人'])
for word,similarity in sim_words:print(word,similarity) # 输出’女人‘相近的词语和概率
print(model['女孩']) # 输出’女孩‘的词向量
Word2vec原理及其Python实现相关推荐
- word2vec原理及其实现(基于python)
word2vec原理 词袋模型(bag of word)模型是最早的以词语为基本处理单元的文本向量化方法.举个简单的例子说明下. 假设有两个文本 John likes to watch movies, ...
- TF-IDF和word2vec原理
@(NLP) 文本挖掘 文章目录 文本挖掘 1. 分词的基本原理 2. N元模型 3. 维特比算法与分词 4. 常用分词工具 (二)文本挖掘预处理之向量化与Hash Trick 1. 词袋模型 2. ...
- [深度学习概念]·word2vec原理讲解Negative Sampling的模型概述
word2vec原理讲解Negative Sampling的模型概述 目录 1. Hierarchical Softmax的缺点与改进 2. 基于Negative Sampling的模型概述 3. 基 ...
- 大白话讲懂word2vec原理和如何使用
前言 做自然语言处理(Natural Language Processing,NLP)这个领域的小伙伴们肯定对word2vec这个模型很熟悉了,它就是一种最为常见的文本表示的算法,是将文本数据转换成计 ...
- 深度学习 | Word2vec原理及应用
聊聊Word2vec 1 前言 2 什么是Word2vec? 2.1 定义 2.1.1 分词的原理介绍 2.1.2 文本向量化的方式 2.2 数学原理 2.2.1 CBOW(Continuous Ba ...
- Word2vec原理浅析及gensim中word2vec使用
本文转载于以下博客链接:Word2vec原理浅析:https://blog.csdn.net/u010700066/article/details/83070102: gensim中word2vec使 ...
- Word2Vec原理推导
文章转载自http://www.hankcs.com/nlp/word2vec.html 本文摘录整编了一些理论介绍,推导了word2vec中的数学原理:并考察了一些常见的word2vec实现,评测其 ...
- word2vec原理及其Hierarchical Softmax优化
文章目录 一.什么是word2vec? 1.1 词嵌入(word embedding)介绍 1.2 word2vec概述 二.CBOW模型 2.1 Context滑动窗口 2.2 模型结构 三.Hie ...
- python gdbt+fm_GBDT回归的原理及Python实现
提到GBDT回归相信大家应该都不会觉得陌生(不陌生你点进来干嘛[捂脸]),本文就GBDT回归的基本原理进行讲解,并手把手.肩并肩地带您实现这一算法. 完整实现代码请参考本人的p...哦不是...git ...
最新文章
- 如何在30前成为“富翁”?
- Silverlight与数据库的三种互操作[源代码]
- 2.3线性表的链式存储和运算—双向链表
- 微软宣布将永久关闭所有零售店:专注于线上
- Objective-c编程语言(三):对象,类,消息 ——消息
- 解决IIShalders错误,解决IISmodules错误
- html 制作静态页面新知识
- 御剑仙侠服务器维护,修仙无双御剑仙侠
- oracle删除lob对象,ORACLE LOB大对象处理
- NMOS的栅极充电过程
- 如何理解工程测量中的各种误差
- CTO问我,为什么需要API网关?
- java-net-php-python-jspm人力外包服务公司招聘管理系统计算机毕业设计程序
- Wikibon突破分析:数字技能差距预示IT服务支出的反弹
- 微信android 7.0版本下载地址,微信7.0官方版本下载,微信7.0官方版本下载 v7.0.15-安卓乐园安卓软件网...
- mysql 挑战握手协议_[中文协议]PPP挑战握手认证协议(CHAP)
- ubuntu 13.10 无法连接wifi问题歪解
- 芯片工程师成长之路_一个FPGA工程师的成长之路
- 【科普】博弈论之胆小鬼博弈、囚徒困境、智猪博弈与纳什均衡
- 基于内容的推荐算法(Content-Based)