目录
一、语言模型是做什么的?
给定一个文本序列,x1,x2,...,xt,语言模型的目标是估计联合概率p(x1,x2,...,xt)。
理解:例如,短语“to recognize speech”和“to wreck a nice beach”读音上听起来非常相似。 这种相似性会导致语音识别中的歧义,但是这很容易通过语言模型来解决, 因为第二句的语义很奇怪。 同样,在文档摘要生成算法中, “狗咬人”比“人咬狗”出现的频率要高得多。
二、思路实现
模型的输入是有限的,当序列变得太长而不能被模型一次性全部处理时, 我们可能希望拆分这样的序列方便模型读取,接下来说明应该如何提取特定时间步数的批量序列作为数据集训练语言模型。
假设网络一次只处理具有n个时间步的子序列。当我们需要从一个很长的文本中提取特定长度的子序列时,往往需要先随机生成一个初始偏移量,只要将这个偏移量的随机生成范围取值在[0, n),那么我们就可能从给定长文本中提取得到所有组合的子序列。如下图所示,分割文本时,不同的偏移量会导致不同的子序列。
那么我们应该从上图中选择哪一个呢? 事实上,他们都一样的好。 然而,如果我们只选择一个偏移量, 那么用于训练网络的、所有可能的子序列的覆盖范围将是有限的。 因此,我们可以从随机偏移量开始划分序列, 以同时获得覆盖性(coverage)和随机性(randomness)。 下面,我们将描述如何实现随机采样(random sampling)和