第二讲 词向量表示:Word2vec
word2vec主要分为CBOW(Continuous Bag of Words)和Skip-Gram两种模式。
CBOW是从原始语句推测目标字词;而Skip-Gram是从目标字词推测出原始语句。
CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。
用数字表示文本
机器学习模型将向量(数字数组)作为输入。在处理文本时,我们应该先将字符串转换为数字(或将文本“向量化”),然后再其馈入模型。
单词向量(word vector)又可称为词嵌入(word embeddings)
独热向量编码
为了表示每个单词,创建一个长度等于词汇量的零向量,然后在与该单词对应的索引中放置一个 1。
为了创建一个包含句子编码的向量,我们可以将每个单词的独热向量连接起来。
*问题:*体现不出来两个向量的内在相似性,因两向量的点积为0,得不出词汇与模型之间的关联
这种方法效率低下。一个独热编码向量十分稀疏(这意味着大多数索引为零)。假设我们的词汇表中有 10,000 个单词。为了对每个单词进行独热编码,我们将创建一个其中 99.99% 的元素都为零的向量。
用一个唯一的数字编码每个单词
如:将 1 分配给“cat”,将 2 分配给“mat”,依此类推。
然后,我们可以将句子“The cat sat on the mat”编码为一个密集向量,例如 [5, 1, 4, 3, 5, 2]。这种方法是高效的。
现在,我们有了一个密集向量(所有元素均已满),而不是稀疏向量。
但是,这种方法有两个缺点:
整数编码是任意的(它不会捕获单词之间的任何关系)。
对于要解释的模型而言,整数编码颇具挑战。例如,线性分类器针对每个特征学习一个权重。由于任何两个单词的相似性与其编码的相似性之间都没有关系,因此这种特征权重组合没有意义。
单词嵌入向量
单词嵌入向量为我们提供了一种使用高效、密集表示的方法,其中相似的单词具有相似的编码。
重要的是,我们不必手动指定此编码。
嵌入向量是浮点值的密集向量(向量的长度是您指定的参数)。
它们是可以训练的参数(模型在训练过程中学习的权重,与模型学习密集层权重的方法相同),无需手动为嵌入向量指定值。
8 维的单词嵌入向量(对于小型数据集)比较常见,而在处理大型数据集时最多可达 1024 维。
维度更高的嵌入向量可以捕获单词之间的细粒度关系,但需要更多的数据来学习。
下图每个单词都表示为浮点值的 4 维向量。还可以将嵌入向量视为“查找表”。学习完这些权重后,我们可以通过在表中查找对应的密集向量来编码每个单词。
嵌入向量层理解为一个从整数索引(代表特定单词)映射到密集向量(其嵌入向量)的查找表。
创建嵌入向量层时,嵌入向量的权重会随机初始化(就像其他任何层一样&