本文将介绍 Alexa Prize Socialbot Challenge 2019 的冠亚军参赛方案
第一名通过构造大量的对话模版,并维持用户信息表和状态表,来实现个性化主题对话
第二名通过深度生成模型(GPT-2 等预训练模型)来生成对话,并构造对话树(treelet)来实现对话控制
最终专家评分排名情况如下
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
1st Emora
Introduction
Emora 能够针对各种热门话题和用户进行个性化聊天。
设计目标不仅是创建有趣且流畅的对话,而且还超越了基于信息的聊天范围,使 Emora 感觉更像是用户的贴心朋友,而非简单的 QA。
遵循此目标,Emora 不仅支持先前 Alexa Prize 比赛中的热门话题(如电影,音乐和体育),还能在更具个性化的话题(如学校,工作和业余爱好) 进行丰富的对话。
为了促进混合式对话,作者赋予了 Emora 观点和个性,通过积极询问用户的观点和个人信息来维持对话的进行,同时通过分享 Emora 自己的态度和个人资料与用户建立联系。
Architecture
- ASR (Automatic Speech Recognizer)
- 返回语音识别结果(包括多个候选文本)
- NLP pipeline
- 负责特征提取,并进行相关文本分类任务(情感识别、主题/意图分类等)
- Dialogue Manager
- 基于当前对话状态、提取的特征以及用户的话语,选择最合适的回复
- Amazon 服务可以有效存储和检索特定主题的信息(关系数据库RDS,检索服务ElasticSearch)
- Profanity Detector Service
- 检查回复中是否有敏感内容,没有则调用 Amazon Lambda function 合成语音返回给用户
- 若包含敏感内容,则随机从通用回复集合中选择一个返回
NLP Pipeline
进行特征提取和文本分类任务(情感识别、主题/意图分类等),用于后续对话管理和主题管理
-
情感识别(Sentiment)
-
Valence Aware Dictionary and sEntiment Reasoner, VADER
-
Python 第三方库
-
是一种基于词典和规则的情感分析工具(处理速度快)
-
专门针对社交媒体中表达的情感进行调整
-
-
-
命名实体识别(Named Entity Recognition,NER)
- SpaCy NER
- 在 OntoNotes 5 Corpus 上训练的统计模型(CRF)
- 能够识别 18 种类别的实体,包括 person,organization,location等
- SpaCy NER
-
EVI
- 亚马逊提供的 EVI QA 服务
- 返回的回复被存储用于后续模块使用
-
实体识别和连接(Entity Recognition and Linking)
- 使用实体名称和单词特征来综合识别实体,给定一句话,能够返回所有和 n-gram 匹配的实体
- 维护超过 370 万的实体和类型库,并且能够使用相应模块更新,包括来自 RottenTomatoes 的电影名,Washington Post API 的人名或者组织名
- 同时也索引了 DBPedia 从2016年至今的快照,来确保覆盖最新的实体
-
主题和意图识别(Topic and Intent Classification)
-
开放域对话中的主题和意图分类,可以看作文本分类问题,其难点在于
- 用户说的话语一般较短
- 可能存在 ASR 错误
- 用户经常提及未登录的单词或者实体(OOV)
- 缺少可获取的带标签的开放域人机对话数据
-
Mixture of Experts Model(MOE)
- 上下文相关主题和对话意图分类模型
- 例如用户回复 “Oh, yeah”,可能对应 “Accept-Agree“ (接受同意)或者 ”Topic-Switch“(主题切换)
- 此时需要根据上下文来识别具体的意图
- 混合 Amazon classifier和自定义的主题/意图分类器
- 自定义分类模型在自行人工标注的数据集上训练得到
- 主要还是依赖于 Amazon classifier,自定义分类模型用于补充(对结果中 Other 的情况进行更细致的分类)
- 自定义分类器(CNN)
- 在新的主题上训练分类器,比如 “Food-Drinks”,“Travel-Geo”,或者新的意图 “Yes-Answers”
- 通过分析 Amazon 分类器存在问题来改进
- 例如 Amazon 意图分类器将用户的所有不同意(拒绝)分类为 “Topic-Switching”(主题切换)
- 但是用户虽然不同意当前的系统回复,但是不想结束当前的话题,额外添加新的意图 “Reject”
- 上下文相关主题和对话意图分类模型
-
Dialogue Manager
对话管理器负责在给定对话上下文的情况下选择系统回复,基于**状态机(state machine)**实现
-
Classifier
- 状态机中的每个用户转换都对应一个分类器,来判断当前转换分支
- 通过结合基于规则的匹配和神经网络模型实现分类器
-
Tagging Model
- 通过 Tagging Model 来增强转换
- Tagging Model 从用户的回复中提取有用的实体或者其他信息
- 主要基于规则匹配的方式来实现 Tagging Model,并使用 ontology 提高准确率(也会使用 NLU 中的 Entity Linker 的结果)
- 提取的标记信息会保存在状态表中(Variable Table),用于后续的转换(开启新的话题/转换 或者 用于NLG槽填充)
-
NLG
- 主要使用手写的**对话模板(handcrafted templates)**实现,生成结果可控
- 模板中包含各种槽引用变量(slots referencing variables),这些变量可以从先前对话保存的**状态表(Variable Table)**中获取,进而实现根据用户提供的信息来自生成个性化的回复
- 比如下图简化的状态机中,状态a对应多种系统回复
- 转换S1中包含引用变量
$RELATED_PERSON
,因此只有当变量不为空时才选择该转换(例如上文提到和朋友在一起,这种情况下回复 “What were you doing with your friend”) - 如果
$RELATED_PERSON
为空,则选择默认转换 S2
- 转换S1中包含引用变量
“ONTOLOGY” 表示NLU识别出的 ontology 的节点;U2使用基于规则的模板匹配;U5使用情感分类器;所有的
$
都表示一个变量
-
Ontology
-
为了提供NLU分类器的通用性,dialogue manager 还配备了 ontology
-
从各种来源(包括 WordNet 和 Wikipedia)来扩充本体库
-
尤其在使用模板匹配的 NLU 分类器中,本体可以用来识别用户表达的同义词,下位词和成语以及各种实体类型
-
ontology 包括
- life events (e.g. illness, birth, romantic event, etc.)
- related persons (e.g. family, partner, etc.)
- states of being (e.g. injury, positive state, negative state, etc.)
- locations (e.g. cities, countries, etc.)
- activities (e.g. chore, errand, exercise, etc.)
- life stages (e.g. child, teenager, adult, student, etc.)
- status (e.g. employment status, relationship status, education status, etc.)
- political affiliation
- emotions
- adjectives
- animals
- names
- personality traits
-
-
Inter-Topic Transitions
- 基于状态机的对话管理器具有高效的上下文表示的优势,并为开发人员提供了对对话流的高度控制,但是不支持主题之间的灵活过渡
- Global transition table
- 每个状态节点添加状态对
(user_state, topic_start)
- 使用全局转换表扩充对话管理器,可以根据用户的当前状态从状态机的任意位置进行主题转换
- 每个状态节点添加状态对
- State Stack
- 用于当前状态,当转换到其他主题(比如sub-dialogue)后能够返回
- 状态机中的任意状态都能压入状态栈(State Stack),或者当状态弹出时返回
- 例如
- COVID-19 主题的对话可以通过全局转换进入疫情期间远程学习的子主题
- 此时将 COVID-19 状态压入栈中,当结束远程学习子主题的讨论后,可以将 COVID-19 从栈中弹出返回到该状态
- Conversation Flow 中将具体说明
Conversation Flow
遵循将 Emora 设计为能够参与类似于人的社交对话的聊天机器人的目标,设计系统来实现超越以观点为导向(opinion-oriented)的对话并支持个性化的对话(personal conversation)。
主要表现位根据说话者是否对经常出现并影响其日常生活的实体分享想法和态度,将个性化对话(personal conversation)与以观点为导向(opinion-oriented)的对话区分开来。
例如,陈述关于电影的观点将被认为是有观点的,但不是个性化观点,而对于个人经历中的事物发表观点则视为个性化的观点。
虽然两个形式的对话时交叉进行的,但是明确地专注于进行更多的个性化对话有利益提高机器人的拟人特征。这包括为机器人的个性和经历创建个人资料(Topic Handlers中详细说明)。
- Personal-experience-focused dialogue strategy
- Emora 的主要创新点
- 提供一种通用的交互方式,可以和用户分享或者聆听个人经历
- 通过**开放式陈述 (open-ended statements)+ 提问(question-asking)**的方式,使得用户可以自由选择自己想要的答案
- 如下图中(a)+(b)
- Variable Table
- 保存对话中获取的用户个性化信息
- Emora 可以在以后与用户的兴趣和生活直接相关的点上选择对话主题,从而加深与用户的亲切感
- 比如 U2 中提到远程学习,在 E8(b)中用到
- Stack Column
- 保存对话状态
- 比如通过 U1 识别子主题(covid_sympathy),则压入栈中,用于后续讨论该话题
- U1-E3(a)是远程学习子主题的讨论结果,E3(a)结束之后,则选择栈中的状态作为下一个主题
- 有选择地添加对话状态作为将来要返回的对话点,可以提高对话中整体的连贯感,并允许 Emora利用对话记忆来推动对话前进
- Life Counter
- Stack 中可以保存多个状态
- 每个状态会被设置 Life Counter 来记录存活时间,当时间到期之后,当弹出栈后,不会返回到该状态
- 默认的策略按LIFO**(Last In, First Out)**
CoS: covid_sympathy, CoE: covid_end
Topic Handlers
Topic | Desc | Source |
---|---|---|
COVID-19 | (1)向用户告知有关大流行的有用事实和最新信息 包括已确诊的病例和特定地区的死亡率 (2)以opinion-oriented的方法来讨论COVID-19的持续事件 重点关注病毒对整个社会造成的变化如何影响用户 | 约翰·霍普金斯大学系统科学与工程中心(CSSE) |
General Activities | (1)讨论用户的日常活动 (2)探索阶段,通过问答收集用户活动数据 根据频率排名,手动整理对最频繁发生的日常活动类型的回复 包括工作,学校,差事,家务和视频游戏。 (2)在开发阶段,将日常活动主题的交互作为总体对话开始 作为和其他主题处理程序之间的过渡 | |
Holiday | (1)对于各种受欢迎的假期设置简短的互动回复 (2)这些互动是临时开放的,主要用于获得用户的假期计划 (3)持续不超过5个回合,完成后过渡到对话系统的核心组件 | Valentine’s Day April Fool’s Day Easter |
Life | (1)生活部分着重于了解用户对日常生活的感受和想法 (2)包括多个子主题,每个子主题都是单独实现的 (3)但是每个子主题中获取的用户属性作为全局信息 | Children Home Relationships Siblings School Work |
Movies | (1)使用观点向(opinion-oriented)的问题以吸引用户并分析他们的偏好 (2)基于学习到的用户信息来推荐新电影 (3)根据电影院的上映情况,实时索引 | RottenTomatoes Elasticsearch Python imbdpy |
Music | (1)同样通过使用用动态模板化问题来获取用户喜好 (2)收集音乐流派和艺术家的兴趣指标 (3)推荐相似的艺术家或流派或提供感兴趣的信息 | Billboards SeatGeek Spotify lastFM DynamoDB |
News | (1)搜索用户感兴趣的新闻,并返回新闻摘要 (2)通过其他主题获取的信息来完善搜索结果 | Washington Post API News API New York Times Article Reuters newswire RSS feeds |
Pets | (1)赋予 Emora 个性化特征和经历 (2)通过建立共同的体验引起用户的兴趣 (3)根据不同宠物类型,定制不同回复 (4)抓取动物电影或者笑话,整合到对话中 | |
Sports | (1)使用对话模板融合最新的体育事件 (2)定期更新实时信息(体育比赛、球员、球队信息 包括实时事件,如COVID-19导致NBA停赛以及科比去世 (3)赋予 Emora 个性化经历 如自己的篮球比赛风格以及参加现场体育比赛的经历 | basketball football soccer baseball sports-ref |
Travel | (1)与用户在旅行时最关心的某些方面进行互动 例如旅游景点,文化,美食,活动和节日。 (2)从讨论某个城市开始对话 该城市是从预先确定的城市列表中随机生成的 (3)用户没有去过该城市,则提出建议计划 (4)若去过,则对用户的经历表现出兴趣 | |
Teleportation | 讨论围绕用户和Emora关于将来可能进行隐形传送的观点及其优缺点进行的讨论 | |
Virtual Reality | 由关于虚拟现实和增强现实技术的以体验为导向的讨论组成 | |
Video Games | 与识别二十种游戏之一的用户进行特定于游戏的独特对话 |
2nd Chirpy Cardinal
Neural Generation Meets Real People: Towards Emotionally Engaging Mixed-Initiative Conversations
Motivation
建立一个与真实人交谈的开放域社交机器人是一项挑战,因为这种系统必须满足多个用户的期望,例如广泛的世界知识,对话风格和情感联系。
Chirpy Cardinal 将站在用户的角度,优先考虑用户的兴趣,感受和自主权。从而提供个性化的用户体验,能够熟练地谈论各种主题,并能有感情地谈论普通的生活。
神经生成在实现这些目标中起着关键作用,为对话和情感基调提供了基础。
GPT-2 的在对话生成中的广泛使用,局限性在于持续对话时对话质量和一致性较差
-
Initiative
- 对话引导能力,在任务对话系统中被广泛研究;Mixed initiative 是一种用户和机器人共享主动性的模式,由用户进行对话引导,但是不让用户完全负责新的主题和方向
- 为了提升 Mixed initiative 同时仍然进行足够的对话深度,设计了严重依赖系统主动性的 initial system,但同时探索了几种以受控方式增加用户主动性的途径
- 为了支持混合主动性,系统具有全局导航意图分类器和实体跟踪器,从而可以跟踪用户和机器人的高级主题更改。此外,我们的响应优先级系统允许用户启动主题更改时插入单个响应生成器(RG)
-
High-Coverage World knowledge
- Alexa Knowledge Graph,The Washington Post,Reddit and Twitter,Wikipedia and Wikidata entities
- 世界知识必须通过对话的形式来表达,这是 sociabot 和 virtual assistant 的区别
- 在 TopicalChat 数据集上微调了一个生成模型,来将外部知识转换为对话的形式
-
Personal experiences and emotions
- 讨论个性化经历和情感
- Neural Chat Module 允许用户分享他们每天的经历和当前情感,使用神经生成模型进行情感回复
- Opinion Module 允许用户通过 like 和 dislike 表达情感,为了营造互惠的氛围,机器人还分享了自己独特的感受,经验和观点
Architecture
基于 CoBot 搭建
- NLP Pipeline
- 基于用户输入话语和当前状态生成注释(annotations),用于后续处理
- 使用 directed acyclic graph(DAG)组织,允许模块使用其他模块的 annotations 作为输入
- 为了最小化延迟(latency),模块并行运行
- Dialogue Manager
- 分析用户的话语,判断用户是否想要谈论某些实体(Navigational Intent)
- 更新当前讨论的实体(Entity Tracker)
- Response Generator(RGs)
- 每个模块负责不同的任务
- 每个 RG 可以产生回复或者 None,当生成回复后,response prority 判断是否需要从另外一个response generator 添加 prompt
- Priority Ranking 模块选择优先级最高的 response
- Entity Tracker 更新当前实体
NLP Pipeline
-
-
一系列预训练操作:tokenization, sentence splitting, part-of-speech tagging, lemmatization, named entity recognition, constituency parsing, dependency parsing, coreference resolution, and sentiment analysis
-
考虑到用户话语的形式(lowercase,no puncuation),选择 caseless model
-
-
Dialogue Act Classifier
- Dialogue Act 可以用于支持理解用户的意图(positive answer,statement,negative answer)
- 实现过程中,在 HuggingFace 实现的 BERT 分类器上使用 MIDAS 数据集微调
- MIDAS 数据集时 Alexa Prize 2018 的冠军队伍 Gunroc k收集的
- 形式为(bot utterance,user’s response to utterance, the user’s dialogue act)
-
Question Classifier
- 动机:语音识别结果中缺少问号,此外用户的问题可以分为事实性问题(factual question)和开放性问题(open-ened question)
- 在简化版的 Dialogue Act 训练数据上微调了 RoBERTa 模型
- 仅以用户的回复作为输入,F1 达到 0.92
- 分类结果用于确定某些RG应该何时响应,例如 Evi RG 何时应该回答事实性问题
- GPT-2 对于问号较为敏感,因此根据分类器结果添加问号
Dialogue Management
用于处理高级逻辑,跟踪当前和用户讨论的主题,以及哪个回复或者prompts用于组成机器人的回复
-
Navigational Intent Classifier
- 手工编辑的规则,精度更高
- 当用户想要讨论或者不想谈论某个主题时(positive,negative),会有导航意图
- 用户可能指定某个主题
- (can we talk about Minecraft, stop talking about minecraft)
- 或者指定当前的主题
- (let’s discuss this more, could you change the subject)
- 或者不指定主题
- (alexa can we talk, i don’t want to chat any more)
- 或者在同一句中给出 postive 和 negtive 的导航意图
- (i don’t want to talk about movies any more let’s chat about you)
-
Entity Tracker
- 追踪当前正在讨论的主题(已经讨论结束,但是可能在将来讨论的实体)
- 假设每个对话中都有一个 current entity,并且要么是 Wikipedia entity 或者 None(每轮最多更新三次)
- After analyzing the user’s utterance
- entity tracker 使用 entity linker 的输出,包括用户当前轮提及的实体按优先级排序的列表以及得分
- 如果用户对当前实体表达负面情绪,当前实体则被拒绝
- 如果用户对某个实体表达积极情绪,则在用户的话语中搜索这些主题插槽,最高优先级的实体的得分高于阈值(1,1000),则选择当前实体
- 如果当前轮有我们希望用户提及的实体(比如,what’s your favorite movie?),并且有对应的wikipedia 条目,得分高于阈值,则选择作为当前实体
- 其他情况, entity linke 以足够高的分数(超过10,000)做出了预测,则它将成为当前实体
- 如果不满足这些条件,则当前实体保持不变
- After choosing the response
- 当RG提供回复时,如果回复被 priority ranker 选中,则每个RG指定新的当前实体
- 我们将当前实体更新为所选RG提供的任何实体
- After choosing the prompt
- 如果获得某个 prompt,则类似地更新当前实体
- After analyzing the user’s utterance
- 系统允许用户初始化实体;允许RG初始化主题,允许多种RG谈论相同的主题;允许RG决定何时结束当前主题
-
Response Priority Ranking System
-
用来决定哪个RG的回复应该在当前轮选择
-
当生成回复时,每个RG提供一个 response priorities,来保持对话的连续性
-
虽然是简单的规则,但是满足需求
-
每个RG决定自己是否回复以及回复是否高质量(每个RG独立存在,不会相互影响)
-
-
Response and Prompt System
- RG 可以解决用户当前的话语,但是不能引导对话继续进行
- 或者回复的 RG 已经结束讨论的主题,并且需要另外一个 RG 来改变话题
- response-and-prompt system可以很容易通过问用户问题来引导对话
-
Prompt Priority Sampling System
-
虽然我们使用确定性排名系统来选择最高优先级的响应,但提示通常代表主题的变化,而不受上下文的限制,并且(在人与人的对话中)倾向于具有一定程度的随机性。
-
因此,我们使用优先级采样系统来选择提示。生成提示时,每个RG提供表中的提示优先级之一
-
Response Generator
-
Treelets:A system to Organize Dialogue Graphs
- 构建对话树,可以循环可以相互指向
-
Neural Chat
-
目标是生成带有个性化和情感的回复
-
在 GPT-2-medium 上使用 EmpatheticDialogues 数据集微调(包含speaker和listener,模型在listener角色上训练,即情感抚慰)
-
Emotion-focused Conversation
-
尝试多种情感抚慰方式
-
多种回复策略与用户回复长度的影响
- 当机器人负面情绪回复时,用户的回复长度更长
- 当机器人添加自己的故事(个性化时),用户的回复长度更长
-
-
-
Wiki
- 使用 ElasticSearch 检索 article
- 使用 TopicalChat 数据集微调 GPT-2-medium
-
Others
- Alexa-Knowledge Graph + Hand-written Templates