Plato Research Dialogue System創(chuàng)建、訓(xùn)練和部署會(huì)話 AI 代理
柏拉圖(Plato)研究對(duì)話系統(tǒng)是一個(gè)靈活的框架,可用于在各種環(huán)境中創(chuàng)建、訓(xùn)練和測(cè)試會(huì)話 AI 代理。它支持通過語音、文本或?qū)υ捫袨檫M(jìn)行交互,每個(gè)會(huì)話代理可以與數(shù)據(jù)、人類用戶或其他會(huì)話代理進(jìn)行交互(在多代理設(shè)置中)。每個(gè)代理商的每個(gè)組成部分都可以在線或離線獨(dú)立培訓(xùn),只要遵守 Plato 的界面,Plato 就可以輕松地繞過幾乎任何現(xiàn)有的模型。
柏拉圖(Plato)研究對(duì)話系統(tǒng)如何運(yùn)作?
從概念上講,會(huì)話代理需要經(jīng)過各種步驟才能處理它作為輸入接收的信息(例如,“今天天氣如何?”)并產(chǎn)生適當(dāng)?shù)妮敵觯ā坝酗L(fēng)但不太冷”。)。與標(biāo)準(zhǔn)體系結(jié)構(gòu)的主要組件(參見圖1)相對(duì)應(yīng)的主要步驟是:
- 語音識(shí)別(將語音轉(zhuǎn)錄為文本)
- 語言理解(從該文本中提取意義)
- 狀態(tài)跟蹤(到目前為止已經(jīng)說過和完成的內(nèi)容的匯總信息)
- API 調(diào)用(搜索數(shù)據(jù)庫,查詢 API 等)
- 對(duì)話策略(生成代理人回應(yīng)的抽象含義)
- 語言生成(將抽象意義轉(zhuǎn)換為文本)
- 語音合成(將文本轉(zhuǎn)換為語音)
Plato 的設(shè)計(jì)盡可能模塊化和靈活,它支持傳統(tǒng)和自定義會(huì)話 AI 架構(gòu),重要的是,支持多方交互,其中多個(gè)代理可能具有不同的角色,可以相互交互,同時(shí)訓(xùn)練和解決分布式問題。
下面的圖1和圖2描述了與人類用戶和模擬用戶交互時(shí)的示例 Plato 對(duì)話代理體系結(jié)構(gòu)。與模擬用戶交互是研究社區(qū)中用于快速開始學(xué)習(xí)的常見做法(即,在與人類交互之前學(xué)習(xí)一些基本行為)。每個(gè)單獨(dú)的組件都可以使用任何機(jī)器學(xué)習(xí)庫(例如,Ludwig、 TensorFlow、PyTorch、用戶自己的實(shí)現(xiàn))在線或離線進(jìn)行培訓(xùn),因?yàn)?Plato 是一個(gè)通用框架。Uber 的開源深度學(xué)習(xí)工具箱 Ludwig 是一個(gè)很好的選擇,因?yàn)樗恍枰帉懘a并且與 Plato 完全兼容。
圖1:Plato 的模塊化架構(gòu)意味著任何組件都可以在線或離線進(jìn)行培訓(xùn),可以通過自定義或預(yù)先訓(xùn)練的模型進(jìn)行替換。(此圖中的灰色組件不是核心 Plato 組件。)
圖2:使用模擬用戶而不是人類用戶,如圖1所示,我們可以預(yù)先訓(xùn)練 Plato 各種組件的統(tǒng)計(jì)模型。然后,這些可以用于創(chuàng)建原型會(huì)話代理,該代理可以與人類用戶交互以收集更多自然數(shù)據(jù),這些數(shù)據(jù)隨后可用于訓(xùn)練更好的統(tǒng)計(jì)模型。(此圖中的灰色組件不是 Plato 核心組件。)
除了單代理交互之外,Plato 還支持多代理對(duì)話,其中多個(gè) Plato 代理可以相互交互并相互學(xué)習(xí)。具體來說,Plato 將產(chǎn)生會(huì)話代理,確保輸入和輸出(每個(gè)代理聽到和說出的內(nèi)容)被適當(dāng)?shù)貍鬟f給每個(gè)代理,并跟蹤對(duì)話。
這種設(shè)置可以促進(jìn)多代理學(xué)習(xí)的研究,其中代理需要學(xué)習(xí)如何生成語言以執(zhí)行任務(wù),以及研究多方交互的子領(lǐng)域(對(duì)話狀態(tài)跟蹤,輪流等)。 )。對(duì)話原則定義了每個(gè)代理可以理解的內(nèi)容(實(shí)體或含義的本體;例如:價(jià)格,位置,偏好,烹飪類型等)以及它可以做什么(詢問更多信息,提供一些信息,調(diào)用 API)等)。代理可以通過語音,文本或結(jié)構(gòu)化信息(對(duì)話行為)進(jìn)行通信,并且每個(gè)代理都有自己的配置。下面的圖3描述了這種架構(gòu),概述了兩個(gè)代理和各種組件之間的通信:
圖3:Plato 的架構(gòu)允許對(duì)多個(gè)代理進(jìn)行并發(fā)培訓(xùn),每個(gè)代理具有可能不同的角色和目標(biāo),并且可以促進(jìn)多方交互和多代理學(xué)習(xí)等領(lǐng)域的研究。(此圖中的灰色組件不是核心 Plato 組件。)
最后,Plato 通過圖4所示的通用代理體系結(jié)構(gòu)支持自定義體系結(jié)構(gòu)(例如,將 NLU 分成多個(gè)獨(dú)立組件)和聯(lián)合訓(xùn)練的組件(例如,文本到對(duì)話狀態(tài),文本到文本或任何其他組合)。此模式遠(yuǎn)離標(biāo)準(zhǔn)會(huì)話代理體系結(jié)構(gòu)并支持任何類型的體系結(jié)構(gòu)(例如,使用聯(lián)合組件,文本到文本或語音到語音組件,或任何其他設(shè)置)并允許加載現(xiàn)有或預(yù)先訓(xùn)練有素的模型進(jìn)入 Plato。
圖4:Plato 的通用代理體系結(jié)構(gòu)支持廣泛的自定義,包括聯(lián)合組件,語音到語音組件和文本到文本組件,所有這些組件都可以串行或并行執(zhí)行。
用戶可以通過簡單地提供該類模塊的 Python 類名和包路徑以及模型的初始化參數(shù)來定義自己的體系結(jié)構(gòu)和/或?qū)⒆约旱慕M件插入到 Plato 中。用戶需要做的就是按照應(yīng)該執(zhí)行的順序列出模塊,Plato 負(fù)責(zé)其余部分,包括包裝輸入/輸出,鏈接模塊和處理對(duì)話。Plato 支持模塊的串行和并行執(zhí)行。
Plato 還通過組合結(jié)構(gòu)的貝葉斯優(yōu)化(BOCS)為對(duì)話 AI 架構(gòu)或單個(gè)模塊參數(shù)的貝葉斯優(yōu)化提供支持。
安裝
-
克隆此存儲(chǔ)庫:
git clone [email protected]:uber-research/plato-research-dialogue-system.git -
安裝要求:
對(duì)于 MacOS:
brew install portaudio pip install -r requirements.txt對(duì)于 Ubuntu/Debian:
sudo apt-get install python3-pyaudio pip install -r requirements.txt對(duì)于 Windows:
pip install -r requirements.txt -
運(yùn)行
有關(guān)配置文件以及如何運(yùn)行第一個(gè) Plato 代理的快速介紹,請(qǐng)參見文檔。
為了支持語音,有必要安裝 PyAudio,它具有許多開發(fā)人員機(jī)器上可能不存在的依賴項(xiàng)。如果上述步驟不成功, PyAudio 安裝錯(cuò)誤的這篇文章包含有關(guān)如何獲取這些依賴項(xiàng)并安裝 PyAudio 的說明。
