爱丁堡大学的论文《N-gram language models for massively parallel devices》介绍了用于大规模并行设备的 N-gram 语言模型。机器之心技术分析师对该论文进行了解读。
论文:https://aclweb.org/anthology/P/P16/P16-1183.pdf
引言
这篇论文谈的是用于大规模并行设备(GPU)的 N-gram 语言模型,这是最早为 GPU 设计的语言模型(至少在这篇论文发表时是这样)。N-gram 语言模型的查询速度存在计算瓶颈,而且尽管 GPU 擅于计算,但在 GPU 上却并不好实现,因为还不存在针对 GPU 的已有的数据结构类型。这个问题导致我们无法完全发挥 GPU 的效力。
1 背景
也许有的读者并不真正了解 N-gram 模型是什么,因此首先我会先简要介绍一些基本概念:
N-gram 语言模型
参阅:https://lagunita.stanford.edu/c4x/Engineering/CS-224N/asset/slp4.pdf
为词序列分配概率的模型被称为语言模型(LM)。N-gram 是目前最简单的语言模型。N-gram 是 N 个词构成的序列:2-gram(bi-gram)是两个词构成的词序列,比如“please turn”;3-gram(tri-gram)是三个词构成的词序列,比如“please turn your”。
我们需要关注的有两点(至少这篇论文是这么说的):
- 给定之前的词,如何使用 N-gram 模型来估计 N-gram 中最后一个词的概率?
- 如何将概率分配给整个序列?
(注意:我们通常会丢弃“模型”这个词,这样 N-gram 既可表示词序列本身,也可表示为其分配概率的预测模型。这或许会产生一点术语歧义。)
对数概率
为什么为语言模型使用对数概率?因为(按照定义)概率是小于或等于 1 的,所以相乘的概率越多,所得到的积就会越小。乘上足够多的 N-gram 就会导致数值下溢。通过使用对数概率而非原始概率,我们能得到不会那么小的值。在对数空间中相加等效于在线性空间中相乘,这样我们就可以通过加法来将对数概率结合到一起。在对数空间中执行所有计算和存储是很方便的,如果我们想查看结果,只需要将结果转换到普通概率空间既可,即求该对数概率的指数:p1 × p2 × p3 × p4 = exp(log p1 +log p2 +log p3 +log p4)。