Kneser-Ney平滑在自然语言处理中的应用

引言

在自然语言处理(NLP)领域,语言模型是预测词序列概率的核心工具。其中,n-gram模型因其简单性和有效性而被广泛应用。n-gram模型通过分析词序列中前n-1个词来预测下一个词的出现概率。然而,由于训练语料的有限性,许多n-gram在训练集中未曾出现,导致数据稀疏问题。这使得直接使用最大似然估计(MLE)计算的概率不可靠,因为未出现的n-gram会被赋予零概率。为了解决这一问题,平滑技术被引入,旨在调整n-gram的概率估计,使未见的n-gram也能获得一定的概率值。

Kneser-Ney平滑是一种先进的平滑方法,以其在处理大数据集时的优异表现而闻名。它通过利用低阶n-gram的信息来平滑高阶n-gram的概率估计,从而更准确地反映语言的统计特性。本文将详细介绍Kneser-Ney平滑的原理、数学推导、实现方法,并通过一个简单示例展示其应用,最后讨论其优缺点及与其他平滑技术的比较。

n-gram语言模型与数据稀疏问题

n-gram语言模型

n-gram语言模型基于马尔可夫假设,即一个词的出现仅依赖于它前面的n-1个词。形式上,给定词序列 ( w 1 , w 2 , … , w m ) ( w_1, w_2, \ldots, w_m) (w1,w2,,wm),其联合概率可以表示为:

P ( w 1 , w 2 , … , w m ) = ∏ i = 1 m P ( w i ∣ w i − n + 1 , … , w i − 1 ) P(w_1, w_2, \ldots, w_m) = \prod_{i=1}^m P(w_i | w_{i-n+1}, \ldots, w_{i-1}) P(w1,w2,,wm)=i=1mP(wiwin+1,,wi1)

其中,条件概率 P ( w i ∣ w i − n + 1 , … , w i − 1 ) P(w_i | w_{i-n+1}, \ldots, w_{i-1}) P(wiwin+1,,wi1)通常通过最大似然估计(MLE)计算:

P ( w i ∣ w i − n + 1 , … , w i − 1 ) = C ( w i − n + 1 , … , w i ) C ( w i − n + 1 , … , w i − 1 ) P(w_i | w_{i-n+1}, \ldots, w_{i-1}) = \frac{C(w_{i-n+1}, \ldots, w_i)}{C(w_{i-n+1}, \ldots, w_{i-1})} P(wiwin+1,,wi1)=C(win+1,,wi1)C(win+1,,wi)

这里, C ( ⋅ ) C(\cdot) C() 表示n-gram在训练语料中的出现次数。

数据稀疏问题

由于训练语料的有限性,许多潜在的n-gram在训练集中未出现,即 C ( w i − n + 1 , … , w i ) = 0 C(w_{i-n+1}, \ldots, w_i) = 0 C(win+1,,wi)=0。这导致MLE将这些n-gram的概率估计为零,使得模型在预测未见过的词序列时失效。平滑技术的目标是通过重新分配概率质量,确保未出现的n-gram也能获得非零的概率估计。

Kneser-Ney平滑原理

Kneser-Ney平滑是一种基于折扣和回退的平滑方法,通过从高阶n-gram的计数中减去一个固定的折扣值,并将减去的概率质量分配给低阶n-gram。其核心思想是利用低阶n-gram的分布特性来改进高阶n-gram的概率估计。

高阶n-gram的概率估计

对于一个n-gram w i − n + 1 , … , w i w_{i-n+1}, \ldots, w_i win+1,,wi,Kneser-Ney平滑的概率估计公式为:

P KN ( w i ∣ w i − n + 1 , … , w i − 1 ) = max ⁡ ( C ( w i − n + 1 , … , w i ) − d , 0 ) C ( w i − n + 1 , … , w i − 1 ) + λ ( w i − n + 1 , … , w i − 1 ) P KN ( w i ∣ w i − n + 2 , … , w i − 1 ) P_{\text{KN}}(w_i | w_{i-n+1}, \ldots, w_{i-1}) = \frac{\max(C(w_{i-n+1}, \ldots, w_i) - d, 0)}{C(w_{i-n+1}, \ldots, w_{i-1})} + \lambda(w_{i-n+1}, \ldots, w_{i-1}) P_{\text{KN}}(w_i | w_{i-n+2}, \ldots, w_{i-1}) PKN(wiwin+1,,wi1)=C(win+1,,wi1)max(C(win+1,,wi)d,0)+λ(win+1,,wi1)PKN(wiwin+2,,wi1)

