本文将介紹 Alexa Prize Socialbot Challenge 2019 的比賽情況以及 Topical-Chat 資料集
Aelxa Prize 介紹
Alexa 是為 Amazon Echo 提供支援的語音服務,它使客戶僅使用語音即可以更直覺的方式與周圍的世界互動。
Alexa Prize Socialbot Grand Challenge 是一項旨在促進對話 AI 發展的大學生競賽,比賽中要求參賽隊伍開發一個社交機器人(将作為 Alexa 的一項技能),可以在熱門話題和新聞事件上與人類進行連貫和持續的互動交流。
參賽隊伍的任務包括知識擷取,自然語言了解,自然語言生成,上下文模組化,常識推理和對話管理。具體來說,機器人需要具備的能力包括:1)自然的話題切換;2)合理地選擇知識;3)能夠将事實和觀點(知識)融入到對話中。
參賽隊伍的機器人将與全美 Alexa 使用者進行對話,并且 Alexa 使用者可以進行打分和回報,來将幫助參賽隊伍改進算法。
最終獲勝的隊伍将獲得50萬美金的大獎。
Alexa Prize 2019
Alexa Prize 從 2017 年開始,目前已經舉辦三屆,第三屆(即 Alexa Prize 2019)于不久前結束(2020年7月)。
時間安排
Alexa Prize 2019 整個比賽持續一年多,具體時間安排如下:
時間 | 事件 |
---|---|
2019年3月-5月 | 隊伍申請階段 |
2019年6月 | 宣布參賽隊伍(10支) |
2019年12月 | 向Alexa使用者開放 |
2020年2月-3月 | 四分之一決賽(9支) |
2020年3月-4月 | 半決賽(5支) |
2020年5月-7月 | 決賽(3支) |
2020年7月 | 專家團評審 |
比賽結果
半決賽期間,所有隊伍的平均得分(Alexa 使用者評分,最高5分)為 3.47 分
year | average score |
---|---|
2017 | 2.91 |
2018 | 3.19 |
2019 | 3.47 |
來自埃默裡大學的冠軍隊伍平均對話時長為 7分37秒
award | final score | team | school | last |
---|---|---|---|---|
$500,000 | 3.81 | Emora | The Emory University | #4 |
$100,000 | 3.17 | Chirpy Cardinal | Stanford University | - |
$50,000 | 3.14 | Alquist | Czech Technical University | #2 |
Alexa 使用者最感興趣的話題(橙色)包括電影、科技和音樂;其中 Other 為其他主題,COVID-19 新冠病毒占比重較大

