简介
题目:Language Models are Unsupervised Multitask Learners
翻译:语言模型是无监督多任务学习者
点击下载pdf 概要:以往的自然语言处理任务:问答、翻译、阅读理解、总结,需要使用特定的有标签数据集进行监督训练。本文仅仅使用从网页搜集的数据集WebText,而没有使用任何监督数据,15亿参数的GPT-2直接在8个数据集上进行测试,7个取得了最先进水平。
介绍
以往的自然语言处理任务:问答、翻译、阅读理解、总结,需要使用特定的有标签数据集进行监督训练。本文仅仅使用从网页搜集的数据集WebText,而没有使用任何监督数据,15亿参数的GPT-2直接在8个数据集上进行测试,7个取得了最先进水平。
已有的机器学习系统像是专家,在特定数据集、特定标签训练后具备特定能力。本文造了一个更普遍的模型,无需在有标签数据集训练就可以胜任多种任务。多任务无需修改任何参数、网络结构,直接以文本形式构造,例如翻译任务(translate to french, english text, french text)、阅读理解任务(answer the question, document,question, answer)。
数据集
从Reddit爬取所有出站链接,Reddit这个网站本质来说是个链接的集中处,是你能在网上找好东西的关键。所以这里的链接是经过人类认可的有趣的有价值的链接。
最终从网页爬取的数据集WebText,包含4500万链接的文本的子集。从HTML网页提取文本使用的是Dragnet 和 Newspapercontent extractors
输入表征
一个语言模型应该能够理解任何字符串,现在的语言模型会有一些预处理过程:小写化、tokenization,字符串中超出词表的词汇就无法理解。
我们为空格添加了一个例外,这大大提高了压缩效率,同时只跨多个vocab标记添加了最小的单词碎片。
这种输入表示允许我们将字级lm的经验好处与字节级方法的一般性结合起来。由于我们的方法可以为任何Unicode字符串分配概率,这允许我们在任何数据集上计算lm,而不管预处理、标记化或词汇表大小。
from transformers import GPT2LMHeadModel, GPT2Tokenizer
print(tokenizer.encode("negative")) # [31591] 注 字典为"negative": 31591,
print(tokenizer.encode("negativeY")) # [31591, 56] 注 字典为"negative": 31591,
print(tokenizer.encode(" negative")) # [4633] 注 "Ġnegative": 4633,
print(tokenizer.encode("you negative")) # [5832, 4633]
print(tokenizer.encode("Knegative")) # [42, 31591]
模型
与Transformer、gpt1有所不同,Layer Normalization位置靠前。残差连接权重设置为,N是残差连接层数。
参数量
实验
和gpt-1测试数据集基本一样,gpt-2能zero-shot,但是效果没有达到惊艳的程度。