嵌入 课前测验 在基于BoW或TF/IDF训练分类器时,我们处理的是长度为 的高维词袋向量,并且我们显式地将低维位置表示向量转换为稀疏的一热编码表示。然而,这种一热编码表示并不高效。此外,每个词都被独立处理,即一热编码向量并不能表达词之间的任何语义相似性。 嵌入的想法是通过较低维度的密集向量来表示词,这些向量以某种方式反映了词的语义意义。稍后我们将讨论如何构建有意义的词嵌入,但目前我们可以将嵌入视为降低词向量维度的一种方法。 因此,嵌入层会将一个词作为输入,并产生指定维度的输出向量 。从某种意义上说,它与 层非常相似,但它不是接收一热编码向量,而是能够接收词编号作为输入,从而避免创建大的一热编码向量。
在基于BoW或TF/IDF训练分类器时,我们处理的是长度为vocab_size的高维词袋向量,并且我们显式地将低维位置表示向量转换为稀疏的一热编码表示。然而,这种一热编码表示并不高效。此外,每个词都被独立处理,即一热编码向量并不能表达词之间的任何语义相似性。
嵌入的想法是通过较低维度的密集向量来表示词,这些向量以某种方式反映了词的语义意义。稍后我们将讨论如何构建有意义的词嵌入,但目前我们可以将嵌入视为降低词向量维度的一种方法。
因此,嵌入层会将一个词作为输入,并产生指定维度的输出向量embedding_size。从某种意义上说,它与Linear层非常相似,但它不是接收一热编码向量,而是能够接收词编号作为输入,从而避免创建大的一热编码向量。
通过在我们的分类网络中将嵌入层作为第一层,我们可以从词袋模型切换到嵌入词袋模型,在该模型中,我们将文本中的每个词首先转换为其对应的嵌入,然后计算所有这些嵌入的某种聚合函数,例如sum、average或max。

作者提供图片
继续在以下笔记本中学习:
虽然嵌入层学会了将词映射到向量表示,但这种表示不一定具有很多语义意义。我们希望能够学习一种向量表示,使得相似词或同义词在某种向量距离(如欧氏距离)下彼此接近。
为此,我们需要以特定的方式在一个大型文本集合上预训练我们的嵌入模型。一种训练语义嵌入的方法称为Word2Vec。它基于两种主要架构,用于生成词的分布式表示:
CBoW更快,而skip-gram更慢,但对不常见的词有更好的表示效果。

图片来自这篇论文
预训练好的Word2Vec嵌入(以及其他类似模型,如GloVe)也可以在神经网络中替代嵌入层使用。然而,我们需要处理词汇表问题,因为预训练Word2Vec/GloVe所使用的词汇表可能与我们的文本语料库的词汇表不同。请查看上述笔记本以了解如何解决这个问题。
传统预训练嵌入表示(如Word2Vec)的一个关键限制是词义消歧问题。虽然预训练嵌入可以捕捉一些上下文中的词的意义,但词的每一种可能意义都被编码到了相同的嵌入中。这可能会导致下游模型的问题,因为许多词(如“play”)在不同的上下文中具有不同的含义。
例如,在这两个不同的句子中,“play”这个词具有完全不同的含义:
上述预训练嵌入在这两个句子中都用同一个嵌入表示“play”。为了克服这个限制,我们需要基于语言模型构建嵌入,该模型是在大量文本语料库上训练的,并且“知道”词可以在不同的上下文中组合在一起。讨论上下文嵌入超出了本教程的范围,但我们将在课程后面讨论语言模型时再回到这个问题。
在这节课中,你了解了如何在TensorFlow和PyTorch中构建和使用嵌入层,以便更好地反映词的语义意义。
Word2Vec已被用于一些有趣的用途,包括生成歌词和诗歌。看看这篇文章,了解作者是如何使用Word2Vec生成诗歌的。还可以观看,了解这种技术的不同解释。然后尝试将这些技术应用到你自己的文本语料库中,也许可以从Kaggle获取。
阅读这篇关于Word2Vec的论文:词向量空间中词表示的有效估计
声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。