Skip to content

Linly OpenLLaMA

Li Yudong (李煜东) edited this page May 30, 2023 · 5 revisions

Linly-OpenLLaMA 使用和 Meta 相同的模型结构和训练参数从头预训练。使用的数据包含中、英文无监督数据和平行语料,在语料上重新训练 spm tokenizer,在中文上获得字词结合的分词效果。

构建 tokenizer

  1. 首先在大规模中英文语料上训练 SPM,词表大小为 50000。
spm.SentencePieceTrainer.train(input='corpus.txt',  model_prefix='open_llama',  
	    shuffle_input_sentence=False,
	    train_extremely_large_corpus=True,
	    # hyperparameters of tokenizer
	    max_sentence_length=16384,
	    pad_id=3,
	    model_type="BPE",
	    vocab_size=50000,
	    split_digits=True,
	    split_by_unicode_script=True,
	    byte_fallback=True,
	    allow_whitespace_only_pieces=True,
	    remove_extra_whitespaces=False,
	    normalization_rule_name="nfkc",
)
  1. 根据结巴分词词频前20000的词表扩充中文词,并扩充简繁体汉字。扩充后词表大小为 66242。

效果示例:

原文:巴塞罗那足球俱乐部简称巴萨(Barça),是一家位于西班牙加泰罗尼亚巴塞罗那的足球俱乐部,于1899年由瑞士企业家胡安·甘伯所创立,世界球坛顶级足球俱乐部之一。俱乐部主场可容纳接近十万名观众,是全欧洲最大及世界第二大的足球场。

  • OpenLLaMA tokenizer: ['▁巴', '塞', '罗那', '足球俱乐部', '简称', '巴萨', '(', 'Bar', 'ça', '),', '是一家', '位于', '西班牙', '加', '泰', '罗', '尼亚', '巴塞罗那', '的', '足球俱乐部', ',', '于', '1', '8', '9', '9', '年由', '瑞士', '企业家', '胡', '安', '·', '甘', '伯', '所', '创立', ',', '世界', '球', '坛', '顶级', '足球俱乐部', '之一', '。', '俱乐部', '主场', '可', '容纳', '接近', '十', '万名', '观众', ',', '是', '全', '欧洲', '最大', '及', '世界', '第二', '大的', '足球', '场', '。']

  • HFL LLaMA扩充词表 tokenizer: ['▁', '巴', '塞', '罗', '那', '足球', '俱', '乐', '部', '简称', '巴萨', '(', 'Bar', 'ça', ')', ',', '是一家', '位于', '西', '班', '牙', '加', '泰', '罗', '尼亚', '巴', '塞', '罗', '那', '的', '足球', '俱', '乐', '部', ',', '于', '18', '99', '年', '由', '瑞士', '企业家', '胡', '安', '·', '甘', '伯', '所', '创立', ',', '世界', '球', '坛', '顶级', '足球', '俱', '乐', '部', '之一', '。', '俱', '乐', '部', '主场', '可', '容纳', '接近', '十万', '名', '观众', ',', '是', '全', '欧洲', '最大', '及', '世界', '第二', '大', '的', '足球', '场', '。']

  • LLaMA 原始 tokenizer: ['▁', '巴', '<0xE5>', '<0xA1>', '<0x9E>', '<0xE7>', '<0xBD>', '<0x97>', '那', '足', '球', '<0xE4>', '<0xBF>', '<0xB1>', '乐', '部', '<0xE7>', '<0xAE>', '<0x80>', '称', '巴', '<0xE8>', '<0x90>', '<0xA8>', '(', 'Bar', 'ça', ')', ',', '是', '一', '家', '位', '于', '西', '<0xE7>', '<0x8F>', '<0xAD>', '<0xE7>', '<0x89>', '<0x99>', '加', '泰', '<0xE7>', '<0xBD>', '<0x97>', '<0xE5>', '<0xB0>', '<0xBC>', '<0xE4>', '<0xBA>', '<0x9A>', '巴', '<0xE5>', '<0xA1>', '<0x9E>', '<0xE7>', '<0xBD>', '<0x97>', '那', '的', '足', '球', '<0xE4>', '<0xBF>', '<0xB1>', '乐', '部', ',', '于', '1', '8', '9', '9', '年', '由', '<0xE7>', '<0x91>', '<0x9E>', '士', '<0xE4>', '<0xBC>', '<0x81>', '业', '家', '<0xE8>', '<0x83>', '<0xA1>', '安', '·', '<0xE7>', '<0x94>', '<0x98>', '<0xE4>', '<0xBC>', '<0xAF>', '所', '创', '立', ',', '世', '界', '球', '<0xE5>', '<0x9D>', '<0x9B>', '<0xE9>', '<0xA1>', '<0xB6>', '<0xE7>', '<0xBA>', '<0xA7>', '足', '球', '<0xE4>', '<0xBF>', '<0xB1>', '乐', '部', '之', '一', '。', '<0xE4>', '<0xBF>', '<0xB1>', '乐', '部', '主', '场', '可', '容', '<0xE7>', '<0xBA>', '<0xB3>', '接', '近', '十', '万', '名', '<0xE8>', '<0xA7>', '<0x82>', '<0xE4>', '<0xBC>', '<0x97>', ',', '是', '全', '<0xE6>', '<0xAC>', '<0xA7>', '洲', '最', '大', '及', '世', '界', '第', '二', '大', '的', '足', '球', '场', '。']

预训练数据

在第一阶段预训练,共使用100GB语料,其中20G中文语料、10G平行语料、70G英文语料。

中文数据集

数据集 Disk Size Link
ClueCorpusSmall 13G https://github.com/CLUEbenchmark/CLUECorpus2020
中文维基百科 2023 2.5G https://download.wikipedia.com/zhwiki/
CSL 1.5G https://github.com/ydli-ai/CSL
news-crawl 2.3G https://data.statmt.org/news-crawl/zh/

平行语料

数据集 Disk Size Link
UNCorpus 4.3G https://conferences.unite.un.org/UNCorpus
translation2019zh 1.3G https://github.com/brightmart/nlp_chinese_corpus
WikiMatri 0.6G http://data.statmt.org/wmt21/translation-task/WikiMatrix/
news-commentry 67M http://data.statmt.org/wmt20/translation-task/back-translation/
ParaCrawl v9 2.6G https://paracrawl.eu/

英文数据集

数据集 Disk Size Link
英文维基百科 2023 20G https://download.wikipedia.com/enwiki/
arxiv 10G https://github.com/togethercomputer/RedPajama-Data
GitHub 10G 同上
Book 18G 同上
stackexchange 13G 同上

预训练参数

我们首先训练 13B 模型,基本上采用 LLaMA 的训练参数,其中 Batch Size 通过梯度累积实现。

  • Sequence Length: 2048
  • Batch Size: 4096
  • Learning Rate: 3e-4
  • cosine schedule, 0.1 weight decay

训练进度: