21天搞定聊天机器人之{命名实体识别}

看到这个题目,估计程序猿们要笑了,大家都懂的嘛。毕竟大家已经被“21天学会XXX”坑了不少回了。所以,这个题目自然是开玩笑的了,怎么可能21天搞定聊天机器人呢。

虽然2016年号称人工智能元年,各种牛逼的人工智能技术如雨后春笋冒出来,但是要打造一个智能聊天机器人谈何容易,目前还没有一款聊天机器人可以通过“图灵测试”。最近大热的《西部世界》中的阿诺德提到了人工智能的四层金字塔模型,从下往上依次为"记忆","即兴","私利","?", (最上面一层剧中尚没有透露), 这也恰恰就是描述我们人类的智商层次。

OK,言归正传。今天想聊的只是在做聊天机器人(或者叫语音助手)的过程中需要面对的一个小问题,叫做所谓的命名实体识别(NER: Named Entity Recognition)。NER是自然语言处理中的一个课题,比如识别文本中的人名,地名,日期等这些词语。

比如对于如下一句话:
“Siri,打电话给Abby"

作为Siri来说,她除了要明白你的这句话是让她打电话,同时要知道究竟是打电话给谁。在这句话中,很显然是要打电话给Abby这个人。那自然要从这句话中识别出Abby作为打电话的目标人。那么怎么来实现从一句话红提取出人名这中命名实体呢? 当然对于人名这种典型的命名实体,已经有很多自然语言处理的工具实现了这个功能,比如NLTK, Stanford NER等。

但是,今天我想讲的是借助机器学习和简单的NLP来实现定制化的NER。OK,怎么搞呢?既然提到机器学习,第一反应就是“分类”,毕竟机器学习一个很大的应用领域就在于分类。那么对于NER怎么来用“分类”算法做呢?既然我们的目标是从一个句子中定位出相关的"词"或"词组",那么很自然这个句子中的每个词或字就可以划分成两个分类:人名,和非人名。

对上面的这个例子来说,就可以分为下面两个类:

  1. Siri, 打电话给 ---> 非人名分类
  2. Abby ---> 人名分类

因此这个问题就变成了分类问题了! 只要我们准备足够的语料库(包含可能的说法,和常见的人名)就可以来训练我们的分类模型了。

具体流程可以参考下面示意图:

21天搞定聊天机器人之{命名实体识别}

现在你的聊天机器人应该知道怎么打电话了, 是不是很赞。哈哈,其实这种方法可以推广,可以用来训练识别其他的Concept, 不仅仅是人名。

OK,今天先聊到这里了。

欢迎扫描二维码,了解更多。

21天搞定聊天机器人之{命名实体识别}