1  词向量

人类的语言在计算机中是无法直接被识别的,只能换算成二进制代码组成的机器语言计算机才能识别,并对其进行相关操作。因此要实现对语言文本的处理,首要条件就是对文本建立模型以使得机器能够识别处理。1986年,Hinton首次提出了分布式表达(Distributed Representation,DR)概念,简称词向量(Word Embedding)[30]。词向量是将大量的文本集中进行训练并统计,之后将文本组成的语料库中的每个词映射在一个向量空间上,这个向量空间通常都是凝聚度较高、维度较低的具有实际数值的向量。此向量的维数通常都会远小于原本词典的大小。为了最大限度表达词且方便计算,可以将向量设置在几十维到几百维之间,其中每一维都代表一个包含潜在语义的特征,该特征隐含了从语料中学习到的句法和语义特征。此外,由于向量具有的数学特性使得分析向量之间包含的语义关系时,可以快速方便地利用各种相似度算法或者距离算法进行计算。

2  Word2vec工作原理

2013年来自Google团队的Tomas Mikolov等人设计开发了一款名为Word2vec的程序,该程序可以很简便地设置最终词向量的维度,并根据不同的任务需求设置不同维度数,得到的词向量能满足相加性,可以用公式2-1表示词向量的相加性。

(2-1)

由公式2-1可以看出,词向量之间简单的计算方法就能够表达词向量互相的语义关系。图2-1简洁形象地展示了词向量的相加性。

图2-1 词向量的相加性表示

Word2vec是基于统计语言模型而构建的,统计语言模型是用于统计一串字符序列成立的概率大小的概率模型。假定 代表一个字符串,组成成分为 ,记为 ,则由 的联合概率可计算出 出现的概率,如式2-2所示。

(2-2)

利用贝叶斯公式可将上式2-2分解为公式2-3。

(2-3)

其中为模型参数,当其取具体数值时则能计算出相应的

Word2vec是一款利用深度学习来训练生成词向量的工具,它的主要思想是海量的文本中隐含着词与词之间的联系,利用其训练大量文本后可得到质量高且语义相近的词向量。Word2vec的优势是它改进了传统神经网络的词向量语言模型,大大降低了传统向量空间模型处理数据存在的高维度问题。传统的神经网络模型有输入、隐藏和输出三层结构,隐藏层到输出层的softmax层需要计算所有输入词的softmax概率然后判断挑选出最大的值,该过程的计算复杂度很高。相比于传统神经网络,Word2vec在输入层做了改变,传统的神经网络在输入时通常需要先进行线性变换并加入激活函数,而Word2vec则采用求和平均方式处理输入的词向量,将多个词向量转变成一个词向量,大大减小了计算强度;不仅如此,在输出层Word2vec也作了改进,该程序去掉了隐藏层到输出层过程,改用哈夫曼树来取代。假设将哈夫曼树中每个叶子节点赋为权值,则哈夫曼树的目的就是构造出最短的带有权值的路径,哈夫曼又被称为最优二叉树。如图2-2所示为叶子节点被赋予权值的哈夫曼树。

图2-2 根据权重构造的哈夫曼树

叶子节点上每个词都有独一无二的编码,约定在哈夫曼树中左子树记为0,右子树记为1,而Word2vec中则相反。例如任意从新浪微博中爬取了若干与泰国普吉沉船事件有关的微博,经过简单统计发现“泰国”、“普吉”、“游船”、“遇难”、“救援”、“死伤”的次数分别为18、9、8、6、4、3,把这六个词在爬取的微博文本中出现的频率作为权重并赋为树的叶子节点,最终构造而成的哈夫曼树如图2-2所示。在该哈夫曼树中,“泰国”的编码为1、“游船”的编码为011。

由图2-2可知在哈夫曼树中权重越高的节点距离根节点越近,则相对的特征词的编码值也就更短,即树的带权路径越短。Word2vec有连续词袋模型(Continuous Bag-of-word Model,CBOW)和Skip-gram两个模型,下文将仔细阐述这两个模型的原理。

2.1  连续词袋模型

CBOW的主要思想是在某个语句片段中,在知道某个词上下文的基础上来推测某个特征词出现的概率,也就是说模型的输入是某个词的上下文,而输出是某个词的概率。该模型有输入、投影和输出三层结构。假设某个词为 ,则该上下文信息为:

(2-4)

式中 c ——前后单词个数;

当前词出现的概率表述为:

   (2-5)

式中  ——词 的上下文;

CBOW的结构图如图2-3所示。

图2-3 CBOW模型结构图

Input层:假定c=2 ,即输入为某个词上下文两个词的单向量。单向量是目前广泛使用的一种将文字转化为计算机能识别的数学符号的方法,它是将词表示为一个向量形式。

Projection层:计算 得到一个和向量,即对输入的某个词的上下文词的单向量作累加求和。

Output层:输出是一个哈夫曼树。语料库中的每个词作为该树的叶子节点,而每个词出现的频率则被当作权重,以此生成一个哈夫曼树。哈夫曼树的特性决定了距离根节点越近的词出现的频率越高。

2.2  Skip-gram模型

