Good-turning估计

本文介绍了一种解决统计预言模型中数据稀疏问题的方法——古德图灵估计。通过重新分配概率质量给未出现过的词汇,使得模型更加平滑,并有效地降低了数据稀疏度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

吴军数学之美又看了一遍,写的有深有浅,比如这次,有不同的感觉。


统计预言模型的数据稀疏问题解决方案–古德图灵估计
接上
这里引入Good-turning估计
Good-turning的主要思想是从概率的总量中分配少量的比例给零概率项。
假定在语料库中出现 r 次数的词有Nr个,则有

N=r=1rNr

r 较小时,我们使用dr代替 r ,这里dr<r, dr 的值可由下式表示
dr=(r+1)Nr+1Nr

这样可以保证
N=rdrNr

这里我们考虑一个经验,一般来说 r 越大,词的数量Nr就越小,即验证了上述 dr<r d0>0 .这样的代替可以让数据稀疏度有效的降低,所有词的概率估计会看起来很平滑。

任务描述 本关任务:实现二元语言模型的数据平滑,并利用平滑后的数据计算句子概率。 相关知识 为了完成本关任务,你需要掌握:1.模型平滑化。2.good-turning平滑。 模型平滑 在使用语言模型直接计算某个句子出现的概率时,可能会由于某个单词或单词对出现的概率为0而导致整个句子出现的概率为0。 例如下面这个场景: 在上面的场景中,由于部分单词对出现的概率为0,导致最终两句话出现的概率均为0。但实际上,s1=“今天没有训练营”比s2=“今天训练营没有”更符合语法习惯,我们也更希望计算出来的P(s1)大于P(s2)。 一般来说,语言模型的平滑处理可分为以下三类: Discounting(折扣):通过给概率不为0的项打折扣,来提高概率为0的项的概率; Interpolation(插值):在使用N-gram模型计算某一项的概率时,同时结合低阶的模型所计算出的概率; Back‐off:approximate counts of unobserved N‐gram based on the proportion of back‐off events (e.g., N‐1 gram)。 这里我们主要介绍与使用Discounting中的good-turning平滑方法。 good-turning平滑 Good-Turing技术是在1953年由古德(I.J.Good)引用图灵(Turing)的方法而提出来的,其基本思想是:用观察计数较高的N元语法数重新估计概率量的大小,并把它指派给那些具有零计数或者较低计数的N元语法。涉及的符号含义为: c:某个N元语法出现的频数。 Nc:出现次数为c的 N-gram 词组的个数,是频数的频数 c*:Good-Turing平滑计数 设N为测试元组集合中元组的数目,则有如下公式: 通过新频数可计算出经过good-turing平滑后的元组概率,公式如下: 编程要求 根据提示,在右侧编辑器补充代码,编写平滑函数,计算句子的概率 测试说明 平台会对你编写的代码进行测试: 语料库: 研究生物很有意思。他大学时代是研究生物的。生物专业是他的首选目标。他是研究生。 测试输入:他是研究物理的 预期输出:5.6888888888888895e-05 开始你的任务吧,祝你成功! import jieba #语料句子 sentence_ori="研究生物很有意思。他大学时代是研究生物的。生物专业是他的首选目标。他是研究生。" #测试句子 sentence_test=input() #任务:编写平滑函数完成数据平滑,利用平滑数据完成对2-gram模型的建立,计算测试句子概率并输出结果 # ********** Begin *********# # ********** End **********#
最新发布
03-29
### 微调的概念 微调是指利用针对性的小规模、有标签的数据集,调整模型参数以使其更好地适应并精准完成特定任务,如文本分类、问答、机器翻译、情感分析等[^2]。 ### 应用场景 微调广泛应用于自然语言处理领域内的各种具体任务。例如,在文本分类中,经过微调后的模型能够更精确地区分不同类别的文档;在问答系统里,则可以提高对于问题理解以及答案提取的能力;而在机器翻译方面,也能增强目标语言表达准确性。 ### 方法概述 #### 预训练阶段 首先,使用大规模的数据集对模型进行预训练,使模型学习到通用的语言特征和知识[^3]。 #### 任务特定数据集准备 接着,准备一个与目标任务相关的数据集,这个数据集通常比预训练使用的数据集小得多。 #### 模型调整 在此基础上,根据新任务的需求进行必要的结构调整,比如添加新的层(如分类层)、修改输出层等。 #### 微调训练 随后,采用任务特定数据集对模型实施进一步的训练过程——即所谓的“微调”。此过程中会运用反向传播算法来优化那些已经由预训练获得的知识表示,使之更加贴合当前的具体需求。 ```python import torch from transformers import BertForSequenceClassification, Trainer, TrainingArguments model = BertForSequenceClassification.from_pretrained('bert-base-uncased') training_args = TrainingArguments( output_dir='./results', num_train_epochs=3, per_device_train_batch_size=8, ) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=val_dataset ) trainer.train() ``` #### 评估与迭代 最后一步是在验证集上测试模型表现,并依据反馈不断改进直至达到满意效果为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值