cbow word2vec 损失_word2vec是如何得到词向量的?
前言
word2vec是如何得到词向量的?这个问题比较大。从头开始讲的话,首先有了文本语料库,你需要对语料库进行预处理,这个处理流程与你的语料库种类以及个人目的有关,比如,如果是英文语料库你可能需要大小写转换检查拼写错误等操作,如果是中文日语语料库你需要增加分词处理。这个过程其他的答案已经梳理过了不再赘述。得到你想要的processed corpus之后,将他们的one-hot向量作为word2vec的输入,通过word2vec训练低维词向量(word embedding)就ok了。不得不说word2vec是个很棒的工具,目前有两种训练模型(CBOW和Skip-gram),两种加速算法(Negative Sample与Hierarchical Softmax)。本答旨在阐述word2vec如何将corpus的one-hot向量(模型的输入)转换成低维词向量(模型的中间产物,更具体来说是输入权重矩阵),真真切切感受到向量的变化,不涉及加速算法。如果读者有要求有空再补上。
1 Word2Vec两种模型的大致印象
刚才也提到了,Word2Vec包含了两种词训练模型:CBOW模型和Skip-gram模型。CBOW模型根据中心词W(t)周围的词来预测中心词
Skip-gram模型则根据中心词W(t)来预测周围词
抛开两个模型的优缺点不说,它们的结构仅仅是输入层和输出层不同。请看:CBOW模型Skip-gram模型
这两张结构图其实是被简化了的,读者只需要对两个模型的区别有个大致的判断和认知就ok了。接下来我们具体分析一下CBOW模型的构造,以及词向量是如何产生的。理解了CBOW模型,Skip-gram模型也就不在话下啦。
2 CBOW模型的理解
当然,懒省事儿的童鞋们就跟随我的脚步慢慢来吧。
先来看着这个结构图,用自然语言描述一下CBOW模型的流程:CBOW模型结构图
NOTE:花括号内{}为解释内容.输入层:上下文单词的onehot. {假设单词向量空间dim为V,上下文单词个数为C}
所有onehot分别乘以共享的输入权重矩阵W. {V*N矩阵,N为自己设定的数,初始化权重矩阵W}
所得的向量 {因为是onehot所以为向量} 相加求平均作为隐层向量, size为1*N.
乘以输出权重矩阵W' {N*V}
得到向量 {1*V} 激活函数处理得到V-dim概率分布 {PS: 因为是onehot嘛,其中的每一维斗代表着一个单词},概率最大的index所指示的单词为预测出的中间词(target word)
与true label的onehot做比较,误差越小越好所以,需要定义loss function(一般为交叉熵代价函数),采用梯度下降算法更新W和W'。训练完毕后,输入层的每个单词与矩阵W相乘得到的向量的就是我们想要的词向量(word embedding),这个矩阵(所有单词的word embedding)也叫做look up table(其实聪明的你已经看出来了,其实这个look up table就是矩阵W自身),也就是说,任何一个单词的onehot乘以这个矩阵都将得到自己的词向量。有了look up table就可以免去训练过程直接查表得到单词的词向量了。
这回就能解释题主的疑问了!如果还是觉得我木有说明白,别着急!跟我来随着栗子走一趟CBOW模型的流程!
3 CBOW模型流程举例假设我们现在的Corpus是这一个简单的只有四个单词的document:
{I drink coffee everyday}
我们选coffee作为中心词,window size设为2
也就是说,我们要根据单词"I","drink"和"everyday"来预测一个单词,并且我们希望这个单词是coffee。
假设我们此时得到的概率分布已经达到了设定的迭代次数,那么现在我们训练出来的look up table应该为矩阵W。即,任何一个单词的one-hot表示乘以这个矩阵都将得到自己的word embedding。
如有疑问欢迎提问。
cbow word2vec 损失_word2vec是如何得到词向量的?相关推荐
- cbow word2vec 损失_word2vec个人总结-理论篇
word2vec不算新,但是在工业界有广泛应用.该方法利用词在各滑动窗口的共现现象建模词的潜在关系,并最终得到词向量(word embedding).如果两个词的embedding向量内积较大,则表示 ...
- cbow word2vec 损失_Word2Vec的核心思想
本文介绍Word2Vec是基于Skip-Gram架构,本文只介绍核心思想,具体权重更新参考论文. 本文与论文同时饮用较好! 理解Word2Vec核心思想的步骤是先理解one word -> on ...
- cbow word2vec 损失_Word2vec之CBOW
一.Word2vec word2vec是Google与2013年开源推出的一个用于获取word vecter的工具包,利用神经网络为单词寻找一个连续向量看空间中的表示.word2vec是将单词转换为向 ...
- cbow word2vec 损失_词向量word2vec之CBOW算法
词向量模型之CBOW模型的原理与实现 关于词向量模型word2rec,平台里只有skip-gram一个模型的代码实现,本项目将对word2rec算法的第二个模型--CBOW模型进行补充 此项目用于交流 ...
- word2vec原理(一): 词向量、CBOW与Skip-Gram模型基础
word2vec原理(一): CBOW与Skip-Gram模型基础 word2vec原理(二):基于Hierarchical Softmax的模型 word2vec原理(三): 基于Negative ...
- 【word2vec】篇一:理解词向量、CBOW与Skip-Gram等知识
文章目录 词向量基础 One-hot represention Distributed Representation word2vec 基础知识 CBOW 和 Skip-gram 霍夫曼树 系列文章: ...
- cbow word2vec 损失_Skip-gram和CBOW知识点
本文涉及的内容: 如何构造HuffMan树 Hierarchical Softmax似然函数 skip-gram似然函数 CBOW似然函数 Negative Sampling方法 一 HuffMan树 ...
- Kaggle word2vec NLP 教程 第二部分:词向量
原文:Bag of Words Meets Bags of Popcorn 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 第二部分:词向量 代码 第二部分的教程代码在这里. 分 ...
- (Word2Vec)怎么将得到的词向量变成句子向量,以及怎么衡量得到词向量的好坏
腾讯一面的题目,当时脑子里只有相加平均 1. Word2Vec 怎么将得到的词向量变成句子向量 1)平均词向量: 平均词向量就是将句子中所有词的word embedding相加取平均,得到的向量就当做 ...
最新文章
- powershell的一个小游戏,看看能写几种方式出来
- 【深度学习】协同优化器和结构化知识蒸馏
- mysql5.7.25数据库安装
- Python的regex模块——更强大的正则表达式引擎
- 取木棒21根c语言,关于m根火柴 ,人机最多取n根火柴(21根火柴进阶)
- 【小梅哥SOPC学习笔记】系统时钟的使用
- idea 查看jsp是否被引用_IDEA集成Java性能分析神器JProfiler
- Redis 学习(二)
- 无线网首选dns服务器怎么设置,首选dns服务器地址如何设置
- 成信大809软件工程专业基础历年真题及答案
- 张一鸣宣布卸任字节跳动CEO!
- 如何更好地吸收维生素矿物质?
- Golang panic: reflect: reflect.flag.mustBeAssignable using value obtained using unexported field
- CDN,P2P,PCDN的区别?
- D3 CSV表格文件的读取详解
- 从三个产业侧影,打开万物智能的应用之匙
- 从TdEngine20行代码引发的风波,看10倍程序员与普通程序员的差距
- 使用highcharts实现雷达图
- Lazada选品的技巧和方法
- IT人员专业素养——专业度
热门文章
- python中的函数def和函数的参数
- Python面向对象反射,双下方法
- python celery多worker、多队列、定时任务
- python 将文件描述符包装成文件对象
- ram在计算机网络中表示的是,2018年职称计算机考试题库(20)
- go和java线程,Go的多线程和pthread或Java线程有什么区别?
- php包含文件时显示空白页,php中出现空白页的原因及解决方法汇总_php技巧
- 【opencv4】opencv视频教程 C++ 6、图像混合、线性混合、混合权重相加addWeighted()、混合加add()、混合乘multiply()
- python numpy np.finfo()函数 eps
- 使用 Bamboo 构建项目的 CICD 过程文档