hengyuan

V1

2023/02/24阅读:69主题:嫩青

BLOOM

Title:BLOOM: A 176B-Parameter Open-Access Multilingual Language Model

1.Motivation

  • 之前的很多大模型都没有开源(千亿级别的),而且在现有的开源的大模型里面,大部分大模型都是基于英语的
  • 所以他们要开源一个千亿级别的 Multilingual 模型来推动发展,这个模型就是 BLOOM: BigScience Large Open-science Open-access Multilingual Language Model
  • 同时把训练模型的过程细节记录下来供别人参考,帮助更多人训练大模型

2.ROOTS Dataset(Pre-training Dataset)

2.1 Overview

  • ROOTS (Responsible Open-science Open-collaboration Text Sources) 这个数据集是一个由 huggingface datasets, dataset collections, pseudo-crawl dataset, Github Code, OSCAR 这几个数据构成的,它包含 46 个 natural 语言和 13 个编程语言 (总共 59 个语言),整个数据集的大小有 1.6TB
  • 这个数据集是之前 2022 年 6 月 BigScience 他们构造出来的,并发表了论文 The BigScience ROOTS Corpus: A 1.6TB Composite Multilingual Dataset,然后 BLOOM 模型是 2022 年 12 月发的
  • 他们是用这个数据集来训练 BLOOM 模型,相当于是把整个工作拆成了两个论文
  • 他们公开了处理数据的整个 Pipeline 的代码,代码仓库地址
  • 他们所采样的 language 是根据 BigSicence 的成员对语言的熟悉程度去决定的,因为方便后面对数据进行处理和过滤,最终采纳的语言的 summary 细节如下
  • 这是数据的一个可视化 Summary

  • 这个 corpus 是他们 BigScience 非常多人一起搞的,不仅仅是下面这些人员列表,应该有超过 100 个人

  • 注意, dataset 这边没有开源,需要填一个 signup 表然后被批以后才可以获得这个数据集,signup 表链接

2.2 Obtain Pipeline

  • CrowdSourced Datasets 占了 62%, Common Crawl-based Dataset 占了 38%
  • Identified Datasets and Collections 就是现有的 existing 任务的数据集和 collections,Pseudo-Crawled Data 是没有直接用爬虫抓取数据,而是采用了 CommonCrawl 的 Data (相当于间接地获取了 Website 的数据了,所以叫 Pseudo)

2.3 Visualization

虽然没有直接开源数据集,但是在 huggingface 上面他们提供了一些 visulize corpus 的 app

2.3.1 Corpus Description

Corpus Description App 里面给了他们用了哪些 datasets 或者 data collection

2.3.2 Catalog of Language Resource

Catalog of Language Resource App 描述了 Corpus 所涉及的语言的地理位置分布以及数量

2.3.3 Corpus Map

Corpus Map App, 他可以看 corpus 不同数据分区下的数据情况,比如下面这个是可以看到 Chinese 用的是哪些数据以及对应的信息,整个 visulization 有点像是查看自己硬盘数据分区的那种软件

2.3.4 ROOTS SEARCH

ROOT Search App 就是你输入一些 query,它会基于 BM25 从 ROOTS Corpus 里面返回匹配到你 query 的数据,用的类似 ElasticSearch 这样检索框架搭建的

2.4 Corpus Sources

它这边应该只是简单列了一下 ROOTS 之前那篇工作的数据集的吧,没有仔细说

2.4.1 Identified Datasets and Collections

  • 就是从各个语言上面获取一些 existing datasets 和 Collections 出来, 从 huggingface datasets 上获取的,包含多个任务 (e.g. question answering, summarization, or dialogue datasets)

2.4.2 Pseudo-Crawled Data

  • 因为 existing 的数据集中主要是一些主流的 language resource 的数据,对此他们对那些资源比较少的语言,他们团队的人先是收集了一系列 target content 的 URL, 然后专门从 Common Crawl 上 arxived 的数据上获取这些 URL 的内容下来而不是直接去爬取
  • 然后又处理了一下这些数据,Remove all the sub-trees contained in a <script>, <style>, <header>, <iframe>, <footer> and <form> tag as well as all the sub-trees associated with a <body>, <div>, <p>, <section>, <table>, <ul>, <ol> or <dl> tag whose textual content was less than 64 characters long.

