Hanlp中使用纯JAVA实现CRF分词
与基于隐马尔可夫模型的最短路径分词、N-最短路径分词相比,基于条件随机场(CRF)的分词对未登录词有更好的支持。本文(HanLP)使用纯Java实现CRF模型的读取与维特比后向解码,内部特征函数采用 双数组Trie树(DoubleArrayTrie)储存,得到了一个高性能的中文分词器。
开源项目
本文代码已集成到HanLP中开源:http://hanlp.com/
CRF简介
CRF是序列标注场景中常用的模型,比HMM能利用更多的特征,比MEMM更能抵抗标记偏置的问题。
CRF训练
这类耗时的任务,还是交给了用C++实现的CRF++。关于CRF++输出的CRF模型,请参考《CRF++模型格式说明》。
CRF解码
解码采用维特比算法实现。并且稍有改进,用中文伪码与白话描述如下:
首先任何字的标签不仅取决于它自己的参数,还取决于前一个字的标签。但是第一个字前面并没有字,何来标签?所以第一个字的处理稍有不同,假设第0个字的标签为X,遍历X计算第一个字的标签,取分数最大的那一个。
如何计算一个字的某个标签的分数呢?某个字根据CRF模型提供的模板生成了一系列特征函数,这些函数的输出值乘以该函数的权值最后求和得出了一个分数。该分数只是“点函数”的得分,还需加上“边函数”的得分。边函数在本分词模型中简化为f(s',s),其中s'为前一个字的标签,s为当前字的标签。于是该边函数就可以用一个4*4的矩阵描述,相当于HMM中的转移概率。
实现了评分函数后,从第二字开始即可运用维特比后向解码,为所有字打上BEMS标签。
实例
还是取经典的“商品和服务”为例,首先HanLP的CRFSegment分词器将其拆分为一张表:
null表示分词器还没有对该字标注。
代码
上面说了这么多,其实我的实现非常简练:
标注结果
标注后将table打印出来:
最终处理
将BEMS该合并的合并,得到:
然后将词语送到词典中查询一下,没查到的暂时当作nx,并记下位置(因为这是个新词,为了表示它的特殊性,最后词性设为null),再次使用维特比标注词性:
新词识别
CRF对新词有很好的识别能力,比如:
输出:
null表示新词。
转载自hankcs的博客
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
GitHub重磅年度报告:JavaScript最热,中国开发者贡献稳居第二
GitHub大动作,开发者福利:重磅推出GitHub Actions! 在昨日举行的GitHub Universe 2018开发者大会上,GitHub发布了一款重量级产品:GitHub Actions,可直接运行部分代码的产品,彻底改变GitHub的使用方式。 正如平台主管Sam Lambert所说:“这将是GitHub史上最大的转变!” 除了发布GitHub Actions等新产品外,GitHub还公布了2018年年度报告。 GitHub Actions:开源、社区支持的平台 GitHub认为,作为一个开发者,大部分时间和经历应该只放在一件事情上,那就是代码。 在过去,开发者因配置工作流程,或使用不灵活的工具,浪费了大量的时间。而这正式GitHub要解决的问题。 现在,GitHub给开发者们提供了一种自动管理代码的工具,包括测试和技术支持。“
- 下一篇
强化学习练就18般武艺!伯克利开源DeepMimic
还记得今年4月伯克利BAIR实验室发布的那个会“18般武艺”的DeepMimic模型吗?他们使用强化学习技术,用动作捕捉片段训练模型,教会了AI智能体完成24种动作,走路、跑步就不用说了,还包括翻跟斗、侧翻跳、投球、高踢腿等等高能动作。 体会一下: 训练每一种动作都需要动作捕捉和深度强化学习,而BAIR的研究者创造了一个全新的系统,教会agent完成复杂、逼真的动作任务。 作者Xue Bin Peng等人将这个系统命名为DeepMimic,比已有工作更进一步的是,他们的目标是在训练一个agent完成特定任务的前提下,使它的动作更贴近真实。他们的论文发表在SIGGRAPH 2018。 除了人形机器人外,他们还训练了Atlas机器人、暴龙、龙等形态的agent。 Atlas机器人 整个DeepMimic所需要的input分为三部分:一个被称为Ch
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 2048小游戏-低调大师作品
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池