课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在进行软件开发的时候,所有的编程代码都是通过英文来编写的,所以我们今天就一起来了解和学习一下,在软件编程环境中的英文分词是如何来确定的,都有哪些标准,下面我们就一起来了解一下具体情况吧。
对分词的诉求是什么?
从已有工程经验来看,几乎不存在通用而且效果非常好的分词系统,例如:在人民日报上训练的分词系统,在二次元的魔幻小说上切分效果不佳。每个领域有其独特的词汇表示,这很难通过有限的训练数据捕捉到所有语言现象。
不用使用场景对分词的要求差异很大。在搜索的索引阶段,往往会召回所有可能切分结果,对切分准确率要求不高,但对分词速度有很高的要求,例如某中型搜索系统,每天4000万篇文章入库,每秒要处理500篇文档,每秒处理的文档字节数约有50MB;如果分词系统太慢的话,需要开大量线程才能处理这些文档。
在问答系统中,需要对文本实现较为深入的理解,对分词和实体识别的准确性要求很高。
不用的使用场景,对分词提出了不同的要求,不需要片面地追求高准确率。
别家系统的准确率怎么这么高?
在分词系统研发中,最容易产生误解的就是比较系统准确率。系统准确率与训练数据非常相关,脱离数据而谈论准确率无异于“刷流氓”。2003年863分词评测中就出现了98%的准确率,2007年Sighan评测中最高准确率是97%,在最近某司组织的评测中,最高准确率下降到了94%。所有不同数据下的评测结果都不能直接比较高低。
现在吹嘘分词准确率的公司和单位越来越少了。
分词稳定性很重要
分词稳定性是指分词系统的输出在不同上下文下都比较稳定,不会出现明显被上下文影响的情况。例如,在下面句子中,“黄代恒”有时识别为人名,第二次出现未识别出来:
实战分享三黄代恒/nr与轨道交通:软硬结合到人机结合黄代恒“在不同的客户场景下,我们用三种技术实现轨道交通的数据洞察
一般纯统计分词系统的稳定性比不上基于词典实现的分词系统。在搜索中,分词稳定性非常重要,否则极容易出现查询不到的情况。
已有分词系统小结
分词大概是投入人力非常大的NLP方向,几乎每一家“有追求”的公司都有员工实施过类似的任务,而且反复迭代更新;在NLP研究界,这个问题从上个世纪80年代就已经开始探索,一直到ACL2017仍然有这方面的论文(有4篇丛神经网络角度探索分词的文章)。
如此多的人力投入到分词理论研发和工程研发中,产生了一批各有特色的分词系统。下面仅仅就本人接触到的系统作说明(排名无先后),比较“古老”的系统不在此罗列:
IK系统
该系统采用JAVA开发,实现逻辑不复杂,由于对Lucene和ES支持较好,因而得到了比较普遍的使用。该系统可以实现英文单词、中文单词的切分,OOV识别能力不强。该系统有几种使用模式,分别对应不同的使用场景,如索引、查询等。
IK有些功能比较贴心,比如热更新用户词典,支持用户自定义词典非常方面,对搜索工程师比较友好。
IK的代码实现上优化不够好,甚至能发现BUG。我们发现的BUG会导致ES中长Query无法实现精准匹配。
对于中小企业的内部应用来说,使用IK足够了。在商业系统上使用的话,要非常慎重,参与优化的人员太少了。
Jieba系统
Jieba大概是最好用的基于Python实现的分词系统了,2-3行代码就可以实现分词调用和词性标注,速度还不错。基于HMM模型实现,可以实现一定程度的未登录词识别。
Jieba有精确模式、全模式、搜索模式三种。全模式是找到所有可能词语;搜索模式是在精确模式的基础上对长词进行切分,提高召回率。
支持繁体分词;支持自定义词典;支持并行分词,方便实现加速。
在分词速度上,精确模式能达到400KB/秒,全模式下能达到1.5MB/秒。
Jieba除了Python版本外,还有多种语言实现的版本,包括C++,JAVA,Golang等。
Java版本的Jieba功能上受限,仅面向搜索使用。明略SCOPA产品中使用了Java版本的Jieba作为分词组件,替换了IK。
Ansj系统
Ansj是前同事阿健的作品。
Ansj的所有模块全部自研,没有借用开源组件,这有助于降低包依赖。Ansj基于CRF模型实现,支持导入CRF++的训练结果,CRF的推导部分全部自己实现。
对词典的双数组进行了优化,支持自定义词表,分词速度大概是3MB/秒。
Ansj的使用非常简单,几行代码即可,所有数据都打包到了jar中。
Ansj的不足在于,模型的识别准确率有待提高,参与开发的人数太少。
Hanlp平台
Hanlp是一个功能非常全面的NLP平台,它的分词接口借鉴了Ansj的设计,形式上和命名上都非常像。
Hanlp有“简约版”和“加强版”,简约版的模型参数较小,分词能力还可以;加强版在模型参数上扩大了若干倍,分词能力进一步提升。
Hanlp支持基于HMM模型的分词、支持索引分词、繁体分词、简单匹配分词(极速模式)、基于CRF模型的分词、N-最短路径分词等。实现了不少经典分词方法。
Hanlp的部分模块做了重要优化,比如双数组,匹配速度很快,可以直接拿过来使用。
Hanlp做了不少重现经典算法的工作,但这对于工业化的分词系统来说没有太大意义。
ICTCLAS系统
ICTCLAS大概是“最知名”的分词系统了,从参加2003年中文分词评测,一直延续到了现在。现在已经是商业系统了(改名NLPIR),需要License才能运行。
从未登录词识别准确率上说,ICTCLAS已经明显落后于基于CRF的分词系统了。
尽管如此,它的优点仍然比较明显:很少出现“错得离谱”的切分结果,这在基于CRF模型的分词系统上不少见,尤其是迁移到其它领域时;模型和库不大,启动快;基于C++实现,能够很快迁移到其它语言。
从分词稳定性上来说,ICTCLAS值得信赖,从分词准确率、分词速度等方面来考量,有不少分词系统超过了它;NLPIR的源代码已经不再开放,这让用户很纠结。
交大分词
所谓“交大分词”,是指上交大赵海老师个人主页上的分词系统。该系统在2007年Sighan评测中拿到了多项第一。
该系统基于CRF模型构建,在模型特征提取上做了大量工作,分词准确率比较高。目前可用版本支持简体、繁体分词,也支持不同分词标准。该系统被常常用来比较分词准确率。
该系统的问题是不开源,只有Windows上的可执行文件,C++源码需要向作者申请。虽然该系统不开源,但作者的一系列论文基本上揭示了其原理,复制起来并不难。
从工程角度来考虑,该系统只适合做DEMO组件,不适合大规模工业化使用。
Stanford分词
Stanford分词系统的优点是准确率高,未登录词识别能力比较强;缺点非常明显,模型很大,约300MB-400MB,启动非常慢,大概需要10秒-20秒。在所有分词系统中,没有比Stanford启动更慢的系统,分词速度也不快。代码优化的空间比较大。
Stanford系统支持自定义训练,只要用户提供训练数据,该系统可以训练新的模型参数。
Stanford分词系统只是验证作者论文的一种手段,为了非常微小的分词准确率提升,导致了模型参数膨胀。
在Demo环境下可以使用Stanford系统,在大规模数据环境下不适合使用该系统。
GPWS系统
GPWS是北京语言大学语言信息处理研究所研发的分词系统,2001年对外发布。该分词系统是2000年后唯一一个基于大规模规则+统计的分词系统(仅限个人所知),在2004年非常低的硬件配置下,分词速度也能达到3MB-5MB/秒,对系统资源的消耗很低。后来授权给了新浪、微软等公司使用,被应用在了信息检索中。
GPWS可以实现中文人名、外国人名、日本人名的识别,其它分词系统几乎都没有做到这个程度;对通用领域的文本切分效果较好,支持自定义词典;很少出现切分“离谱”的情况。该系统适合大规模数据处理的场景。
上述所有系统几乎都依赖于训练数据,而GPWS没有这方面的问题。GPWS依赖于高质量分词词典和歧义切分机制,采用基于可信度的人名识别方法,不依赖于公开的训练数据。
GPWS最大的问题在于很难复制,代码没有公开;在分词准确率上,GPWS已经比不上字本位的分词系统;但从分词稳定性上,GPWS仍然非常出色,比纯统计分词系统明显要好。
作者:牟小峰
来源:InfoQ
【免责声明】:本内容转载于网络,转载目的在于传递最新信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。