NLU(自然语言理解)系统是任何现代语音系统的最关键模块。如上图nlu.png所示,第二部分NLP Tool就是我们这篇文章要讨论的,我们这里不讨论NLU和NLP的区别,都以NLU指代。
NLU的输入输出
- 输入是一段人类语言文本,如上图1模块所示
- 输出是一段结构化数据(json/xml etc.),如上图模块3所示。主要包含意图(Intent)和实体(Entities)的抽取结果
NLU服务提供商
正如上图模块2所指示,现在很多服务以Restful API和SDK形式向外提供服务。
-
国外:
- Dialogflow 也就是改名前的API.ai (被Google收购的公司)
- Wit.ai (被Facebook收购的公司)
- LUIS (微软的服务)
-
国内:
笔者用过Dialogflow做英文,也是支持中文,但是服务国内可能被墙;使用过UNIT做中文;同时了解过其他几个,给出建议是:
- 英文用Dialogflow,免费好用
- 中文可以直接试试DUI,思必驰的这个开放比较晚,更接近Dialogflow的感觉,UNIT对于需要大规模自己训练内容的领域来说,泛化效果一般
- 当然,大家自己都可以试试,有好的结果还望相互交流
自己搭建NLU平台的原因
- 数据敏感
因为前面提到过的平台都是需要将数据上传训练才能获得服务,对于数据敏感的需求,显然不能满足。 - 领域效果差
开放平台都是通用NLU平台,各个公司的不收费还愿意提供服务的原因就是想要更多的数据上传来训练自己的模型,那么你们业务所在领域的模块如果是重要的模型,这些平台不一定开放已经训练好的模型。那么结果就是你自己需要大量的训练。 - 本地支持
如果你还需要本地NLU,而不仅仅是联网NLU,显然也不符合要求。
开源NLU引擎选择
NLU是一个巨大的轮子,没有足够的资源自己是搞不起的,寻找开源方案是最快速实现商业模式的方法,目前找到两家:
-
Rasa nlu
- 开源时间长,社区稍微活跃
- 官方还不支持中文,但是有童鞋已经搭建了中文版,引用并感谢他
- 支持本地部署,但是是python程序,各种平台得自己解决,比如android, ios等等
-
Snips nlu
- 刚刚开源
- 官方不支持中文,也没有童鞋搞过中文版
- 支持本地部署,而且跨平台支持,是Rust实现
所以结论
本人NLU小白,想要快速达到效果并可实现,得站在巨人肩膀。所以计划如下:
- 基于Rasa nlu来实现
- 密切关注Snips nlu
网友评论