其中:

  • 是折扣参数,通常介于0和1之间,用于从计数中减去固定的概率质量。
  • λ ( w i − n + 1 , … , w i − 1 ) \lambda(w_{i-n+1}, \ldots, w_{i-1}) λ(win+1,,wi1)是归一化因子,确保概率之和为1,计算公式为:

λ ( w i − n + 1 , … , w i − 1 ) = d C ( w i − n + 1 , … , w i − 1 ) ⋅ N 1 ( w i − n + 1 , … , w i − 1 ∙ ) \lambda(w_{i-n+1}, \ldots, w_{i-1}) = \frac{d}{C(w_{i-n+1}, \ldots, w_{i-1})} \cdot N_1(w_{i-n+1}, \ldots, w_{i-1} \bullet) λ(win+1,,wi1)=C(win+1,,wi1)dN1(win+1,,wi1)

其中, N 1 ( w i − n + 1 , … , w i − 1 ∙ ) N_1(w_{i-n+1}, \ldots, w_{i-1} \bullet) N1(win+1,,wi1) 表示以 w i − n + 1 , … , w i − 1 w_{i-n+1}, \ldots, w_{i-1} win+1,,wi1开头的n-gram中,出现次数为1的n-gram的数量。

低阶n-gram的概率估计

对于最低阶的unigram,Kneser-Ney平滑采用一种独特的估计方法:

P KN ( w i ) = N ( ∙ w i ) N P_{\text{KN}}(w_i) = \frac{N(\bullet w_i)}{N} PKN(wi)=NN(wi)

其中:

  • N ( ∙ w i ) N(\bullet w_i) N(wi)表示 w i w_i wi 作为bigram结尾时,不同前缀词的数量。
  • N N N 是所有bigram类型的总数。

这种方法强调词在不同上下文中的“多样性”,而不是其在语料中的总频次,从而更合理地分配概率。

Kneser-Ney平滑示例

下面通过一个简单示例说明Kneser-Ney平滑的计算过程。

示例语料

假设有一个小型语料库,包含以下句子:

  1. I like to eat apples.
  2. I like to eat bananas.
  3. He likes to eat apples.

我们将计算bigram “like to” 的Kneser-Ney平滑概率,假设折扣参数 d = 0.5 d = 0.5 d=0.5

计算步骤

1. 计算计数
  • C ( "like to" ) = 2 C(\text{"like to"}) = 2 C("like to")=2(在第一句和第二句中出现)
  • C ( "like" ) = 2 C(\text{"like"}) = 2 C("like")=2(在第一句和第二句中"like"作为前缀)
2. 高阶项计算

max ⁡ ( C ( "like to" ) − d , 0 ) C ( "like" ) = max ⁡ ( 2 − 0.5 , 0 ) 2 = 1.5 2 = 0.75 \frac{\max(C(\text{"like to"}) - d, 0)}{C(\text{"like"})} = \frac{\max(2 - 0.5, 0)}{2} = \frac{1.5}{2} = 0.75 C("like")max(C("like to")d,0)=2max(20.5,0)=21.5=0.75

3. 低阶项计算

计算 P KN ( "to" ) P_{\text{KN}}(\text{"to"}) PKN("to")

  • N ( ∙ "to" ) N(\bullet \text{"to"}) N("to"):在语料中,“to” 作为bigram的结尾,其前缀词有 “like” 和 “likes”,因此 N ( ∙ "to" ) = 2 N(\bullet \text{"to"}) = 2 N("to")=2
  • 假设所有bigram类型总数 N = 10 N = 10 N=10(实际应统计得出,此处为简化假设)。
  • 则:
    P KN ( "to" ) = N ( ∙ "to" ) N = 2 10 = 0.2 P_{\text{KN}}(\text{"to"}) = \frac{N(\bullet \text{"to"})}{N} = \frac{2}{10} = 0.2 PKN("to")=NN("to")=102=0.2
4. 计算归一化因子 λ ( "like" ) \lambda(\text{"like"}) λ("like")
  • N 1 ( "like" ∙ ) N_1(\text{"like"} \bullet) N1("like"):以 “like” 开头的bigram中,“like to” 出现2次,假设无其他单次出现的bigram,则 N 1 ( "like" ∙ ) = 0 N_1(\text{"like"} \bullet) = 0 N1("like")=0。但为示例完整性,假设存在 “like something” 出现1次,则 N 1 ( "like" ∙ ) = 1 N_1(\text{"like"} \bullet) = 1 N1("like")=1
  • 则:
    λ ( "like" ) = d C ( "like" ) ⋅ N 1 ( "like" ∙ ) = 0.5 2 ⋅ 1 = 0.25 \lambda(\text{"like"}) = \frac{d}{C(\text{"like"})} \cdot N_1(\text{"like"} \bullet) = \frac{0.5}{2} \cdot 1 = 0.25 λ("like")=C("like")dN1("like")=20.51=0.25
