Language Modelling as Classification

  • 从分类器的角度看语言模型

  • 目标:设计分类器计算:

image.png

  • 输入:从第一个词到目前预测位置的词

  • 输出:在词汇表中找到下一个词

A Log-linear based Language Model

  • Log-Linear Model:使用softmax来概率化/归一化

image.png

  • 设计许多特征模板/函数 f∗() 来描述一段文本 x

  • y可以是给定单词的含义、给定书籍的类别或餐厅评论的正面/负面标签等等

An Intuitive Idea: N(ew)LM-0

  • 直观地,构建一个对数线性分类器,将 h1-hi−1 作为输入并输出单词标签 w∗

    1. 从单词 h1-hi−1 的历史中提取特征
    2. 尝试任何可能的单词标签 w
    3. 输出概率最高的 w∗i
  • 问题:

    1. 特征维度过大,不易应对可变长的位置表达
    2. 模型不容易优化
    3. label set过大
  • 特征跟位置有关,而位置难以表达

  • NLM-0(maximum entropy language models):设计了许多优化方法,但最终归结为最大熵梯度下降( stochasitc gradient descent)

  • Pros:没有zero-events,不依赖counting,是概率模型

  • Cons:没有更好的方法表示词,难以优化


Neural Language Models

Neural Networks

  • A basic neural network unit:

image.png

  • 加入提供非线性的函数,有点像log-liniear:

image.png

Non-Linear Activation Function

  • 可微分

  • domain宽一些而输出窄一些

  • Sigmoid:

image.png

  • tanh: elementwise hyperbolic tangent

image.png

  • ReLU: Rectified Linear Unit

image.png

  • 现在我们可以添加很多layers: linear, non-linear, linear, non-linear, linear, …
    1. layers越多,参数越多,计算量越大
    2. layers越多,可以越好的拟合训练数据
    3. layers越多,可以提高模型能力

Neural Language Model 1

  • Let’s build the first neural language model:linear, non-linear, linear, non-linear

image.png

  • parameters: b, A, W, T, u,M,可学习,但T与历史相关

  • vocabulary size: V = |V|, hidden size: H

  • b(V), A(∗,V), W(V,H), T(∗,H), u(H),word embeddings dim. d

Representing Words

  • bag-of-words和one-hot都并不好,希望对其进行压缩

  • w∗ 肯定是稀疏的,我们肯定可以将它们压缩/压缩成更短的向量,例如,d 维向量,其中 d 比 V 短得多——word embeddings:

    1. 找到 (V,d) 的矩阵 M 来存储这些向量
    2. V 中的第 i 个单词将表示为 (wi.T)M = mi,mi可以跟着模型一起训练
    3. mi,更短,更浓缩
  • 重要的是,可以将 (V,d) 的矩阵 M 视为参数,和LM一起训练。如果训练集够大,可以学很好的词的表示:

    1. 无需提前构建
    2. 无需额外的训练数据
    3. 可以学习 one-hot 之外的东西

image.png

  • 问题:仍然带有n,且Tj,Aj说明仍然存在窗口且A和T和位置相关,A和T的实际大小还要乘n - 1

  • 如果T去掉角标直接乘T,则退化为连续词袋模型。此时1~n-1的词与位置无关,都乘T

image.png

  • 问题:在没有GPU的年代做矩阵乘法计算慢,效率低

  • 单个参数不再具有具体的含义

image.png

  • 压缩参数量的方法:
    1. 强制A = 0,效果稍好,但是训练速度变慢
    2. 平均n-1个词,导致连续词袋模型,失去位置信息。但在辨析词义任务表现很好

image.png

  • 使得lookup table可训练更新,相似的词在词空间上表示相近

  • 但是仍然没有摆脱n-grams的限制

Training

  • 使用最大似然估计和随机梯度下降

  • 问题:训练过程非常缓慢

Characterizing Sequences

  • 由于embedding矩阵的存在,词的表示和位置强相关,当修饰发生变化,可能导致预测出现偏差

image.png

  • 因此能否想滤波器一样在词中找到想要的词,去掉不想要的词 -> 引入卷积

Neural Language Models 2

Convolutional Networks

  • 不再做马尔科夫假设

  • 历史可以很短也可以很长

  • 引入卷积和滑动窗口,在词中抽取特征

  • 模型仍然使用linear + non-linear的结构,并且加入更多层来提高性能

image.png

  • 超参数:layer层数、非线性函数f()、窗口大小、滤波器数量

image.png

  • 滑动窗口向前滑动,得到的表示成为新的输入X(1),然后再找一组滤波器继续上述过程得到X(2)……从而抽象出不同”分辨率”的特征

  • 滤波器可以作为参数来进行学习

  • X(l)[∗,m]可以被视为隐藏的状态向量(第m个词,第l层)

image.png

  • X(d)是一个变长的矩阵,和句子长度和历史相关(d(dim.) × (t − 1)(th
    word)),因此需要将变长的X(d)编程定长(方便分类任务) -> pooling

image.png

  • 使用场景:文章中小的区段,有关键词不需要长距离时,使用CNN效率高且效果好,CNN对局部的文字掌握更好

Neural Language Models 3

Recurrent Neural Network

  • 维护隐藏状态的vector,记忆历史中的关键信息

  • 在每个位置上引入了hidden vector,定长

  • 既考虑了历史信息,同时考虑了当前状态。根据设计忘记一些信息,记忆一些信息,更新一些信息,进行迭代

image.png

image.png

  • 训练目标:交叉熵,−logp(wi|h1:i−1)(叠乘,取log后变为叠加),在每个位置上做交叉熵然后相加

Issues with RNN

  • 朴素RNN的问题:
    1. 处理长句子训练速度过慢、
    2. 梯度传回的时候梯度下降非常快,更新剧烈忘得太多。因而随着序列变长hidden vector只更新附近的参数,长距离的梯度几乎不再更新,有梯度消失的问题

Improvements

  • 更新hidden state函数的参数太少,公式和结构过于简单

  • 如果不是语言模型可以进行双向建模(e.g.文本分类):stacking or bi-directional,引入了逆向的hidden state拼接起来

  • 引入新的机制取维持长期的记忆:

    1. long short-term memories (LSTMs): introduce additive connections, cell state and forget gate, input gate, and output gate
    2. gated recurrent units (GRUs): introduce additive connections, update gate and reset gate

Long Short-Term Memory

image.png

  • 引入门控机制:决定是否要遗忘或更新

Gated Recurrent Units

image.png

  • 两个门控:一个负责如何记忆,一个负责如何遗忘

Contextual Representations

  • 一个词可以有多个不同的含义,说明一个向量表示一个词可能是不够的

  • Go Deeper:

image.png

  • To train a neural LM: Left-to-Right and Right-to-Left:

image.png

  • BERT适合做完形填空,给定前后猜中间词

  • To train a neural LM: Left-to-Right:

image.png

  • To train a neural LM: Transfer to other tasks

image.png

  • Pre-training:

    1. Task 1: Masked LM:删除一些词,e.g.30%,让语言模型预测删去的词,说明可以理解语义
    2. Task 2: Next Sentence Prediction:给定两句话,预测哪句话在前哪句话在后,说明可以理解句子的逻辑以及篇章结构
  • 当参数很大,表示句子能力很强的时候,Task2意义不大

  • 可以习得一些常识性的知识

  • 微调Fine-Tuning需要标注数据