python训练词库_在Python中训练NGramModel

首先,正如您对问题的评论中所指出的,如果培训/运行速度对您来说是一个问题,KenLM可能是更好的选择.此时nltk.model主要用于教育/原型设计,但它并不快.

如果您仍然决定坚持使用NLTK,请继续阅读.我碰巧是模型分支中新的NgramModel代码的作者,我会尝试清楚地说明你可以测试代码并让我知道你的想法.由于旧的实现中的a lot of critical bugs,我们不得不对模块进行大修,我们仍在调整新的设置.

目前在this doctest file中描述了改进模块的预期用途.尽管如此,我将快速回顾工作流程的主要更改,因为它与旧版本有很大不同.

如果您对我们如何提出新工作流程感兴趣,请参阅this thread.

最重要的是要记住,训练ngram模型现在明确分为以下3个步骤.

1.建立词汇

当ngram模型遇到训练期间没有看到的单词时,旧实现中出现了一些最烦人的错误.解决这个问题的传统方法是在开始训练之前创建一个“已知”标记(单词)词汇表.

当你训练你的ngram模型时,你在词汇表中查找标记并在它们存在时增加它们的计数,否则增加计数器以获得特殊的UNKNOWN标记.我们的想法是,如果您在测试期间遇到看不见的令牌,您可以使用UNKNOWN的计数来估算其得分.

可以使用您训练的数据以外的数据创建此词汇表.例如,你的词汇可能来自Gigaword语料库,但你只训练你的模型华尔街日报.

使用nltk.model.build_vocabulary函数.

2.训练=计算Ngrams

你有没有想过当你“训练”一个ngram模型时究竟发生了什么?从本质上讲,培训模型实际上归结为简单地计算文本中的ngrams.当然,这还涉及将文本分解为ngrams并根据您在上一步中创建的词汇检查令牌.

适当命名的nltk.model.count_ngrams函数在您完成此任务时是您的朋友.它返回NgramCounter类的一个实例,它试图提供一个清晰的接口来访问/更新ngram计数.

3.从计数到分数(更新)

这是整个过程的最终目标,在给定某些上下文的情况下获得类似于令牌的概率.

这部分模块仍在进行中,现在只有MLE,Lidstone和Laplace估算器. doctest文件中简要介绍了它们的用法.

如果你想使用不同的估算器,你必须为它编写自己的类.但是,我试图让它变得非常容易.此外,您可以将您的作品提交给NLTK并成为贡献者!

以下是您定义自己的估算器的方法:

>创建一个继承自BaseNgramModel的类.

>在此类中实现您自己的score方法,该方法使用ngram_counts属性来访问计数.

随意从ngram.py中已定义的模型中获取灵感.

这是基本MLE评分的示例实现:

from nltk.model import BaseNgramModel

class MLENgramModel(BaseNgramModel):

def score(self, context, word):

# how many times word occurs with context

ngram_count = self.ngrams[context][word]

# how many times the context itself occurred we take advantage of

# the fact that self.ngram[context] is a FreqDist and has a method

# FreqDist.N() which counts all the samples in it.

context_count = self.ngram[context].N()

# In case context_count is 0 we shouldn't be dividing by it

# and just return 0

if context_count == 0:

return 0

# otherwise we can return the standard MLE score

return ngram_count / context_count

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内推!字节、阿里、网易火热招聘中,内推优筛简历,快人一步拿offer,真香!(送内推码)...

全世界只有3.14 % 的人关注了爆炸吧知识“金三银四”可谓招聘的黄金期。一方面,校园春招正如火如荼的进行中,另一方面,各大企业也纷纷启动了暑假实习招聘。对于2020届的同学来说,务必要利用好“应届生”这个身份,把握住…

如何将10进制转成16进制,又如何将16进制数转成10进制,C#和VB代码?

方法1: int d10; d.ToString("x") //或把x改为X,,,就变成了16位的字符串了. int xConvert.ToInt32(d.ToString("x"),16);/&a…

C#怎么测试静态方法?我给出了2种方案

问题假设有一个方法需要判断当前小时范围&#xff0c;代码如下&#xff1a;public class Class1 {public bool SomeMethod(){var hour DateTime.Now.Hour;if (hour > 9 && hour < 12){return true;}return false;} }但是&#xff0c;在做单元测试时&#xff0c;…

关于Tomcat5.5中EL表达式无效的解决办法

问题&#xff1a; 在Tomcat5.5中&#xff0c;JSP页中使用EL表达式输出信息&#xff0c;例如&#xff1a; <% page language”java” import”java.util.*” pageEncoding”UTF-8″%><html><head>EL表达式</head><body>${header["User-Agent…

c语言全局变量和局部变量问题汇总

1、局部变量是否能和全局变量重名&#xff1f; 答&#xff1a;能&#xff0c;局部会屏蔽全局。要用全局变量&#xff0c;须要使用"::" 局部变量能够与全局变量同名&#xff0c;在函数内引用这个变量时&#xff0c;会用到同名的局部变量&#xff0c;而不会用到全局变…

本科4篇顶会论文如何做到?清华特奖高天宇干货分享:我是这样写论文、做实验、与导师相处...

全世界只有3.14 % 的人关注了爆炸吧知识本科生&#xff0c;距离“科研”有多远&#xff1f;有人还处在“小朋友你是否有很多问号”的状态&#xff0c;但也有人本科就连发顶会文章&#xff0c;光环闪瞎众人。其中可有什么秘诀&#xff1f;清华本科特奖获得者、清华计算机大四学生…