5. 组合计算

P KN ( "to" ∣ "like" ) = 0.75 + 0.25 ⋅ 0.2 = 0.75 + 0.05 = 0.8 P_{\text{KN}}(\text{"to"} | \text{"like"}) = 0.75 + 0.25 \cdot 0.2 = 0.75 + 0.05 = 0.8 PKN("to""like")=0.75+0.250.2=0.75+0.05=0.8

因此,bigram “like to” 的Kneser-Ney平滑概率为0.8。

Kneser-Ney平滑的优缺点

优点

  • 低阶信息利用:通过回退机制有效利用低阶n-gram,改善未见n-gram的概率估计。
  • 大数据集表现:在大规模语料上,Kneser-Ney平滑通常比其他方法获得更低的困惑度(perplexity)。

缺点

  • 参数选择复杂:折扣参数 d d d 需要通过交叉验证等方法确定,增加了计算成本。
  • 实现难度:相比简单的平滑技术(如拉普拉斯平滑),其实现更为复杂。

与其他平滑方法的比较

常见的平滑方法包括:

  • 拉普拉斯平滑:为每个n-gram计数加1,简单但对大数据集效果有限。
  • Good-Turing平滑:调整低频n-gram计数,适用于小数据集,但在高阶n-gram中可能不稳定。
  • Witten-Bell平滑:基于回退,与Kneser-Ney类似,但在低阶概率估计上有所不同。

研究表明,Kneser-Ney平滑在语音识别、机器翻译等任务中表现优于上述方法。

总结

Kneser-Ney平滑通过折扣和回退机制,有效解决了n-gram模型中的数据稀疏问题。其在自然语言处理中的广泛应用得益于其对低阶信息的巧妙利用和在大数据集上的优异性能。尽管实现复杂,但其显著的性能提升使其成为语言建模领域的关键技术。

参考文献

  1. Chen, S. F., & Goodman, J. (1999). An empirical study of smoothing techniques for language modeling. Computer Speech & Language, 13(4), 359-394.
  2. Jurafsky, D., & Martin, J. H. (2020). Speech and Language Processing (3rd ed.). Prentice Hall.
  3. Kneser, R., & Ney, H. (1995). Improved backing-off for m-gram language modeling. Proceedings of ICASSP, 181-184.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/981210.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.2.3案例:电商订单日志每秒10万条写入优化

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 Elasticsearch批量写入性能调优实战:2.2.3 案例:电商订单日志每秒10万条写入优化1. 原始架构与瓶颈分析1.1 初始集群配置1.2 性能瓶颈定位 2. 全链路…

解决redis lettuce连接池经常出现连接拒绝(Connection refused)问题

一.软件环境 windows10、11系统、springboot2.x、redis 6 7 linux(centos)系统没有出现这问题,如果你是linux系统碰到的,本文也有一定大参考价值。 根本思路就是:tcp/ip连接的保活(keepalive)。 二.问题描述 在spr…

【开源项目-AI研发】ai-engineer-toolkit

项目地址(Fork: 40, Star: 301) GitHub - break-into-data/ai-engineer-toolkit: Projects & Resources to help you become a better AI Developer. 项目介绍 官方介绍:帮助你成为更好的 AI 开发者的工具和资源 项目本身是个表格&am…

白帽子讲Web安全资源下载

资源简介 本仓库提供《白帽子讲Web安全》一书的资源下载。这本书由阿里巴巴安全专家刺总编写,是网络安全领域的经典之作,对于从事网络安全工作的专业人士来说是必备的参考资料。 资源描述 书名: 白帽子讲Web安全作者: 阿里巴巴刺总适用人群: 网络安全…

深度学习架构Seq2Seq-添加并理解注意力机制(一)

第一章:人工智能之不同数据类型及其特点梳理 第二章:自然语言处理(NLP):文本向量化从文字到数字的原理 第三章:循环神经网络RNN:理解 RNN的工作机制与应用场景(附代码) 第四章:循环神经网络RNN、LSTM以及GR…

基于springboot的丢失儿童的基因比对系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 本丢失儿童的基因比对系统采用B/S架构,数据库是MySQL,网站的搭建与开发采用了先进的Java进行编写,使用了Spring Boot框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。用户主要功能包括:用户注册、登…

