作者:Kawin Ethayarajh
编译:ronghuaiyang (AI公园)

具有上下文信息的词表示到底有多大程度的上下文化?这里给出了定量的分析。

将上下文信息放到词嵌入中 — 就像BERT,ELMo和GPT-2 — 已经证明了是NLP的一个分水岭的想法了。使用具有上下文信息的词表示来替换静态词向量(例如word2vec),在每个NLP任务上都得到了非常显著的提升。

但是这些上下文化的表达到底有多大程度的上下文化呢?

想想“mouse”这个词。它有多种词义,一个指的是啮齿动物,另一个指的是设备。BERT是否有效地在每个词的意义上创造了一种“mouse”的表达形式?或者BERT创造了无数个“mouse”的形象,每一个都是和特定的上下文相关?

在我们的EMNLP 2019论文“How Contextual are Contextualized Word Representations?”中,我们解决了这些问题,并得出了一些令人惊讶的结论:

  1. 在BERT、ELMo和GPT-2的所有层中,所有的词它们在嵌入空间中占据一个狭窄的锥,而不是分布在整个区域。
  2. 在这三种模型中,上层比下层产生更多特定于上下文的表示,然而,这些模型对单词的上下文环境非常不同。
  3. 如果一个单词的上下文化表示根本不是上下文化的,那么我们可以期望100%的差别可以通过静态嵌入来解释。相反,我们发现,平均而言,只有不到5%的差别可以用静态嵌入来解释。
  4. 我们可以为每个单词创建一种新的静态嵌入类型,方法是将上下文化表示的第一个主成分放在BERT的较低层中。通过这种方式创建的静态嵌入比GloVe和FastText在解决单词类比等基准测试上的表现更好。

回到我们的例子,这意味着BERT创建了与上下文高度相关的单词“mouse”的表示,而不是每个单词都有一个表示。任何“mouse”的静态嵌入都会对其上下文化表示的差异造成很小的影响。然而,如果我们选择的向量确实最大化了可解释的变化,我们将得到一个静态嵌入,这比GloVe或FastText提供的静态嵌入更好。

上下文化的度量

上下文化看起来是什么样的?考虑两个场景:

A panda dog runs.
A dog is trying to get bacon off its back.

注意,这些度量都是针对给定模型的给定层计算的,因为每个层都有自己的表示空间。例如,单词‘dog’在BERT的第一层和第二层有不同的self-similarity值。

各项异性调整

当讨论上下文时,考虑嵌入的各向同性是很重要的。(即它们是否在各个方向均匀地分布)。

在下面的两个图中,SelfSim(’dog‘)=0.95。左边的图片显示,“dog”这个词没有很好的上下文化。它的表现形式在它出现的所有上下文中几乎都是相同的,而且表示空间的高各向同性表明0.95的self-similarity是非常高的。右边的图像则恰恰相反:因为任何两个单词的余弦相似度都超过了0.95,所以‘dog’的自相似度达到0.95就没什么了不起了。相对于其他单词,‘dog’会被认为是高度上下文化的!

为了调整各向异性,我们为每个测量值计算各向异性基线,并从相应的原始测量值中减去每个基线。但是有必要对各向异性进行调整吗?有!如下图所示,BERT和GPT-2的上层是极具各向异性的,这表明高的各向异性是上下文化过程的固有特征,或者至少是其结果:

特定上下文

一般来说,在更高的层中,上下文化的表示更特定于上下文。下图所示,自相似度的降低几乎是单调的。这类似于在NLP任务上训练的LSTMs的上层如何学习更多特定于任务的表示(Liu et al., 2019)。GPT-2是最具特定上下文化的,其最后一层中的表示几乎是与上下文相关程度最高的。

**自相似度最低的停止词比如包括“the”。(最特定于上下文表示的词)。**一个词出现在多种上下文中,而不是其固有的一词多义,是其上下文化表示变化的原因。这表明ELMo、BERT和GPT-2并不是简单地为每个词赋予一个表示,否则,就不会这么少的词意表示会有这么多的变化。

