词嵌入 (Word Embeddings)
词嵌入的定义
词嵌入是一种表示单词的方法,其中每个单词由一个高维向量表示,而不是传统的one-hot编码方法。这些向量捕获单词之间的语义关系。
问题与one-hot编码:
One-hot编码将每个单词视为独立的实体,不捕获单词之间的任何关系。
任何两个不同的one-hot向量之间的内积都是零,这意味着所有单词之间的关系都是相同的。
词嵌入的特点
- 词嵌入可以捕获单词之间的相似性。
- 词嵌入可以由算法学习,而不是手动指定。
- 虽然可以为词嵌入指定某些特征(如性别、皇家身份等),但大多数特征是算法自动学习的,并且可能不容易解释。
词嵌入的应用
- 词嵌入允许算法更好地泛化,因为它可以识别单词之间的关系。例如,如果算法知道orange juice是一个常见的短语,它也可能会推断出apple juice是一个常见短语。
- 词嵌入可以用于各种自然语言处理任务,如文本分类、情感分析和机器翻译。
可视化:尽管词嵌入通常是高维的(例如300维),但可以使用如t-SNE这样的算法将其映射到二维或三维空间进行可视化。 偏见问题:词嵌入可能会捕获并反映数据中的偏见,如性别或种族偏见。因此,可能需要采取措施去除这些偏见。
词嵌入的使用
- 特征化表示:Word embeddings 提供了一种特征化表示,将单词从原始 one-hot 向量转换为更紧凑、且能够捕获单词之间关系的 dense 向量。
- 处理罕见词汇:即使在训练集中没有见过某个词(如 “durian” 或 “cultivator”),word embeddings 也可以帮助模型推断这些词的意义和上下文。
- 大规模无标签文本的学习:Word embeddings 可以从大规模的、无标签的文本中学习,这些文本可以从互联网上免费获取。
- 迁移学习:一旦学习到 word embeddings,就可以将其应用于具有更小训练集的其他 NLP 任务,实现迁移学习。
- 双向 RNN:虽然示例中使用了 unidirectional RNN,但实际上,为了更好地进行命名实体识别,应使用双向 RNN。
- 维度减少:Word embeddings 允许我们使用相对较低的维度(例如300维)来表示单词,而不是使用高维的 one-hot 向量。
- 微调:在某些情况下,可以继续调整 word embeddings 以适应新的数据。
- 广泛应用:Word embeddings 在许多 NLP 任务中都很有用,例如命名实体识别、文本摘要、共指消解和解析。对某些任务,如语言建模和机器翻译,其效果可能不如其他方法。
- 与面部编码的关系:Word embeddings 的概念与面部识别中的面部编码有些相似。两者都试图为输入(面部或单词)创建一个紧凑的向量表示。
- 推理能力:Word embeddings 还可以帮助模型进行推理,如进行类比推理。
总的来说,word embeddings 是 NLP 领域的一种强大工具,它能够捕获单词之间的关系并帮助模型从更小的标注数据中学习。
词嵌入的特点
- 类比推理:Word embeddings 可以用于执行类比推理。例如,通过word embeddings可以自动解决“man is to woman as king is to what?”的问题,答案是“queen”。
- 向量运算:Word embeddings之间的向量运算可以揭示单词之间的关系。例如,向量差异 eman – ewoman 与 eking – equeen 大致相同,这表明两对单词之间的主要差异都是性别。
- 空间表示:在高维空间中,单词嵌入表示为点,单词之间的关系可以通过向量差表示。
- 类比关系的广泛性:Word embeddings能够捕获各种各样的类比关系,例如:
- 余弦相似性:用于衡量两个word embeddings之间的相似性。余弦相似度是基于两个向量之间的角度的余弦值。此外,也可以使用欧几里得距离作为相似性的度量。
- 自动学习:通过在大型文本语料库上运行word embedding学习算法,系统可以自动学习和识别上述模式和关系。
- 可视化工具:虽然word embeddings存在于高维空间中,但可以使用如t-SNE等算法将其可视化为二维空间。
综上所述,word embeddings不仅可以为NLP应用程序提供丰富的特征表示,还可以用于类比推理,捕获广泛的语义关系,并通过向量运算揭示单词之间的关系。
词嵌入的学习
- 神经语言模型 (Neural Language Model):
- 开始时,研究者使用了相对复杂的算法来学习词嵌入。
- 通过NN构建LM:给定一系列单词(如 “I want a glass of orange”),预测下一个单词。
- 使用词汇表中的索引为每个词创建一个one-hot向量。
- 使用参数矩阵E与每个one-hot向量相乘,得到每个单词的嵌入向量。
- 这些嵌入向量可以堆叠并输入到神经网络中,该网络通过 softmax 层预测下一个单词。
- 该模型的参数包括嵌入矩阵E和神经网络的权重。
- 通过最大化训练集的似然性来调整这些参数,从而在给定的单词序列中预测下一单词。
- 固定历史窗口 (Fixed Historical Window):
- 为了处理不同长度的句子,可以使用固定的历史窗口,例如始终使用前四个单词来预测下一个单词。
- 选择上下文 (Choosing Context):
- 如果目标是学习语言模型,则上下文自然是目标词之前的几个词。
- 如果主要目标是学习词嵌入,可以选择其他上下文,例如:
- 左右四个单词:给定左边的四个词和右边的四个词来预测中间的词。
- 最后一个词:只给定一个词来预测下一个词。
- 附近一个词:给定一附近词来预测另一附近的词。这是Skip-Gram模型的思想。
- 简化的算法 (Simpler Algorithms):
- 有些简化的算法,如Skip-Gram模型,只使用一个词作为上下文,仍然能够得到很好的词嵌入。
词嵌入实例1:Word2Vec
Word2Vec 是用于获得词嵌入(word embeddings)的流行方法。通过这种方法可以将每一个单词表示为高维空间中的向量,从而使具有相似含义或上下文的单词在这个空间中距离较近。
$$ \begin{equation}p(t | c) = \frac{e^{{\theta_t^T} e_c}}{\sum_{j=1}^{V} e^{\theta_j^T e_c}}\end{equation} $$
其中:
- p(t | c) 表示给定上下文 c 时目标词 t 出现的概率。
- ec 是上下文词 c 的嵌入向量。
- θt 是与目标词 t 相关的参数。
- V 是词汇表的大小。
- 分子部分是目标词 t 的输出向量与上下文词 c 的嵌入向量之间的点积的指数。
- 分母部分是对整个词汇表中的每个词的该点积的指数进行求和,确保概率的总和为 1。
这个 softmax 函数为给定的上下文 c 生成了词汇表中每个可能的目标词 t 的概率分布。
- Skip-gram 模型:
- 在 Skip-gram 模型中,从给定的句子中选择一个单词作为上下文(context),然后预测在该上下文附近的单词(目标词或target)。
- 例如,从句子中选择“orange”作为上下文,可能选择“juice”或“glass”作为目标词。
- 上下文和目标词之间的距离可以是固定的窗口大小, 如前后五个单词或十个单词。
- 训练过程:
- 输入:上下文词的 one-hot 向量表示。
- 将这个 one-hot 向量与嵌入矩阵(embedding matrix)相乘得到上下文词的嵌入向量。
- 将此嵌入向量输入到一个 softmax 单元,预测目标词。
- 损失函数:使用 negative log likelihood 计算预测值与真实目标词之间的误差。
- 计算问题:
- softmax 在每次计算时都要对整个词汇表进行求和,这在大词汇表中是非常低效的。
- 为了解决这个问题,可以使用分层 softmax 分类器,它将分类问题分为多个层次,从而减少计算复杂性。
- 上下文词的选择:
- 如果从训练集中随机均匀地选择上下文词,那么常见的单词(如“the”、“of”)会被频繁选择,而较少见的单词则很少被选择。
- 为了避免这个问题,可以使用不同的启发式方法来选择上下文词,从而在常见词和不常见词之间取得平衡。
- 其他:
- 除了 skip-gram 模型外,Word2Vec 还有一个叫做 CBow(Continuous Bag of Words)的模型,它使用上下文来预测中间的单词。
- 最大的挑战是 softmax 步骤的计算成本。为了解决这个问题,下一个视频将介绍一个修改了训练目标的算法,使其运行更加高效。
词嵌入实例2:GloVe Word Vectors
GloVe 的主要思想是捕获全局统计信息,特别是词与词之间的共现统计信息:
共现矩阵:GloVe 从训练文本构建一个共现矩阵,其中 Xij 表示词 i 与词 j 共同出现次数。这是 GloVe 的核心,它试图从这种共现统计中提取语义信息。
目标函数:GloVe 的目标是学习词向量,使得词 i 的向量 θi 和词 j 的向量 ej 的点积接近于它们共同出现的次数的对数,即 log(Xij)。 具体的优化目标是最小化以下损失函数:
$$ \begin{equation}\sum_{i=1}^{V} \sum_{j=1}^{V} f(X_{ij}) (\theta_i^T e_j – \log(X_{ij}))^2\end{equation} $$
其中,f(Xij) 是一个权重函数,用于处理共现次数为 0 以及非常频繁或稀少的词的问题。
权重函数:为了处理词频的问题,GloVe引入了一个权重函数 f(Xij)。这个函数确保频繁出现的词(如“the”、“is”等)不会过度影响模型,而不常见的词仍能够得到适当的关注。
嵌入的对称性:与 Word2Vec 不同,GloVe 的 θ 和 e 扮演对称的角色。这意味着训练结束后通常会取这两个嵌入平均值作为最终词嵌入(Word2Vec中 θ 是与目标词 t 相关的参数)。
可解释性:虽然GloVe 的目标函数看起来简单,但它能够有效地捕获词的语义信息。然而得到嵌入矩阵的各个组件可能不是容易解释的。
GloVe是一种基于统计的词嵌入方法,它试图直接从整个数据集的全局统计信息中学习词嵌入,而不是从局部上下文信息中学习,如 Word2Vec 所做的那样。虽然 Word2Vec 在许多应用中可能更受欢迎,但GloVe 由于其简单和能够捕获全局统计信息能力而受到一些NLP研究者喜爱。