2.4.3 Github Code

  • Code Dataset 这里他们用的是 BIGQUERY 这个含有多个编程语言的数据集,是 Google’s publicly available BigQuery dataset 中的一个 subset, 不同语言的文件数量如下
  • 也做了数据处理,只选 Characters 数量在 100~200000 的,20 ~ 1000 行的,以及英文字母在 15-65% 之间的代码
  • BigQuery 的介绍博客 ,BigQuery 相当于是一个数据管理平台,可以用 SQL 在上面获取我们想要的数据,每个月有免费的使用 BigQuery 查询的额度,更多的查询额度的话就需要钱了,参考
  • BigQuery 快速入门参考博客

2.4.4 OSCAR

OSCAR(Open Super-large Crawled Aggregated coRpus) 是一个对 Common Crawl 数据进行了 Language Classfication 和 Ungoliant 工具过滤后得到的一个 huge multilingual corpus

  • 论文中用的是 OSCAR version 21.09,现在 Huggingface 上已经有免费的 OSCAR 22.01 的版本了,数据地址,占了 ROOTS corpus 38%
  • 针对 OSCAR 数据,他们剔除了 Machine-Generated Content (e.g., Search Engine Optimization),包含敏感词汇的文本 (offensive words, pornographic text 等)

2.5 Filtering

  • 他们对所有的数据先用 SimHash 工具算文本之间的 Hamming distance, 然后把超过阈值的过滤掉,但是发现里面 SimHash 对于那些比较长的文本之间会判断的比较相似(但其实不相似),所以又用 substring deduplication based on Suffix Array 过了一遍
  • 把包含个人信息的数据也过滤掉了(e.g., email, phone number, location 等),用的是 rule-based 的方法(正则),

2.6 Prompted Dataset (Multitask-Finetuning Dataset)

  • 论文中是在 Public Pool of Prompts (P3), a collection of prompts for various existing and open-source English natural language datasets 这个 benchmark 上继续拓展得到了 xP3 benchmark, P3 benchmark 的收集过程用到了 PromptSource 这个工具来帮助创建 effective prompt, 其对应的数据集明细如下
Multiple-Choice QA
  CommonsenseQA
  DREAM
  QUAIL
  QuaRTz
  Social IQA
  WiQA
  Cosmos
  QASC
  Quarel
  SciQ
  Wiki Hop
  ARC
  OpenBookQA
  MultiRC
  PIQA
  RACE
  HellaSwag
  BoolQ
Extractive QA
  Adversarial QA
  Quoref
  DuoRC
  ROPES
  SQuAD v2
  ReCoRD
Close-book QA
  Hotpot QA
  Wiki QA
  Trivia QA
  Web Questions
Structure-to-text
  Common Gen
  Wiki Bio
Sentiment
  Amazon
  App Reviews
  IMDB
  Rotten Tomatoes
  Yelp
Summarization
  CNN Daily Mail
  Gigaword
  MultiNews
  SamSum
  XSum
Topic Classification
  AG News
  DBPedia
  TREC
Paraphrase Identification
  MRPC
  PAWS
  QQP
Natural Language Inference
  ANLI
  CB
  RTE
Coreference Resolution
  WSC
  Winogrande
Word Sense disambiguation
  WiC
Sentence Completion
  COPA
  HellaSwag
  Story Cloze
  • 之所以拓展,是因为 P3 只有英语的数据集,所以他们又纳入了其他语言的数据得到 xP3 (也用到了 PromptSource 这个工具), xP3 包括 83 datasets, 46 languages and 16 tasks, 并且 xP3 在语言上的分布和 ROOTS 的分布接近,具体如下

3.Model Arch

  • 用的是 Decoder-Only 的架构,主要在 Positional Embedding 和 LayerNorm 上做了稍微的修改

