pydial啓動流程

通過加載配置文件進行啓動,進入整個項目的根文件,pydial.py文件,加載的是這個文件中的chat_command的根文件,其中調用了整個項目的

initialise(configId, configfile, seed, "chat", trainerrorrate=trainerrorrate)

來進行預加載的初始化,在初始化的函數中,從整個配置文件中讀取出,當前是否是單個領域,領域是什麼.最多限制的會話代理個數是多少。 如下便是從general模塊中讀取出來的一些參數。

  isSingleDomain = getOptionalConfigBool("singledomain", isSingleDomain, "GENERAL")
    isSingleModel = getOptionalConfigBool("singlemodel", False, "policycommittee")
    traceDialog    = getOptionalConfigInt("tracedialog", tracedialog, "GENERAL")
    domain         = getOptionalConfigVar("domains", '', "GENERAL")

可看出讀取的是

[GENERAL]
domains = CamRestaurants,CamHotels
isSingleDomain=False
tracedialog = 1

隨後通過section的匹配,例如policy_CamRestaurants來加載對應領域的訓練政策,開始對話是否用hello等。

[policy_CamRestaurants]
belieftype = focus
useconfreq = False
learning = False
policytype = hdc
startwithhello = False

加載配置完成以後,開始調用TextHub模塊中的consoleHub函數。

在consoleHub中開啓代理用戶會話。即其中的

sys_act = self.agent.start_call(session_id='texthub_dialog').模塊。

start_call表示開始的是第一次會話,因此沒有用戶的輸入,在call函數中,進行當前領域的加載,置信度狀態的分析和最終用戶動作的返回。

隨後的持續會話一直調用的是continue_call函數,

整個函數的調用使用瞭如下的流程。

Works through topictracking > semi belief > policy > semo > evaluation -- for turns > 0

在該函數中,便有用戶對話的輸入,和start_call函數相同,第一步首先進行驗證,隨後判斷若是達到了最大用戶代理數,則返回bye. 隨後進行用戶輸入話語置信的分析:

state = self.semi_belief_manager.update_belief_state(ASR_obs=asr_info, sys_act=prev_sys_act,
                                                     dstring=currentDomain, turn=self.currentTurn,hub_id = self.hub_id, sim_lvl=self.sim_level)

根據對話決策,將當前分析的置信度輸入,輸出用戶的動作。

  sys_act = self.policy_manager.act_on(dstring=currentDomain, 
                                                  state=state)

進行驗證

# Check ending the call:
        sys_act = self._check_ENDING_CALL(state, sys_act)  # NB: this may change the self.prompt_str

系統產生的話語值也是一個槽值對,

根據決策後的用戶動作,從semo中輸出對應話語。

   # SEMO:
        self.prompt_str = self._agents_semo(sys_act)
        sys_act.prompt = self.prompt_str

semo根據系統產生的槽值對,填充話語,產生相應的輸出。下一句用戶的輸入也是根據如上的情況。接下來的重點便是分析系統輸入時,是如何產生用戶的動作的,隨後根據用戶的動作和系統的決策函數,來產生相應的系統動作,根據系統的動作,組織成相應的話語進行輸出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章