一种在智能对话中实现上下文功能的方法

智能对话中有一个经典的场景:

Q:上海的天气
A:上海的天气是……
Q:那北京的呢
A:北京的天气是……

第二个问句是一个特殊的问句,它的语义和前一句关联,但单独说它没有明确的意图。目前的olami开放平台提供的IDS模块(应用管理->配置模块->对话系统模块)自身可支持上下文,但对平台用户自己开发的NLI模块却没有提供直接的支持。不过我们可以通过一些办法实现这种功能。下面就介绍一下解决方案。

分析

这种上下文的语句有两种类型,一种是对前文的语义进行一部分的修改,另一种是补充前文语义缺失的部分。修改前文语义的语句一般都是问更多的信息,所以这里把处理这种语句的grammar称为more grammar;补充前文语义,一般都是补充osl语言描述的“slot”信息,所以处理它的grammar在本文叫做slot grammar。前面的例子就是修改前文语义,下例是补充前文语义的情况:

Q:查天气
A:你要查哪里的天气
Q:上海
A:上海的天气是……

大多数时候more grammar可以很好的解决问题,但有些情况就不适用。比如:

Q:买机票
A:请问你要从哪里出发
Q:上海                    ⑴
A:请问你要去哪里
Q:北京                    ⑵
A:上海到北京的机票

⑴和⑵两句的类型完全相同,但slot名称不同,只能用同一句grammar来抓取。如果用more grammar来处理,拿到语义后还要纠正slot的名称,这和一般的more grammar有一定的区别。所以将其设定为特殊的more grammar —— slot grammar,在这当中进行设置slot的操作。

利用前面定好的规则,我们希望实现如下场景:

Q:查天气
A:你要查哪里的天气
Q:上海
A:上海的天气是……
Q:那北京的呢?
A:北京的天气是……
Q:南京的呢
A:南京的天气是……

另外,如果有多个应用,不应该出现一个模块的more处理了另一个模块上文的情况:

Q:导航去南京
A:到南京的路线……
Q:那北京的呢?    // 这是天气的more
A:北京的天气是……  // 不应该出现这种情况

最后,两个应用模块共同的more语法要能被正确的模块处理:

Q:查天气
A:你要查哪里的天气
Q:上海
A:上海的天气是……
Q:导航
A:你要去哪里
Q:上海
Q:到上海的路线是……

总结起来,我们的目标有:

  1. 模块的more可以继承上文的部分语义组合成一个完整的语义;

  2. 一个模块的more不应该继承另一个模块的上文;

  3. 相同的句式(例如整句是一个地点)能被正确的模块处理。

方案

计划用两个功能模块和一个公共模块来演示上下文的功能。两个功能模块一个是天气,功能是查指定城市的天气;另一个是导航,考虑到简化流程,只接收目的地的设置,出发地理解为当前地点。公共模块用来处理一些两个模块都要支持的more语句,例如“北京”这种。

实现

语法平台的操作

首先在平台上建三个新的模块,分别是weather(天气),navi(导航)和common(公共模块)。

然后,由于三个模块都需要一个地点的slot,所以每个模块都添加上:

增加location slot

高级设置中设置验证类别,之后应用时系统会自动验证抓到的内容是不是这个类型。同时引用类型设置为地点,以后可以用”那里“来引用上文的地点:

设置slot类型

接下来依次添加需要的grammar,注意要覆盖上文需要实现场景中的所有情况。普通的grammar和平常一样写,more的grammar将modifier设置为more:

weather

不带location:[我要|帮我|我想]查[[一]下]天气<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值