**特定上下文表示性在ELMo、BERT和GPT-2中表现得非常不同。**如下图所示,在ELMo中,相同句子中的单词在上层中更相似。在BERT中,同一句话的上层单词之间的相似性更大,但平均而言,它们之间的相似性比两个随机单词之间的相似性更大。相比之下,对于GPT-2,同一句话中的单词表示彼此之间的相似性并不比随机抽样的单词更大。这表明,BERT和GPT-2的上下文化比ELMo的更微妙,因为他们似乎认识到,出现在相同上下文中的单词不一定有相同的意思。

静态 vs. 上下文化

平均而言,在一个词的上下文化表示中,只有不到5%的差异可以用静态嵌入来解释。如果一个单词的上下文化表示完全与上下文无关,那么我们期望它们的第一个主成分能够解释100%的变化。相反,平均不到5%的变化可以被解释。这个5%的阈值代表了最佳情况,其中静态嵌入是第一个主成分。例如,没有理论保证GloVe向量与最大化可解释变化的静态嵌入相似。这表明,BERT、ELMo和GPT-2并不是简单地为每个词意义分配一个嵌入:否则,可解释的变化比例会高得多。

在许多静态嵌入基准上,BERT的低层上下文化表示的主成分表现优于GloVe和FastText。这个方法将之前的发现归结为一个逻辑结论:如果我们通过简单地使用上下文化表示的第一个主成分为每个单词创建一种新的静态嵌入类型,结果会怎样?事实证明,这种方法出奇地有效。如果我们使用来自底层BERT的表示,这些主成分嵌入在涉及语义相似、类比求解和概念分类的基准测试任务上胜过GloVe和FastText(见下表)。

对于所有这三种模型,从低层创建的主成分嵌入比从高层创建的主成分嵌入更有效。那些使用GPT-2的人的表现明显比来自ELMo和BERT的人差。考虑到上层比下层更特定于上下文,考虑到GPT-2的表示更特定于上下文,这表明不太特定于上下文的表示的主成分对这些任务更有效。

总结

在ELMo、BERT和GPT-2中,上层比下层产生更多特定于上下文的表示。但是,这些模型对单词的上下文环境非常不同:在调整了各向异性之后,ELMo中相同句子中的单词之间的相似性最高,而GPT-2中几乎不存在。

平均而言,在一个词的上下文化表示中,只有不到5%的变化可以用静态嵌入来解释。因此,即使在最佳情况下,静态词嵌入也不能很好地替代上下文化的词。尽管如此,上下文化的表示可以用来创建更强大的静态嵌入类型:BERT的低层上下文化表示的主成分比GloVe和FastText要好得多!

