做者|Felix Laumann
编译|VK
来源|Towards Data Sciencegit
NER是信息提取的一个子任务,它试图定位并将非结构化文本中提到的指定实体划分为预约义的类别,如人名、组织、位置、医疗代码、时间表达式、数量、货币。github
咱们建立了咱们本身的小型测试数据集,其中11个示例来自谷歌的Taskmaster 2数据集,该数据集于2020年2月刚刚发布。咱们将此数据集视为NER解决方案中将来研究和产品的基准数据集。咱们用该数据集来探索TextSpace。机器学习
这个数据集中的句子可能在长度和包含的信息上有所不一样,可是咱们选择了其中包含大量实体的句子,所以咱们能够根据最新的NER解决方案来区分优劣。咱们测试集中的句子来自不一样的领域,由于咱们想看看咱们在这篇文章中比较的解决方案有多灵活。请注意,这些示例中使用了Dialogflow聊天机器人,所以咱们也但愿Dialogflow在这些例子上可以执行得很好。性能
咱们将首先详细地看两个例子,最后会有一个总结。学习
让咱们以一个想要预订航班的用户的句子为例:测试
"So, I would like to fly out sometime tonight and fly back in the evening in 4 days. From I’m looking to go to Denver. I’m flying out of San Francisco."网站
IBM的MAX命名实体标记器执行得并很差,它只返回属于时间和位置类别的单词。不幸的是,它甚至在第二句的开头将"I"错误地归类为一个事件。ui
与此相比,StanfordNLP NER模型的性能要好得多。找到全部可能的实体,甚至返回正确的日期。然而,有一个小错误发生了,那就是没有意识到"in the evening in 4 days"是属于一块儿的。它把"evening"划分为今天的晚上,而不是四天里的晚上。this
spaCy NER模型的性能与IBM相同,只返回属于时间、日期或位置类别的单词。它没有显示StanfordNLP的确切日期。spa
在本例中,咱们的解决方案TextSpace执行得很是好,它提取了全部可能的具备确切日期的实体,相似于StanfordNLP。可是,TextSpace也会返回一个时间周期的时间间隔,它不是很具体,例如"evening"或"tonight"。这里第一个是地点:
和时间:
不幸的是,TextSpace也不认可"evening"和"4 days"属于一块儿,并返回当天的晚上,就像StanfordNLP所作的那样。
咱们使用Dialogflow聊天机器人预订,咱们能够获得平庸的结果。它能正确识别日期和时间、出发城市和到达城市,但却彻底忽略了"in 4 days"。很是使人失望,由于咱们使用了谷歌数据集和Dialogflow的特定于域的聊天机器人来预测。
接下来,咱们用下面的句子来比较这四种解决方案:
"I would like to book a room in the Park Hyatt Aviara Resort and it costs $279 per night. It’s rated 4.8 stars. It offers an 18-hole golf course, an outdoor pool & tennis courts plus a spa & fine dining."
咱们再次从IBM的MAX实体标记器开始。咱们想要入住的酒店被认为是一个地点,而"&"被错误地认为是一个组织。例如,彻底忽略了"$279"的价格。与前面的机票预订示例同样,性能至关差。
StanfordNLP作了更好的工做,发现"279美圆"是钱,停留的时间和star的数量。不幸的是,咱们的酒店也被归类为一个地点,而不是一个组织,它可能对某些应用程序起做用,但当用户但愿自动转发到酒店网站时,这可能不起做用。它也不认可279美圆的价格属于"per night",而将"night"做为日期返回。
咱们使用Dialogflow预先训练过的酒店预订机器人,这让咱们天然地指望它的结果至少和StanfordNLP发现的同样好。不幸的是,状况并不是如此,甚至连"$279"的价格也没有找到。它正确地将"Hyatt"归类为场地连锁,但错误地将其商业名称归类为"Resort and it costs $279"。日期也没有找到了。
正如前面的例子所示,spaCy的表现也一样糟糕。咱们的酒店"Park Hyatt Aviara Resort"被归类为设施(FAC),这并不彻底正确,但"279"被正确归类为金钱。不幸的是,"spa & fine"被错误地视为一个组织。
TextSpace在这五个解决方案中表现最好。它发现"Hyatt"做为一个组织,其货币价值为"279美圆",跳过"night",由于它知道279美圆是每晚的价格,能找到全部的数字。
正如所承诺的,咱们如今比较全部这五个解决方案在咱们的测试集的11个例子的表现来衡量。衡量方法很直接:咱们知道哪些句子对应的划分方式,咱们计算分类的相关信息。例如,在句子"So, I would like to fly out sometime tonight and fly back in the evening in 4 days. From I’m looking to go to Denver. I’m flying out of San Francisco."。若是一个解决方案将"tonight"和"in the evening in 4 days"划分为正确的日期和时间范围,将"Denver"和"San Francisco"做为地点或城市,那么该解决方案将实现100%的精确度和召回率。换句话说,全部潜在的实体都被发现了,而且都被正确地分类了。当其中一个单词被漏掉,好比"evening in 4 days",只有3/4的单词是正确的,召回率为75%。另外,若是一个词被错误分类,好比"I"是一个组织,那么准确率将降低到4/5,即80%。若是找到日期,可是只返回"time"或"date",而没有精确的日期或时间,咱们将减去0.5。
与其余四种解决方案相比,TextSpace的NER表现最好,紧随其后的是StanfordNLP。IBM的MAX实体标记器整体上使人失望。
下面是这些柱状图上的数字:
若是你想重现这些结果,如下是咱们使用的11个英文句子:
有关实现的更多细节,请参见咱们的GitHub存储库:https://github.com/kumar-shridhar/NER-Benchmarks。
欢迎关注磐创AI博客站:
http://panchuang.net/
sklearn机器学习中文官方文档:
http://sklearn123.com/
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/