就是能把接收到的自然语言处理为命令库中对应的命令。 比如 “帮我搜一下 XXXX ” 和 “ XXXX 是什么意思” 处理为同一个命令,当然 “ XXXX ” 是作为命令的参数
1
TimePPT 2019-05-17 12:04:38 +08:00 1
这种特异性需求通常需要自己按照需求对 NLP 模型进行训练。
现在市面上的流行架构是对自然语句做 NLU (语义理解),确定 intent (意图),并对意图涉及到的 Slot (槽位)进行抽取确定,之后对 slot value 做 normalize (标准化),生成标准请求字段请求下游资源,返回结果后进行结构化展示或者再 NLG (自然语言生成)到 answer 上面是提供思路,有没有轮子就不知道了。 |
3
TimePPT 2019-05-17 13:32:44 +08:00 1
@bruce00 因为需求特异吧,市面上轮子比较多的是一些生活查询类的 bot,比如查个天气啥的,查 man page 这种估计也就程序猿用的多吧 233
其实这个好的一点是一般 man page 都是索引好的,下游资源不用太多处理,麻烦就麻烦在 NLU 这块,intent 要有数据训练分类器(如果仅仅是一个 domain 直接上过滤器就好),slot 抽取这块也比较麻烦。句式的支持上多样性越高对 NLU 的要求就越高,如果仅仅一种或者有限的几种句式的话可以试试自定义 Pattern 解决。 |
4
TimePPT 2019-05-17 13:36:08 +08:00 1
@bruce00 还有就是内容相同或者相似判断,比如你问 参数 a 是什么意思,有可能下游会有多个命令参数都带 a,怎么确定问的是哪个?
一般这种就涉及多轮询问确定完整意图了,简单的可以用一次检索返回结果后给一个 list 进行选取,复杂的可能就要反问确定。涉及多轮交互的,就有一个对话 session 管理的问题在里面了。 市面上应该有开源或者封装好的简单 chatbot,支持自定义那种,自己改改也许也能用。 |
5
bruce00 OP @TimePPT 感谢耐心科普,我现在对于识别不了的消息就是手动在数据库中标记对应命令;对话管理建立之后会轻松些,能做到即时学习;文本相似应该也能解决一部分。其它的处理方法就需要继续学习了
|
6
RingoTC 2019-10-31 16:35:31 +08:00
可以了解一下追一科技发起的 NL2SQL 比赛,现在比赛结束了,高分方案也都分享了出来。
|