NLP的演进

rules → statistics → distributed representations → neural sequence models → pretrained LMs → general-purpose LLM systems

WordNet

rules方法

WordNet,人为构造一个词与词之间的语义关系网络

WordNet的缺点
缺少细微差别
缺少文字演进过程中诞生的新含义

discrete symbols

单词使用独热编码表示

独热编码表示带来的问题
所有单词都是相互正交的,不存在自然的相似性概念

为了将similarity带入words之间
尝试让词向量自己学习

Distributional semantics

分布式语义的核心概念:
A word’s meaning is given by the words that frequently appear close-by

word2vec

skip gram模型

skip gram模型是如何实现word vector 的学习?
设定一个context window,经典取值

中心词
上下文
取训练对,计算多个训练对
计算loss
反向传播
更新参数
使得真实上下文尽可能大

的计算公式

Vocabulary为从corpus中提取的所有候选词
o为context windows中的词,即真实上下文
c为中心词
U为w作为非中心词的向量
V为w作为中心词的向量

如何使用最大似然方法更新参数?
粗糙建模,将P(o|c)视为相互独立
对于整个语料库有似然函数

目标是将尽可能大,符合整个语料库的实际情况

考虑到最大化的计算过于困难,选择进行average negative log 操作

将最大化连乘运算变为最小化求和

为什么对进行average negative log,而不是negative log 操作?
average 归一化之后,不同大小的corpus/batch 可以直接比较loss
并且梯度的尺度不会随着数据量的增大而增大

为什么使用最大似然方法更新参数的时候,假设是独立发生的?
在自然语言中,context words并不是严格独立的
例如P(New, City)
真实情况下:

通常不等于:
但是优化这样的任务,过于困难
不如将看作相互独立,拆解成
实际上是一个建模问题,选择一个更简单,更好更新参数的模型,而不是更加符合语言学的困难模型

如何解决计算代价过高的问题?
每次计算一个corpus 的所有windows.
使用SGD就可以了

为什么同一个词使用两个不同的向量
?
出于工程上的考虑,这样比较好优化
一个词一个向量也是可行的,但是效果一般

如何从得到最后的词向量?
最简单的处理就是average
虽然看着粗糙,但是效果不错

negative sampling

skip gram中的softmax对计算要求太大

尤其是这里的分母,因此使用negative sampling优化

negative sampling为什么能减少运算量
不再对整个 vocabulary 做 softmax
窗口扫描corpus,每得到一个(c,o)真实词对,就用它配合几个负样本进行一次训练

skip gram with negative sampling
为什么本质上是一个二分类问题?
通过调整参数,尽量让真实p(o|c)接近1,而negative sampling 的p(o|c)接近0
与二分类问题类似

Co-occurrence vectors

共现矩阵的思路:
先使用统计的方法,统计所有的共现关系
构建共现矩阵
再从矩阵中提取低维表示

通过共现矩阵得到到词向量矩阵存在过于稀疏的问题
选择使用奇异矩阵的方法,将稀疏矩转化为稠密矩阵

为什么共现矩阵的sparsity issues 为什么会让模型 less robust?
统计为0,不代表两个词之间没有关系,可能只是corpus中没有出现

使用什么方法对共现矩阵进行压缩?
SVD

对共现矩阵进行SVD之前还需要做一些操作
scaling

  • log the frequencies ,抑制超高频共现的支配作用
  • min(X, t), with t ≈ 100 ,设置count上限
  • Ignore the function words, 忽略the, he, has, of, a...这类function words
    ramped
  • 根据距离调整权重,同一个window中近距离共现权重高于远距离共现
    Use correlations instead of counts
  • 不使用简单的count,而是统计实际共现是否明显高于按照词频预期的共现例如,而.如果使用count方法,认为bank,the的相关性更高于bank,loan,显然是错误的

Glove

如何将共现矩阵得到的概率关系转变为线性关系?
共现矩阵中表示表示词 和上下文词 的共现次数
有条件概率公式