java final 修改_“无法改变的设计”——浅谈Java中的final关键字

在Java中&#xff0c;final关键字可以用来修饰类、变量(包括成员变量和局部变量)、方法&#xff0c;下面从这三个方面分别说明。final方法当一个方法被final修饰时&#xff0c;表明这个方法不能被子类重写。下面程序试图重写final方法&#xff0c;将会引发编译错误。public cla…

数据库日志的说明

清日志 如 dump transaction 数据库名 with no_log --清除日志backup log 数据库名 with no_log --截断事务日志dbcc shrinkdatabase(数据库名,10) --收缩的数据库&#xff0c;空出10%的空间来 先执行上面两句&#xff0c;这两句比较快…

.NET 6 预览版 7 Released

.NET 6 预览版 7 ReleasedRichard 2021 年 8 月 10 日我们很高兴发布 .NET 6 Preview 7。这是我们进入&#xff08;两个&#xff09;发布候选 (RC) 期之前的最后一次预览版本。在我们放慢发布速度之前&#xff0c;团队经常加班夜战来保证最后一组功能。在这个版本中&#xff0c…

孝顺孝顺,孝不如顺

摘自西西河&#xff1a;http://www.ccthere.com/article/3044112&#xff0c;作者&#xff1a;抱朴仙人 刚说到一把年纪还要被老爹教育&#xff0c;忽然发现河里颇有几位难友&#xff0c;呵呵。 话说这个孝道&#xff0c;一直是包括“赡养”和“陪伴”两个方面的&#xff0c;也…

一致性 hash 算法( consistent hashing )

consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出&#xff0c;目前在cache 系统中应用越来越广泛&#xff1b; 1 基本场景 比如你有 N 个 cache 服务器&#xff08;后面简称 cache &#xff09;&#xff0c;那么如何将一个对象 obje…

复工之后,如何让自己的时间更值钱

全世界只有3.14 % 的人关注了爆炸吧知识时间最不偏私给任何人都是二十四小时时间也最偏私给任何人都不是二十四小时而如何让自己的时间更值钱以下公众号或许能给你一些启示赶快扫码关注吧&#xff01;RSS精选ID&#xff1a;KindleNewsRSS精选是一个专注于时间管理iOS相关及Kind…

selenium autoit java_Java+Selenium——AutoIt工具处理文件上传

关于文件上传&#xff0c;这边介绍一个第三方工具&#xff0c;叫AutoIt&#xff0c;简单来说&#xff0c;这个是一个能支持桌面GUI自动化的工具&#xff0c;它支持脚本语言编写。这里&#xff0c;我们用AutoIt来做文件上传的演示。在Selenium脚本中如果需要AutoIt来协助这个文件…

Blazor+Dapr+K8s微服务之开发环境调试

1 安装Dapr开发调试环境1.1 Dapr 完整安装模式不支持开发调试在上一篇随笔《BlazorDaprK8s微服务之服务调用》中&#xff0c;我们通过为每个微服务运行dapr run ….dotnet run命令&#xff0c;以自宿主的方式在本地开发环境成功运行了服务调用的例子。但是&#xff0c;这种运行…

也谈cacti整合nagios(centos)

花了近一天的时间整合了cacti和nagios&#xff0c;cacti用来检测运行状态nagios主要用来预警。期间参考了很多网友的文章&#xff0c;在此感谢下&#xff01;在这里记录一下配置过程&#xff0c;以备后忘。。说整合其实只是表面的&#xff0c;cacti和nagios还是以他们原来的方式…

cursor 的moveToFirst和moveToNext和moveToPrevious以及moveToLast

查询出来的cursor的初始位置是指向第一条记录的前一个位置的&#xff0c;cursor.moveToFirst&#xff08;&#xff09;指向查询结果的第一个位置。一般通过判断cursor.moveToFirst()的值为true或false来确定查询结果是否为空。cursor.moveToNext()是用来做循环的&#xff0c;一…

这10个人,总是牛逼的无话可说

全世界只有3.14 % 的人关注了爆炸吧知识终于迎来知识君最喜欢的工作日了。热爱工作的知识君还是在认真地看书&#xff0c;码字。哈哈哈&#xff0c;有模友知道看得是什么书然而在拍完照片后&#xff0c;还是得想想今晚该写些啥东西。狄拉克 保罗狄拉克(Paul Adrien Maurice …

WebSocket服务器(物联网下行通知神器)

HttpServer是一个轻量级Web服务器&#xff0c;用于在嵌入式设备以及客户端环境中提供简单Web服务&#xff0c;同时也支持标准WebSocket服务。本文例程基于vs2022&#xff0c;基础例程可参考&#xff1a;https://www.yuque.com/smartstone/nx/httpserverWebSocket服务端WebSocke…

SCCM 2007系列教程之三日志文件

Microsoft System Center Configuration Manager 2007 中的所有客户端和站点服务器组件都将过程信息记录在单个日志文件中。您可以使用客户端和站点服务器日志文件中的信息来帮助您诊断在 Configuration Manager 2007 层次结构中可能出现的问题。默认情况下&#xff0c;Configu…

Unix常用命令

第一章 目录及文件操作命令 1.1 ls [语法]&#xff1a; ls [-RadCxmlnogrtucpFbqisf1] [目录或文件......][说明]&#xff1a; ls 命令列出指定目录下的文件&#xff0c;缺省目录为当前目录 ./&#xff0c;缺省输出顺序为纵向按字符顺序排列。-R 递归地列出每个子目录的内容-…