CS22n Lecture 13 Contextual Word Representations and Pretraining
Reflections on word representations
Tips for unknown words with word vectors
训练时:词汇表 Vocab 为{ words occurring, say, $\geq$5 times}
⋃
\bigcup
⋃ {< UNK >}将所有罕⻅的词(数据集中出现次数小于 5)都映射为< UNK >,为其训练一个词向量运行时:使用< UNK >代替词汇表之外的词OOV
Representations for a word
存在两个大问题
对于一个 word type 总是是用相同的表示,不考虑这个 word token 出现的上下文
比如 star 这个单词,有天文学上的含义以及娱乐圈中的含义我们可以进行非常细粒度的词义消歧 我们对一个词只有一种表示,但是单词有不同的方面,包括语义,句法行为,以及表达 / 含义
表达:同样的意思可以是用多个单词表示,他们的词义是一样的
ELMo
Tag LM
与上文无关的单词嵌入 + RNN model 得到的 hidden states 作为特征输入Char CNN / RNN + Token Embedding 作为 bi-LSTM 的输入得到的 hidden states 与 Pre-trained bi-LM(冻结的) 的 hidden states 连接起来输入到第二层 的 bi-LSTM 中
Named Entity Recognition (NER)
一个非常重要的NLP子任务:查找和分类文本中的实体
Embeddings from Language Models
word token vectors or contextual word vectors 的爆发版本使用⻓上下文而不是上下文窗口学习 word token 向量(这里,整个句子可能更⻓)学习深度Bi-NLM,并在预测中使用它的所有层训练一个双向LM目标是 performant 但LM不要太大
使用2个biLSTM层(仅)使用字符CNN构建初始单词表示2048 个 char n-gram filters 和 2 个 highway layers,512 维的 projection4096 dim hidden/cell LSTM状态,使用 512 dim的对下一个输入的投影 使用残差连接绑定 token 的输入和输出的参数(softmax),并将这些参数绑定到正向和反向LMs之间 ELMo学习biLM表示的特定任务组合这是一个创新,TagLM 中仅仅使用堆叠LSTM的顶层,ELMo 认为BiLSTM所有层都是有用的
ULMfit
在大型通用领域的无监督语料库上使用 biLM 训练在目标任务数据上调整 LM对特定任务将分类器进行微调
ULMfit emphases
使用合理大小的“1 GPU”语言模型,并不是真的很大在LM调优中要注意很多
不同的每层学习速度倾斜三⻆形学习率(STLR)计划学习分类器时逐步分层解冻和STLR使用
[
h
T
,
m
a
x
p
o
o
l
(
h
)
,
m
e
a
n
p
o
o
l
(
h
)
]
[h_T,maxpool(h),meanpool(h)]
[hT,maxpool(h),meanpool(h)] 进行分类 使用大型的预训练语言模型是一种提高性能的非常有效的方法
BERT
问题:语言模型只使用左上下文或右上下文,但语言理解是双向的
为什么LMs是单向的?
原因1:方向性对于生成格式良好的概率分布是有必要的
我们不在乎这个
原因2:双向编码器中单词可以“看到自己”
解决方案:mask out k % 的输入单词,然后预测 masked words
不再是传统的计算生成句子的概率的语言模型,目标是填空
总是使用k = 15%
GPT 是经典的单项的语言模型
ELMo 是双向的,但是两个模型是完全独立训练的,只是将输出连接在一起,并没有使用双向的 context
BERT 使用 mask 的方式进行整个上下文的预测,使用了双向的上下文信息