Word2vec中两个重要模型是:CBOW和Skip-gram模型

首先Wordvec的目标是:将一个词表示成一个向量

这里首先说下我对CBOW模型的理解

这是主要是举个例子简化下

首先说下CBOW的三层结构:输入层,投影层(中间层),输出层

假设语料库有10个词: 【今天,我,你,他,小明,玩,北京,去,和,好】

现在有这样一句话:今天我和小明去北京玩

很显然,对这个句子分词后应该是:

今天  我  和  小明  去  北京  玩

对于小明而言,选择他的前三个词和后三个词作为这个词的上下文

接下来,将这些分别全部表示成一个one-hot向量(向量中只有一个元素值为1,其他都是0)

则向量如下:

今天:[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]  记为x1
我  :[0, 1, 0, 0, 0, 0, 0, 0, 0, 0]  记为x2
和  :[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]  记为x3
去  :[0, 0, 0, 0, 0, 0, 0, 1, 0, 0]  记为x4
北京:[0, 0, 0, 0, 0, 0, 1, 0, 0, 0]  记为x5
玩  :[0, 0, 0, 0, 0, 0, 1, 0, 0, 0]  记为x6

此外,小明的向量表示如下:

小明  :[0, 0, 0, 0, 1, 0, 0, 0, 0, 0] 

可以看出来,向量的维度就是语料库中词的个数

接下来,将这6个向量求和,作为神经网络模型的输入,即

X = x1 + x2 + x3 + x4 + x5 + x6 = [1, 1, 0, 0, 0, 1, 1, 1, 1, 0]

则X就是输入层,即输入层是由小明的前后三个词生成的一个向量,为1*10维(这里的10是语料库中词语的个数)

我们这里是根据一个词语的上下文来预测这个词究竟是哪个,这个例子中就是根据小明这个词的前后三个词来预测小明这个位置出现各个词的概率,因为训练数据中这个词就是小明,所以小明出现的概率应该是最大的, 所以我们希望输出层的结果就是小明对应的向量

所以本例中,输出层期望的数据实际就是小明这个词构成的向量(可以认为是训练数据的标签) 即:

小明  :[0, 0, 0, 0, 1, 0, 0, 0, 0, 0] 

那么神经网络模型可以画成如下形状

这里我们可以随意设定投影层的维度,即m的值,则:

输入层和投影层的连线就可以构成一个参数矩阵1, 即w,该矩阵的维度为10*m(这里10是语料库中词语的个数), 可以随机初始化这个矩阵的参数值

投影层和输出层的连线就可以构成一个参数矩阵2,即b, 该矩阵的维度为m*10, 可以随机初始化这个矩阵的参数值

这样最终的输出层的维度1*10 = (1*10) * (10*m) * (m*10)

参数矩阵1为:w

参数矩阵2为:b

那么模型的目标函数是什么呢?

就是损失函数,就是实际输出和期望输出的差值,我可以定义为平方差

首先,期望输出就是“小明” 对应的向量

Y_ = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0] 

这个可以认为是训练数据的标签

实际输出就是根据输入X以及两个参数矩阵w和b计算后输入到softmax函数所得的结果:

即将 X * w * b的值 输入到softmax函数得到实际的输出

Y =  [y1, y2, y3, y4, y5, y6, y7, y8, y9, y10]

则损失函数可以定义为:

J(θ) = (y1-0)*(y1-0) +  (y2-0)*(y2-0) +  (y3-0)*(y3-0) +  (y4-0)*(y4-0) +  (y5-1)*(y5-1) +  (y6-0)*(y6-0) +  (y7-0)*(y7-0) +  (y8-0)*(y8-0) +  (y9-0)*(y9-0) +  (y10-0)*(y10-0) 

这里实际就是计算的两个向量的距离,当然你可以采用别的算法

这个损失函数是关于w和b的函数, 目标就是极小化损失函数

采用梯度下降法来不断调整w和b的值(即不断给w和b的参数值一个增量), 当模型的输出满足某个设定的条件时,则停止训练

注意: 模型输出的结果不会刚好就是一个one-hot向量, 可以认为趋近于0的就是0,趋近于1的就是1,当然为1的肯定只有一个元素

为了加快训练速度,可以一个批次一起训练,将多个句子的损失函数求和来训练

最终训练结束后,就要将一个词表示成一个向量,那么怎么表示呢?

输入X中第一个元素的值为1, 这表示的其实就是“今天” 这个词,那么“今天”就用它对应的连线上的权重参数来表示

今天 =  [w11, w12... w1m]
我   =  [w21, w22... w2m]

至于为什么要这样表示,至今没有人能解释

但是注意:这里只能将X中元素为1的词表示成向量,即只能将句子中出现的词表示成向量,即“小明”的前后三个词

然后说下我对Skip-gram模型的理解

