实习期间一直听同事说到embedding这个词,苦于之前没有研究,一知半解的做项目,对项目理解的不深刻。这里把我自己的理解写出来,word embedding 中文翻译“词嵌入”,简单理解就是将词进行向量化,便于模型处理。本文要探讨的word2vec 是由谷歌提出的一种用于word embedding的方法。
一、基本知识点
1、词向量
词向量,顾名思义就是把常见的词汇转化成数学向量。目前一般有两种方法,一种是one-hot编码方式,这种方法很好理解,这种方法把每个词表示为一个很长的向量。这个向量的维度是词表大小,其中绝大多数元素为 0,只有一个维度的值为 1,这个维度就代表了当前的词。举个例子:
“话筒”表示为 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ...]
“麦克”表示为 [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ...]
这种方法有两个很大的缺点。1、向量的维度会随着句子的词的数量类型增大而增大,容易造成维数灾难;2、任意两个词之间都是孤立的,根本无法表示出在语义层面上词语词之间的相关信息,也就是常说的“词汇鸿沟”。第二种词向量方法叫做词的分布式表示distributed representation,我个人就理解成word embedding。把每个词映射成维数固定的向量,比如50维或者100维。这种方法很好的解决了one-hot编码的两个问题,首先每个词的维数都是固定的,和词表的大小无关,其次 ,生成词向量空间中可以利用距离刻画向量之间的相似性。
2、语言模型
语言模型包括文法语言模型和统计语言模型。一般我们指的是统计语言模型。这里之所以要介绍语言模型,是因为后面的表示方法马上要用到这一概念。
统计语言模型: 统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性(说到底还是数学)。 用一句简单的话说,就语言模型就是计算一个句子的概率大小的这种模型。用人话翻译就是,一个句子的打分概率越高,越说明他是更合乎人说出来的自然句子。这里介绍常见的几个模型:
(1) n-gram模型
这里盗用别人的介绍:
(2)神经网络模型
主要介绍神经网络模型,word embedding一般指基于神经网络模型的分布式表达。神经网络词向量表示技术通过神经网络技术对上下文,以及上下文与目标词之间的关系进行建模。由于神经网络较为灵活,这类方法的最大优势在于可以表示复杂的上下文。在前面基于矩阵的分布表示方法中,最常用的上下文是词。如果使用包含词序信息的 n-gram 作为上下文,当 n 增加时, n-gram 的总数会呈指数级增长,此时会遇到维数灾难问题。而神经网络在表示 n-gram 时,可以通过一些组合方式对 n 个词进行组合,参数个数仅以线性速度增长。有了这一优势,神经网络模型可以对更复杂的上下文进行建模,在词向量中包含更丰富的信息(转自知乎)。
具体的数学原理可以参考《word2vec中的数学原理详解》。