27 Oct

TeaForN:让Teacher Forcing更有“远见”一些

Teacher Forcing是Seq2Seq模型的经典训练方式,而Exposure Bias则是Teacher Forcing的经典缺陷,这对于搞文本生成的同学来说应该是耳熟能详的事实了。笔者之前也曾写过博文《Seq2Seq中Exposure Bias现象的浅析与对策》,初步地分析过Exposure Bias问题。

Teacher Forcing示意图

Teacher Forcing示意图

本文则介绍Google新提出的一种名为“TeaForN”的缓解Exposure Bias现象的方案,来自论文《TeaForN: Teacher-Forcing with N-grams》,它通过嵌套迭代的方式,让模型能提前预估到后$N$个token(而不仅仅是当前要预测的token),其处理思路上颇有可圈可点之处,值得我们学习。

(注:为了尽量跟本博客旧文章保持一致,本文的记号与原论文的记号有所不同,请大家以理解符号含义为主,不要强记符号形式。)

点击阅读全文...

7 Dec

【龟鱼记】全陶粒的同程底滤生态缸

最近一段时间入了水族的坑,整了个60cm×40cm的超白缸来玩,主要是龟鱼共养。个人比较追求自然仿生,所以希望能在缸里建立一个相对稳定的仿生态环境。当然,其实这都是借口,根本原因是懒得换水,也不想洗过滤棉,所以就想着依靠生态系统自身的净化能力来延长换水时间。为此,参考网上的资料搞了个同程底滤,并且根据自己的经验做了一些修改。

生态缸-俯视图

生态缸-俯视图

点击阅读全文...

8 Sep

有限内存下全局打乱几百G文件(Python)

这篇文章我们来做一道编程题:

如何在有限内存下全局随机打乱(Shuffle)几百G的文本文件?

题目背景其实很明朗,现在预训练模型动辄就几十甚至几百G语料了,为了让模型能更好地进行预训练,对训练语料进行一次全局的随机打乱是很有必要的。但对于很多人来说,几百G的语料往往比内存还要大,所以如何能在有限内存下做到全局的随机打乱,便是一个很值得研究的问题了。

已有工具

假设我们的文件是按行存储的,也就是一行代表一个样本,我们要做的就是按行随机打乱文件。假设我们只有一个文件,并且这个文件大小明显小于内存,那么我们可以用linux自带的shuf命令:

shuf input.txt -o output.txt

点击阅读全文...

10 Sep

在五花八门的预训练任务设计中,NSP通常认为是比较糟糕的一种,因为它难度较低,加入到预训练中并没有使下游任务微调时有明显受益,甚至RoBERTa的论文显示它会带来负面效果。所以,后续的预训练工作一般有两种选择:一是像RoBERTa一样干脆去掉NSP任务,二是像ALBERT一样想办法提高NSP的难度。也就是说,一直以来NSP都是比较“让人嫌弃”的。

不过,反转来了,NSP可能要“翻身”了。最近的一篇论文《NSP-BERT: A Prompt-based Zero-Shot Learner Through an Original Pre-training Task--Next Sentence Prediction》(下面简称NSP-BERT)显示NSP居然也可以做到非常不错的Zero Shot效果!这又是一个基于模版(Prompt)的Few/Zero Shot的经典案例,只不过这一次的主角是NSP。

背景回顾

曾经我们认为预训练纯粹就是预训练,它只是为下游任务的训练提供更好的初始化,像BERT的预训练任务有MLM(Masked Language Model和NSP(Next Sentence Prediction),在相当长的一段时间内,大家都不关心这两个预训练任务本身,而只是专注于如何通过微调来使得下游任务获得更好的性能。哪怕是T5将模型参数训练到了110亿,走的依然是“预训练+微调”这一路线。

点击阅读全文...

21 Feb

GPLinker:基于GlobalPointer的事件联合抽取

大约两年前,笔者在百度的“2020语言与智能技术竞赛”中首次接触到了事件抽取任务,并在文章《bert4keras在手,baseline我有:百度LIC2020》中分享了一个转化为BERT+CRF做NER的简单baseline。不过,当时的baseline更像是一个用来凑数的半成品,算不上一个完整的事件抽取模型。而这两年来,关系抽取的模型层见迭出,SOTA一个接一个,但事件抽取似乎没有多亮眼的设计。

最近笔者重新尝试了事件抽取任务,在之前的关系抽取模型GPLinker的基础上,结合完全子图搜索,设计一个比较简单但相对完备的事件联合抽取模型,依然称之为GPLinker,在此请大家点评一番。

任务简介

事件抽取是一个比较综合的任务。一个标准的事件抽取样本如下:

标准的事件抽取样本(图片来自百度DuEE的GitHub)

标准的事件抽取样本(图片来自百度DuEE的GitHub)

点击阅读全文...

20 Jun

Ladder Side-Tuning:预训练模型的“过墙梯”

如果说大型的预训练模型是自然语言处理的“张良计”,那么对应的“过墙梯”是什么呢?笔者认为是高效地微调这些大模型到特定任务上的各种技巧。除了直接微调全部参数外,还有像AdapterP-Tuning等很多参数高效的微调技巧,它们能够通过只微调很少的参数来达到接近全量参数微调的效果。然而,这些技巧通常只是“参数高效”而并非“训练高效”,因为它们依旧需要在整个模型中反向传播来获得少部分可训练参数的梯度,说白了,就是可训练的参数确实是少了很多,但是训练速度并没有明显提升。

最近的一篇论文《LST: Ladder Side-Tuning for Parameter and Memory Efficient Transfer Learning》则提出了一个新的名为“Ladder Side-Tuning(LST)”的训练技巧,它号称同时达到了参数高效和训练高效。是否真有这么理想的“过墙梯”?本来就让我们一起来学习一下。

点击阅读全文...

9 Oct

“十字架”组合计数问题浅试

昨天在这个公众号文章看到了一道据说答案有争议的“十字架”组合计数问题:

一个正方形中,如果四条边有两条是$i$色,另外两条是其他两种不同颜色,那么称这个正方形是“$i$色主导”的。考虑如下由16条线段、5个正方形组成的“十字架”图形,每条边染上红、黄、蓝三色之一,使得横向和竖向三个正方形的主导色均不相同,问有多少种不同的染色方法。
“十字架”示意图

“十字架”示意图

链接的文章有两个答案:吴康老师的54432,以及王慧兴老师的27216。本文先通过编程确认王慧兴老师的27216是正确答案,然后给出自己的理论分析过程。

点击阅读全文...

25 Apr

注意力和Softmax的两点有趣发现:鲁棒性和信息量

最近几周笔者一直都在思考注意力机制的相关性质,在这个过程中对注意力及Softmax有了更深刻的理解。在这篇文章中,笔者简单分享其中的两点:

1、Softmax注意力天然能够抵御一定的噪声扰动;

2、从信息熵角度也可以对初始化问题形成直观理解。

鲁棒性

基于Softmax归一化的注意力机制,可以写为
\begin{equation}o = \frac{\sum\limits_{i=1}^n e^{s_i} v_i}{\sum\limits_{i=1}^n e^{s_i}}\end{equation}
有一天笔者突然想到一个问题:如果往$s_i$中加入独立同分布的噪声会怎样?

点击阅读全文...