Skip-gram模型也是统计语言模型的一种,处理数据时和CBOW是相反的过程,目的是输入一个特征词,通过模型训练后得到该词的上下文信息。其结构模型图如下所示。

图2-4 Skip-gram模型结构图

Input层即输入层:输入的数据是语料中的中心词,同CBOW模型一样,也是用单向量表示。

Projection层即投影层:此层在Skip-gram模型中没有起到作用,只是为了在结构上和CBOW模型作对比。

Output层即输出层:此层的结构也是最优二叉树,能更生动地表现词频高的向量。

如图2-5所示是Skip-gram模型的网络结构图。

图2-5 Skip-gram模型的网络结构图

由于本文扩充微博短文本时主要是利用Skip-gram模型训练微博文本,因此接下来详细介绍Skip-gram模型训练词向量的基本原理。

由Sigmoid函数可得,公式2-6为将一个节点分作正类的概率。

(2-6)

式中  ——哈夫曼树中非叶子节点的向量;

x ——当前内部节点的词向量。

分为负类的概率为:

       (2-7)

Skip-gram模型的目标函数如下:

                                                                      (2-8)

式中 

此公式中最重要的部分就是构造条件概率函数

Word2vec工作原理相关推荐

  1. 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Beats 简单介绍和FileBeat工作原理 一.Beats 二.FileB ...

  2. 深入理解Nginx工作原理

    1 反向代理 1.1 概念 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给intern ...

  3. 高频开关电源原理_程控开关电源的工作原理

    本文介绍了开关电源的工作原理以及它的特点. 程控开关电源要要比线性电源复杂得多. 下图是典型的开关电源工作原理图. 首先对 220 V/50Hz 的 AC 输入,通过桥式整流器进行整流 储能电容对整流 ...

  4. Servlet生命周期与工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

  5. java的工作原理你知道吗_每天用Mybatis,但是Mybatis的工作原理你真的知道吗?

    近来想写一个mybatis的分页插件,但是在写插件之前肯定要了解一下mybatis具体的工作原理吧,于是边参考别人的博客,边看源码就开干了. 核心部件:SqlSession Executor Stat ...

  6. linux网络管理原理,Linux__网络管理(物理层 数据链路层 网络层工作原理)

    千锋云计算逆战班11点后打卡 今天学习后,进行复习下,物理层 数据链路层  网络层 的工作原理 物理层关心的两件事情:1.信号 2.介质 先说信号:信号分为模拟信号和数字信号 模拟信号: 模拟信号,不 ...

  7. HDD工作原理 导图

    以上导图介绍了我们使用的 (HDD)机械硬盘的基本构造以及核心工作原理,对于大家扫盲有所帮助 参考文档: https://blog.csdn.net/yizhaoxin/article/details ...

  8. 路由和交换机工作原理

    路由器与交换机的工作原理 计算机网络往往由许多种不同类型的网络互连连接而成.如果几个计算机网络只是在物理上连接在一起,它们之间并不能进行通信,那么这种"互连"并没有什么实际意义.因 ...

  9. Google工作原理

    今天在晚上看到一个图,讲解google的工作原理,感觉写的不错.贴过来方便以后深入的研究. 转载于:https://www.cnblogs.com/muyuge/archive/2010/07/06/ ...

最新文章

  1. 谷歌入华,抢在搜索之前的是Waymo无人驾驶
  2. Docker:学习笔记(1)——基础概念
  3. JDK和JRE的区别-zz
  4. 数据切分——Mysql分区表的管理与维护
  5. redis 字符串数据(string)
  6. 废掉一个产品经理最常见的方式,就是天天画原型
  7. [sitemap 索引情况提示] 根据 sitemap 的规则[0],当前页面 [pages/loading/loading] 将被索引
  8. python连接linux后一步一步的操作_Python使用技巧
  9. Python中的strip(),lstrip(),rstrip()的用法
  10. HC-SR04超声波传感器
  11. Python利用GUI界面制作B站弹幕分析工具
  12. 树莓派4B设置USB启动
  13. win10连接共享打印机_共享打印机的三种安装连接方法
  14. android+仿ios+音乐播放器,iOS简单的音乐播放器(仿QQ音乐)
  15. java实现根据指定日期获取今年 去年 本季度 上个季度 本月 上个月的值
  16. redis 压缩存储 json
  17. 软件工程笔记:Pos系统的分析与设计案例
  18. 食物网的结构动力学和鲁棒性 | Structural dynamics and robustness of food webs
  19. mysql update select 从查询结果中更新数据
  20. 宫崎步 brave heart 歌词加谐音

热门文章

  1. 如何验证Java 布尔类型的true = 1 ,false = 0
  2. 向量空间模型原理(VSM)
  3. Python求两个圆的交点坐标或三个圆的交点坐标
  4. pandas多场景业务实战-指标计算
  5. 手把手带你实现QQ分享
  6. 数据库SQL语句检索相关
  7. 苹果消息推送服务教程:第一二部分(共2部分)
  8. 为什么那么多的人选择到Java培训机构学习
  9. Neo4j3-Neo4j基础操作(中)
  10. C++中的tolower()函数与toupper()函数