开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情
语言模型
语言模型解决的问题
- 计算一句话(语言序列,有序的)的概率
- 计算下一个词可能是什么
两类语言模型
统计语言模型
- 统计语言模型:用统计的方法(条件概率)解决语言模型的问题
n元语言模型(马尔科夫链)
- 如果字典特别大,那上一个公式的计算会非常困难。
- 利用马尔科夫链的思想:假设下一个词只与它之前的n个词相关,此时的语言模型就称为n元语言模型,如n=2,则为二元语言模型。通过马尔科夫链改写后的公式计算变得非常简单
平滑策略
- 由于文本数据是自制的,可能会出现数据稀疏的情况,如测试时出现了训练时未出现过的单词,会出现公式的概率值计算为0的情况。
- 为了避免这个情况,通常会采用平滑策略。如在分子和分母都加入一个非0的正数,最简单方法就是分子加1,分母加上字典的长度。
神经网络语言模型
- 神经网络语言模型:用神经网络模型解决语言模型的问题
- 下图为预测第n个单词任务的神经网络模型,输入是待预测单词的前n-1个单词,一共有三层:
- 第一层为输入层:将前n-1个单词使用onehot编码作为原始单词输入,之后乘以一个随机初始化矩阵Q获得词向量
- 第二层为隐藏层:包含h个隐变量,激活函数tanh
- 第三层为输出层:一共有(字典大小)个输出节点,每个节点是字典中每个单词的概率值
- 我们可以发现,通过设置矩阵的大小,可以获得任意大小的词向量,并且相似词之间的词向量也有关系。可以说词向量是这个神经网络的模型的副产品,之后就出现很多模型专门用于学习词向量(如word2vec,Glove,bert等)。
- 预训练模型的目标就是学习这个矩阵,让通过它计算得到的词向量能更好的表达语义。
预训练
什么是预训练
- 在图像分类任务中,卷积神经网络模型一般有多个层级结构组成,不同层学习到图像不同的特征。将不同层的特征表示提取可视化出来可以发现:在不同的分类任务中,不同分类模型中越浅的层学习到的特征是十分相似的,即浅层学习到参数是可以通用的。预训练就是基于浅层参数可以通用这一思想产生的,即利用一系列的任务去学习到浅层的参数
- 在为某个任务设计一个神经网络时,可以通过在已经训练好的预训练模型后面添加其他网络层去构建神经网络模型,这种方式可以加快模型的训练速度,并且对数据集的要求更小
预训练方法
冻结
- 使预训练模型的参数保持不变(冻结),重新训练后面的层
微调
- 预训练模型和后面的层的参数一起重新训练