word2vec中单词向词向量的转换过程详解
- 目录
- 前言:
- 1、Word2Vec两种模型的大致印象
- 2、CBOW模型流程举例
- 3、CBOW模型流程举例
- 总结:
目录
前言:
针对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)来预测周围词。
2、CBOW模型流程举例
其实数学基础及英文好的同学可以参照斯坦福大学Deep Learning for NLP课堂笔记。
当然,懒省事儿的童鞋们就跟随我的脚步慢慢来吧。
先来看着这个结构图,用自然语言描述一下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。
第一步:先确定输入和输出单词的one-hot向量
第二步:初始化一个权重矩阵W(自定义),然后分别利用输入的单词的onehot向量X和W相乘得到向量V(代表一个单词)
第三步:将得到的三个单词的V向量相加作为隐藏层的矩阵(隐藏层也就代表周围词的一个集合(即符合由周围的词来预测中心的词))
第四步:将隐藏层向量乘以W’
第五步:激活函数处理得到V-dim概率分布 {PS: 因为是onehot嘛,其中的每一维都代表着一个单词},概率最大的index所指示的单词为预测出的中间词(target word)。与true label的onehot做比较,误差越小越好
总结:
目前博主也是刚开始接触NLP相关的知识,许多东西还处于小白阶段,以上的总结如有不足或错误希望大家指导批评。
word2vec中单词向词向量的转换过程详解相关推荐
- 嵌入层(Embedding Layer)与词向量(Word Embedding)详解
文章目录 常见的语言表示模型 词向量与Embedding区分 Embedding层--keras中的one-hot映射为 向量的层:词向量(word embedding)--一种语言模型表示方法 分布 ...
- 【Word2Vec】word2vec是如何得到词向量的?
前言 word2vec是如何得到词向量的?这个问题比较大.从头开始讲的话,首先有了文本语料库,你需要对语料库进行预处理,这个处理流程与你的语料库种类以及个人目的有关,比如,如果是英文语料库你可能需要大 ...
- 【word2vec】Distributed Representation——词向量
Distributed Representation 这种表示,它最早是 Hinton 于 1986 年提出的,可以克服 one-hot representation 的缺点. 其基本想法是: 通过训 ...
- Python中Print()函数的用法___实例详解(二)(全,例多)
Python中Print()函数的用法___实例详解(二)(全,例多) 目录 十一.Print()小例子 十二.Print()中文输入显示乱码问题 十三.Print()写入文件 十四.print()在 ...
- SVM-支持向量机原理详解与实践之一
SVM-支持向量机原理详解与实践 前言 去年由于工作项目的需要实际运用到了SVM和ANN算法,也就是支持向量机和人工神经网络算法,主要是实现项目中的实时采集图片(工业高速摄像头采集)的图像识别的这一部 ...
- SVM-支持向量机原理详解与实践之四
SVM-支持向量机原理详解与实践之三 SVM原理分析 核函数与核技巧 什么是核 什么是核,核其实就是一种特殊的函数,更确切的说是核技巧(Kernel trick),清楚的明白这一点很重要. 为什么说是 ...
- SVM-支持向量机原理详解与实践之三
SVM-支持向量机原理详解与实践之二 SVM原理分析 以下内容接上篇. 拉格朗日对偶性(Largrange duality)深入分析 前面提到了支持向量机的凸优化问题中拉格朗日对偶性的重要性. 因为通 ...
- PX4飞控中利用EKF估计姿态角代码详解
PX4飞控中利用EKF估计姿态角代码详解 PX4飞控中主要用EKF算法来估计飞行器三轴姿态角,具体c文件在px4\Firmware\src\modules\attitude_estimator_ekf ...
- Python计算向量夹角:向量夹角计算方法详解
Python计算向量夹角:向量夹角计算方法详解 在数值分析和几何学中,我们经常需要计算两个向量之间的夹角.在Python中,我们可以使用numpy库中的函数来计算向量之间的夹角. 首先,我们需要将向量 ...
最新文章
- 交换机工作原理、MAC地址表、路由器工作原理详解
- Android互联网访问,get方式,post方式等方式
- c语言从.txt读入第二行数,从txt中读入数据到数组中(fscanf)的实现代码
- ASP.NET Core 2.1基于SignalR和Vue实时通讯
- 走心地讨论一下,一个中国码农在硅谷求职的实用经历
- Oracle中常用的to_Char用法详解(有FMT的详细列表)
- 数据库实战:SQL Server系列网络课程资料集
- 集体智慧编程 - 读书笔记
- 速达启动时显示“对象名ACCSET无效“
- imagemagick /tmp/magick-xxxxxxxx
- 您的计算机无法正常启动,3种简单的方法 修复错误 ‘您的电脑无法正常启动’...
- NCTF-Writeup
- SpringBoot整合jsp
- JAVA调用IBM的Lotus Notes
- js 将图片置灰_将图片转换成黑白(灰色)的css和js的方法
- 数字通信调制方式的误码率matlab仿真,包括OOK,PRK,FSK以及QAM
- phpstudy安装和使用
- 一、Python语言概述
- C语言关于输入某天日期求是本年第几天(计算天数)
- 离线安装金蝶Apusic中间件
热门文章
- 测试报告参考规范之测试结果和分析
- oracle19C安装好后 创建新用户 和 赋权限
- 实用英文地址书写格式
- 【ML吴恩达】5 简单回归中的均方误差MSE
- 使用matlab读取图像并通过matlab自带的fft2,fftshift,ifftshift,ifft2等函数获取该图像的傅里叶频谱图,幅度图,相位谱图,幅度图,相位谱图,幅度谱重建图以及相位谱重建
- 用最复杂的方式学会数组(Python实现动态数组)
- 基于 Canvas 的 HTML5 工控机柜 U 位动态管理
- 苹果应用商店增加新功能 可帮助分发“不适合公开发布应用”
- 南方数码iData数据工厂二次开发图层选择
- #洛谷 通往奥格瑞玛的道路