台湾李宏毅老师的机器学习2022新课,有一堂课叫做 自督導式學習的神奇能力 ,很有意思,忍不住做了点笔记。

一、跨语言(Cross-lingual)的能力

在一种语言上精调后的模型,可以用于另一种语言的特定任务。

Why?一种解释是BERT可以无视语言,只关注语言内部的语义。它可以把不同语言相同含义的词embedding进行对齐,如下图。

bert发表时间(还有哪些神奇的能力呢)(1)

1. 如何获得一个词的embedding向量?把所有包含这个词的句子找出来,分别编码得到这个词的contexual embedding,然后对这些向量取平均值。

2. 一种语言的所有token的平均embedding向量可以作为该语言的embedding向量。

bert发表时间(还有哪些神奇的能力呢)(2)

bert发表时间(还有哪些神奇的能力呢)(3)

作者发现跨语言能力与训练语料大小有关,训练语料越大,跨语言能力越强。

有了每个语言的embedding向量,在做跨语言任务时,可以把语言之间的向量差异加(或减)回到模型中,如最右边图所示。实验结果表示这样最终效果会好点(好像好的很有限。。)

bert发表时间(还有哪些神奇的能力呢)(4)

bert发表时间(还有哪些神奇的能力呢)(5)

二、跨学科 (Cross-discipline)的能力

BERT最早是用在人类语言上的,它能不能用在非人类语言上?比如DNA序列 的预测?比如DNA序列中包含4种去氧核糖核酸:A、T、C、G。首先把这4种去氧核糖核酸随机对应到人类语言的4个tokens(实验发现这个对应关系对结果影响不大,所以随机对应就好),比如下图。然后再使用BERT框架完成DNA相关的任务。

bert发表时间(还有哪些神奇的能力呢)(6)

作者发现利用人类语言预训练好的模型作为初始化模型,最终效果优于随机初始化模型。

作者把这个发现应用在优化 Speech Question Answering 问题上。

所谓的Speech QA问题,就是让机器听一段背景语音(类似Doc),然后基于这段语音回答语音问题(Question),也即从背景语音中找出一段能回答Question的语音出来。

bert发表时间(还有哪些神奇的能力呢)(7)

之前的做法一般依赖ASR,比如把Question甚至Doc转成文字后再扔进BERT。显然这种做法依赖于ASR的效果,在噪音较大的场景下ASR的效果是很差的。

So,能不转文字,直接用语音做预测么?

bert发表时间(还有哪些神奇的能力呢)(8)

直接把Question和Doc语音扔进BERT是不work的,就算有预训练好的语音模型HuBERT。可能是因为模型还无法理解语音中的语义。

把语义BERT的输出进行离散化,然后在上面再架一层文字版BERT?如果文字版BERT随机初始化,效果还是不行。如果使用预训练好的文字BERT模型,就有个语音输出token与文字token的对应关系问题。

bert发表时间(还有哪些神奇的能力呢)(9)

基于之前DNA的应用,作者发现只要确定一个随机对应就行了,效果就杠杠的,见右下图。

bert发表时间(还有哪些神奇的能力呢)(10)

bert发表时间(还有哪些神奇的能力呢)(11)

三、没预训练数据?人造一些也是挺有效的

在人造的假数据上预训练BERT,然后在NLP任务上微调模型,会比没有预训练的效果更好吗?结论是数据造的好的话,还真有帮助。

比如我们生成一些token ids序列用来训练模型,如 {0, 1, 2, 3, ..., 511}。然后利用这些生成的序列预训练BERT,见下图的 Stage 1 ,然后把人类语言的tokens和生成数据中的id进行随机对应(类似前面),在NLP任务数据上进行精调,见下图的 Stage 2。

bert发表时间(还有哪些神奇的能力呢)(12)

bert发表时间(还有哪些神奇的能力呢)(13)

上图是不同方式造假数据带来的效果改进。最左边的 English 表示传统的预训练与精调方式,即在英文数据上预训练BERT,然后在英文任务数据上进行精调。

random 对应的是构造假数据使用随机生成id的方式。可见在这种不包含信息量的数据上预训练对后续任务是没有改进的。而 paired 表示构造假数据时保证生成的id都会出现2次,如下图:

bert发表时间(还有哪些神奇的能力呢)(14)

在这样生成的假数据上预训练,能给任务带来相当不错的提升。

shuffle 的生成方式是先生成一段连续的id,如 1, 2, 3, ..., 64,然后再随机打乱这个序列。效果也挺不错的,比 paired 稍差。

bert发表时间(还有哪些神奇的能力呢)(15)

所以关键是如何构造预训练用的假数据。

想法:如果参照人类语言token的分布情况(幂次分布)构造数据,有没有可能效果更好?


所以,如果遇到某些场景下没有数据做预训练,那就试试按照先验知识构造一些假数据用来做预训练吧 。

,