论文地址:FLIN: A Flexible Natural Language Interface for Web Navigation 。
摘要
AI 助手现在可以通过直接与网页 UI 交互为用户完成任务。但是如果没有持续的再训练,现有的语义解析技术和槽填充技术无法灵活地适应各种不同的网站。
我们提出了 FLIN,一个用于网页导航的自然语言接口,可以将用户命令映射为概念层次的动作(而不是低层次的 UI 动作),进而可以灵活地适应不同的网站,并且处理网站的瞬时性。
我们将这个问题建模成排序问题:给定用户命令和一个网页,FLIN 学习对最相关的导航指令(包括动作和参数值)进行评分。为了训练和测试 FLIN,我们从三个领域的九个热门网站中收集了数据集。我们的结果表明:在给定的领域内,FLIN 能够适应新的网站。
研究背景
AI 个人助手现在可以通过直接与网页 UI 交互完成人类的任务。用户命令 AI ,AI 通过输入、选择项目、点击按钮,以及在不同的网页中进行导航等动作执行人类的命令。这样的解决方案十分吸引人,因为它降低了对第三方 API 的依赖,并且扩展了 AI 助手的能力。本文关注这些系统中的一个关键部件:一个能够将用户命令转换为网页浏览器能够执行的导航命令的自然语言接口。
一个实现这种自然语言接口的方法是直接将自然语言映射为低层次的 UI 动作。在网页中,UI 元素通过串联其 DOM 属性进行嵌入表示。然后,学习一个评分函数或者神经策略以判断哪个 UI 元素能够最好地匹配给定的命令。在 UI 元素的层次进行学习十分高效,但是只在受控制(UI 元素并不随时间变化)或者受限制(单个应用)的环境中有效。这和真实网页的情况是冲突的:(1)网站总是在更新;(2)一个用户可能会让助手在不同网页上执行相同的任务。为了处理网页的瞬时性和多样性,我们需要一个在不经过持续在训练的情况下,能够灵活地适应有着变量和未知行为的环境的自然语言接口。
为了达到这个目标,我们采用两个步骤。首先,我们提出一种为网页导航设计自然语言接口的新方法。我们不将自然语言命令映射为低层次的 UI 操作,而是将它们映射为具有丰富信息的概念层次的动作。概念层次的动作用于表达当用户在看网页 UI 时,他们看到了什么。如图 1 所示:OpenTable 的首页有一个概念层次的动作“Let’s go”(一个搜索按钮),这表示了一个搜索的概念,并且可以通过各种参数进行具体化。直观上来说,同一个领域内的网站会有着语义相似的概念层次动作,并且人类任务的语义不会随着时间变化。因此,在概念层次学习动作,可以得到一个更加灵活的自然语言接口。
然而,虽然概念层次的动作比原始 UI 元素种类更少,在不同的网站上,它们还是会有不同的表现形式和不同的参数。例如:在 opentable.com 上搜索餐馆,对应的是“Let’s go”,并且支持多达四个参数;而在 yelp.com 上,对应的是“Search”按钮,并且只支持两个参数。并且同一个领域的网站,也会有不同种类的动作(如搜索餐馆和点外卖)。
我们解决问题的第二步是采用了一种新的语义解析方法。传统的语义解析方法是用于处理有着固定且已知的动作的环境,不能直接使用。因此,我们提出了 FLIN,一种新的语义解析方法,其中我们不是学习如何将自然语言命令映射成可执行的逻辑形式,而是利用逻辑形式中符号的语义信息,来学习如何与给定的命令进行匹配。具体地,我们将语义解析任务建模成一个排序问题:给定自然语言命令
为了收集能够训练和测试 FLIN 的数据集,我们构建了一个简单的基于规则的动作提取工具以从网页中提取概念层次的动作及其参数(包括名称和参数值)。如图 1 所示:在一个完整的系统中,我们设想动作提取器提取当前网页中的概念层次动作,并将其传递给 FLIN,FLIN 计算出一个由动作执行器执行的候选导航指令。
文章贡献
总体来看,本文的贡献有三点:
- 基于概念层次的动作,提出了一个为网页导航设计自然语言接口的新方法。
- 我们建立了一个基于匹配的语义解析器,以将自然语言命令映射为导航命令。
- 我们基于九个网站(包括餐饮、旅馆和购物领域)收集了一个新的数据集,并且提供了实证结果,以证明我们方法的泛化性。
代码和数据集开源于:https://github.com/microsoft/flin-nl2web 。
问题描述
假设
对于封闭域参数,该域是有限的,并包括了
对于开放领域参数,原则上该域是无限的,但实际上,它由所有可以从自然语言命令
在上述设置下,我们的目标是将
解决方法
上述的语义解析问题可以被分解成两个子问题:(1)动作识别,即识别
如图 2 所示:FLIN 包括四个组件,以解决前文提到的两个子问题。(1)动作评分,对于给定的命令,为每个可行的操作进行评分。(2)参数提取,从命令中提取给定的参数。(3)参数值评分,使用封闭域参数值为给定的参数打分,如果无法将域值映射到参数,那么就拒绝评分。(4)推理, 使用动作分数和参数值分数推断具有最高分数的“动作-参数-值”分配作为预测的导航指令。
动作评分
给定一个命令
为了给每对
接下来,我们学习
其中
给定
其中
其中
参数提取
给定一个命令
如图 2 右下角所示,我们将 [CLS] p [SEP] c
的形式打包成一个单独的输入序列,其中 [CLS]
和 [SEP]
是特殊的 BERT token 。对于分词,我们使用标准的 WordPiece 分词器。利用 BERT,我们将序列中的每个 token [CLS]
。
参数值评分
在一个封闭域参数
整个过程和动作评分是相似的,但是,出了单词层次的语义相似性,我们还计算了
单词层次的语义相似性 使用与动作评分模块相同的嵌入矩阵
字符层次的语义相似性 使用字符嵌入矩阵
词汇层次的语义相似性 我们使用模糊字符串匹配分数(使用 Levenshtein 距离计算序列之间的差异)和一个自定义的值匹配分数(通过
网络值-提及相似分数 定义为以上三个分数的平均值:
推理
推理模块使用动作评分、属性提取和参数值评分模块的输出,为每个
参数赋值 首先需要推理每个
当在为
如果在对一个参数化的动作
一旦我们得到了所有参数
导航命令预测 最后,我们通过公式
实验验证
我们在来自三个具有代表性的领域的九个流行网站上测试了 FLIN 模型:(1)餐饮(R);(2)旅馆(H);(3)购物(S)。我们为每个网站都收集了带标签的数据集,并且进行了同领域跨网站测试。具体地,在每个领域中,我们用一个网站训练 FLIN 模型,并且在其他的两个同领域网站中进行测试。理想情况下,可以用所有三个领域的训练数据训练一个单独的模型,并将其应用到所有的测试网站上。但是我们选择为每个领域专门进行训练/测试以更好地分析 FLIN 模型如何利用概念层次动作的语义重叠(存在于同领域的网站中)泛化到新的网站中。我们舍弃了跨领域的测试,因为在这三个领域中,动作和参数的语义并不明显重叠。
数据集
为了训练和测试 FLIN 模型,我们收集了两个数据集:
- WebNav 包括了英文(命令,导航指令)对。
- DailQueries 包括了从现有的对话数据集中提取出来的英文用户话语和对应的导航指令。
WebNav 数据集
为了收集 WebNav 数据集,给定一个网站和一个它支持的任务,我们首先确定哪些页面和任务相关。然后使用动作提取工具,我们遍历所有和任务有关的页面中的动作。对于每个动作,如果存在,提取器会提供其名称,参数和参数值。动作名称是通过各种 DOM 属性和相关 DOM 元素的文本推测出来的。动作提取的目标是像人类所看到的一样为 UI 元素打上标签。例如,对于 OpenTable 网站,我们不认为搜索框叫做”搜索输入“,而是称之为”地址,餐馆或菜系“(用户看到的搜索框里的占位符)。参数值从 DOM 选择元素(如 option,value 标签)中自动抓取。我们会手动检查动作提取器的输出并更正可能的错误(如动作丢失)。然而,对于每个网站,我们得到了不同的操作/参数方案。在不同的网站之间,类似的动作/参数之间没有一般化的映射,因为构建这样一个映射需要大量的人工工作。表 1 展示了在我们的实验中从所有网站中提取出来的页面、动作和参数的数量。
基于这些数据,我们为所有网站上的所有动作构建(页面名称,动作名称,[参数名称])三元组,要求两个注释人员为每个三元组编写多个命令模板,并将参数名称作为占位符(如“预定一个<时间>的餐馆”)。对于封闭域参数,动作提取器自动从网页中抓取参数的值(如 12:00,12:15 等),我们要求注释人员提供相关注释(如“在中午”);对于开放域参数,我们让注释人员提供样例值(如餐厅搜索词的值可以为“pizza”)。我们通过随机化参数值对命令模板进行实例化,以此构建最终的数据集并划分为训练集、验证集和测试集。总体上,我们生成了总共 53520 个(命令,导航指令)二元组。我们分别使用 opentable.com, hotels.com 和 rei.com 三个网站划分训练集和验证集,具体信息如表 1 所示。
DialQueries 数据集
本数据集由从 SGD 对话数据集和 Dialogflow 的餐厅、酒店和购物“预制代理(pre-built agents)”中提取的真实用户请求组成。我们提取出能够映射到我们的网站上任务的请求,并且用词汇表中的等价实体替换了不在词典里的餐厅、旅馆和城市等。我们分别在 opentable.com, hotels.com 和 rei.com 三个网站上人工将 421,155 和 63 条对话请求映射为导航命令。这个数据集只会用于测试。
训练细节
所有的超参数都通过验证集进行调整:
- Batch size 被设置为 50。
- 对于训练轮次,动作评分训练 7 轮,参数提取训练 3 轮,参数值评分训练 22 轮。
- 在每轮训练中,为
随机采样一个负例。 - dropout 概率设置为 0.1。
- 隐藏单元和嵌入向量维度设置为 300。
- 学习率被设置为
。 - 正则化参数为
。 。 。- 使用 Adam 优化器。
- 使用 Tesla P100 显卡和 tensorflow 库完成实验。
基线方法
由于相关的方法与本文的方法要么输出类型不同,要么问题设置不同,本文的工作并没有直接的基线方法进行对比。因此,我们将 FLIN 与其两个变体进行对比,它们都使用了基于匹配的语义解析方法,但是仍有不同。
- FLIN-sem 在参数值评分阶段只使用单词层次和字符层次的语义相似性(没有词汇相似性)。
- FLIN-lex 在参数值评分阶段只使用词汇相似性。
评测指标
我们使用准确率(A-acc)评测动作预测性能,平均 F1 分数(P-F1)评测参数预测性能。P-F1 使用测试命令的平均参数精确率和平均参数召回率进行计算。给定一条命令,参数精确率是在预测的指令中,正确预测的参数的比例;召回率是目标指令中,正确预测的参数的比例。对于一条测试命令,如果预测的动作是错误的,或者没有动作被预测,那么我们认为精确率和召回率都为
我们还使用以下两个指标:(1)精确匹配准确率(Exact Match Accuracy, EMA),预测指令与目标指令完全匹配的测试命令的百分比;(2)100% 精确率(PA-100),参数精确率为
实验结果
实验结果如表 2 所示。我们测试了同网站(模型的训练和测试使用相同的网站)性能与跨网站(模型的训练和测试使用不同的网站)性能。实验结果解析如下:
- 由于 FLIN 的基于匹配的语义解析方法,FLIN 及其两个变体都能较好地适应到之前没见过的网站。
- FLIN 的总体表现最好,在适应新的网站方面,它能达到与基线相当的(更高的)动作准确率(A-acc)和参数 F1(P-F1)分数。
- 考虑 PA-100 指标,在餐厅领域,训练网站上
的命令,两个测试网站上分别 和 的命令被映射成了正确的可执行动作(没有错误的预测)。在其他两个领域,PA-100 指标总体也比较高。 - EMA 指标比 PA-100 指标更低,因为正确预测所有参数赋值明显更难。
- 考虑 FLIN 的变体,FLIN-sem 和 FLIN-lex 总体上表现不如 FLIN ,因为结合 FLIN 中的词汇和语义相似度可以让参数赋值更加准确,并且更好地泛化。
从泛化的角度来说,最具有挑战性的领域是酒店领域。虽然酒店领域的动作预测准确率(A-acc)为
我们还在 DialQueries 数据集的真实用户请求中测试了 FLIN 的效果。如表 3 所示:尽管 FLIN 没有在 DialQueries 数据集上进行训练,总体的 A-acc 指标超过了
错误分析
我们随机挑选了 135 条被错误预测的命令(9 个网站,每个网站 15 条),将这些错误分成了 5 种错误类型。如表 4 所示:
总体看来,
除了错误预测动作以外,在识别封闭域参数方面的错误是最常见的,尤其是在酒店网站和购物网站中。这是因为相较于餐馆网站,这些领域内的网站有更多样的动作和参数空间,这会导致在训练数据中,会有一些动作和参数类型没有被观测到。例如,Hyatt 的搜索动作有特价和用户评分的参数,但是在训练的网站中没有。
为正确识别的封闭域参数预测值的错误通常是由于参数值的形态变化在训练过程中没有被经常观测到(如“晚上 8 点”被映射成“18:00”而不是“20:00”)。
提取开放域参数的错误是由于参数名称过于普遍,提取的参数部分与目标参数匹配,或者有多种格式的参数值。
[论文解读]A Data-Driven Approach for Learning to Control Computers
论文地址:A Data-Driven Approach for Learning to Control Computers 。 摘要 如果机器能够和人类一样使用计算机,进而在每天的任务上都帮助我...
[论文解读]Adversarial Environment Generation for Learning to Navigate the Web
论文地址:Adversarial Environment Generation for Learning to Navigate the Web 。 摘要 学习如何自动在网页中进行导航是一个困难...