【对话系统】rasa源代码阅读-探索memoization policy是如何实现的

很久没更新这个博客了,今天工作中需要实现rasa的story流程功能,所以先看看rasa的源代码找一些灵感。

 

首先我们先train一个对话模型,rasa -core是用来训练和使用对话管理模型的。下面是train部分的代码。

from rasa_core.agent import Agent
from rasa_core import config

import uuid
def agent_train():
    policies = config.load("policies.yml")
    agent = Agent("domain.yml", policies=policies)
    training_data = agent.load_data("data/stories_order_food.md")
    agent.train(training_data, validation_split=0.0)
    agent.persist("./tests/models/dialogue2")

进入agent 的train方法里。

【对话系统】rasa源代码阅读-探索memoization policy是如何实现的_第1张图片

可以发现每个policy都需要train,63行。什么是policy呢?policy就是对话管理的策略,用来判断机器回复标签的准则。

我们这里研究的是memoization policy。

【对话系统】rasa源代码阅读-探索memoization policy是如何实现的_第2张图片

 

可以发现momoization policy需要training trackers作为参数来产生训练训练集。

memoization实际上就是记录所有的状态,和状态对应的action。将这些数据持久化之后等待预测时使用。

预测时则是读出这些数据并查询当前状态对应的action

【对话系统】rasa源代码阅读-探索memoization policy是如何实现的_第3张图片

结合上下图可以看出states都放入了look up属性中。feature key就是状态,feature item是action分类

【对话系统】rasa源代码阅读-探索memoization policy是如何实现的_第4张图片

【对话系统】rasa源代码阅读-探索memoization policy是如何实现的_第5张图片

 

【对话系统】rasa源代码阅读-探索memoization policy是如何实现的_第6张图片

states如上图所示,prev action listen这个action分类表示系统监听键盘输入,但它放在数据里的意义不明,还需要再探索

【对话系统】rasa源代码阅读-探索memoization policy是如何实现的_第7张图片

 

你可能感兴趣的:(rasa)