3.1 ALiBi Positional Embeddings

  • attention 的公式其实可以拆成下面这样,参考博客 是 token embedding, 是 position embedding

  • ALiBi(Attention with Linear Biases), 是一种相对位置编码的变种,就是在做 attention 的时候,上面公式的中间两项都去掉了,然后把最后一项 ( 交互的这一项) 用一个 scalar 直接代替,这个 scalar 就是两个 token 之间的相对位置距离 (e.g. token 1 和 token 2 的相对距离就是 1-2 = -1), 然后这个 scalar 还会再乘上一个 hyper-param , 然后直接加到 attention score matric 上 (在 softmax 之前)

  • 用这个 Position 策略一方面是可以延伸到更长的文本长度,一方面是可以让训练更加 Smooth

3.2 Embedding LayerNorm

  • 他们在 first embedding layer 后面多加了一个 LayerNorm Layer, 发现这 significantly improved training stability

4.Training

4.1 Pre-train & Multitask Finetuning

  • 就是用 ROOTS 数据集进行 Pre-train, Pre-train 的 objective 就是标准的 LM objective, 得到 BLOOM 模型
  • 用的是 xP3 数据集去对 Pre-train 完的 BLOOM 进行 Multitask Finetuning (Instruction Tuning) 得到 BLOOMZ

4.2 Contrastive Finetuning

  • 他们在 Pre-train BLOOM 模型上用文本相似度的数据用 in-batch Contrastive Learning 又 Fine-tuning 了一下得到 SGPT-BLOOM 模型
    • 用最后一个 token 的 embedding 代表 Sentence Embedding

5.Result

  • 主要是用了 SuperGLUE 这个 Benchmark 来验证效果

  • 没有 Instruction Tuning 的 BLOOM 效果是不如 T0 的,因为 T0 是有用 Instruction Tuning 过的

  • 加了 Instruction Tuning 之后,模型在 Zero-Shot 和 few-shot上的能力显著提高了

6.Hints

  • 用 ALiBi Positional Embeddings 在大模型训练中是不错的选择
  • 在 first embedding layer 后面加 LayerNorm 可以提升大模型训练的稳定性
  • Instruction Tuning 能大大地提升模型的泛化能力
  • 模型训练的 learning rate 随着模型的增大而减小

7.Released Resources

  • 只用 ROOTS 数据去进行预训练得到的模型是 BLOOM,有多个参数的版本
  • 在 BLOOM 上面用 xP3 数据进行 Multitask Fine-tuning (Instruction Fine-tuning) 后得到的模型是 BLOOMZ,有多个参数的版本
  • 在 BLOOM 上面用文本相似度数据集进行 Contrastive Finetuning 得到 SGPT-BLOOM-msmarcoSGPT-BLOOM-nli 模型
  • 开源了 prepare-data 的代码
  • 训练大模型的代码

8.Other Info

8.1 Model Arch Selection

  • 他们在选择模型架构的时候主要是看哪个架构的 zero-shot generation 能力更强,然后是在 6.7B 参数量上进行实验来选择的,evaluation 用的 tasks 包括 29 个 tasks from the EleutherAI Language Model Evaluation Harness (EAI-Eval) 和 9 个 tasks from the evaluation set of T0 (T0-Eval),实验证明了 Decoder-only 的架构在 zero-shot 上的效果最好
    • 没有实验 MoE arch, 因为 GPU 资源不够

8.2 Tokenizer

  • 从 ROOTS 里面每个语言里面随机 sampling 相同比例的数据出来用 BPE 算法训练 tokenizer, Vocab size 是 250,680,里面有 200 unused special token 供使用

8.3 Distributed Training

  • 模型很大,他们用的是 Megatron-DeepSpeed 这个框架,结合 Data parallelism (DP),Tensor parallelism (TP),Pipeline parallelism (PP) 三种策略去训练
  • 并且也给出了比较详细的训练参数
  • 大模型训练的话,lr 在 -5 和 -6 级别

分类:

人工智能

标签:

自然语言处理

作者介绍

hengyuan
V1