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 维的 projection
- 4096 dim hidden/cell LSTM状态,使用 512 dim的对下一个输入的投影 使用残差连接
- 绑定 token 的输入和输出的参数(softmax),并将这些参数绑定到正向和反向LMs之间
ULMfit
- 在大型通用领域的无监督语料库上使用 biLM 训练
- 在目标任务数据上调整 LM
- 对特定任务将分类器进行微调
ULMfit emphases
- 使用合理大小的“1 GPU”语言模型,并不是真的很大
- 在LM调优中要注意很多不同的每层学习速度
- 倾斜三⻆形学习率(STLR)计划
- 学习分类器时逐步分层解冻和STLR
- 使用 [hT,maxpool(h),meanpool(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 的方式进行整个上下文的预测,使用了双向的上下文信息