当前位置: 首页 > 科技观察

跨专业自学NLP,这个90后创造了开源库HanLP,在GitHub上已经获得了1.5W的star

时间:2023-03-18 21:36:52 科技观察

到2019年10月底,一个名为HanLP的自然语言处理库在GitHub上的星数已经达到15.5。K,超越宾夕法尼亚大学的NLTK、斯坦福大学的CoreNLP、哈尔滨工业大学的LTP。这是一个由一系列模型和算法组成的自然语言处理(NLP)开发包。你可能想不到,在开发这个NLP工具包的时候,它的作者何涵还是一名日语专业的大二学生。现在,在他的博士期间。学习中,贺涵又创作了一本书《自然语言处理入门》,希望能解决初学者的NLP入门问题。本书得到了周明、刘群、王斌等业内顶级NLP专家的推荐。“理论是根,项目是树”。如果HanLP是一棵树,那么这本书《自然语言处理入门》就是树的根。本书问世之际,AI前线对话贺涵,了解这位极具天赋的学生“栽树”“扎根”的故事。痴迷游戏走上编程之路和很多90后一样,贺涵热爱动漫和游戏。这两个爱好后来深深地影响了他人生中最关键的两个重大决定。高中时,贺涵就读于黄冈中学理科“第一学子班”。班里尖子很多,贺寒却觉得自己比那些尖子还差的远。“我绝对不是尖子生,属于平均分80分,方差特别大的那种。”他笑着说,他从小就不喜欢听课。他要么自己看书做题,要么就坐在自己的位子上闲逛。几次考试,他都表现超常,进入“状元班”。然而,最关键的高考,他却没有考好。高考的失败让贺涵决定“放下自我”,选择自己喜欢的专业。因为喜欢动画,在自愿填报的时候选择了日语专业。2011年,贺涵成为上海外国语大学日语系的一名学生。他几乎所有的业余时间都在追新剧集、背单词和在家玩游戏。玩游戏是贺寒走上编程之路的最初动力。他真的很想自己做一个游戏。贺涵曾经有一段时间沉迷于玩《仙剑四》,他想为仙剑四做一个“模组”。也是从那个时候开始,贺寒开始尝试学习各种编程知识:C++、Windows编程、3D编程、汇编逆向工程、PHP、JavaScript、Linux。对于一个非专业出身的人来说,自学的道路难免会遇到困难。贺寒坦言,最大的困难是没有机会系统学习操作系统、编译原理等专业课程。他确实有一个非常实用的学习方法——debug。贺涵的调试能力很强,“不管是什么算法,是谁的代码,我都可以一行一行地调试。每次我写的算法错了,我都会创建相同的输入数据,打开两个调试器窗口,一个一个跑在我身上,一个跑在别人身上,我的知识大部分来自调试别人的代码,可以说是‘偷师’。”最让贺涵印象深刻的,是他自学编程时取得的一个小成就。当时上外的校园网只支持网页登录,打开速度慢,登录时记不住密码,非常不方便。为了解决这个问题,贺寒利用劳动节假期做了一个自动登录软件。现在回过头来看,贺涵坦言这款软件还有很多不足,但学生们用起来很开心。这小小的成就,也让贺寒惊喜不已。学校网络技术中心的张老师听说这件事后对他大加赞赏,于是赠送了他一张校园网VIP,并介绍了他在一家外包公司林园科技的兼职工作。正是这份兼职,在大二时开发了NLP类库,让何涵与自然语言处理(NLP)结下了不解之缘,这也是他目前博士期间的研究方向。某日,林园科技立项,打造“智能检索系统”。中文搜索引擎的第一步是分词。老板给贺涵布置了一个任务——做一个分词器,还给了他几份厚厚的学习资料。说实话,这是贺寒第一次接触NLP。显然,制作这个分词器需要“现学现卖”。他很有信心,“我应该能赢”,“要么不做,要么做,我尽力”。贺涵经过研究发现,目前市面上的开源工具jieba、Ansj、IK等分词工具并不理想。很多人的名字和组织的名字是分不清的。每隔几天更新一次新词,但不能收录。分词速度也很慢。....他当即决定,一定要做一个经验丰富的tokenizer。紧接着,贺涵开始了一边“泡”在专业书刊上自学一边发展的过程。张华平、刘群等NLP领域的专家几乎都看过他的所有论文,被一些深奥的概念搞糊涂是家常便饭。对贺涵影响最大的是卢振宇开源的C#版ICTCLAS分词系统。他一边学习C#,一边学习卢振宇的博文,了解ICTCLAS分词的原理。贺涵尝试在ICTCLAS的基础上做了一些改进,实现了Java版本。这个版本运行很慢,还好输出结果和ICTCLAS一致。了解ICTCLAS后,贺寒开始学习单步Ansj,Ansj的数据结构——双数组字典树的速度仿佛为他打开了新世界的大门。于是他开始兴致勃勃地研究数据结构,最后他创造了“基于双数组字典树的AC自动机”的数据结构。功夫不负有心人,经过半年时间,贺涵终于做出了这个分词器,并取名为“HanLP”。这对于一个日语专业的二年级学生来说是极为难得的。何涵使用了自研的基于双数组字典树的AC自动机,大大提高了HanLP的运行速度。HanLP第一个版本的功能比较简单,经过几年的迭代,功能越来越完善,性能也越来越高效。HanLP可以提供词法分析、句法分析、文本分类、情感分析等功能。此外,HanLP还具有精度高、速度快、内存小的特点。目前HanLP的GitHubStar数已经达到15.5K,超过了宾夕法尼亚大学的NLTK、斯坦福大学的CoreNLP、哈尔滨工业大学的LTP。对于这个成绩,贺涵很高兴,也很感谢广大用户的认可。“站在开发者的角度,我绝对不是教授们的万分之一,无论是水平还是人数。”贺涵说。与上述用于教学和学术目的的项目相比,HanLP是一个个人项目。对于生产环境开发,由于目的和用途不同,HanLP成功的“法宝”在于良好的用户体验,在界面设计、代码风格等“软实力”方面更加人性化。博士著作《HanLP》的意外成功,让何涵对NLP有了更深的理解。在开发这个项目的过程中,通过对该领域专业知识的学习,他体会到了NLP作为一门学科的魅力。在他的职业生涯中,他将NLP锁定为主要研究方向。贺涵目前正在攻读博士学位。埃默里大学计算机科学专业。主要研究方向为句法分析、语义分析、问答系统。从v1.3版本开始,HanLP由大快搜索开发,完全开源(GitHub开源地址:https://github.com/hankcs/HanLP)。2018年11月,HanLP更新至1.7版本,新增文本聚类、流水线分词等功能。这时候HanLP的中文词法分析已经比较成熟,达到了工业化使用的水平。现在,何涵还在GitHub上负责HanLP的维护工作。HanLP让贺寒收获了很多粉丝。他们经常来找贺寒咨询一些NLP专业相关的问题。随着时间的推移,问题越来越多。到一个特殊的对手。就在出版社的编辑找他要稿子的时候,贺涵干脆决定自己写一本介绍性的书。在这样的背景下,本书《自然语言处理入门》的定位很快就明确了:它是普通人入门时看的第一本NLP书籍,是一本连初学者都能看懂的参考书。贺涵也希望本书能为读者指明下一步的方向,所以在介绍性内容的基础上,增加了一些具有挑战性的章节。2019年10月,经过1年的写作和十几次校对,《自然语言处理入门》正式出版。本书还得到了周明、刘群、王斌等业内顶级NLP专家的推荐。“理论是根,项目是树”。如果HanLP是一棵树,那么这本书《自然语言处理入门》就是树的根。与创建HanLP时相比,贺涵已经从一个年轻人变成了一个领域专家。不变的是,贺涵依然将“工学结合”作为创作的核心理念。教科书和简单的介绍性书籍之间的平衡。何涵以自己的开源项目为案例,通过代码与公式的对比,对每一个算法、每一个模型进行讲解,希望能让读者知其然,知其所以然。NLP现在最大的问题是难以表达世界知识在采访中,贺涵分享了他对NLP、句法分析、语义分析、问答系统的当前发展现状和发展趋势的精彩看法。贺涵表示,今年是以BERT为首的Transformer家族狂欢的一年。自从发现在大规模无标签语料上训练的Transformer语言模型可以编码大量知识后,包括对话在内的各种任务系统都在研究如何接入Transformer。这些研究令人振奋,但在另一种意义上也有些乏味。虽然结果确实提升了很多,但是模型的可解释性还不够。大家都知道知识要编码,但是怎么编码,为什么可以编码,参数怎么简化等等还在研究中。英语句法分析触及天花板无论是句法分析还是语义分析,都可以归结为为每个词找到修饰词,然后标记它们之间的关系。对于这类任务,BiAffine是一种更前沿的方法。它属于基于图的算法家族,天生适合并行化,在GPU下速度非常快。从那时起,出现了许多“改进”研究,一般都朝着高级建模的方向发展。不过何涵认为,英语句法分析已经基本触及天花板,中文句法分析可能不缺模型,缺的可能是高质量的大规模树库。至于语义依存分析,它与句法分析模型是一样的,只是语料库的建设落后于它。属于语义分析家族的其他任务,例如问题到SQL的转换和抽象语义表示,稍微平凡一些,基本上是Seq2Seq的变体。对于上述所有任务,如何有效地将问题表示为向量是核心问题。这时候,就轮到变形金刚霸榜了。未来机器学习工程师职位会减少。谈及当前NLP发展面临的挑战,贺涵表示,NLP现在最大的问题是世界知识难以表达。例如,每个人对物理世界都有一套认识,但计算机只有一些符号语料库。“人都说百闻不如一见,现在的NLP系统,别说看到(机器视觉),连听(语音处理)都很少。”但是,就学术界的前沿发展而言,AutoML(神经网络的自动设计)在模型结构探索和知识工程中知识图谱的自动构建都是可以预见的未来发展趋势。就行业而言,未来机器学习工程师的岗位会越来越少,因为神经网络可以自己设计神经网络,不需要那么多工程师去人工设计。届时,软件开发将进入2.0时代,不再需要写代码,而是标记数据。标注好的数据丢给神经网络学习模型,模型的结构也由神经网络自动探索。该模型用于解决实际问题。软件工程师不需要编写一行代码,或者更确切地说,他们注释的数据就是他们的代码。神经网络就是他们的编译器,训练好的神经网络就是他们编译好的程序。正如编译器可以编译编译器一样,神经网络可以训练神经网络。这是未来最有前途的技术。写在最后现在有了博士,贺涵的生活依旧简单。除了日常的学习,他最喜欢的就是动漫和游戏。除了维护HanLP,贺涵还在业余时间开设了一个名为“代码农场”的博客,用于分享他的课程笔记。由于太忙,这几年《码农》的更新频率已经降到“年”了。然而,每天仍有成千上万的粉丝来到这里浏览信息。从这个博客的一个角落,我们或许可以窥见贺涵的另一面。在“码农”的信息介绍中,贺寒自称是算法初学者。大二的时候兼职开发了HanLP。贺涵经常一个人坐在教室里埋头苦干。学生们不知道他在做什么。low,somethinkimcool”,贺寒从来不解释,他觉得做自己就好。他也是一个算法sticker,从兼职接触到现在锁定研究,一直专注于自己喜欢的领域采访的最后,贺涵告诉我们,毕业后他会选择继续扎根学术。