NLP之语言模型

语言模型(language model, LM)在自然语言处理中占有重要的地位,尤其在基于统计模型的语音识别、机器翻译、汉语自动分词和句法分析等相关研究中得到了广泛应用。目前主要采用的是n元语法模型(n-gram model),这种模型构建简单、直接,但同时也因为数据缺乏而必须采取平滑(smoothing)算法。

接下来主要介绍n元语法的基本概念和几种常用的数据平滑方法

目录

n元语法

语言模型性能评价

数据平滑

1.加法平滑方法

2.古德-图灵(Good-Turing)估计法

3.Katz平滑法

4.Jelinek-Mercer平滑方法

5.Witten-Bell平滑方法

6.绝对减值法

7.Kneser-Ney平滑方法

算法总结

平滑方法的比较

语言模型自适应方法

1.基于缓存的语言模型

2.基于混合方法的语言模型

3.基于最大熵的语言模型


n元语法

 一个语言模型通常构建为字符串s的概率分布p(s),这里p(s)试图反映的是字符串s作为一个句子出现的频率。例如,在一个刻画口语的语言模型中,如果一个人所说的话语中每100个句子里大约有一句是Okay,则可以认为p(Okay)≈0.01。而对于句子“An apple ate the chicken”我们可以认为其概率为0,因为几乎没有人会说这样的句子。需要注意的是,与语言学中不同,语言模型与句子是否合乎语法是没有关系的,即使一个句子完全合乎语法逻辑,我们仍然可以认为它出现的概率接近为零。

对于一个由l个基元(“基元”可以为字、词或短语等,以后我们只用“词”来通指)构成的句子s=w1w2…wl,其概率计算公式可以表示为:

我们可以看到,产生第i(1≤i≤l)个词的概率是由已经产生的i-1个词w1w2…wi-1决定的。一般地,我们把前i-1个词w1w2…wi-1称为第i个词的“历史(history)”。在这种计算方法中,随着历史长度的增加,不同的历史数目按指数级增长。如果历史的长度为i-1,那么,就有Li-1种不同的历史(假设L为词汇集的大小),而我们必须考虑在所有Li-1种不同的历史情况下,产生第i个词的概率。这样的话,模型中就有Li个自由参数p(wi|w1,w2,…,wi-1)。这使我们基本不可能从训练数据中正确地估计出这些参数。

因此,为了解决这个问题,可以将历史w1w2…wi-1按照某个法则映射到等价类E(w1w2…wi-1),而等价类的数目远远小于不同历史的数目。如果假定:

那么,自由参数的数目就会大大地减少。有很多方法可以将历史划分成等价类,其中,一种比较实际的做法是,将两个历史Wi-n+2…Wi-1Wi和V、Vk-n+2…Vk-1Vk映射到同一个等价类,当且仅当这两个历史最近的n-1(1≤n≤l)个词相同,即如果E(w1w2…wi-1wi)=E(v1v2…vk-1vk),当且仅当(Wi-n+2…Wi-1Wi)=(Vk-n+2…Vk-1Vk)。

满足上述条件的语言模型称为 n 元语法或 n 元文法(n-gram)。通常情况下,n 的取值不能太大,否则,等价类太多,自由参数过多的问题仍然存在。在实际应用中,取n=3的情况较多。当n=1时,即出现在第i位上的词wi独立于历史时,一元文法被记作unigram,或uni-gram,或monogram;当n=2时,即出现在第i位上的词wi仅与它前面的一个历史词wi-1有关,二元文法模型被称为一阶马尔可夫链(Markov chain),记作bigram或bi-gram;当n=3时,即出现在第i位置上的词wi仅与它前面的两个历史词wi-2wi-1有关,三元文法模型被称为二阶马尔可夫链,记作trigram或tri-gram。

以二元语法模型为例,根据前面的解释,我们可以近似地认为,一个词的概率只依赖于它前面的一个词,那么,

为了使得p(wi|wi-1)对于i=1有意义,我们在句子开头加上一个句首标记〈BOS〉,即假设w0就是〈BOS〉。另外,为了使得所有的字符串的概率之和等于1,需要在句子结尾再放一个句尾标记EOS〉,并且使之包含在等式(5-3)的乘积中(如果不做这样的处理,所有给定长度的字符串的概率和为1,而所有字符串的概率和为无穷大)。例如,要计算概率p(Mark wrote a book),我们可以这样计算:

