自然语言处理(NLP)的发展与关键技术:从词义到大模型
词义表示的进化:从规则到分布式语义
WordNet 近义词表示
早期的NLP系统依赖人工构建的规则和词典,如 WordNet。这类工具通过同义词集合和上下位关系 (Hyponymy) 描述词义,例如将“proficient”标记为“good”的同义词。然而,这种方法存在明显局限:
- 静态性:无法捕捉新兴含义(如“wicked”在俚语中的“酷”意);一些单词仅在特定情况下意义相近
- 主观性:词语意义需要人工界定
- 实时性:依赖人工标注,更新缓慢;
- 缺乏相似性计算 :无法量化“hotel”和“motel”的语义相似度。
Localist: One-Hot 编码与词袋模型
2013 年前,NLP 普遍采用 One-Hot 编码 表示词汇,即用高维稀疏向量(如长度为 10 万的向量中仅一个位置为 1)表示单词。这种“局部表示”导致:
- 维度灾难 :10 万词汇需 10 万维空间;
- 零相似性 :正交向量无法反映词义关联(如“hotel”与“motel”)。
Distributed Semantics 与 Word2Vec
Word2Vec 是一种通过无监督学习生成词向量的工具,其核心思想是基于词的上下文共现规律,将词映射到低维稠密向量空间中,使得语义相似的词在向量空间中距离较近。主要有两种模型:一种是根据上下文推理中心词的 CBOW 模型,另一种是根据中心词推理上下文的 Skip-Gram 模型。
这里的 Word Vector 也被称为 Word Embedding 或者 Word Representations
Skip Gram
给定上下文长度为 m,对于样本数据中心词为 wt,其上下文为 wt−m,…,wt+m,Skip Gram 训练的目标就是最大化上下文词的条件概率
j=−m∏mP(wt+j∣wt)对于全部语料库,那么就要最大化每一个这样的中心词和上下文的条件概率,把他们乘起来(假设 Skip Gram 的参数为 θ)
这里的 θ 其实是一个矩阵。假设我们把词汇编码为 d 维稠密向量,词汇表大小为 V,则 θ 的大小应该为 R2dV,我们这里直接把 θ 当作词汇表来看。
其本质是一个将词汇映射到 embedding 空间的函数 f:{0,1}V↦Rd。要取出 vi 向量,可以通过矩阵乘法,设置每一行为 1、其余全部置 0 来取出这一行的词向量,相当于 θ 乘上了一个常数。
即 vw=θTCv(w),uw=θTCu(w),这里的 Cv,Cu 可以是 w 的 One-Hot Vector.
θ=θargmaxt=1∏T−m≤j≤m∏j=0Pθ(wt+j∣wt)这也等同于最小化其负对数
θ=θargminJ(θ)=θargmin−T1t=1∑T−m≤j≤m∑j=0logPθ(wt+j∣wt)这里概率的计算就是老套路 softmax 了,我们把整个词汇库的 context vector 和当前词的中心词向量点乘起来,做 softmax(这里用 o 表示上下文词,uw 表示单词 w 作为上下文时的向量,vw 表示 w 作为中心词时的向量)
P(o∣c)=∑w∈Vexp(uwTvc)exp(uoTvc)于是损失函数 J(θ) 变成了
J(θ)=−T1t=1∑T−m≤j≤m∑j=0(uoTvc−logw∈V∑exp(uwTvc))