比賽過程中,參賽隊伍将獲得 Amazon 官方支援,包括 研究經費,Alexa 裝置,AWS 服務等。除此以外,本次比賽還提供了對話機器人工具包(CoBot)以及主題對話資料集(Topical-Chat)。
Conversaton Bot (CoBot)
Advancing the State of the Art in Open Domain Dialog Systems through the Alexa Prize
系統圖
CoBot 是一個對話式機器人工具包,提供一系列的基本子產品和預訓練模型供參賽隊伍使用,可以最大程度上減少參賽隊伍在基礎架構部署和擴充上耗費的精力,
CoBot 的系統圖和工作流程如下:
- Alexa Skill Kit 提供基本的語音技術功能,比如進行自動語音識别(ASR,automatic speech recognize)以及意圖識别等功能
- AWS lambda 是 AWS 的無伺服器接口,開發者可以定義基本的響應事件,來調用後續的觸發子產品
- AWS ECS 是 Amazon 的雲服務,可以托管預訓練等模型
- TTS 将文本轉為語音(text-to-speech)
架構圖
CoBot 内置預設的處理流程,包括主題分類、情感識别和NER等 NLU 子產品功能,Evi QA 服務,以及全局的狀态管理器(用 key-value 形式儲存在 DynamoDB 中),開發者可以在此基礎上開發自定義功能及子產品。
- Dialog Act and Topic Classification
- 使用基于 層次RNN(HRNN)的主題和意圖聯合分類模型(單層 GRU)
Alexa Prize 2019 比賽及 Topical-Chat 資料集介紹
- 使用基于 層次RNN(HRNN)的主題和意圖聯合分類模型(單層 GRU)
- Neural Response Generation
- 基于 GPT-2 在 Topical-Chat 資料集上訓練融入知識的生成模型
- 調用時,輸入使用的知識以及對話曆史,輸出融入知識的回複
Alexa Prize 2019 比賽及 Topical-Chat 資料集介紹
Topical Chat 資料集
Topical-Chat : Towards Knowledge-Grounded Open-Domain Conversations
基本介紹
Topical-Chat 是一個基于知識的人人對話資料集,其基礎知識涵蓋8個主題,包括多個知識來源(Washington Post Articles,Reddit fun facts,Wikipedia articles about entities)。
每輪對話标注了說話人情感以及回複的品質,總共包括 10,000 個會話(conversation),230, 000 輪對話(utterance)。
對話中沒有明确定義參與者的角色(Wizard of Wikipedia, WoW 中存在一個 Wizard 進行對話引導),更符合開放域真實對話特點。
所有主題及對應的實體個數如下:
知識來源
知識庫由三個原語構成:實體(entity),事實(fact)和文章(article),擷取過程如下
- 實體選擇(Entities Selection)
- 從前幾屆比賽使用者的回複選擇最受歡迎的 8 個主題共300個實體
- 事實選擇(Fact Selection)
- 擷取 300個實體的 Wikipedia 引言部分,然後使用 Reddit 衆包為每個實體構造 8-10 個有趣的事實(根據 Wikipedia 引言構造)
- 對于每個實體,構造兩個版本的 Wikipedia 引導部分,第一個是包含引導部分第一句話的短版本(50詞),第二個是使用 TextRank 生成引導部分的摘要介紹(150 詞)
- 文章選擇(Article Selection)
- 擷取 Washington Post 自2018年以來的文章(600-1000詞),總共 3088篇文章,每篇文章至少包含三個上述的實體
知識集構造中,以article作為基礎,并且構造多種資訊不對稱的知識集,并提供給對話雙方使用(雙方知識集可能不對稱,模拟現實情況)。
對話構造過程中,每個實體包含 wikipedia 的短介紹或者摘要介紹以及有趣的事實,過程中對目前回複進行情感标注(Angry, Disgusted, Fearful, Sad, Happy, Surprised, Curious to Dive Deeper, Neutral),以及對對話上一個回複的知識使用進行品質評估(Poor,Not Good,Passable,Good and Excellent)。
資料擷取
從 GitHub alexa/Topical-Chat 下載下傳,需要構造知識源資料,過程如下
- reddit 偏好設定 建立 API Key
參考 Instructions for getting Reddit API keys? #1
- 運作指令
# Ensure that your Python Interpreter >= 3.7 git clone https://github.com/alexa/Topical-Chat.git cd Topical-Chat/src pip install -r requirements.txt # Building the data requires Reddit credentials. # Please create your own Reddit API keys: https://www.reddit.com python3 build.py --reddit_client_id CLIENT_ID --reddit_client_secret CLIENT_SECRET --reddit_user_agent USER_AGENT
- 構造過程(科學上網,用時2個小時)
資料示例
資料集中包含 frequent 和 rare 兩種驗證集,前者中的實體在訓練集中頻繁出現,後者在訓練集中較少甚至沒有出現過
Train | Valid Freq. | Valid Rare | Test Freq. | Test Rare | All | |
---|---|---|---|---|---|---|
# conversations | 8628 | 539 | 539 | 539 | 539 | 10784 |
# utterances | 188378 | 11681 | 11692 | 11760 | 11770 | 235434 |
average # turns per conversation | 21.8 | 21.6 | 21.7 | 21.8 | 21.8 | 21.8 |
average length of utterance | 19.5 | 19.8 | 19.8 | 19.5 | 19.5 | 19.6 |
- 對話檔案
{ <conversation_id>: { "article_url": <article url>, "config": <config>, # one of A,B,C, D "content": [ # ordered list of conversation turns { "agent": "agent_1", # or “agent_2”, "message" : <message text>, # Angry, Disgusted, Fearful, Sad, Happy, Surprised, Curious to Dive Deeper, Neutral "sentiment": <text>, # Factual Section 1-3, Article Section 1-4 and/or Personal Knowledge "knowledge_source" : ["AS1", "Personal Knowledge",...], "turn_rating": "Poor", # Note: changed from number to actual annotated text },… ], "conversation_rating": { "agent_1": "Good", # Poor, Not Good, Passable, Good and Excellent "agent_2": "Excellent" } }, ...... }
- 知識集合
{ <conversation_id> : { "config" : <config>, "agent_1": { "FS1": { "entity": <entity name>, "shortened_wiki_lead_section": <section text>, "fun_facts": [ <fact1_text>, <fact2_text>,...] }, "FS2": {...} }, "agent_2": { "FS1": { "entity": <entity name>, "shortened_wiki_lead_section": <section text>, "fun_facts": [ <fact1_text>, <fact2_text>,...], }, "FS2": {...} }, "article": { "url": <url>, "headline" : <headline text>, "AS1": <section 1 text>, "AS2": <section 2 text>, "AS3": <section 3 text>, "AS4": <section 4 text> } } ... }