| 第318行: |
第318行: |
| | FastText 的核心思想是:将词视为子词(subword)n-gram 的组合体,而不是独立的原子单位。这一设计增强了模型对罕见词、形态变化词以及未登录词(OOV)的表示能力。 | | FastText 的核心思想是:将词视为子词(subword)n-gram 的组合体,而不是独立的原子单位。这一设计增强了模型对罕见词、形态变化词以及未登录词(OOV)的表示能力。 |
| | | | |
| − | ===== ·子词建模(Subword Embedding): =====
| + | '''子词建模(Subword Embedding):''' |
| | + | |
| | 每个单词 <math>w</math> 被划分为若干个字符 n-gram,例如设置 n = 3~6 时: | | 每个单词 <math>w</math> 被划分为若干个字符 n-gram,例如设置 n = 3~6 时: |
| | | | |
| 第336行: |
第337行: |
| | 这种表示方式让模型在遇到未登录词时,也可以通过其组成子词获取合理向量。 | | 这种表示方式让模型在遇到未登录词时,也可以通过其组成子词获取合理向量。 |
| | | | |
| − | ===== ·模型结构与训练: =====
| + | '''模型结构与训练:''' |
| | + | |
| | FastText 延续了 Word2Vec 的 Skip-gram 架构,但输入词不再是 one-hot 编码的词本身,而是其所有 n-gram 的组合。训练目标为:给定中心词(子词组合向量),预测其上下文词。即最大化如下目标函数: | | FastText 延续了 Word2Vec 的 Skip-gram 架构,但输入词不再是 one-hot 编码的词本身,而是其所有 n-gram 的组合。训练目标为:给定中心词(子词组合向量),预测其上下文词。即最大化如下目标函数: |
| | | | |
| 第371行: |
第373行: |
| | | | |
| | ==== 技术原理: ==== | | ==== 技术原理: ==== |
| | + | '''基础架构: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,可并行处理任意长度的输入。 |
| | | | |
| 第385行: |
第387行: |
| | Transformer 中每个词的表示会综合考虑所有其他词对它的影响,因此能捕捉复杂的依赖结构。 | | Transformer 中每个词的表示会综合考虑所有其他词对它的影响,因此能捕捉复杂的依赖结构。 |
| | | | |
| − | ===== ·输入方式表示: =====
| + | '''输入方式表示:''' |
| | + | |
| | 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)上进行训练: |
| | | | |
| 第404行: |
第408行: |
| | </math> | | </math> |
| | | | |
| − | ===== ·微调阶段: =====
| + | '''微调阶段:''' |
| | + | |
| | 在预训练后,BERT 可被快速迁移到下游任务,如:文本分类(情感分析)、序列标注(命名实体识别)、问答系统,只需在最后加上一层简单的任务特定结构,并用少量数据进行微调即可。 | | 在预训练后,BERT 可被快速迁移到下游任务,如:文本分类(情感分析)、序列标注(命名实体识别)、问答系统,只需在最后加上一层简单的任务特定结构,并用少量数据进行微调即可。 |
| | | | |
| 第426行: |
第431行: |
| | ELMo 基于传统语言模型(Language Model, LM),但引入了以下三个关键技术点: | | ELMo 基于传统语言模型(Language Model, LM),但引入了以下三个关键技术点: |
| | | | |
| − | ===== ·双向语言模型(BiLM): =====
| + | '''双向语言模型(BiLM):''' |
| | + | |
| | 一个正向语言模型(从左到右):<math>P(w_1, w_2, \ldots, w_T) = \prod_{t=1}^{T} P(w_t \mid w_1, \ldots, w_{t-1}) | | 一个正向语言模型(从左到右):<math>P(w_1, w_2, \ldots, w_T) = \prod_{t=1}^{T} P(w_t \mid w_1, \ldots, w_{t-1}) |
| | </math> | | </math> |
| 第436行: |
第442行: |
| | 这两个模型均使用深层 LSTM(Long Short-Term Memory) 网络进行建模,层数通常为两层。 | | 这两个模型均使用深层 LSTM(Long Short-Term Memory) 网络进行建模,层数通常为两层。 |
| | | | |
| − | ===== ·多层表示聚合机制: =====
| + | '''多层表示聚合机制:''' |
| | + | |
| | ELMo 并不是仅提取 LSTM 的最后一层输出作为词向量,而是将所有层的隐状态按照加权方式聚合,从而获得更加丰富的语义特征。 | | ELMo 并不是仅提取 LSTM 的最后一层输出作为词向量,而是将所有层的隐状态按照加权方式聚合,从而获得更加丰富的语义特征。 |
| | | | |
| 第462行: |
第469行: |
| | </math> 是可学习缩放因子,控制整体表示的幅度。 | | </math> 是可学习缩放因子,控制整体表示的幅度。 |
| | | | |
| − | ===== ·训练与迁移使用: =====
| + | '''训练与迁移使用:''' |
| | + | |
| | ELMo 先在大规模语料上训练语言模型(如 1 Billion Word Benchmark),然后将训练好的表示迁移到下游任务中,并在下游任务中联合微调(fine-tune)其权重<math>s_j | | ELMo 先在大规模语料上训练语言模型(如 1 Billion Word Benchmark),然后将训练好的表示迁移到下游任务中,并在下游任务中联合微调(fine-tune)其权重<math>s_j |
| | | | |