很久沒更新這個博客了,今天工作中需要實現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方法裏。
可以發現每個policy都需要train,63行。什麼是policy呢?policy就是對話管理的策略,用來判斷機器回覆標籤的準則。
我們這裏研究的是memoization policy。
、
可以發現momoization policy需要training trackers作爲參數來產生訓練訓練集。
memoization實際上就是記錄所有的狀態,和狀態對應的action。將這些數據持久化之後等待預測時使用。
預測時則是讀出這些數據並查詢當前狀態對應的action
結合上下圖可以看出states都放入了look up屬性中。feature key就是狀態,feature item是action分類
states如上圖所示,prev action listen這個action分類表示系統監聽鍵盤輸入,但它放在數據裏的意義不明,還需要再探索