HanLP:一触即发 叩响自主创新之门
2019-04-25张贝贝
张贝贝
完全开源、自主研发、精度高、速度快、内存省……如果将这些关键词都集合在HanLP上会产生什么?
2014年,还在攻读日语本科的大快搜索高级研究员何晗一定没想到,机缘巧合研发的一款中文分词器,在随后几年中几经迭代,并在商用市场大放光彩。
而看似是“无心插柳柳成荫”的事情,却凝聚着何晗对HanLP工匠式的锤炼。
据介绍,HanLP是由一系列模型与算法组成的工具包,目标是普及自然语言处理(NLP)在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点;能提供词法分析(中文分词、词性标注、命名实体识别)、句法分析、文本分类和情感分析等功能。目前,HanLP已經被广泛用于Lucene、Solr、ElasticSearch、Hadoop、Android、Resin等平台,有大量开源作者开发各种插件与拓展,并且被包装或移植到Python、C#、R、JavaScript等语言上去。
精诚所至 金石为开
谈及HanLP的开发过程,何晗回忆道,“那时我还在读本科,当时在上海某科技公司兼职实习,公司想做全文检索系统,所以需要一款中文分词器。我考察到市面上的开源工具要么来自学术界,不太重视运行性能,要么来自工业界,不太重视算法准确率,于是我想做一款平衡速度和精度的分词器。”
不过万事开头难,何况对于非计算机专业的何晗来说,一切充满着未知。因此,不可避免地遇到了许多难题。比如,相关论文中的术语从未接触过、公式看不懂、别人的代码没有注释之类。后来何晗自学了许多自然语言处理与机器学习的著作与课件,把能找到的开源代码都研究了一遍,总算是窥得一些门道。
据何晗介绍,HanLP第一个版本效率不高,后来大量采用双数组trie树和AC自动机进行优化,甚至提出了结合两种算法实现一个新数据结构,最终把效率做到了极致。在易用性方面,一直坚持“明文至上”的原则,许多模型都储存为txt格式,在懂机器学习的人看来这是模型,在“小白”用户看来这是词典,大家能用得明白。
随着HanLP的基本成型,何晗也扣动了自主创新的大门。因为HanLP内部的算法都是自主研发的,不依赖第三方类库,这样的好处是可以控制产品的所有细节。在大快搜索商用期间,HanLP又实现了更多模块,版本迅速迭代到1.6。
一触即发 全线跟进
如何形容HanLP的快速发展?从数据上来看,根据GitHub统计,HanLP是全球用户量最大的自然语言处理工具包。而从演进的过程来看,何晗给出了这样的总结,“HanLP从单纯的分词器发展到目前功能较为完善的NLP工具包,是一个单点突破、全线跟进的模式。”
众所周知,分词只是NLP的第一步,第一步涉及许多机器学习算法,将这些机器学习算法吃透了,其他功能都是这些机器学习算法的应用层,可以说是手到擒来。
何晗进一步谈到,当代的技术潮流是所谓的深度学习,相较于深度学习,HanLP目前主要由手工实现的传统机器学习方法驱动,优势是适用于计算资源匮乏的场景,比如移动设备和VPS。但在2.0版本之后,HanLP将全线切换到深度学习驱动,并且主要开发语言将切换到Python。“毕竟这是时代的大势所趋,另外NLP本来就是一种较高层次的技术,当语料库和数据量增大时,对计算力或说显卡的需求增长也是必然的。”
现在HanLP由大快搜索公司主导开发,普及了许多常用NLP技术在生产环境中的运用,普及了语料库、双数组trie树、感知机等大量概念或技术的运用。代码完全开源,目前在开源社区的用户量第一,在GitHub上的收藏数量达到8000,远超过其他同类型的知名工具,如斯坦福的CoreNLP、NLTK和哈尔滨工业大学的LTP等。
此外,在NLP领域,HanLP采取算法与语料库分离的模式,耗费人力成本的语料库则形成了一种新的商业模式。针对不同的行业领域,客户委托公司加工行业语料库,使用HanLP在行业语料库上训练模型,于是在该行业文本上的准确率大幅提升。随着公司积累语料库越多,HanLP能适应的领域也越多,势必会形成一个有效的正反馈循环。
走出国门 拥抱世界
HanLP命名中的Han指的是汉语的汉,它从诞生开始就是面向中文处理而开发的。用HanLP处理包含简体在内的多种汉语言非常方便,这种汉语的复杂程度是外国人无法理解的。大快搜索公司内部积累标注的海量语料库为HanLP的领域拓展提供了数据上的驱动力,使得HanLP还可以应用于微博等社交网络上的不规范文本。不仅限于中文,通过提供其他语种的语料库,HanLP同样可以支持任何语言。在2.0版本,HanLP将提供其他语种的模型,走出国门,拥抱世界。
可以说,HanLP是中国的,也是世界的。它具备的竞争力足以让这款技术产品的开发者有足够的信心。HanLP目前的核心优势主要是性能和精度的平衡以及大规模语料库。不同于市面上的竞争产品,HanLP内部的数据结构经过精心优化,分析速度达到数千万字每秒,而内存占用控制在100MB左右,这使得HanLP实用于包含移动设备在内的几乎所有场景。此外,值得强调的是,HanLP代码完全开源,功能由一个jar包提供,在本地运行不访问云,用户的隐私数据得到了保障。
如果用户需要处理不通用的领域行业文本,还可以通过标注行业语料库训练行业模型的方法进行拓展,设计上比那些商业产品更灵活。
谈到商业市场的应用,HanLP如何与具体业务结合发挥应用的价值呢?对此,何晗谈道,在搜索领域,可以利用插件与Lucene、Solr和ES等常见搜索引擎结合。在大数据领域,可以轻松集成到Hadoop中。在数据科学领域,HanLP还提供了Python语言接口pyhanlp。
敢问路在何方
从创新性上来看,HanLP无疑是走在了前面。作为首个面向生产环境的自然语言处理工具包,不依赖第三方库,全部算法自主编写。独特的IO缓存机制,启动时间控制在毫秒级,基于Aho Corasick自动机的双数组trie树将分析速度提升到千万字符每秒。特殊的特征裁剪算法,可以显著降低模型的内存占用、提升运行效率。面向机器学习的API设计,所有模块提供训练接口,显著区别于商业软件。
未来看,HanLP的发展方向在技术上是迈向深度学习,在语言上是切换到Python。因为目前最精准的机器学习框架就是深度学习,自然语言处理也不例外。另外,在发达国家,Python用户数量已经超过了Java,北美学校已经广泛采用Python教授数据科学相关课程。
当然,HanLP未来的路还有很长,需要何晗继续秉承精益求精的精神不断锤炼,需要大快搜索主导的研发和应用更上一层楼。但何晗更希望,整个IT市场,应该多鼓励自主研发的核心技术,少包装集成。多招用数学功底好、肯钻研的技术工程师,少招急功近利的程序员。
也许正是这样的家国情怀和工匠精神才让何晗和他所研发的HanLP如此有魅力。
采访实录
Q:中国大数据产业生态联盟、《软件和集成电路》杂志社
A: 大快搜索高級研究员何晗
Q:如何更加深刻而形象地理解自然语言处理?
A:事实上自然语言处理是基于机器学习技术的应用层,而机器学习是人教机器去做一些智能的事情。这个时候人就必须得提供给机器一些习题集,相当于提供给它一些数据,这些数据是人工给它标注好的。所谓的标注就是你把这些数据正确的答案,附在后面。把整个数据、答案作为习题集教给机器,机器学习就会做一下题,然后对一下答案。如果你没有给它答案的话,那个机器它只做题,它不知道正确答案是什么。把数据的答案人工地找出来,或者人工地标上去就叫做标注。那么在自然语言处理里面,我们就希望把一些文本要素标注出来,比如说一句话正确的单词序列、一些单词的正确词性,或者一段文本里面涉及的公司名称、人名、地名有哪些等都得标好。机器学习完得到的模型就相当于一个知识库。有了这个知识库之后,机器就可以对于未知的、而不限于你已经给它的文档进行分析。
如果更加形象的来说,就相当于你有一个孩子,你给他准备了一些题目和一些参考答案,你把完整的这个习题集给他。他做完之后,他就可以参加考试了,但考试的那些题目并不一定就是习题集里面有的,它可以有未知的,然后你的孩子也可以智能地去做这些题目。
这是一个比较重要的概念,很多人误以为大数据就是我生产系统里面积累了很多历史的数据,然后机器马上就可以智能的去处理了。实际上并不是,你必须有一个人工标注的过程,你只给孩子做题,不给他参考答案,你的孩子是永远学习不好的。
Q:大快搜索在人工标注方面做了哪些尝试和努力?
A:人工标注是一个很重要的环节,大快搜索也投入了非常多的精力在做人工标注的配套系统。目前,我们已经做出来一种产品,就是有一个友好的web界面,里面会存放一些没有标注的文档,我们会请一些专业的标注员,利用计算机就可以轻松地把这些文本标注成机器可以理解的形式,然后再把这些标注好的文档教给机器学习。可以说,人工标注得越多,自然语言处理的精度就会越高,由此也逐渐形成了一种产业模式。
Q:HanLP2.0具体的特点和转变有哪些?
A:HanLP2.0的第一个明显的特点是从底层算法的一种转变,即从传统的机器学习到深度学习、到神经网络深度学习的一个转变。第二个特征是编程语言上面的转变,现在的版本是用Java来做的,但是事实上Java在数据科学这个领域上面是稍微有一些落后的。北美的很多大学,在教数据挖掘、数据专业的时候并不会用Java来教,而是用Python来教。像深度学习的领域也是被Python这门语言垄断了,所以说到HanLP2.0的时候,HanLP会主要用Python来实现,同时提供其他编程语言的API接口,这是第二个非常不同的地方。第三个特点涉及语种的问题,HanLP目前的版本是只从汉语这一语种出发,是有一些局限性的,事实上HanLP用的技术,完全是可以用于其他任何语种的。所以在2.0的时候,HanLP会把这个语种做成一种配置,相当于你给我什么语种的习题集,HanLP就能处理什么语种。目前看,至少会有这三个最核心的特点和变化。
Q:如何看待当前人工智能的发展?
A:个人认为,现在大众理解的人工智能的发展离实际情况太遥远了,或者说可能是很久之后的人工智能的发展状态。现在的这个人工智能的状态,就是人们用一些经验数据,一些标注好的数据去教机器,而不是机器从概念上理解数据的本质,那个太遥远,像科幻一样,不是本世纪关注的事情。
因此,目前人工智能的市场会有一些泡沫在里面,一些非专业媒体或普通的传统行业客户对当前的形势估计过于乐观。无论是从学术研究还是实际的发展情况来看,当前人工智能的发展是远远低于大众的预期的,有大量的学者和研究者都在很严肃地对待这个问题。也就是说整体还处于弱人工智能状态。
行业应用案例
案例名称:某市刑侦语义搜索系统
核心特点:
自动分析警情要素
自动分析警情要素是指输入非结构化的报警记录时,系统能够自动提取出“何时(时间)、何地(地点)、何事(事情)、何物(作案工具)、何情(作案情形)、何故(动机目的)、何人(嫌疑人)”7种要素。并利用我们开发的标注系统,将这些要素视作命名实体,训练统计模型。在标注的过程中增量地训练模型,降低标注成本的同时,提高了分析识别的准确率。将大量的、枯燥的文字记录分析工作交给机器,将警务人员从传统的记录筛选任务中解脱出来,系统自动探测跟踪并触发报警,警务人员只需要进行记录查看,确认警情并联络相关部门采取措施。
智能判断出警建议
系统通过文本分类技术进行警情预分析,首先完成对案件的性质判断,并将其归档到数据库。系统通过词频特征选择进行分类,结合词条在分类内部出现的概率和类别内部文档中出现概率,以一种词分布均衡度评价特征词选择方法,作为信息抽取的基础和关键步骤。再根据数据库中的历史接警级别,以及用户设置的出警规则,提供相应预判。通过对模型的不断优化调整,得到最优的预测模型,实现了对每种警情的准确判断与智能建议。
警情结果可视化展示
将历史警情汇总并分门别类地可视化展示,提供包括时间、地域、类别、等级等全方位的检索接口,便于工作人员直观地获取历史信息,从而有针对性地布置警力。
应用解读:
刑事案件数据主要由办案过程中积累下来各类案件、涉案人员等信息以及报警信息组成,这些信息由于数据采集来自不同的设备、数据的发布或维护机构不同、存储介质多样,造成数据类型不一、模式复杂多变、组织混乱、重复等特点,使得在刑侦案件侦破过程中,信息获取过程繁琐,难以适应高速紧张的工作需要。如何利用有限的精力,迅速完成警情分析、出警预判、信息整理成为了现代化刑侦必须解决的问题。
该系统能够根据历史接警记录,自动标注案发地址、时间、作案工具和损失财务等警情要素。结合过往出警记录,判断警情等级并给出相应建议。这大幅缩短了工作人员录入档案的时间,降低了高峰时期的人力负载,甚至为领导的宏观分析提供了信息来源。
应用价值:
该系统采用了大量的机器学习与自然语言处理驱动技术,构建了准确的分析模型与全方位的展示界面,为警务管理提供了新的敏捷性与准确性。使用语义检索代替了传统的关键字检索,有机地整合了警情信息,精确地提供了出警建议。自动化了接警流程,缩短了出警时滞,提供了智能化的预判建议。
从学术角度出发,该系统以模式多变、格式迥异的文档为输入,以结构化的案件事实为输出,在刑侦数据处理领域对模型驱动的案件抽取进行了初步的研究和有意义的探索。保证输出案件事实的前提下,同时存储了抽取的中间结果,为指代消歧、案件事实融合等后续研究工作奠定了基础。