关于词嵌入

词向量化

将词向量化的一个很简单的思路:
(1)统计语料中出现的每个单词,并按照词频由高到低排列,得到一个字典
(2)根据字典将句子转为由整数表示的向量
有了字典,给定一个词,就能找到它在字典中的位置。比如单词a,在字典中a的位置为3;评论中出现的词在字典中不存则为0。把每个词用其在字典中的index来表示。每句话都将会构造一个对应长度的词向量。
举个栗子:
评论为“I like this movie!”
‘I’在字典中的index为9;
‘like’在字典中的index为37;
‘this’‘在字典中的index为10;
‘movie’在字典中的index为16;
‘!’在字典中的index为28;
这个评论对应的词向量为[9 37 10 16 28]
(3)使用one-hot将每个一维词向量转为二维的向量做为模型输入
假如字典的大小为1000,最短的句子为“I like this movie!”,长度为5,如果使用one-hot编码将词向量为[9 37 10 16 28]编码得到的向量维度为(6, 1000)。其中6为句子长度,1000为字典大小。行向量表示一个单词,且只有在索引位置处值为1,其他位置为0.因此,这样的编码方式得到的输入非常稀疏,耗费不必要的计算资源和时间。
那么有没有高效的方法呢?肯定是有的。
试想一下,将整数组的词向量编码得到另外一种形式的词向量,我们可以理解为中间通过了某种映射关系。这种映射关系能够自定义,比如上述的例子中字典大小只有1000,用10位2进制数不就能完全表示这1000个词吗?使用这样编码方式得到的向量大小只有(N, 10), N为句子长度。我们还能够通过模型去学习得到映射关系,神经网络模型不就能够将输入映射到一个高维空间吗?词嵌入方法Word2Vec,GloVe就是基于这样的想法实现的。

推荐文章

文章(1)详细介绍了如何实现训练一个自己嵌入模型对输入编码和使用现有的嵌入模型进行编码,文章(2)详细介绍如何keras对词向量或者图片等如何设置。详细的代码,拿来就用。
(1) How to Use Word Embedding Layers for Deep Learning with Keras
(2)在Keras模型中one-hot编码,Embedding层,使用预训练的词向量/处理图片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章