论文赏析[ACL18]一个句子向量表示究竟可以塞进多少语言性质?

简介: 本文主要探究了不同encoder在不同任务上训练得到的句子向量表示,是否蕴含了各种语言性质。

介绍


本文主要探究了不同encoder在不同任务上训练得到的句子向量表示,是否蕴含了各种语言性质。

网络异常,图片无法展示
|

本文主要有三个贡献点:

  • 分析了三种类型的encoder,并在7个任务上预训练句向量。
  • 提出了10种探测任务。
  • 每个探测任务探究一种语言性质。

探测任务


为了探测这些性质,作者提出了10种探测任务,并分成了三个类别,分别用来探测句子的表面信息、句法信息和语义信息。

这10种探测任务有一些共同点:

  • 数据集都是作者手工设计的,用来做分类任务。
  • 数据集基于Toronto Book Corpus,句子长度只挑选了5到28的。
  • 训练集大小100k,验证集和测试集都是10k。
  • 数据集里的偏差都被人工去除了(例如对某个类别预测影响很大的单词)。

探测任务全部采用MLP进行分类。

表面信息


第1个任务是预测句子长度(SentLen)。这个任务将句子长度划分成了6个区间,预测长度落在哪个区间里,所以最后是一个6分类任务。这个任务用来探索句向量能否保留句子长度的信息。

第2个任务是预测一个句子里含有哪个关键词(WC)。这个任务挑选出了1000个频率比较高的单词,预测一个句子中含有哪个单词。数据保证一个句子中不会同时出现两个关键词。这个任务用来探索句向量能否保留单词的信息。

句法信息


第3个任务是预测句子对应句法树第二层的label(TopConst)。这个任务将句法树第二层(也就是根节点S的子结点)所有label拼接成一个label(比如ADVP_NP_VP), 然后挑选出频率最高的19种label,其他的都归为第20个label。这个任务用来探索句向量能否抽取出句子的句法结构信息。

第4个任务是预测句子词序是否正确(BShift)。这个任务随机调换句子中任意两个相邻单词,然后做2分类,预测是否调换过顺序。这个任务用来探索句向量对词序是否敏感。

第5个任务是预测句子对应句法树的深度(TreeDepth)。在实际数据集中,句法树深度都在5到12之间,所以这是一个8分类任务。

语义信息


第6个任务是预测句子的时态(Tense)。

第7个任务是预测句子主语单复数(SubjNum)。

第8个任务是预测句子宾语单复数(ObjNum)。

第9个任务是预测句子中名词或动词是否被替换过(SOMO)。这个任务随机将句子中名词或者动词替换为其他名词或动词,然后2分类预测是否做过替换。替换保证换过之后单词前后的bigram出现频次还是相似的。

第10个任务是预测一个带有从句的句子前后关系是否正确(CoordInv)。比如“今天下雨了,因为我没出门。”这句话前后转折关系就反过来了。

实验


10种探测任务上的表现如下:

image.png

vote结果是随机的。然后是人类分析结果,句法和语义信息也不能保证是100%正确。Length是只用长度作为输入,可以看出只有SentLen预测正确了,其他都等于随机猜。朴素贝叶斯方法对词信息比较敏感,WC任务效果很好。BoV方法因为不包含词序信息,所以BShift任务很差,等于随机猜。

再看几种不同的编码器。首先是用LSTM最后一个时刻隐层输出作为句向量。然后是每个维度用不同时刻的最大值作为句向量。最后是门卷积网络编码器。采用的预训练任务有随机初始化,自编码器,机器翻译(三种语言),Seq2Tree,SkipThought(预测下一个句子)和NLI。可以看出Seq2Tree训练出来的句向量在对句法敏感的几种性质上都取得了最好的结果。比较两个LSTM编码器,可以发现采用max的向量表示效果更好。

image.png

上面这个图显示了不同的下游任务和10种语言性质之间的相关度,蓝色表示相关度高,红色表示低。可以发现几乎所有的任务对于句子长度信息都不是很敏感,或者句子长度并不能有效地提升任务的性能。再如SST2任务,情感分类任务的话对于单复数和句法结构信息可能也不是很敏感。

结论


这篇论文主要就是提出了10种探测任务,用来探索模型的10种性质。但是这篇论文里的方法其实还是有点问题的,就如上一篇control task所讲的那样,probe task的准确率并不一定能反应语言性质学习的好坏。但是无妨,这些探测任务还是可以用在我们编码器或者预训练语言模型的分析中的。


相关文章
|
机器学习/深度学习 自然语言处理 算法
通用句子向量漫谈
句子向量漫谈 # 背景 ​ 近期业务需要使用文本上下文语义特征,而将文本进行编码和表征是NLP最核心的技术之一,于是调研了表征文本的相关技术,总结如下, 以飨后人。 ## 混沌未开 ​ 在word2vec诞生之前,NLP中并没有一个统一的方法去表示一段文本。
1715 0
|
自然语言处理 算法 机器学习/深度学习
基于Doc2vec训练句子向量
目录 一.Doc2vec原理 二.代码实现 三.总结   一.Doc2vec原理 前文总结了Word2vec训练词向量的细节,讲解了一个词是如何通过word2vec模型训练出唯一的向量来表示的。
3825 0
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
1887 1
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
662 0
|
开发工具 Android开发
Mac 安卓(Android) 配置adb路径
Mac 安卓(Android) 配置adb路径
1727 0
|
9月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
904 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
842 0
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
10488 2
|
Shell Android开发
ADB更改Android设备屏幕显示方向
ADB更改Android设备屏幕显示方向
1885 5
|
Java Android开发
Android 对adb命令的拦截
Android 对adb命令的拦截
448 2

热门文章

最新文章