| 第27行: |
第27行: |
| | 为了克服传统神经网络语言模型(NNLM)只能建模固定长度上下文的局限,递归神经网络语言模型(Recurrent Neural Network Language Model, RNNLM)被提出。RNNLM 由 Tomas Mikolov 等人在 2010 年提出,其核心思想是通过递归连接隐藏层,使得网络在处理当前输入词时,能够同时参考前一时刻的隐藏状态,从而理论上具备建模任意长度上下文依赖的能力。在 RNNLM 中,每个时间步输入当前词的嵌入表示,并结合前一时刻的隐藏层状态,通过共享的隐藏权重矩阵更新新的隐藏状态,进而预测下一个词的概率分布。与 NNLM 的静态上下文窗口不同,RNNLM 的隐藏层作为一种动态记忆,可以不断累积和更新序列信息,因此更加灵活,能够捕捉到语言中远距离的依赖关系。RNNLM 的出现显著提升了语言建模的表达能力,使得模型能够更自然地处理复杂的语言现象,例如主谓一致、跨句关系等。然而,RNNLM 也存在明显的效率问题。由于递归连接的特性,每一步的隐藏状态更新都依赖前一步的计算结果,导致训练过程必须严格顺序进行,难以并行加速。同时,RNNLM 在每一个时间步都需要进行大规模矩阵乘法运算,尤其在输出层面对大词表进行归一化时,计算量和存储需求依然非常巨大。此外,传统的基本 RNN 结构在实际应用中还容易遭遇梯度消失或梯度爆炸的问题,使得模型在处理很长序列时训练变得困难。 | | 为了克服传统神经网络语言模型(NNLM)只能建模固定长度上下文的局限,递归神经网络语言模型(Recurrent Neural Network Language Model, RNNLM)被提出。RNNLM 由 Tomas Mikolov 等人在 2010 年提出,其核心思想是通过递归连接隐藏层,使得网络在处理当前输入词时,能够同时参考前一时刻的隐藏状态,从而理论上具备建模任意长度上下文依赖的能力。在 RNNLM 中,每个时间步输入当前词的嵌入表示,并结合前一时刻的隐藏层状态,通过共享的隐藏权重矩阵更新新的隐藏状态,进而预测下一个词的概率分布。与 NNLM 的静态上下文窗口不同,RNNLM 的隐藏层作为一种动态记忆,可以不断累积和更新序列信息,因此更加灵活,能够捕捉到语言中远距离的依赖关系。RNNLM 的出现显著提升了语言建模的表达能力,使得模型能够更自然地处理复杂的语言现象,例如主谓一致、跨句关系等。然而,RNNLM 也存在明显的效率问题。由于递归连接的特性,每一步的隐藏状态更新都依赖前一步的计算结果,导致训练过程必须严格顺序进行,难以并行加速。同时,RNNLM 在每一个时间步都需要进行大规模矩阵乘法运算,尤其在输出层面对大词表进行归一化时,计算量和存储需求依然非常巨大。此外,传统的基本 RNN 结构在实际应用中还容易遭遇梯度消失或梯度爆炸的问题,使得模型在处理很长序列时训练变得困难。 |
| | == '''技术原理''' == | | == '''技术原理''' == |
| − | Word2vec 的目的在于为每个词汇都分配一个稠密的向量,能够做到相比传统的稀疏向量(如 one-hot 编码),更具表达能力和计算效率。形式上也就是,如果词汇表为\V,每个词w\inV 被映射为向量 v_w\inRd,其中 d≪|V|。 | + | Word2vec 的目的在于为每个词汇都分配一个稠密的向量,能够做到相比传统的稀疏向量(如 one-hot 编码),更具表达能力和计算效率。形式上也就是,如果词汇表为 <math>V</math>,每个词 <math>w\inV</math> 被映射为向量 <math>\mathbf{v}_w \in \mathbb{R}^d</math>,其中 <math>d \ll |V|</math>。 |
| | | | |
| | Word2vec使用两种模型架构中的任何一种来生成词汇的分布式表示:连续词袋模型(CBOW)或Skip-gram。在这两种架构中,word2vec 在遍历语料库时都会考虑单个词和滑动上下文窗口,这种设计来源于分布式假设,由语言学家 Zellig Harris 在1954年提出。它的核心思想是:“上下文相似的词具有相似的意义”(You shall know a word by the company it keeps)。即如果两个词在相似的上下文中出现,那么它们的意义可能也相似。 | | Word2vec使用两种模型架构中的任何一种来生成词汇的分布式表示:连续词袋模型(CBOW)或Skip-gram。在这两种架构中,word2vec 在遍历语料库时都会考虑单个词和滑动上下文窗口,这种设计来源于分布式假设,由语言学家 Zellig Harris 在1954年提出。它的核心思想是:“上下文相似的词具有相似的意义”(You shall know a word by the company it keeps)。即如果两个词在相似的上下文中出现,那么它们的意义可能也相似。 |
| 第40行: |
第40行: |
| | | | |
| | ==== CBOW ==== | | ==== CBOW ==== |
| − | CBOW(Continuous Bag of Words)模型是一种经典的'''词嵌入(Word Embedding)'''模型,由Mikolov等人在2013年提出,是Word2Vec的两种核心架构之一。CBOW通过上下文词汇预测当前词,从而学习词向量。CBOW的输入是目标词周围的上下文词汇(窗口内的相邻词),输出是对目标词V_t的预测。模型的结构分为三层,分别是输入层、嵌入层(Embedding)、输出层。 | + | CBOW(Continuous Bag of Words)模型是一种经典的'''词嵌入(Word Embedding)'''模型,由 Mikolov 等人在 2013 年提出,是 Word2Vec 的两种核心架构之一。CBOW 通过上下文词汇预测当前词,从而学习词向量。CBOW 的输入是目标词周围的上下文词汇(窗口内的相邻词),输出是对目标词 <math>V_t</math> 的预测。模型的目标是:'''根据上下文词汇预测中心词'''。设定窗口大小为 <math>2c</math>,即在目标词左右各取 <math>c</math> 个词作为上下文,那么对于中心词 <math>w_t</math>,其上下文为:<math>C_t = \{w_{t-c}, \ldots, w_{t-1}, w_{t+1}, \ldots, w_{t+c} \}</math>。模型的结构分为三层,分别是输入层、嵌入层(Embedding)、输出层。 |
| | | | |
| − | '''输入层:'''以上下文词的one-hot编码为输入向量w_t(维度为词汇表大小 V)。\alpha | + | '''输入层:''' |
| | + | |
| | + | 每个上下文词 <math>w_{t+i}</math> 以 one-hot 向量表示为: |
| | + | |
| | + | <math>\mathbf{x}_{t+i} \in \mathbb{R}^{|V|}</math> |
| | + | |
| | + | 其中 <math>|V|</math> 为词汇表大小。词向量通过嵌入矩阵 <math>W \in \mathbb{R}^{|V| \times N}</math> 得到: |
| | + | |
| | + | <math>\mathbf{v}_{t+i} = W^\top \mathbf{x}_{t+i}</math> |
| | | | |
| | '''嵌入层:''' | | '''嵌入层:''' |
| | | | |
| − | 将每个 输入向量与一个共享的嵌入矩阵W_{V*N}相乘,N为词向量的维度:
| + | 对上下文词向量求平均,获得上下文表示向量: |
| | + | |
| | + | <math>\mathbf{h}_t = \frac{1}{2c} \sum_{\substack{-c \le i \le c \\ i \ne 0}} \mathbf{v}_{t+i}</math> |
| | + | |
| | + | '''输出层:''' |
| | + | |
| | + | 设输出矩阵为 <math>W' \in \mathbb{R}^{|V| \times N}</math>,对应词 <math>w_j</math> 的输出得分为: |
| | | | |
| − | 求每个上下文词汇的向量求和(或者求平均)得到向量h:
| + | <math>u_j = \mathbf{v}'_j \cdot \mathbf{h}_t</math> |
| | | | |
| − | 输出层:
| + | 对所有词使用 softmax 得到目标词的预测概率: |
| | | | |
| − | 将嵌入层的输出向量与输出矩阵W'_{V*N}相乘得到输出向量,在通过softmax得到概率分布,来预测目标词汇,因此优化的目标就是最大化下式:<syntaxhighlight lang="tex">
| + | <math> |
| − | \frac{1}{T} \sum_{t=1}^{T} \log P(w_t \mid w_{t-c}, \ldots, w_{t-1}, w_{t+1}, \ldots, w_{t+c}) | + | P(w_t = j \mid C_t) = \frac{\exp(u_j)}{\sum_{k=1}^{|V|} \exp(u_k)} = \frac{\exp(\mathbf{v}'_j \cdot \mathbf{h}_t)}{\sum_{k=1}^{|V|} \exp(\mathbf{v}'_k \cdot \mathbf{h}_t)} |
| | + | </math> |
| | | | |
| − | </syntaxhighlight>最终所得到的词向量就包含在嵌入矩阵W或者输出矩阵W'中,也可以将两者所得到的向量进行平均得到最终的词向量。
| + | '''优化目标:''' |
| | | | |
| − | ==== '''Skip-gram 模型''' ====
| + | 最大化整个语料的预测对数概率,即最小化负对数似然损失函数(NLL): |
| − | Skip-gram 是 Word2Vec 的另一种核心模型,由 Mikolov 等人于 2013 年提出。与 CBOW(通过上下文预测中心词)不同,Skip-gram 是通过中心词预测上下文词,适合捕捉罕见词的语义,尤其在大规模语料上表现优异。Skip-gram的模型结构也分为三层:输入层、投影层、输出层。
| |
| | | | |
| − | '''输入层:'''一段文本中心词汇的one-hot编码作为输入向量。 | + | <math>\mathcal{L} = - \frac{1}{T} \sum_{t=1}^{T} \log P(w_t \mid C_t)</math> |
| | + | |
| | + | '''词向量提取:''' |
| | + | |
| | + | 训练完成后,词向量可以从输入嵌入矩阵 <math>W</math> 提取,也可以从输出矩阵 <math>W'</math> 提取,或者对两者进行平均得到最终词向量。 |
| | + | |
| | + | ===='''Skip-gram 模型'''==== |
| | + | Skip-gram 是 Word2Vec 的另一种核心模型,由 Mikolov 等人于 2013 年提出。与 CBOW(通过上下文预测中心词)不同,Skip-gram 是通过中心词预测上下文词,适合捕捉罕见词的语义,尤其在大规模语料上表现优异。Skip-gram的模型结构也分为三层:输入层、投影层、输出层。同样假设窗口大小为 <math>2c</math>,对于中心词 <math>w_t</math>,其上下文为:<math>C_t = \{w_{t-c}, \ldots, w_{t-1}, w_{t+1}, \ldots, w_{t+c} \}</math>。 |
| | + | |
| | + | '''输入层:'''一段文本中心词汇<math>w_t</math>的one-hot编码作为输入向量 <math>\mathbf{x}_t \in \mathbb{R}^{|V|}</math>。 |
| | | | |
| | '''投影层:''' | | '''投影层:''' |
| | | | |
| − | 输入向量与嵌入矩阵W_{V*N}相乘,得到词向量传入输出层中:
| + | 输入向量与嵌入矩阵 <math>W \in \mathbb{R}^{V \times d}</math> 相乘,得到词向量 <math>h</math>: |
| | + | <math>\mathbf{h} = W^\top \mathbf{v}</math> |
| | + | |
| | + | '''输出层:''' |
| | + | |
| | + | 对于上下文中每个词 <math>w_{t+j}</math>(<math>j \in \{-c,\ldots,-1,1,\ldots,c\}</math>),计算其预测概率: |
| | + | |
| | + | <math> |
| | + | P(w_{t+j} \mid w_t) = \frac{\exp(\mathbf{v}'_{w_{t+j}} \cdot \mathbf{v}_t)}{\sum_{w \in V} \exp(\mathbf{v}'_w \cdot \mathbf{v}_t)} |
| | + | </math> |
| | + | |
| | + | 其中,<math>W' \in \mathbb{R}^{|V| \times N}</math> 是输出权重矩阵,<math>\mathbf{v}'_w</math> 是对应词的输出向量。 |
| | | | |
| | + | '''优化目标:''' |
| | | | |
| − | 输出层:
| + | Skip-gram 通过最大化所有中心词和上下文词对的条件概率来训练模型,损失函数为负对数似然: |
| | | | |
| − | 与CBOW模型的输出层相同,也是一个softmax分类器,其目的是最大化中心词的上下文词汇的预测概率:
| + | <math> |
| | + | \mathcal{L} = - \frac{1}{T} \sum_{t=1}^T \sum_{\substack{-c \le j \le c \\ j \ne 0}} \log P(w_{t+j} \mid w_t) |
| | + | </math> |
| | | | |
| | + | '''词向量提取:''' |
| | | | |
| | 在Skip-gram中,词向量即为嵌入层之后所得到的向量,而不同于CBOW,Skip-gram的输出矩阵W'虽然也可以用来作为获得词向量的依据,但是其含义是中心词在上下文中的角色,在学习词汇之间关系的任务中可能使用W'作为词向量会有更好的表现。 | | 在Skip-gram中,词向量即为嵌入层之后所得到的向量,而不同于CBOW,Skip-gram的输出矩阵W'虽然也可以用来作为获得词向量的依据,但是其含义是中心词在上下文中的角色,在学习词汇之间关系的任务中可能使用W'作为词向量会有更好的表现。 |
| 第121行: |
第159行: |
| | =='''相关技术与扩展'''== | | =='''相关技术与扩展'''== |
| | | | |
| − | *GloVe(Global Vectors for Word Representation) | + | * GloVe(Global Vectors for Word Representation) |
| | *FastText | | *FastText |
| | *BERT 和 Transformer 模型 | | *BERT 和 Transformer 模型 |