词嵌入(word embedding)简记
句子的常用表示方法有:独热编码( One-Hot )和词嵌入。
独热编码存在的问题有:1、词矩阵稀疏,每个向量只有一个值为1,其余均为0。
2、任意两个向量均正交,无法表示之间关系。
3、当数据很多时,词向量维度会很大。
以上缺点均通过词嵌入可以得到解决。
1、词嵌入矩阵的每一列是(字典中)不同的词,每一行是每个词的不同特征
2、矩阵的值的绝对值越接近1,表示该列的词具备越显著的行所表示的特征,反之接近0则表示该列的词不具备行所表示的特征。
3、行特征一般不可具体描述
嵌入矩阵的每一列被称为对应词的嵌入向量(特征向量)
嵌入矩阵x某个词的独热向量=该词嵌入向量,实际应用中该乘法效率低下,因为独热向量维度巨大,Keras中用嵌入层(Embedding layer)来单独查找矩阵的某列,即提取字典中某个词的嵌入向量
词嵌入可以用来类比推理,即找出具有相似特征的词或具有相似关系的词组(例如Man:Woman-King:Queen、bigger:big-taller:tall,等)
常用的相似度函数——余弦相似度(cosine similarity)
余弦相似度计算其中二范数即、是把向量中的所有元素求平方和再开平方根。
得到的结果其实是两个向量的夹角的cos值,两向量越接近则值越大
神经网络语言模型学习词嵌入,及通过学习得到词嵌入矩阵E的方法之一是建立语言模型。
下图是通过语言模型学习使其能预测句尾的juice。单词下的数字表示该词在字典中的索引(如want索引为9665),是该词独热向量、E是嵌入矩阵、是该词嵌入向量。将得到的6个嵌入向量(300x1)堆叠后得到1800x1的向量作为输入向量通入神经网络后经过softmax在所有的字典中的词中选择一个作为预测,通过反向传播、梯度下降来学习嵌入矩阵。实际应用中存在超参数历史窗口 (historical window)来控制目标词前面的“上下文”的单词数量。(比如历史窗口为4时,嵌入向量堆叠后的输入维度为1200x1)
在这种算法的激励下训练集中的orange juice 和apple juice能让orange和apple学习到相似的嵌入向量,从而让预测值更好地符合训练集。
研究者发现如果只是学习词嵌入而不是真正的构建语言模型,在选择目标词的“上下文 ”时,可以选择左右的n个词、之前的一个词、附近的一个词等。