开源自然语言处理工具包hanlp中CRF分词实现详解


 CRF简介

CRF是序列标注场景中常用的模型,比HMM能利用更多的特征,比MEMM更能抵抗标记偏置的问题。

[gerative-discriminative.png] 

CRF训练

这类耗时的任务,还是交给了用C++实现的CRF++。关于CRF++输出的CRF模型,请参考《CRF++模型格式说明》。 

CRF解码

解码采用维特比算法实现。并且稍有改进,用中文伪码与白话描述如下:

首先任何字的标签不仅取决于它自己的参数,还取决于前一个字的标签。但是第一个字前面并没有字,何来标签?所以第一个字的处理稍有不同,假设第0个字的标签为X,遍历X计算第一个字的标签,取分数最大的那一个。

如何计算一个字的某个标签的分数呢?某个字根据CRF模型提供的模板生成了一系列特征函数,这些函数的输出值乘以该函数的权值最后求和得出了一个分数。该分数只是“点函数”的得分,还需加上“边函数”的得分。边函数在本分词模型中简化为f(s’,s),其中s’为前一个字的标签,s为当前字的标签。于是该边函数就可以用一个4*4的矩阵描述,相当于HMM中的转移概率。

实现了评分函数后,从第二字开始即可运用维特比后向解码,为所有字打上BEMS标签。 

实例

还是取经典的“商品和服务”为例,首先HanLP的CRFSegment分词器将其拆分为一张表:

 

 1088cd91b908bd246812442ce245e201dc94410b

null表示分词器还没有对该字标注。

代码

上面说了这么多,其实我的实现非常简练:

93ad379f5b89a281995ea97833a9b70ab698af0b 

9709491694b9b15cf705b5502f5dd89339919e40 

2034a6a2fff22c293e50617d42bfba8cacb39d32 


标注结果

标注后将table打印出来:

1889d10113a2ad6c50452b640ee79addd7a87f17 


最终处理

 

将BEMS该合并的合并,得到:

[商品/null, 和/null, 服务/null]

然后将词语送到词典中查询一下,没查到的暂时当作nx,并记下位置(因为这是个新词,为了表示它的特殊性,最后词性设为null),再次使用维特比标注词性:

[商品/n, 和/cc, 服务/vn]

新词识别

 

CRF对新词有很好的识别能力,比如:

CRFSegment segment = new CRFSegment();

segment.enablePartOfSpeechTagging(true);

System.out.println(segment.seg("你看过穆赫兰道吗"));

输出

 

CRF标注结果

你   S   

看   S   

过   S   

穆   B   

赫   M   

兰   M   

道   E   

吗   S   

[你/rr, 看/v, 过/uguo, 穆赫兰道/null, 吗/y]

 

null表示新词。

 


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

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

相关文章

交互规则_您必须永不中断的10条交互设计规则

交互规则重点 (Top highlight)In life, there are certain rules you must never break. If you do there will be hell to pay. In User Interface design there are also rules to live by. They are called “heuristics” or general principles that improve usability in…

一个帮助我100%拿offer的面试学习法

大家好,我是若川。今天周日,再分享一篇相对轻松的文章。文中说的面试学习法有一定的借鉴意义。另外我也推荐大家每隔一段时间不为跳槽的更新自己简历,也是对自己一阶段的梳理总结,毕竟功在平时。哈喽大家好,我是大圣&a…

java获取apk启动activity_兼容 Android 10 启动 APK 实现方案

背景我们想启动 APK 程序,有很多种方法,可以使用 Intent,也可以使用 adb shell 命令来启动,还有通过反射来启动 APk 程序。我们这里主要讨论通过反射的方式来启动 apk 程序。Android10 之前,我们通过反射来启动 APK&am…

Android Studio中解决jar包重复依赖导致的代码编译错误

在原本的代码中已经使用了OKHTTP和rxjava,然后今天依赖retrofit的时候一直报错 Program type already present: okhttp3.internal.ws.RealWebSocket$1.class 说是我重复添加了OKHTTP的包,但其实我直接把OKHTTP的依赖注释掉都没用,只要依赖ret…

面试被问项目经验不用慌,按这个步骤回答绝对惊艳

大家好,我是若川。常有小伙伴问,面试时项目经验怎么回答,经常会分享这篇文章给TA。本文经授权转载。面试、学习源码系列、年度总结、JS基础系列前言本篇文章的作者是来自阿里淘系用户增长前端团队的“亦逊”,18年作为双非本科生通…

使用概念模型 和心智模型的_为什么要使用模型?

使用概念模型 和心智模型的In a former life, I studied critical feminist theory. This included the field of Semiotics — the study of signs and the production of meaning, as well as Deconstruction —the unpacking of meaning to question assumptions.在过去的生…

什么?在 VSCode 里也能用 Postman了?

大家好,我是若川。VSCode中有很多好用的插件,今天推荐 Postcode。面试、学习源码系列、年度总结、JS基础系列以前一直在用postman做API测试,如果你同时在使用vscode开发时,每次切出去可能比较烦,其实就是太懒了。。。作…

