Skip to content

增量预训练(Pretrain)样本拼接篇

来源:AiGC面试宝典 作者:宁静致远 日期:2024年01月27日


目录


一、Pretrain阶段,为什么需要拼接?

为了提高预训练效率拓展LLM最大长度,随机将若干条短文本进行拼接是预训练阶段常见手段。

📝 通俗解释:想象一下,你有很多短文章,每篇只有几百字。如果直接训练,模型每次只能看到一小段,效率很低。就像把很多小卡片拼成一张大海报,模型一次性看更多内容,训练起来更快,而且能学会处理很长的文章。


二、有哪些拼接方式?

2.1 拼接方式一:Random Concatenate(随机拼接)

随机将短文本 {examples_i} 拼接成 {examples_k} 以打满 maxLen 是预训练的常见手段。该方法不仅能够降低padding占比提高训练效率,还能使LLM具备更好的长文本处理能力。

但笔者认为,绝大多数情况下构成Example的多个examples彼此互不相关,无法提供有效的上下文信息,LLM自然也无法从拓宽的窗口中获得反馈。甚至,在语料较少、分布比较集中时,LLM很有可能从多次、偶然的(因拼接导致的)噪音共现中拟合到错误的特征。

当然,如果语料足够多、分布足够广,LLM仍能通过足够的contrastive,逐渐聚焦于examples本身而非其他无关examples。此外,也有一些使用specialToken对examples进行软隔离的方案,但没有额外的正则手段时,使用specialToken进行隔离或许只是鸡生蛋、蛋生鸡的死循环

📝 通俗解释:随机拼接就像把完全不相关的新闻片段强行拼在一起。模型可能会误以为"某股票涨了"和"今天下雨"有关系,从而学到错误的知识。只有当数据量足够大时,模型才能自动忽略这些巧合,学会真正有用的信息。


2.2 拼接方式二:Random Concatenate + NoiseMask(随机拼接 + 噪声掩码)

为缓解2.1所述的无关examples间的噪音共现问题,笔者尝试过添加自定义attentionMask,使LLM在预训练时仅focus on当前example。经笔者测试,该方法在ICL few-shot上相比2.1有1.6%左右的提升

python
def segment_causal_mask(input_ids, device, val=float("-inf")):
    bsz, tgt_len = input_ids.shape
    cum_lens = torch.arange(1, tgt_len+1, device=device).unsqueeze(0) * \
               torch.eq(input_ids, EosTokenId).int().to(device)

    mask = torch.zeros([bsz, tgt_len, tgt_len]).to(device)
    for i, _cum_lens in enumerate(cum_lens):
        for v in _cum_lens:
            mask[i, v:, :v] = val

    return mask

但这种方式仍存在一个问题:相对位置编码(如ALiBi、ROPE)的token-wise相对位置信息会在attentionScore矩阵对应位置有所体现,如果施加了attentionMask,这部分相对位置信息经过softmax会被完全掩盖/误杀,也即LLM无法在BP过程中,从跨examples间获得反馈(不论是相对位置的反馈还是语义信息的反馈)。

因此在不考虑外推性的前提下,这种预训练方法仍是在短文本窗口内进行训练,没有真正意义上实现maxLen级别的长文本训练,只能起到提高训练效率的作用。

另外,尽管2.1中没有利用attentionMask,LLM是否能从无关examples构成的窗口中获取对(更远)相对位置的正向反馈仍然存疑(如果数据构成表现为远的都不相关,即便没有mask,LLM也倾向于忽略更远的tokens),或许这也是多数LLM在拓宽maxLen之后,长文本支持效果仍然差强人意的原因之一。

📝 通俗解释:这个方法就像给每个短文本加上"隔音墙",让模型只关注自己当前的内容,不受旁边内容影响。但问题是,模型因此失去了学习"长距离关系"的机会——比如学习文章开头和结尾的呼应关系。短期看提升了效率,但长期看模型还是不会处理真正的长文本。


2.3 拼接方式三:Random Concatenate + Cluster(随机拼接 + 聚类)

鉴于2.2存在的问题,能否既不施加attentionMask,也能让LLM不受跨examples干扰甚至还能获益的方法呢?

