本页面详细介绍了 D2L.ai 存储库中实现的词嵌入技术。词嵌入是将单词转换为密集向量表示,这些向量在连续的向量空间中捕捉语义关系。本节将解释代码库中如何实现 word2vec、GloVe 和 FastText 等词嵌入,以及它们如何成为更高级的自然语言处理任务的基础组成部分。有关基于这些嵌入的注意力机制和 Transformer 架构,请参阅 注意力机制 和 Transformer 架构。
词嵌入将离散的词标记转换为连续的向量空间,在其中语义相似的词彼此靠近。与将每个词视为孤立实体的独热编码不同,词嵌入基于词的上下文来捕捉词之间的关系。
词嵌入的关键优势包括:
来源:img/seq2seq.svg
D2L.ai 的实现支持三种主要的词嵌入技术:
Word2Vec 由 Google 开发,使用浅层神经网络学习词向量。实现了两种主要架构:
D2L.ai 中的 Word2Vec 实现支持自定义参数:
| 参数 | 描述 | 默认值 |
|---|---|---|
| embed_size | 词向量的维度 | 100 |
| context_size | 上下文窗口大小 | 5 |
| negative_samples | 负样本的数量 | 5 |
| epochs | 训练迭代次数 | 5 |
| batch_size | 小批量大小 | 512 |
| learning_rate | 学习率 | 0.01 |
来源:img/seq2seq.svg
GloVe 由斯坦福大学开发,结合了全局矩阵分解和局部上下文窗口方法来生成词嵌入。
D2L.ai 中的 GloVe 使用以下训练方法:
来源:img/seq2seq.svg
FastText 由 Facebook 开发,通过将每个词视为字符 n-gram 的集合来扩展 Word2Vec,使其能够处理词汇外单词和形态丰富的语言。
来源:img/seq2seq.svg
词嵌入是 D2L.ai 架构中 NLP 流水线的基本构建块。下图说明了词嵌入如何与其他组件集成。
来源:img/seq2seq.svg
D2L.ai 中的词嵌入实现遵循存储库的跨框架架构,允许相同的嵌入模型在多个深度学习框架上运行。
来源:img/seq2seq.svg
词嵌入可以可视化以理解词之间的语义关系。D2L.ai 存储库提供了降维技术(如 t-SNE 或 PCA)的工具,用于将高维词向量可视化到 2D 或 3D 空间。
词嵌入捕捉各种语言关系。
| 关系类型 | 示例对 |
|---|---|
| 性别 | (男,女),(国王,王后),(他,她) |
| 时态 | (行走,走过),(游泳,游过) |
| 比较 | (好,更好),(坏,更坏) |
| 首都-国家 | (巴黎,法国),(东京,日本) |
| 货币-国家 | (美元,美国),(欧元,欧洲) |
来源:img/seq2seq.svg
D2L.ai 的实现遵循此通用工作流程来训练词嵌入。
来源:img/seq2seq.svg
在使用 D2L.ai 框架中的词嵌入时,请考虑以下实际方面:
| 词汇量大小 | 嵌入维度 | 所需内存 |
|---|---|---|
| 10,000 | 100 | 约 4 MB |
| 100,000 | 300 | 约 120 MB |
| 1,000,000 | 300 | 约 1.2 GB |
来源:img/seq2seq.svg
词嵌入是序列建模任务的基础组件。在 D2L.ai 架构中,它们作为更复杂的 NLP 模型的输入。
来源:img/seq2seq.svg
词嵌入构成了 D2L.ai 存储库中现代 NLP 系统的基础。它们将离散的单词转换为捕获语义关系的连续向量空间,使下游 NLP 任务能够利用这些表示。该实现跨各种深度学习框架支持多种嵌入技术(Word2Vec、GloVe、FastText),这体现了该存储库对框架无关的教育内容的承诺。
有关基于这些词嵌入的更高级 NLP 架构,请参阅 注意力机制 和 Transformer 架构。