Task2

文本预处理

文本是一类序列数据,一篇文章可以看作是字符或单词的序列,本节将介绍文本数据的常见预处理步骤,预处理通常包括四个步骤:

  • 读入文本
  • 分词
  • 建立字典,将每个词映射到一个唯一的索引(index)
  • 将文本从词的序列转换为索引的序列,方便输入模型
  • 用现有工具进行分词

前面介绍的分词方式非常简单,至少有以下几个缺点:

  • 标点符号通常可以提供语义信息,但是我们的方法直接将其丢弃了
  • 类似“shouldn’t", "doesn’t"这样的词会被错误地处理
  • 类似"Mr.", "Dr."这样的词会被错误地处理

可以通过引入更复杂的规则来解决这些问题,但是事实上,有一些现有的工具可以很好地进行分词,简单介绍其中的两个:spaCy和NLTK。

语言模型

Task2
不难理解就是统计学意义上的概率问题。注意一下随机采样与相邻采样之间的区别。
Task2

循环神经网络

Task2
使用 Pytorch 中的 nn.RNN 构造神经网络
Task2
Task2
所以需要裁剪梯度。
Task2
对于语言模型的评价,采用困惑度。
Task2

GRU

区别:

  • RNN存在问题:梯度容易出现衰减或者爆炸。
  • GRU:捕捉时间序列中时间步距离较大的依赖关系。

Task2

LSTMTask2

代码见

动手学深度学习PyTorch版