句子的常用表示方法有:独热编码(One-Hot)和词嵌入。
独热编码存在的问题有:1、词矩阵稀疏,每个向量只有一个值为1,其余均为0。
2、任意两个向量均正交,无法表示之间关系。
3、当数据很多时,词向量维度会很大,同时会导致网络输入层第一层的权重过多
以上缺点均通过词嵌入可以得到解决。
1、下图词嵌入矩阵的每一列是(字典中)不同的词,每一行是每个词的不同特征
2、矩阵的值的绝对值越接近1,表示该列的词具备越显著的行所表示的特征,反之接近0则表示该列的词不具备行所表示的特征。
3、实际应用中行特征一般不可具体描述

嵌入矩阵的每一列被称为对应词的嵌入向量(特征向量)
嵌入矩阵x某个词的独热向量=该词嵌入向量,实际应用中该乘法效率低下,因为独热向量维度巨大,Keras中用嵌入层(Embedding layer)来单独查找矩阵的某列,即提取字典中某个词的嵌入向量
词嵌入使得找出向量之间某种有意义的联系成为了可能。
点积
相似的词语(例如 "great" 和 "excellent")在嵌入空间中彼此之间距离较近(即具有较大的点积),而相异的术语(例如 "great" 和 "bad")在嵌入空间中彼此之间距离较远(即具有较小的点积)。
常用的相似度函数——余弦相似度(cosine similarity)


其中二范数即
、
是把向量中的所有元素求平方和再开平方根。
得到的结果其实是两个向量的夹角的cos值,两向量越接近则值越大

Word2Vec(CBOW、skip-gram)
关于word2vec的google官方表述及代码实现: Word2Vec——skip_gram
Word2vec 基于分布假设(经常具有相同相邻字词的字词往往在语义上相似),将语义上相似的字词映射到在几何图形上邻近的嵌套矢量。
Word2Vec 通过训练神经网络来区分实际共同出现的多组字词与随机出现在一起的字词,从而充分利用此类上下文信息。输入层采用一种稀疏表示法用于组合一个目标字词与一个或多个上下文字词。这一输入层会连接到一个较小的隐藏层。
在其中一版算法中,系统通过用随机噪点字词替代目标字词来举出反面示例。在给出正面示例“the plane flies”的情况下,系统可能会换成“jogging”来创建对比鲜明的反面示例“the jogging flies”。
另一版算法通过将真实的目标字词与随机选择的上下文字词配对来创建反面示例。因此,系统可能会举出正面示例((the, plane)、(flies, plane))和反面示例((compiled, plane)、(who, plane)),然后通过学习分辨哪几对真正地在文字中一起出现。
CBOW 会在给定上下文词的情况下计算目标词(或中心词)的条件概率,其中上下文词的选取范围通过窗口大小 k 决定。而 Skip-Gram 的做法正好与 CBOW 相反,它在给定目标词或中心词的情况下预测上下文词。
一般上下文词都会以目标词为中心对称地分布在两边 ,在窗口内的词与中心词的距离都相等。也就是说不能因为某个上下文词离中心词比较远,就认为它对中心词的作用比较弱 。

CBOW 模型就是一个简单的全连接神经网络,它只有一个隐藏层。输入层是上下文词的 one-hot 向量,它有 V 个神经元(词汇量),而中间的隐藏层只有 N 个神经元,N 是要远远小于 V 的。最后的输出层是所有词上的一个 Softmax 函数。层级之间的权重矩阵分别是 V*N 阶的 W 和 N*V 阶的 W',词汇表中的每一个词最终会表征为两个向量:v_c 和 v_w,它们分别对应上下文词表征和目标词表征。
词嵌入的一个局限是它们无法表示短语(Mikolov et al., 2013),即两个词或多个词的组合并不表示对应的短语意义,例如「人民」+「大学」并不能组合成「人民大学」。
另一种局限性在于学习的词嵌入仅基于周围词的小窗口,有时候「good」和「bad」几乎有相同的词嵌入,这对于情感分析等下游任务很不友好。
或将嵌套训练为大型模型的一部分(embedd_lookup)
通过这个方法,您可以为自己的特定系统量身定制嵌套,不过耗费的时间可能要比单独训练嵌套的时间长。
一般来说,当您具有稀疏数据(或您想要嵌套的密集数据)时,您可以创建一个嵌套单元,这个嵌套单元其实是大小为 d 的一个特殊类型的隐藏单元(d即最终得到的嵌入密集向量的维度)。此嵌套层可与任何其他特征和隐藏层组合。和任何 DNN 中一样,最终层将是要进行优化的损失函数。例如,假设我们正在执行协同过滤,目标是根据其他用户的兴趣预测某位用户的兴趣。我们可以将这个问题作为监督式学习问题进行建模,具体做法是随机选取(或留出)用户观看过的一小部分影片作为正类别标签,然后再优化 Softmax 损失。

在学习 d 维嵌套时,每一项都会映射到 d 维空间中的一个点,这样相似项就会在该空间内彼此邻近。图 6 说明了在嵌套层中学到的权重与几何视图之间的关系。输入节点与 d 维嵌套层中的节点之间的边的权重对应于 d 维坐标轴中每一维的坐标值。( 注意,这些嵌入是临时学习的结果。在任何指定的训练迭代中,都是当前迭代的权重)

吴恩达视频
学习词嵌入,及通过学习得到词嵌入矩阵E的方法之一是建立语言模型。
下图是通过语言模型学习使其能预测句尾的juice。单词下的数字表示该词在字典中的索引(如want索引为9665),
是该词独热向量、E是嵌入矩阵、
是该词嵌入向量。将得到的6个嵌入向量(300x1)堆叠后得到1800x1的向量作为输入向量通入神经网络后经过softmax在所有的字典中的词中选择一个作为预测,通过反向传播、梯度下降来学习嵌入矩阵。实际应用中存在超参数历史窗口 (historical window)来控制目标词前面的“上下文”的单词数量。(比如历史窗口为4时,嵌入向量堆叠后的输入维度为1200x1)
在这种算法的激励下训练集中的orange juice 和apple juice能让orange和apple学习到相似的嵌入向量,从而让预测值更好地符合训练集。
研究者发现如果只是学习词嵌入而不是真正的构建语言模型,在选择目标词的“上下文 ”时,可以选择左右的n个词、之前的一个词、附近的一个词等。

语义合成性
语义合成性,即两个词向量相加得到的结果是语义相加的词,例如「man」+「royal」=「king」。
这种语义合成性的理论依据最近已经由 Gittens et al. (2017) 给出,他们表示只有保证某些特定的假设才能满足语义合成性,例如词需要在嵌入空间中处于均匀分布。