一个直观的想法就是以实体语义等维度对{examples_i}进行聚类,使构成同一个Example的examples存在真实可靠的信息共现前提,从而LLM更加不容易从噪音共现中学偏,也能从预训练中适应更加广泛的全局attention、从而具备更好的长文本处理能力。

笔者曾经尝试沿实体维度进行聚类,但发现了一个比较棘手的问题:信息重复,以及经过关键词、语义去重后仍难以避免的信息泄露(或者说二者本质相同,只是程度的分别)。在此情况下LLM有从memorize变成了copy的风险,或许这就是后来实验结论没有显著的原因。

本文作者提出的ICLM实际上也是一种类似的方法,即基于语义对examples进行聚合、拼接,因此笔者开始时也十分好奇作者如何妥善处理泄露问题。

📝 通俗解释:聚类拼接就像把主题相似的文章放在一起训练。比如把讨论"人工智能"的多篇文章拼在一起,模型能更好地理解这个主题。但问题是,如果某篇文章在训练数据中重复出现太多次,模型可能会直接"背下来"而不是真正"学会",这就是信息泄露问题。


2.4 拼接方式四:IN-CONTEXT PRETRAINING(上下文预训练)

作者在文中提出的预训练方法,基本思想是在拼接时,利用语义相似度,优先将最相似的进行拼接,从而构成语义更加连贯流畅的上下文。基本流程如下:

  1. {examples_i} embedding化(作者使用了contriever);
  2. 基于余弦距离进行数据去重;
  3. 基于旅行商思想,不断串联最相关的examples(每个example用完即扔,不会repeat);
  4. 基于拼接后的{examples_k}进行预训练;

[图表描述]

图片展示了 Figure 2: Illustration of IN-CONTEXT PRETRAINING

  • 左侧 (Step 1: Finding Related Docs):展示了一个文档图(Pretraining Documents),包含节点Doc 0, Doc 3, Doc 5, Doc 7, Doc 9, Doc 1。节点之间有连线,连线上标有数字(如0.6, 0.2, 0.7, 0.8, 0.9),代表文档间的关联度或距离。

  • 右侧 (Step 2: Creating Input Contexts)

    • 上方展示了一条路径(path),箭头指示顺序:Doc 0 (0.8) → Doc 9 (0.9) → Doc 1 (0.7) → Doc 3 (0.6) → Doc 5 (0.8) → Doc 7
    • 下方展示了 Pretraining Input Contexts,有一个8192 context window的示意。文档被按照路径顺序拼接(Doc 0, Doc 9, Doc 1, Doc 3, Doc 5, Doc 7),然后被切分成固定大小的输入块(红色和绿色长条块)
  • 底部文字说明:IN-CONTEXT PRETRAINING first finds related documents at scale to create a document graph (§2.1) and then builds pretraining input contexts by traversing the document graph (§2.2). Along the path, documents are concatenated into a sequence and subsequently divided to form fixed-sized input contexts (e.g., 8192 token length).


作者在文中多次强调了数据去重的重要性,并经过消融实验验证了去重对ICLM的正向增益。相比实体,沿语义聚合的{examples_i}分布更加平缓,受泄露影响的风险更低;

此外,分布更广泛的数据、更妥善的去重操作,或许也是ICLM能够有效的重要原因。

📝 通俗解释:这个方法就像一个聪明的图书管理员先把相关的书籍找出来,然后按主题把它们串成一串,再分成固定长度的章节供读者阅读。通过这种方式,模型看到的上下文是连贯的、相关的,不仅能学会处理长文本,还能更好地理解主题之间的联系。数据去重就像防止一本书在图书馆里出现太多次,避免模型死记硬背。


致谢

感谢 AiGC面试宝典 的知识分享,感谢作者 宁静致远 的原创内容。

📝 通俗解释总结:这篇文章介绍了四种预训练时拼接文本的方法,从简单随机拼接到智能语义拼接,各有优缺点。核心目标是让模型既能高效训练,又能学会处理长文本。最好的方法是IN-CONTEXT PRETRAINING,它通过语义相似度把相关内容拼在一起,让模型学到真正的长距离依赖关系。


参考来源:https://articles.zsxq.com/id_enteq22h1nhq.html

基于 MIT 许可发布