Mysql面试篇笔记:

优化: 1.如何定位慢查询: 首先压测接口,查看那个接口比较慢,可以通过多种工具,比如Skywaking 可以查看各个接口响应时间,查看接口最慢,然后去跟踪接口,查看详细信息&#…

嵌入式产品级-超小尺寸游戏机(从0到1 硬件-软件-外壳)

Ultra-small size gaming console。 超小尺寸游戏机-Pico This embedded product is mainly based on miniaturization, followed by his game functions are also very complete, for all kinds of games can be played, and there will be relevant illustrations in the fo…

计算机网络-实验四子网划分

三、实验内容及步骤 1.要求 【题目】某单位申请了⼀个 C 类⽹络,单位内部有3个部门,各部门约50台主机,需要划分为3个⼦⽹,各部门接⼊到汇聚交换机,在汇聚层进⾏路由连通。假定申请到的C类网络为200.200.200.0。 2.实…

deepseek+mermaid【自动生成流程图】

成果: 第一步打开deepseek官网(或百度版(更快一点)): 百度AI搜索 - 办公学习一站解决 第二步,生成对应的Mermaid流程图: 丢给deepseek代码,或题目要求 生成mermaid代码 第三步将代码复制到me…

SQL Server2022版+SSMS安装教程(保姆级)

SQL Server2022版SSMS安装教程(保姆级) 一,安装SQL Server数据库 1.下载安装包 (1)百度网盘下载安装包 链接:https://pan.baidu.com/s/1A-WRVES4EGv8EVArGNF2QQpwd6uvs 提取码:6uvs &#…

Pany-v2:LFI漏洞探测与敏感文件(私钥窃取/其他)自动探测工具

地址:https://github.com/MartinxMax/pany 关于Pany-v2 Pany-v2 是一款 LFI(本地文件包含)漏洞探测工具,具备自动识别敏感文件的能力。它能够利用 LFI 漏洞检测并提取 id_rsa 私钥、系统密码文件以及其他可能导致安全风险的敏感信息。该工具…

【音视频】视频基本概念

一、视频的基本概念 1.1 视频码率(kb/s) 视频码率是指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数据流进度也就越高 1.2 视频帧率(fps) 视频帧率…

三维数据可视化与表面重建:Marching Cubes算法的原理与应用

1. 引言 随着现代医学影像技术的飞速发展,三维数据的可视化与重建已成为医学研究、临床诊断和手术规划的重要工具。在众多三维重建算法中,Marching Cubes算法因其高效、稳定的特性成为从离散数据场中提取等值面的经典方法。本报告将深入探讨Marching Cu…

探秘基带算法:从原理到5G时代的通信变革【七】FFT/DFT

文章目录 2.6 FFT/DFT2.6.1 离散傅里叶变换(DFT)2.6.2 快速傅里叶变换(FFT)2.6.3 方法论与分类体系2.6.4 优缺点与应用2.6.5 实现细节 本博客为系列博客,主要讲解各基带算法的原理与应用,包括:v…

水仙花数(华为OD)

题目描述 所谓水仙花数,是指一个n位的正整数,其各位数字的n次方和等于该数本身。 例如153是水仙花数,153是一个3位数,并且153 13 53 33。 输入描述 第一行输入一个整数n,表示一个n位的正整数。n在3到7之间&#x…

《Python实战进阶》No 7: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战

第7集: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战 在现代 Web 开发中,实时通信已经成为许多应用的核心需求。无论是聊天应用、股票行情推送,还是多人协作工具,WebSocket 都是实现高效实时通信的最佳选择之一。本…

极简Redis速成学习

redis是什么? 是一种以键值对形式存储的数据库,特点是基于内存存储,读写快,性能高,常用于缓存、消息队列等应用情境 redis的五种数据类型是什么? 分别是String、Hash、List、Set和Zset(操作命…

ADC采集模块与MCU内置ADC性能对比

2.5V基准电压源: 1. 精度更高,误差更小 ADR03B 具有 0.1% 或更小的初始精度,而 电阻分压方式的误差主要来自电阻的容差(通常 1% 或 0.5%)。长期稳定性更好,分压电阻容易受到温度、老化的影响,长…

python数据容器切片

从一个序列中取出一个子序列 序列[起始位置:结束位置:步长] 起始位置和结束位置 省略,表示从头取到尾 步长省略表示1 步长负数,表示从后往前取 步长-1 等同于将序列反转了