其实理解了CBOW模型后,要理解Skip-gram模型就非常简单了,CBOW模型是用词的前后几个词来预测这个词,而Skip-gram模型则是用一个词来预测他周围的词。
图还是跟上面画的那个图是一样的,只不过输入X不是那几个词的向量和了,而是“小明” 对应的向量,即输入只有一个,输出也是只有一个,每次只预测一个词
Skip-gram模型最终的结果是将小明表示成一个向量,而CBOW模型是将“小明”前后三个词表示成向量

Word2vec之CBOW模型和Skip-gram模型形象解释相关推荐

  1. 【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型

    系列文章: [word2vec]篇一:理解词向量.CBOW与Skip-Gram等知识 [word2vec]篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模 ...

  2. 【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型

    文章目录 CBOW 模型 基本结构 目标函数 梯度计算 Skip-gram 模型 基本结构 梯度计算 优缺点分析 系列文章: [word2vec]篇一:理解词向量.CBOW与Skip-Gram等知识 ...

  3. 详解OSI七层模型和TCP/IP模型

    详解OSI七层模型 1. 详解OSI七层模型 1.1 详解每层结构 1.2 交换机和路由器的区别 1.3 集线器与路由器在功能上有什么不同 2. 详解TCP/IP模型 2.1 详解每层结构 2.2 O ...

  4. OSI 七层模型和TCP/IP模型及对应协议(详解)

    OSI 七层模型和TCP/IP模型及对应协议(详解) 查看全文 http://www.taodudu.cc/news/show-6185847.html 相关文章: OSI7层网络模型协议精析 OSI ...

  5. OSI 七层模型和TCP/IP模型及对应协议

    OSI 七层模型和TCP/IP模型及对应协议图: 完成中继功能的节点通常称为中继系统.在OSI七层模型中,处于不同层的中继系统具有不同的名称. 一个设备工作在哪一层,关键看它工作时利用哪一层的数据头部 ...

  6. 李奎元:说说那些征信模型(Z计分模型、巴萨利模型和A值模型)

    李奎元称:根据企业信用管理理论,5C原则是指考察客户信用价值的5个因素,即品行(character).能力(capacity).资本(capital).担保品(collateral)和环境状况(con ...

  7. 标准事件模型和IE事件模型

    前言:在上一篇博客中总结了0级DOM事件模型和2级DOM事件模型,打铁趁热就在谈谈标准事件模型和IE事件模型的区别吧. 一. 标准事件模型 在JavaScript中把标准事件模型的执行分为三个阶段,即 ...

  8. 标准盒模型和 IE 盒模型

    对于标准盒模型和 IE 盒模型你了解多少? 盒模型讲解 我们今天只会提到 标准盒模型,和 IE 盒模型,两种盒模型模式讲解.首先来看标准盒模型. 只要是盒模型都会有这四个属性 margin, bord ...

  9. 基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程

    许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存.CPU.缓存等予以说明.实际上,在实际的 ...

最新文章

  1. dedeCMS,标准的MVC框架运行原理和缓存
  2. (2 sat) hdu 1824
  3. Redis(window版本)
  4. 多线程设计模式(四):生产者-消费模式
  5. 重学TCP协议(12)SO_REUSEADDR、SO_REUSEPORT、SO_LINGER
  6. 5分钟能回答的人,年薪25万美金以上
  7. NVIDIA PhysX宣布正式开源 最强物理仿真引擎
  8. doc自动生成html,java web应用中自动生成文章html页面的实现.doc
  9. JS无刷新修改URL类似博客园翻页效果
  10. java day58【 案例:使用 spring 的 IoC 的实现账户的 CRUD 、 基于注解的 IOC 配置 、 Spring 整合 Junit[掌握] 】...
  11. android 8.0获取通知权限,Android8.0通知权限适配
  12. Linux进程管理工具
  13. 小明历险记:规则引擎Drools教程详解
  14. 如何培养自己的赚钱能力
  15. Oracle导出数据库数据为dmp文件(存在空表情况)
  16. 川大计算机系导师,川大计算机学院硕士生导师简介
  17. Mixly第三方库开发——OLED库
  18. 破解wifi的渗透工具
  19. 输入两个整数,要求输出其中值较大者。要求用函数求出最大值
  20. Linux权限相关问题

热门文章

  1. 解析Java对象引用与JVM自动内存管理(2)
  2. JavaScript基础(二)-类
  3. 解题:ZJOI 2006 书架
  4. Flask 上下文管理-- (session,request,current_app的传递)--类似本地线程实现,以及多app应用...
  5. Window 的版本号管理策略
  6. 基于express + express-myconnection 的请求处理模板
  7. Block代码块中使用局部变量注意点
  8. php获取对象属性值
  9. 实现一个简单的HTTP
  10. java使用Post方式发送https请求的方法,直接可以用