BERT

[[@BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding]]

代码:google-research/bert: TensorFlow code and pre-trained models for BERT

大模型 + 微调提升小任务的效果

输入层

  • 词嵌入(token embedding)、位置嵌入(position embedding)段嵌入(segment embedding)

    • 预训练任务包含判断 segment A 和 segment B 之间的关系
  • 模型结构 12 层,每层 12 个 multi-head

  • CLS 句子开头,最后的输出 emb 对应整句信息

    • 无语义信息的符号会更公平地融合文本中各个词的语义信息,从而更好的表示整句话的语义
  • SEP 句子之间分割

BERT

  • L=12 H=768 A=12, Total Parameters=110M

  • L=24 H=1024 A=16, Total Parameters=340M

两种 NLP 预训练

    1. 产出产品,例如 word2evc 的 embedding
    1. 做为骨架接新结构

[[ELMo]]

  • 使用 LSTM 预测下一个单词

[[GPT]]

  • Transformer

  • 单向

-w1304

贡献性

  • 双向信息重要性

模型输入:

    1. Token emb
    1. Segment emb(A B) 针对 QA 或者两个句子的任务
    1. Position emb

训练方式

  • [[Masked-Language Modeling]] :->mask 部分单词,80 % mask,10 % 错误单词, 10% 正确单词

    • 目的 :-> 训练模型记忆句子之间的关系。
      • 减轻预训练和 fine-tune 目标不一致给模型带来的影响
  • [[Next Sentence Prediction]] :-> 预测是不是下一个句子

    • 句子 A 和句子 B 有 50% 的概率是上下文

    • 解决后续什么问题 :-> QA 和自然语言推理
      image.png
      occlusion:: eyIuLi9hc3NldHMvaW1hZ2VfMTczNDYxNjMzODQyMV8wLnBuZyI6eyJjb25maWciOnt9LCJlbGVtZW50cyI6W3sibGVmdCI6MzY3LjEzMDExNTk3NDg1MjYsInRvcCI6NTkuNDE3NTUwMDkwNDM3Mzk1LCJ3aWR0aCI6NjIzLjU5MTg3MjM5Mzc2MDksImhlaWdodCI6MTE4LjgzNTEwMDE4MDg3NDc2LCJhbmdsZSI6MCwiY0lkIjoxfSx7ImxlZnQiOjEwODEuOTAzNDAxNTY2MDE5LCJ0b3AiOjY1LjA2OTA2NDM1NDU0MTcsIndpZHRoIjo2NjUuMjAzOTI0MjY0NDI2LCJoZWlnaHQiOjkwLjM5NTU1NzkzMTAxMTA3LCJhbmdsZSI6MCwiY0lkIjoyfV19fQ==
      [[激活函数]] [[GELU]]

  • 和 [[GPT]] 一致,为什么?

优化器

  • 不完整版 adam

  • fine tune 时可能不稳定,需要换成正常版 adam

fine tune

  • 根据任务调整输入和增加预测结构,使用相关数据训练

  • 使用 fine tune 比将bert做为特征放到模型中效果要好

    1. 双句分类
    1. 单句分类
    • CLS 后接 softmax
    1. 预测一个 start 和 end embedding,然后和 T 计算 softmax 取概率最大的做为开始和结束的位置
    1. 实体标注

研究取不同的 embedding 效果

缺陷

  • 不擅长生成类任务(机器翻译、文本摘要)

[[Ref]]

作者

Ryen Xiang

发布于

2024-10-05

更新于

2024-12-19

许可协议


网络回响

评论