rasa3.0表单源代码篡改记录

我的需求需要尽量跳过rasa的实体识别,用其它预训练模型进行命名实体识别,因为rasa只能挑选指定的几个模型进行实体识别,最好用的也就是Bert,rasa也兼容了,但还是少些自由度的。

一、源代码形式修改RASA表单的词槽和槽值

基本思路是,外部模型抽取到结果后放入rasa的表单,去填词槽slots,因此需要篡改源代码,直接说重点,表单核心在:

rasa.core.processor.py文件下的parse_data变量

可用通过操控parse_data的内部值来操控表单

位置如下:

 这个函数的作用可以看rasa官方文档:

rasa.core.processor

每一轮对话如果想获取用户的输入原句,以便输入外部模型,第二个红框可以实现

if下面的语句不会触发,self.http_interpreter一直是None值,只会触发else下面的语句,因此我们可以通过

print("33333333333333333333" + str(parse_data))

在运行rasa shell进行对话时,就可以看见parse_data作用了,记录了实体,意图,执行度,基本是全部的表单核心信息了。

如,要替换地址(address)槽中的的实体代码如下:

 执行效果如下,可以看见,用户原句的item为苹果手机,address是北京市朝阳区大胡同街道,在parse_data的对应位置是红线画出的位置,在机器人回复时,它们被成功替换掉了,(item是我在actions中替换的不必在意,因为在这里同样的代码改一改也能替换item槽)

二、源代码形式修改意图intent

一般表单前都会接一个意图

要强行修改意图,或是对rasa识别后的意图做一些修改可以使用下面的方式,代码重点在_parse_message_with_graph函数中(还是在processor.py):

 

如注释一样,核心内容(用户意图,词槽和词槽值)在results["run_RegexMessageHandler"][0].data,可以在下图看到意图在"intent"中,因此替换方式为
results["run_RegexMessageHandler"][0].data["intent"]["name"] = "想要替换的意图名"

 注意!!此处替换会直接导致后续的action触发的不同

三、补充:如何在命令行运行的情况下进行debug rasa程序?

需要确定你的环境中的rasa位置,确定你的项目位置

 开始新建debug

 按照上图进行配置后,点击保存,在点击debug即可,相当于在命令行执行了rasa shell

如果需要 rasa shell --debug   或  rasa  run --cors  "*"

将shell 替换为  shell --debug  或  run --cors  "*" 即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值