<label id="qqrfm"><meter id="qqrfm"></meter></label>
      <span id="qqrfm"></span><label id="qqrfm"><meter id="qqrfm"></meter></label>

        Uber 開源 Plato:擴展性極強的開發測試會話 AI 平臺,可實現多智能體并行訓練!

        在過去的幾十年中,智能會話系統已經發生了顯著的變化,從關鍵字識別交互式語音應答(IVR)系統到跨平臺智能個人助理,都在慢慢成為日常生活中不可或缺的一部分。在這樣的背景環境下,我們需要一個直觀、靈活和全面的研發平臺,用來幫助我們進行新算法評估、快速原型創建以及可靠地部署會話 AI 智能體。
        因此,Uber AI 發布了名為「柏拉圖研究會話系統」(Plato Research Dialogue System)的開源人工智能平臺,來解決這個問題。雷鋒網 AI 科技評論將其文章整理編譯如下。

        Uber 開源 Plato:擴展性極強的開發測試會話 AI 平臺,可實現多智能體并行訓練!

        柏拉圖研究會話系統(Plato)簡介

        Plato 是一個用于構建、訓練和部署會話 AI 智能體的平臺。它能夠使我們在會話 AI 中進行最先進的研究,快速創建原型和演示系統,以及更便捷的采集會話數據。而且該系統有「簡潔」和「易于理解」的特點,并與現有的深度學習和與現有深度學習框架和貝葉斯優化框架(用于模型調優)集成,可減少編寫代碼的需要。因此不論是經驗豐富的研究人員還是會話 AI 背景有限的興趣愛好者,都能夠輕松掌握其使用方法。

        同時,我們也在平臺拓展性方面做出了許多努力,如一般研究或特定用例所用工具,包括 Olympus,PyDial,ParlAI,Virtual Human Toolkit,Rasa,DeepPavlov,ConvLab 等。在評估是否利用這些工具時,我們發現許多用戶需要熟悉特定于平臺的源代碼,關注特定的用例。這既不靈活也無法可靠地支持其他用戶使用,并且有時還需要使用許可證。

        Plato 則能夠解決這些問題,并旨在構建、訓練和部署會話 AI 智能體。它支持通過語音、文本或結構化信息(會話行為)進行交互,并且每個會話智能體可以與人類用戶、其他會話智能體(在多智能體設置中)或數據進行交互。最重要的是,Plato 可以為每個會話智能體組件合并現有的預訓練模型,并且每個組件都可以在線(在交互期間)或離線(從數據)進行訓練。

        Plato 如何運作?

        從概念上講,會話智能體需要經過各種步驟才能處理它接收的輸入信息(例如,「今天天氣如何?」)并產生恰當的輸出(「有風但不太冷」)。主要步驟對應于標準體系結構的主要組件(見圖 1): 
        • 語音識別(將語音轉錄為文本)
        • 語言理解(從該文本中提取意義)
        • 狀態跟蹤(迄今為止所說和所做工作的匯總信息)
        • API 調用(搜索數據庫,查詢 API 等)
        • 會話策略(生成智能體響應的抽象含義)
        • 語言生成(將抽象意義轉換為文本)
        • 語音合成(將文本轉換為語音)
        我們使 Plato 的設計盡可能模塊化且具有靈活性,它支持傳統的和自定義的會話 AI 架構。更重要的是,它支持多方交互,其中的多個智能體可能具有不同的角色,可以相互交互,同時進行訓練,并解決分布式問題。

        下面的圖 1 和圖 2 描繪了與人類用戶和模擬用戶交互時 Plato 會話智能體架構的示例。與模擬用戶交互是研究社區中用于快速開始學習的常見做法(即在與人類交互之前學習一些基本行為)。每個單獨的組件都可以用任意機器學習庫(例如,Ludwig,TensorFlow 或 PyTorch)進行在線或離線的訓練。因為 Plato 是一個通用框架,Uber 的開源深度學習工具箱 Ludwig 是一個很好的選擇,因為 Ludwig 不需要編寫代碼并且與 Plato 完全兼容。
         Uber 開源 Plato:擴展性極強的開發測試會話 AI 平臺,可實現多智能體并行訓練!
        圖 1:Plato 的模塊化架構有助于組件的在線或離線訓練,可以通過自定義或預先訓練的模型進行替換。(圖中的灰色組件不是核心柏拉圖組件)
        Uber 開源 Plato:擴展性極強的開發測試會話 AI 平臺,可實現多智能體并行訓練!
        圖 2:使用模擬用戶而不是人類用戶,如圖 1 所示,我們可以預先訓練柏拉圖各組件的統計模型。然后,這些可以用于創建原型會話智能體,該智能體可以與人類用戶交互以收集更多自然數據,這些數據隨后可用于訓練更好的統計模型。(圖中的灰色組件不是柏拉圖核心組件)
        除了單智能體交互之外,Plato 還支持多智能體會話,其中多個柏拉圖智能體可以相互交互并相互學習。具體來說,柏拉圖將產生會話智能體,確保輸入和輸出(每個智能體聽到和說出的內容)被恰當地傳遞給每個智能體,并跟蹤會話。

        這種設置可以促進多智能體學習的研究,其中智能體需要學習如何生成語言以執行任務,以及在多方交互的子領域中進行研究(會話狀態跟蹤、會話輪控制等等)。會話原則定義了每個智能體可以理解的內容(實體或含義的本體,例如:價格、位置、偏好、烹飪類型等)以及它可以做什么(詢問更多信息、提供一些信息、調用 API 等)。智能體可以通過語音、文本或結構化信息(會話行為)進行通信,并且每個智能體都有自己的配置。下面的圖 3 描述了這種架構,概述了兩個智能體和各種組件之間的通信:
         Uber 開源 Plato:擴展性極強的開發測試會話 AI 平臺,可實現多智能體并行訓練!
        圖 3:Plato 的架構允許對多個智能體進行并行訓練,每個智能體可能具有不同的角色和目標,并且可以促進多方交互和多智能體學習等領域的研究。(圖中的灰色組件不是核心柏拉圖組件)

        最后,Plato 通過圖中所示的通用智能體體系結構支持自定義體系結構(例如:將 NLU 拆分為多個獨立組件)和聯合訓練的組件(例如:文本到會話狀態、文本到文本或任何其他組合)。如圖 4 所示:
        Uber 開源 Plato:擴展性極強的開發測試會話 AI 平臺,可實現多智能體并行訓練!
        圖 4:Plato 的通用智能體體系結構支持廣泛的自定義,包括聯合組件、語音到語音組件和文本到文本組件,所有這些組件都可以串行或并行執行。

        此模式脫離了標準會話智能體體系結構,支持任何類型的體系結構(例如:使用聯合組件、文本到文本或語音到語音組件或任何其他設置),并允許將現有或預先訓練有素的模型加載進 Plato 中。

        用戶只需為模塊提供 Python 類名和包路徑,以及模型的初始化參數,或將自己的組件載入 Plato 中,就可以自行定義這個體系結構。用戶簡單的按照應該執行的順序將模塊列出之后,Plato 就可以負責其余部分了,包括:包裝輸入/輸出、鏈接模塊和處理會話。Plato 支持模塊的串行和并行執行。

        Plato 還通過組合結構的貝葉斯優化(BOCS)為會話 AI 架構或單個模塊參數的貝葉斯優化提供支持。

        Plato 安裝及運行

        版本 Plato(v.1.1)不需要實際安裝,因為它允許用戶修改部分代碼或擴展現有用例以獲得更大的靈活性。但是,Plato 確實依賴于某些外部庫,需要安裝這些庫。可以按照以下兩個步驟完成此過程:

        注意:Plato 是用 Python 3 開發的。

        1. 克隆存儲庫:
        git clone 
        git@github.com:uber-research/plato-research-dialogue-system.git

        2. 安裝要求:
        MacOS:
               brew install portaudio 
               pip install -r requirements.txt
        Ubuntu / Debian:
                sudo apt-get install python3-pyaudio 
                pip install -r requirements.tx
        Windows:
                pip install -r requirements.txt

        為了支持語音,則必須安裝 PyAudio,它具有開發人員機器上可能不存在的許多依賴項。如果上述步驟不成功,PyAudio 安裝錯誤這篇文章(https://stackoverflow.com/questions/5921947/pyaudio-installation-error-command-gcc-failed-with-exit-status-1)包含了有關如何獲取這些依賴項并安裝 PyAudio 的說明。

        其他常見安裝問題的解決方案可在 Commonsues.md.

        3. 運行:
        有關配置文件以及如何運行 Plato 的快速介紹,請參見下文。

        運行 Plato 會話智能體
        要運行 Plato 會話智能體,用戶必須使用相應的配置文件運行以下命令(請參閱示例/ simulate_agenda.yaml 以獲取示例配置文件,其中包含有關環境和要創建的智能體的許多設置以及他們的組件):
        python runPlatoRDS.py -config <PATH TO yaml CONFIG FILE>
        下面列出了一些示例模式和配置:

        1)運行單個會話智能體

        • 使用 Cambridge Restaurants 域中基于議程的用戶模擬器運行模擬:
        python runPlatoRDS.py -config examples / config / simulate_agenda.yaml
        • 使用 Cambridge Restaurants 域中基于議程的模擬器運行基于文本的交互:
        python runPlatoRDS.py -config examples / config / simulate_text.yaml
        • 使用 Cambridge Restaurants 域中基于議程的模擬器運行基于語音的交互:
        python runPlatoRDS.py -config examples / config / simulate_speech.yaml

        2)運行多個會話智能體

        柏拉圖的主要功能之一是允許兩個智能體互相交互。每個智能體可以具有不同的角色(例如,系統和用戶)、不同的目標,并接收不同的獎勵信號。例如,要在基準劍橋餐廳域上運行多個 Plato 智能體,我們運行以下命令來訓練智能體的會話策略并對其進行測試:
        • 訓練階段
        python runPlatoRDS.py -config 示例/ config / CamRest_MA_train.yaml
        • 測試階段
        python runPlatoRDS.py -config 示例/ config / CamRest_MA_test.yaml

        3)運行通用 Plato 會話智能體

        本文中的大多數討論和示例都圍繞傳統的會話智能體體系結構展開。然而,Plato 不需要堅守這條規則,它的通用智能體支持任何范圍的自定義模塊,包括:將自然語言理解分解成許多組件、將多個組件并行運行以及只有一個文本到文本模型等等。

        通用智能體允許用戶將其自定義模塊作為 Python 類對象加載。對于配置文件中列出的每個模塊,Plato 將使用給定的路徑和參數實例化該類模型。然后在每次會話期間,通用智能體將按順序調用每個模塊(按照其配置文件中提供的順序),并將當前模塊的輸出傳遞給列表中的下一個模塊,最后通用智能體將返回最后一個模塊的輸出。

        以下是在通用模塊模式下運行單個 Plato 智能體或多個 Plato 智能體的兩個示例。
        • 單一通用智能體,用于實現自定義體系結構或使用現有的預先訓練的統計模型:
        python runPlatoRDS.py -config 示例/ config / simulate_agenda_generic.yaml
        • 多個通用智能體,與上述相同,但適用于多個智能體(假設該智能體已使用 Examples / config / CamRest_MA_train.yaml 訓練過會話策略):
        python runPlatoRDS.py -config examples / config / MultiAgent_test_generic.yaml

        數據訓練

        Plato 支持使用任何深度學習框架在線(在交互期間)或離線(從數據)方式訓練智能體的內部組件。實際上,只要符合 Plato 接口輸入/輸出的類型,任何模型都可以加載到 Plato 中。例如:目標模型是自定義 NLU,它只需要具有 Plato 的 NLU 抽象類,實現必要的功能,并將數據打包/解壓到自定義模型中即可。

        Plato 內部經驗數據追蹤

        為了便于在線學習、調試和評估,Plato 在一個稱為會話情節記錄器的結構中跟蹤其內部經驗數據,包含有關先前的會話狀態、采取的行動、當前會話狀態、收到的話語信息和產生的話語信息、收到的獎勵以及一些其他結構,如:一個可用于跟蹤上述類別無法收集的任何其他內容的自定義字段。

        在會話結束或按照指定時間間隔結束時,每個會話智能體將調用其內部組件的 train()函數,將會話經驗數據作為訓練數據傳遞;然后每個組件都會選擇訓練所需的信息部分。

        要使用在 Plato 中實現的學習算法,任何外部數據(如 DSTC2 數據)都需要被解析為 Plato 類型的經驗數據,以便這些外部數據可以由訓練中相應的組件進行加載和使用。或者用戶可以解析數據,并在 Plato 之外訓練他們的模型;然后在需要將這些數據用于 Plato 智能體時簡單地加載訓練模型。

        在線/離線訓練
        在線訓練的過程就跟用戶希望將所訓練每個組件配置中的「Train」標志轉換為「True」一樣簡單。而以數據進行訓練的離線訓練中,用戶只需加載他們從數據集中解析的經驗數據。我們將使用 DSTC2 數據集作為 Plato 離線訓練的一個例子,該數據集可以從「第二會話狀態跟蹤挑戰網站」

        (http://camdial.org/~mh521/dstc/downloads/dstc2_traindev.tar.gz)中獲得。

        該 runDSTC2DataParser.py 腳本將解析 DSTC2 數據,并將其保存為 Plato 的經驗數據。然后,它將加載該經驗數據并訓練受監督的策略:

                       python runDSTC2DataParser.py -data_path 
        <PATH_TO_DSTC2_DATA> / dstc2_traindev / data /

        可以使用以下配置文件測試經過訓練的策略:

               python runPlatoRDS.py -config 
        Examples/ config / simulate_agenda_supervised.yaml
        注意:用戶可以將經驗數據從過去的交互或從數據加載到 Plato,然后通過強化學習或其他學習方法繼續訓練他們的模型。

        用 Plato 和 Ludwig 進行訓練

        Ludwig 是一個由 Uber 發布的開源深度學習框架,它允許用戶在不編寫任何代碼的情況下訓練模型。用戶只需將其數據解析為 CSV 文件,創建 Ludwig 配置文件,然后在終端中簡單執行運行命令即可。用 YAML 編寫的 Ludwig 配置文件描述了神經網絡的架構,其中包含在 CSV 文件中使用到的功能以及其他參數。

        在上一節中,runDSTC2DataParser.py 腳本實際上生成了一些 CSV 文件,可用于訓練自然語言理解和生成,可在以下位置找到:Data/data。作為一個例子,我們將看到如何訓練系統端自然語言生成器。為此,用戶需要編寫 yaml 配置文件,類似于下面所示。

        Input_features:
               name:nlg_input
               type:sequence
               encoder:rnn
               cell_type:lstm
        Output_features:
               name:nlg_output
               type:sequence
               decoder:generator
               cell_type:lstm
        training:
               epochs:20
               learning_rate:0.001
               dropout:0.2

        并訓練他們的模型:

                       ludwig experiment –model_definition_file
        Examples/config/ludwig_nlg_train.yaml –data_csv
        Data/data/DSTC2_NLG_sys.csv –output_directory Models/CamRestNLG/Sys/

        接下來是在 Plato 中加載模型。用戶應該轉到 simulate_agenda_nlg.yaml 配置文件,并在必要時更新 Ludwig 模型的路徑:
        ...
        NLG:
            nlg:CamRest
            model_path:<PATH_TO_YOUR_LUDWIG_MODEL>/model
        ...
        并測試該模型的工作原理:

                python runPlatoRDS.py -config 
        Examples / config / simulate_agenda_nlg.yaml
        請記住,Ludwig 每次調用時都會創建一個新的 experiment_run_i 目錄,因此用戶需要確保 Plato 配置文件中的模型路徑是最新的。

        Ludwig 還提供了一種在線訓練模型的方法,因此在實踐中,用戶只需要編寫非常少的代碼來構建、訓練和評估 Plato 中新的深度學習組件。

        Plato 智能體新域生成

        為了給面向任務的應用程序(如插槽填充)構建會話智能體,用戶需要一個項目數據庫和一個描述其域的本體。Plato 提供了一個腳本來自動執行此過程。

        例如,假設用戶想要為在線花店構建會話智能體,在 CSV 文件中包含以下項目:
        物品 ID,類型,顏色,價格,場合
        1,玫瑰,紅色,1,任何
        2,玫瑰,白色,2,周年紀念
        3,玫瑰,黃色,2,慶祝
        4,莉莉,白色,5,任何
        5,蘭花,粉紅色,30,任何
        6,大麗花,藍色,15,任何
        用戶只需調用 createSQLiteDB.py 即可自動生成 DB SQL 文件和 JSON 本體文件。用戶可以在配置文件中指定信息、請求和系統可請求的插槽,如下所示:
        -
        GENERAL:
              csv_file_name:Data / data / flowershop.csv 
              db_table_name:
              estore db_file_path:Ontology / Ontologies / flowershop.db 
              ontology_file_path:Ontology / Ontologies / flowershop.json
        ONTOLOGY(本體):
              informable_slots:[類型,價格,場合]
              requestable_slots:[價格,顏色]
              system_requestable_slots:[價格,場合]
        注意:ONTOLOGY 部分是可選的。如果 ONTOLOGY 未被提供,腳本將假定所有插槽都是信息性的、可請求的和系統可請求的。

        并運行腳本:
               python createSQLiteDB.py -config
        Examples / config / create_flowershop_DB.yaml
        A flowershop-rules.json 和 a flowershop-dbase.db 可以在 Domain/Domains 中找到。我們現在可以簡單地使用虛擬組件運行 Plato 并與簡單智能體進行交互作為完整性檢查:
                   python runPlatoRDS.py -config 
        Examples / config / flowershop_text.yaml

        Plato 智能體新模塊生成

        根據其功能,我們有兩種方法可以創建新模塊。如果模塊采用了執行 NLU 或會話策略的新方法實現,那么用戶應該編寫一個自相應抽象類的類。

        但是,如果一個模塊不適合單個智能體基本組件之一,例如:它執行命名實體識別或從文本預測會話行為,那么用戶必須編寫一個直接從 ConversationalModule 得到的類,然后這個類只由通用智能體使用。

        自抽象類

        用戶需要創建一個自相應 Plato 抽象類的新類,并實現抽象類定義的接口以及他們希望的任何其他功能。此類應具有唯一名稱(例如「myNLG」),用于在解析配置文件時將其與其他選項區分開來。在此版本中,除非用戶使用通用智能體,否則需要手動添加解析配置文件的一些條件(例如:會話智能體、會話管理器等)。

        構建新模塊

        要構造新模塊,用戶必須將其代碼添加到從會話模塊得到的新類中。然后他們可以通過在配置中提供適當的包路徑、類名和參數,用通用智能體來加載模塊。

        MODULE_i:
            package:myPackage.myModule
            Class:myModule
            arguments:
              model_path:Models/myModule/parameters/
              …

        用戶負責確保新模塊能夠適當地處理前面模塊的輸出,并且新模塊的輸出可以按照其通用配置文件中的規定,由其他模塊恰當地使用。

        未來計劃

        由 Uber AI 研發的項目 Plato 被用于促進 SIGDial 2019 的工作,即同時訓練兩個通過自生成語言相互交流的會話智能體。在這項工作中,我們可以利用 Plato 輕松對這兩個會話智能體進行訓練,使它們中一個能實現餐館信息詢問,而另一個則可以提供該問題回答的信息。并且隨著時間的推移,他們的談話將變得越來越自然。

        我們相信,Plato 能夠在 Ludwig、TensorFlow、PyTorch、Keras 以及其他開源項目的深度學習框架中更加無縫地進行會話智能體的訓練,從而改進學術和行業應用中的會話 AI 技術。
        原文鏈接:
        https://eng.uber.com/plato-research-dialogue-system/
        GitHub 地址:
        https://github.com/uber-research/plato-research-dialogue-system
        更詳細的使用方法:
        https://uber-research.github.io/plato-research-dialogue-system/
        來源 | 雷鋒網
        作者 | 楊鯉萍

        上一篇:多智能體系統創始人 Victor Lesser:深度學習之外,AI 其他領域亦有所成就
        下一篇:2019世界人工智能大會倒計時30天 | 智聯世界 無限可能

        主站蜘蛛池模板: 18禁免费无码无遮挡不卡网站| 久热中文字幕在线精品免费| 国产中文字幕免费观看| 亚洲精品精华液一区二区| 成年人在线免费看视频| 亚洲精品自偷自拍无码| 国产精品另类激情久久久免费| 色偷偷亚洲男人天堂| 亚洲国产精品尤物YW在线观看| 最新欧洲大片免费在线| 亚洲永久在线观看| 国产真实伦在线视频免费观看| 美女被爆羞羞网站免费| 中文字幕日韩亚洲| 一级毛片免费观看| 亚洲国产乱码最新视频| 午夜无遮挡羞羞漫画免费| 免费国产黄网站在线看| 亚洲国产日韩在线视频| 在线永久看片免费的视频| 亚洲AV日韩AV一区二区三曲| 亚洲精品A在线观看| 亚洲AV无码一区二区三区网址| 波多野结衣视频在线免费观看 | 日韩精品视频免费观看| 免费无码午夜福利片69| 亚洲国产精品va在线播放| 2021在线观看视频精品免费| 亚洲乱妇熟女爽到高潮的片| 超清首页国产亚洲丝袜| 日本片免费观看一区二区| 国产亚洲精彩视频| 成年人视频在线观看免费| 一区二区在线视频免费观看| 亚洲A∨无码一区二区三区| 成人激情免费视频| 成全视频高清免费观看电视剧| 亚洲午夜久久久精品电影院| 一本色道久久88亚洲综合| 18禁在线无遮挡免费观看网站| 亚洲综合偷自成人网第页色|