闲聊模型的实践并应用到rasa

前言

 我们都知道rasa是用来做任务型对话的,但有时候不在自定义意图里面就比较难处理。我们相到的办法就是在policies里面配置FallbackPolicy,当nlu_thresholdcore_threshold低于给定的阈值时候就会走对应的action。要么你回复"不好意思,我还不知道这个呀!",要么你弄个faq做一个检索式回复,之前接过图灵机器人接口接入了闲聊。但是如果能够自己训练一个闲聊岂不是美哉。
 生成式的nlg还是得基于seq2seq。尝试下来UNILM模型的效果最好。所以将UNILM结合了rasa做了一个兜底的工作。

UNILM

 UNILM(Unified Language Model Pre-training for Natural Language Understanding and Generation),提出了一种简洁的预训练方法,直接复用了bert的结构和参数。
 具体的理论和代码解释参考苏大佬的从语言模型到Seq2Seq:Transformer如戏,全靠Mask

论文链接

代码

 直接干货吧,代码是基于苏大佬代码改的。代码地址:https://pan.baidu.com/s/1-Que9-6NW0v-lh0ngYn-uw 密码:v6al

rasa中应用

 rasa中应用就很简单了,直接自定义一个defaultfallback的action,比如:

class ActionDefaultFallback(Action):
    def name(self):
        return "action_default_fallback"

    def run(self, dispatcher, tracker, domain):
        text = tracker.latest_message.get('text')

        # get_response方法就是闲聊的服务接口调用
        message = get_response(text) 
        dispatcher.utter_message("{}".format(message['text']))
   
        return [UserUtteranceReverted()]

 然后就是在config.yml文件里面配置对应的policy,比如:

- name: FallbackPolicy
    fallback_action_name: 'action_default_fallback'
    nlu_threshold: 0.6
    core_threshold: 0.3

 ok,可能还有更好的nlg方法,都可以尝试。但就rasa,他只是个框架,我们可以灵活使用。 : )

你可能感兴趣的:(闲聊模型的实践并应用到rasa)