| 第198行: |
第198行: |
| | | | |
| | ===== 技术原理: ===== | | ===== 技术原理: ===== |
| − | GloVe 是一种'''基于全局共现信息'''来学习词向量的方法,与 Word2Vec 不同,它'''不依赖上下文窗口中的预测任务''',而是采用词与词之间在整个语料库中'''共现频率的统计信息'''来构造词语之间的关系。 | + | GloVe 是一种基于全局共现信息来学习词向量的方法,与 Word2Vec 不同,它不依赖上下文窗口中的预测任务,而是采用词与词之间在整个语料库中共现频率的统计信息来构造词语之间的关系。 |
| | | | |
| − | GloVe 的设计灵感来自以下关键观察:'''词语的语义关系可以通过它们与其他词共现的比例来表达,而不是仅通过是否共现或是否邻近'''。例如,“ice” 和 “steam” 都与 “water” 有很强的共现关系,但 “ice” 更倾向与 “cold” 共现,而 “steam” 更倾向与 “hot” 共现。GloVe 试图让词向量之间的'''差异或比例'''能反映出这种语义关系。 | + | GloVe 的设计灵感来自以下关键观察:词语的语义关系可以通过它们与其他词共现的比例来表达,而不是仅通过是否共现或是否邻近。例如,“ice” 和 “steam” 都与 “water” 有很强的共现关系,但 “ice” 更倾向与 “cold” 共现,而 “steam” 更倾向与 “hot” 共现。GloVe 试图让词向量之间的差异或比例能反映出这种语义关系。 |
| | | | |
| − | 在训练之前,GloVe 首先对整个语料库构建一个 '''共现矩阵<math>X</math>''': | + | 在训练之前,GloVe 首先对整个语料库构建一个 共现矩阵<math>X</math>: |
| | | | |
| − | ·每个元素 '''<math>X_{ij}</math>''' 表示词'''<math>j</math>'''在词 '''<math>i</math>''' 的上下文窗口中出现的次数; | + | ·每个元素 <math>X_{ij}</math> 表示词<math>j</math>在词 <math>i</math> 的上下文窗口中出现的次数; |
| | | | |
| − | ·矩阵是稀疏且高维的,规模为 '''<math>V \times V</math>''',其中 '''<math>V</math>''' 是词汇表大小。 | + | ·矩阵是稀疏且高维的,规模为 <math>V \times V</math>,其中 <math>V</math> 是词汇表大小。 |
| | | | |
| − | GloVe 的一个重要设计理念是:'''两个词之间的语义关系可由它们对其他词的共现比值刻画'''。对于一个目标词 '''<math>i</math>''',考虑两个上下文词 '''<math>j</math>''' 和 '''<math>k</math>''',如果 '''<math>i</math>''' 与 '''<math>j</math>''' 的共现频率远高于与 '''<math>k</math>''',则两者在语义上的关联也会不同。 | + | GloVe 的一个重要设计理念是:两个词之间的语义关系可由它们对其他词的共现比值刻画。对于一个目标词 '''<math>i</math>''',考虑两个上下文词 '''<math>j</math>''' 和 '''<math>k</math>''',如果 '''<math>i</math>''' 与 '''<math>j</math>''' 的共现频率远高于与 '''<math>k</math>''',则两者在语义上的关联也会不同。 |
| | | | |
| | 定义贡献概率为: | | 定义贡献概率为: |
| 第218行: |
第218行: |
| | '''<math>F(\mathbf{w}_i, \tilde{\mathbf{w}}_j, X_{ij}) = \mathbf{w}_i^\top \tilde{\mathbf{w}}_j + b_i + \tilde{b}_j \approx \log X_{ij}</math>''' | | '''<math>F(\mathbf{w}_i, \tilde{\mathbf{w}}_j, X_{ij}) = \mathbf{w}_i^\top \tilde{\mathbf{w}}_j + b_i + \tilde{b}_j \approx \log X_{ij}</math>''' |
| | | | |
| − | 即目标是让'''词向量的点积加上偏置项'''逼近'''共现频率的对数值''',而不是原始频数,后者变化范围太大。
| + | 即目标是让词向量的点积加上偏置项逼近共现频率的对数值,而不是原始频数,后者变化范围太大。 |
| | | | |
| | 为了实现上述目标,GloVe 构建了以下加权平方误差损失函数: | | 为了实现上述目标,GloVe 构建了以下加权平方误差损失函数: |
| 第252行: |
第252行: |
| | | | |
| | ===== 技术原理: ===== | | ===== 技术原理: ===== |
| − | FastText 的核心思想是:'''将词视为子词(subword)n-gram 的组合体''',而不是独立的原子单位。这一设计增强了模型对罕见词、形态变化词以及未登录词(OOV)的表示能力。 | + | FastText 的核心思想是:将词视为子词(subword)n-gram 的组合体,而不是独立的原子单位。这一设计增强了模型对罕见词、形态变化词以及未登录词(OOV)的表示能力。 |
| | | | |
| | ====== ·子词建模(Subword Embedding): ====== | | ====== ·子词建模(Subword Embedding): ====== |
| 第286行: |
第286行: |
| | 负采样 <math>P_n(w)</math> 用于高效近似 softmax。 | | 负采样 <math>P_n(w)</math> 用于高效近似 softmax。 |
| | | | |
| − | FastText 的训练过程本质上是'''端到端地联合优化所有子词的向量表示''',以提升整体语义建模能力。 | + | FastText 的训练过程本质上是端到端地联合优化所有子词的向量表示,以提升整体语义建模能力。 |
| | | | |
| | ===== 总结与对比: ===== | | ===== 总结与对比: ===== |
| 第302行: |
第302行: |
| | | | |
| | ===== 背景: ===== | | ===== 背景: ===== |
| − | BERT 是由 Google AI Language 团队于 2018 年提出的一种预训练语言表示模型,发表在论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》中。该模型首次将 '''深度双向 Transformer 编码器''' 应用于语言建模任务,并通过大规模语料上的预训练 + 微调机制,在多个自然语言处理任务上取得了 SOTA(state-of-the-art)成绩。 | + | BERT 是由 Google AI Language 团队于 2018 年提出的一种预训练语言表示模型,发表在论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》中。该模型首次将 深度双向 Transformer 编码器 应用于语言建模任务,并通过大规模语料上的预训练 + 微调机制,在多个自然语言处理任务上取得了 SOTA(state-of-the-art)成绩。 |
| | | | |
| − | BERT 的设计动机是解决传统语言模型(如 Word2Vec、GloVe)在'''上下文建模、语义歧义处理和句子级理解'''方面的不足,特别是在建模“一个词在不同上下文中含义不同”这一关键问题。 | + | BERT 的设计动机是解决传统语言模型(如 Word2Vec、GloVe)在上下文建模、语义歧义处理和句子级理解方面的不足,特别是在建模“一个词在不同上下文中含义不同”这一关键问题。 |
| | | | |
| | ===== 技术原理: ===== | | ===== 技术原理: ===== |
| | | | |
| | ====== ·基础架构:Transformer Encoder: ====== | | ====== ·基础架构:Transformer Encoder: ====== |
| − | BERT 构建在 '''Transformer 架构'''之上,具体使用了 '''多层 Transformer 编码器堆叠'''(通常 BERT-base 为 12 层,BERT-large 为 24 层)。Transformer 由 Vaswani 等人在 2017 年提出,其最大特点是 '''完全基于注意力机制(Self-Attention)''',无需使用 RNN 或 CNN,可并行处理任意长度的输入。 | + | BERT 构建在 Transformer 架构之上,具体使用了 多层 Transformer 编码器堆叠(通常 BERT-base 为 12 层,BERT-large 为 24 层)。Transformer 由 Vaswani 等人在 2017 年提出,其最大特点是 完全基于注意力机制(Self-Attention),无需使用 RNN 或 CNN,可并行处理任意长度的输入。 |
| | | | |
| | 每层包含: | | 每层包含: |
| 第322行: |
第322行: |
| | | | |
| | ====== ·输入方式表示: ====== | | ====== ·输入方式表示: ====== |
| − | BERT 的输入不只是单词序列,而是'''词 + 位置 + 句子类型'''三重嵌入之和:Input Embedding = Token Embedding + Position Embedding + Segment Embedding | + | BERT 的输入不只是单词序列,而是词 + 位置 + 句子类型三重嵌入之和:Input Embedding = Token Embedding + Position Embedding + Segment Embedding |
| | | | |
| | 例如用于句子对任务(如问答)时,Segment A 表示第一句话,Segment B 表示第二句话。输入序列结构为:[CLS] 句子A [SEP] 句子B [SEP],其中[CLS] 用于分类任务的特殊标记;[SEP] 是句子分隔符。 | | 例如用于句子对任务(如问答)时,Segment A 表示第一句话,Segment B 表示第二句话。输入序列结构为:[CLS] 句子A [SEP] 句子B [SEP],其中[CLS] 用于分类任务的特殊标记;[SEP] 是句子分隔符。 |
| | | | |
| | ====== ·预训练阶段: ====== | | ====== ·预训练阶段: ====== |
| − | BERT 采用两种 '''自监督学习任务'''在大规模语料(如 Wikipedia 和 BooksCorpus)上进行训练: | + | BERT 采用两种 自监督学习任务在大规模语料(如 Wikipedia 和 BooksCorpus)上进行训练: |
| | | | |
| | (1)Masked Language Model(MLM):随机遮蔽输入序列中约 15% 的词,模型需预测被 []MASK 替换的词是什么,本质上是一个多分类任务: | | (1)Masked Language Model(MLM):随机遮蔽输入序列中约 15% 的词,模型需预测被 []MASK 替换的词是什么,本质上是一个多分类任务: |
| 第357行: |
第357行: |
| | | | |
| | ===== 背景: ===== | | ===== 背景: ===== |
| − | LMo('''Embeddings from Language Models''')是由 Allen Institute for AI(AI2)的 Matthew Peters 等人在 2018 年 NAACL 上提出的预训练词嵌入方法。ELMo 是 NLP 中'''首个大规模应用上下文动态词向量的模型''',突破了 Word2Vec 和 GloVe 中“一个词一个向量”的静态表示限制。其提出背景在于自然语言中存在大量'''多义词'''与'''语义歧义现象'''(如 "bank" 表示“银行”或“河岸”),传统静态词向量模型无法根据上下文动态调整词的含义表示。而 ELMo 利用'''双向语言模型(BiLM)'''捕捉词的上下文依赖关系,为每个词生成'''可变的、语境敏感的表示'''。 | + | LMo('''Embeddings from Language Models''')是由 Allen Institute for AI(AI2)的 Matthew Peters 等人在 2018 年 NAACL 上提出的预训练词嵌入方法。ELMo 是 NLP 中首个大规模应用上下文动态词向量的模型,突破了 Word2Vec 和 GloVe 中“一个词一个向量”的静态表示限制。其提出背景在于自然语言中存在大量多义词与语义歧义现象(如 "bank" 表示“银行”或“河岸”),传统静态词向量模型无法根据上下文动态调整词的含义表示。而 ELMo 利用双向语言模型(BiLM)捕捉词的上下文依赖关系,为每个词生成可变的、语境敏感的表示。 |
| | | | |
| | ===== 技术原理: ===== | | ===== 技术原理: ===== |
| 第371行: |
第371行: |
| | </math> | | </math> |
| | | | |
| − | 这两个模型均使用深层 '''LSTM(Long Short-Term Memory)''' 网络进行建模,层数通常为两层。 | + | 这两个模型均使用深层 LSTM(Long Short-Term Memory) 网络进行建模,层数通常为两层。 |
| | | | |
| | ·多层表示聚合机制: | | ·多层表示聚合机制: |
| 第390行: |
第390行: |
| | | | |
| | </math> 的隐状态,是前向和后向语言模型的连接结果。 | | </math> 的隐状态,是前向和后向语言模型的连接结果。 |
| | + | |
| | + | <math>s_j |
| | + | |
| | + | </math> 是第<math>j |
| | + | |
| | + | </math>层的可学习权重,表示该层对最终表示的贡献程度; |
| | + | |
| | + | <math>γ |
| | + | </math> 是可学习缩放因子,控制整体表示的幅度。 |
| | + | |
| | + | ·训练与迁移使用: |
| | + | |
| | + | ELMo 先在大规模语料上训练语言模型(如 1 Billion Word Benchmark),然后将训练好的表示迁移到下游任务中,并在下游任务中联合微调(fine-tune)其权重<math>s_j |
| | + | |
| | + | </math>,<math>γ |
| | + | </math>。这种机制大幅提高了模型对语境、词义变化的感知能力,适用于情感分类(Sentiment Analysis)、问答系统(QA)和自然语言推理(NLI)。 |
| | | | |
| | ===== 总结与对比: ===== | | ===== 总结与对比: ===== |
| | + | 上下文敏感词向量:ELMo 是首个提供每个词在不同上下文中动态表示的预训练词嵌入; |
| | + | |
| | + | 双向语言模型建模上下文:同时考虑前文与后文,有效捕捉语言结构与语义; |
| | + | |
| | + | 与 Word2Vec/GloVe 对比:ELMo 输出的词向量会随句子变化,是“动态词向量”; |
| | + | |
| | + | 与 BERT 对比:BERT 使用 Transformer 架构,具备更强建模能力,训练代价更高,ELMo 使用 LSTM 架构,计算成本相对较低,更适合中小规模任务。 |
| | | | |
| | =='''开源实现与工具'''== | | =='''开源实现与工具'''== |