英语 动画 教学 字母_字母形式在阅读教学中的作用

英语 动画 教学 字母Note: this essay may also be found on Design Observer.注意:这篇文章也可以在 Design Observer 上找到 。 My first-grade reading tutor gave the best stickers. Puffy, smelly, sparkly — she even had a few that were fuzzy. At that …

java中自定义表单和流程_让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑....

1.1.1.1: SDK表单概要说明:我们把流程引擎与表单引擎统称为ccbpm,但是有一些用户并不想使用表单引擎,而是用自己的表单,仅仅使用流程引擎,这样的方式就要采用ccbpm的sdk表单开发模式。关于ccbpm的SDK:ccbpm的sdk就是cc…

乘风破浪的前端小姐姐,是如何一步步走向成功的?

大家好,我是若川。名校毕业的被删大佬也经历了社会的毒打,但她没有放弃。面试、学习源码系列、年度总结、JS基础系列王贝珊,腾讯高级工程师,腾讯 AlloyTeam 成员,现腾讯文档网络层技术负责人。毕业于中山大学。工作 6 …

如何创建和谐的色彩系统

拥有和谐的色彩系统的好处 (The benefits of having a harmonious color system) Consistent branding express across all platform 在所有平台上表达一致的品牌 The consistent interface creates a better user experience 一致的界面创建了更好的用户体验 More productive …

老姚浅谈:怎么学JavaScript?

大家好,我是若川。当初我就是看本文深受启发,开始看书读源码。所以现在联系了作者老姚 授权转载分享给大家。我按照文中的做法敲完了《JavaScript语言精粹 修订版》,在2017年7月23日写出了我的第一篇文章《读书笔记》。看完了《JavaScript面向…

JavaScript 如何使用闭包

闭包基本上是内部函数可以访问其范围之外的变量&#xff0c;可用于实现隐私和创建函数工厂 定义一个数组&#xff0c;循环遍历这个数组并在延迟3秒后打印每个元素的索引 先看一个不正确的写法&#xff1a; const arr [10, 12, 15, 21]; for (var i 0; i < arr.length; i) …

ai中导入sketch_在Sketch中营造深度感

ai中导入sketchCreating a user interface with depth can seem daunting at first, but it only requires you to understand one fundamental rule — emulating a light source.首先&#xff0c;创建具有深度的用户界面似乎很艰巨&#xff0c;但这仅要求您了解一个基本规则-…

Python3+PyCharm+selenium3 环境搭建

安装Python3请去python官网下载安装包&#xff0c;我用的是Python3.6安装PyCharm&#xff0c;这个也是去官网自己下吧&#xff0c;偶的是2018.2.3&#xff08;CommunityEdition&#xff09;接下来安装seleniumPyCharm中Tremianl安装完成后&#xff0c;在python Console中输入没…

2021 年最值得了解的 Node.js 工具

大家好&#xff0c;我是若川。今天分享一篇用得上的 node 库 链接地址&#xff1a;https://github.com/huaize2020/awesome-nodejs❝前言&#xff1a;文章的灵感来源于&#xff0c;社群中某大佬分享一个自己耗时数月维护的github项目 awesome-nodejs 。或许你跟我一样会有一个疑…

figma下载_何时在Figma中使用组或框架

figma下载Groups and Frames have very different uses in Figma, but it’s difficult at first to tell why both of them exist. I can assure you that they complement each other, but first, you need to understand the nuances of each. I’ll show you how to make t…

迈入现代 Web 开发(GMTC 2021 演讲全文)

前言&#xff1a;希望像做游戏一样做 Web 开发的 dexteryy 同学今天在 GMTC 技术大会上又搞了一场「跨年演讲」&#xff08;内容超多的意思&#xff09;&#xff0c;不但现场爆满、超时严重&#xff0c;而且一如既往的讲完之后只要把讲稿和幻灯片拼起来就能发出来&#xff0c;大…

注释标记的原则_它关系到平台如何标记操纵的媒体。 这是设计师应遵循的12条原则。

注释标记的原则By Emily Saltz, Tommy Shane, Victoria Kwan, Claire Leibowicz, Claire Wardle埃米莉萨尔茨 ( Emily Saltz) &#xff0c; 汤米沙恩 ( Tommy Shane) &#xff0c; 关 颖琳 ( Victoria Kwan) &#xff0c; 克莱尔莱博维奇 ( Claire Leibowicz) &#xff0c; 克莱…

saltapi java_搭建基于Jenkins salt-api的运维工具

1. 安装salt-master和salt-minion安装过程不再赘述&#xff0c;请参考http://docs.saltstack.com/en/latest/topics/installation/index.html2. 安装salt-api&#xff0c;cherrypy用来jenkins与salt通信启用salt-api在salt master的配置文件中添加rest_cherrypy:port: 8010host…