xx是一个类型 这在给定的上下文_BERT, ELMo, amp; GPT-2: 这些上下文相关的表示到底有多上下文化?...相关推荐

  1. xx是一个类型 这在给定的上下文_#PaperCarrier | CoSeRNN :为你解释序列化与上下文在会话推荐中的作用...

    Paper : Contextual and Sequential User Embeddings for Large-Scale Music Recommendation 关键词:音乐推荐,用户嵌入 ...

  2. xx是一个类型 这在给定的上下文_基于上下文的派发:挂起临时变量内存

    最近做一些蒙卡相关的东西,然后遇到有一个可能很多人都会遇到的问题: 把所有的步骤都手写成原地(in-place)操作由于需要自己来保管各种中间变量会很麻烦(增加心智负担),但是用比较正常的方式去写又由 ...

  3. 一个进程仅存在给定类型的一个挂起信号,同一进程同样类型的其他信号不被排队

    任何时候,一个进程仅存在给定类型的一个挂起信号,同一进程同样类型的其他信号不被排队,只被简单的丢弃:理解--即使连续发送SIGQUIT信号,进程也只有处理一个SIGQUIT信号. Please rea ...

  4. 给定一个字符串str,给定一个字符串类型的数组arr,/出现的字符都是小写英文arr每一个字符串,/代表一张贴纸,你可以把单个字符剪开使用

    package 左神题目.dp; import java.util.*; //给定一个字符串str,给定一个字符串类型的数组arr, // 出现的字符都是小写英文arr每一个字符串, // 代表一张贴 ...

  5. ACMNO.24 C语言-转置矩阵 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。 输入 一个3x3的矩阵 输出 转置后的矩阵 样例

    题目描述 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换. 输入 一个3x3的矩阵 输出 转置后的矩阵 样例输入 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 2 5 8 3 ...

  6. struct 模块 把一个类型,如数字,转成固定长度的bytes

    该模块可以把一个类型,如数字,转成固定长度的bytes import structheaders=struct.pack('i',132333) print(headers,len(headers)) ...

  7. 怎么获取一个类型的所有字段的名字 和获取给予数据相应的值

    下面的代码你只要注意  怎么样获取字段名和相应数据的值就OK了其它的就不要管 View Code public FlexiGridData GetFlexiGridData<T>(Page ...

  8. boost::type_index模块实现一个类型中获得简短的和人类可读的类型名称

    boost::type_index模块实现一个类型中获得简短的和人类可读的类型名称 实现功能 C++实现代码 实现功能 boost::type_index模块实现一个类型中获得简短的和人类可读的类型名 ...

  9. Java黑皮书课后题第6章:*6.14(估算π)π可以使用下面的数列进行计算。编写一个方法,对于给定的i返回m(i),并编写一个测试程序,显示如下表格

    6.14(估算π)π可以使用下面的数列进行计算.编写一个方法,对于给定的i返回m,并编写一个测试程序,显示如下表格 题目 题目描述与运行示例 破题 代码 题目 题目描述与运行示例 6.14(估算π)π ...

最新文章

  1. Android system server之PackageManagerService详细分析
  2. 直接输入地址访问服务器上的静态资源
  3. AngularJS学习!
  4. vue 修改div宽度_Vue 组件通信方式及其应用场景总结(1.5W字)
  5. 差分隐私 python_[宜配屋]听图阁
  6. String Primitive和String Object
  7. Java 导出Excel的各种尝试
  8. python运算优先级
  9. WORDNET与HOWNET之比较
  10. OCR身份证识别免费试用,附带Java代码
  11. Ubuntu操作系统的学习,新手上路
  12. SPI通信协议简要介绍
  13. 170816 Ubuntu-Nvidia CUDA+Driver+cuDNN installation-Titan Xp
  14. 毕业设计 stm32老人跌倒检测预防系统 - 单片机 物联网 嵌入式
  15. Flutter - 控件之 Picker
  16. TIA博途中触摸屏仿真时画面字体变大,超出范围的处理方法
  17. 4g上网宝显示无服务器,八天真实体验 华为EC5373 LTE上网宝
  18. games101学习笔记_Geometry1(几何)
  19. ​Mysql 分区表-分区操作​
  20. 【报告分享】服装零售行业洞察报告-有赞伯俊(附下载)

热门文章

  1. socket closed是什么意思_socket请求
  2. java向注册表单传递数据php_PHP提交from表单的方法
  3. c++调用cplex求解例子_递归算法的R语言实现 (罗汉塔、九连环、斐波那契数列等问题的求解)...
  4. java 嵌套类 作用_java 嵌套类的分类、为什么使用嵌套类?
  5. qt 不显示 mysql 数据表中的内容_qt 数据库操作总结
  6. PAT_B_1015_C++(25分)
  7. PAT_B_1006_Java(15分)
  8. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](2)
  9. 【图像超分辨率】Understanding Deformable Alignment in Video Super-Resolution
  10. Linux 手动安装Ettercap