为了估计p(wi|wi-1)条件概率,可以简单地计算二元语法wi-1wi在某一文本中出现的频率,然后归一化。如果用c(wi-1wi)表示二元语法wi-1wi在给定文本中的出现次数,我们可以采用下面的计算公式:

用于构建语言模型的文本称为训练语料(training corpus)。对于n元语法模型,使用的训练语料的规模一般要有几百万个词。公式(5-4)用于估计p(wi|wi-1)的方法称为p(wi|wi-1)的最大似然估计(maximum likelihood estimation, MLE)。

语言模型性能评价

评价一个语言模型最常用的度量就是根据模型计算出的测试数据的概率,或者利用交叉熵(cross-entropy)和困惑度(perplexity)等派生测度。 

对于一个平滑过的概率为p的n元语法模型,用公式(5-5)计算句子p(s)的概率。对于句子(t1,t2,…,tlT)构成的测试集T,可以通过计算T中所有句子概率的乘积来计算测试集的概率p(T)

交叉熵的测度可以利用预测和压缩的关系来进行计算。当给定一个语言模型,文本T的概率为p(T),可以给出一个压缩算法,该算法用-log2p(T)个比特位来对文本T编码。模型p的困惑度PPT(T)是模型分配给测试集T中每一个词汇的概率的几何平均值的倒数。显然,交叉熵和困惑度越小越好,这是我们评估一个语言模型的基本准则。

数据平滑

在上面的例子中,如果依据给定的训练语料S计算句子DAVID READ A BOOK的概率,有p(DAVID READ A BOOK)=0。显然,这个结果不够准确,因为句子DAVID READ A BOOK总有出现的可能,其概率应该大于0。如果p(s)=0,那么, p(s|A)也必然是0,这个结果意味着在语音识别中,不管给定的语音信号多么清晰,字符串s也永远不可能成为转写结果。这样,一旦出现使得p(s)=0的字符串s,就会导致识别错误。在其他自然语言处理任务中也会出现类似的问题。因而,必须分配给所有可能出现的字符串一个非零的概率值来避免这种错误的发生。

平滑(smoothing)技术就是用来解决这类零概率问题的。术语“平滑”指的是为了产生更准确的概率(在式(5-4)和式(5-6)中)来调整最大似然估计的一种技术,也常称为数据平滑(data smoothing)。“平滑”处理的基本思想是“劫富济贫”,即提高低概率(如零概率),降低高概率,尽量使概率分布趋于均匀。

例如,对于二元语法来说,一种最简单的平滑技术就是假设每个二元语法出现的次数比实际出现的次数多一次,不妨将该处理方法称为加1法。

  • 2
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
NLP(Natural Language Processing)大语言模型的学习路线可以分为以下几个步骤: 1. 基础知识学习:首先,你需要了解自然语言处理的基本概念和技术,包括文本预处理、词向量表示、语言模型等。可以通过阅读相关教材、参加在线课程或者观看相关视频来学习。 2. 编程技能学习:掌握一门编程语言(如Python)以及相关的机器学习和深度学习框架(如TensorFlow、PyTorch),这将有助于你实现和应用NLP模型。 3. 数据集获取与处理:寻找合适的NLP数据集进行实践和训练。常用的数据集包括IMDB电影评论、新闻语料库、问答数据集等。同时,你需要学习如何对文本数据进行预处理,包括分词、去除停用词、标注词性等。 4. 语言模型训练:选择一个合适的NLP语言模型(如GPT、BERT),并学习如何使用该模型进行训练。你可以使用已有的预训练模型进行微调,也可以从头开始训练一个新的模型。 5. 模型评估与优化:学习如何评估和优化你的NLP模型。常用的评估指标包括准确率、召回率、F1值等。你可以通过调整模型的超参数、增加训练数据、使用更复杂的模型结构等方式来提升模型性能。 6. 实际应用与项目实践:将所学的NLP知识应用到实际项目中,例如文本分类、情感分析、机器翻译等。通过实践项目,你可以更好地理解和掌握NLP技术,并提升自己的实践能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值