论文BERT(1): 2018.10 Pre-training of Deep Bidirectional Transformers for Language Understanding;摘要,引言

BERT是一种新型语言模型,通过深度双向预训练和掩码语言模型,从未标记文本中获得强大的表示,显著提升了多个NLP任务的表现,包括GLUE、MultiNLI和SQuAD。
摘要由CSDN通过智能技术生成

摘要

我们介绍了一种名为BERT的新型语言表示模型,即“来自Transformer的双向编码器表示”Bidirectional Encoder Representations from Transformers。与最近的语言表示模型不同,BERT旨在通过联合所有层中的左右上下文来预训练深度双向表示,从而从未标记文本中获得。因此,经过预训练的BERT模型只需添加一个额外的输出层,就可以微调以创建用于各种任务的最新模型,例如问答和语言推理,而无需进行大量特定于任务的架构修改。

BERT在概念上简单而实证上强大。它在十一个自然语言处理任务上获得了新的最先进结果,包括将GLUE分数提高到80.5%(绝对提升7.7%),将MultiNLI精度提高到86.7%(绝对提升4.6%),将SQuAD v1.1问答测试F1提高到93.2(绝对提升1.5个百分点),以及将SQuAD v2.0测试F1提高到83.1(绝对提升5.1个百分点)。

1 引言

语言模型预训练已被证明对改进许多自然语言处理任务非常有效。这些任务包括句子级别的任务,如自然语言推理和释义,它们通过分析整个句子来预测句子之间的关系;以及标记级别的任务,如命名实体识别和问答,在这些任务中,模型需要在标记级别产生精细的输出。

目前有两种将预训练语言表示应用于下游任务的策略:基于特征的方法和微调方法。

  • 基于特征的方法,如ELMo(Peters等人,2018a),使用包含预训练表示作为附加特征的特定于任务的架构。
  • 微调方法,如生成式预训练Transformer(OpenAI GPT)(Radford等人,2018),引入最小的特定于任务的参数,并通过对所有预训练参数进行微调来在下游任务上进行训练。

这两种方法在预训练期间使用相同的目标函数,它们使用单向语言模型来学习一般的语言表示。

我们认为,当前的技术限制了预训练表示的能力,特别是对于微调方法。主要的限制在于,标准的语言模型是单向的,这限制了可用于预训练的架构的选择。例如,在OpenAI GPT中,作者使用从左到右的架构,其中每个标记在Transformer的自注意力层中只能关注到之前的标记。这样的限制对于句子级别的任务来说是不理想的,并且在将基于微调的方法应用于标记级别的任务(如问答)时可能会非常有害,因为在这些任务中,融入来自两个方向的上下文是至关重要的。

在本文中,我们通过提出BERT(来自Transformer的双向编码器表示)来改进基于微调的方法。BERT通过使用受Cloze任务启发的“掩码语言模型”(MLM)预训练目标,缓解了之前提到的单向性约束。掩码语言模型随机地掩盖输入中的一些标记,目标是根据其上下文仅预测被掩盖单词的原始词汇ID。与从左到右的语言模型预训练不同,MLM目标使表示能够融合左右上下文,从而使我们能够预训练一个深度双向Transformer。除了掩码语言模型外,我们还使用了一个“下一句预测”任务来联合预训练文本对表示。本文的主要贡献如下:

  • 我们证明了双向预训练对于语言表示的重要性。与Radford等人(2018)使用单向语言模型进行预训练不同,BERT使用掩码语言模型来启用预训练的深度双向表示。这也与Peters等人(2018a)的方法形成对比,后者独立地训练从左到右和从右到左的语言模型,并将其进行浅层的拼接。
  • 我们表明,预训练表示减少了对许多精心设计的特定任务架构的需求。BERT是第一个基于微调的表示模型,它在大量句子级别和标记级别的任务上达到了最先进的性能,超过了许多特定任务的架构。
  • BERT在11项NLP任务上取得了最先进的成果。代码和预训练模型可以在https://github.com/google-research/bert上获取。

Ankie的评论:

GPT v1(2018.6) 使用了transformer效果很好,Google团队看到后,隔了4个月就是2018.10自己做了一个3.5亿(350m)参数的BERT,把榜单统统刷了一遍。GPT v1的参数大概1.1亿(110m),BERT的训练素材更大。

GPT使用的是transformer的decoder,单向,专注于预测,因为decoder看不到后面的字符,训练GPT的预测性能。

BERT使用的是transformer的encoder,双向,专注于完形填空。对于缺失的内容和应试内容比较擅长。

BERT这一论文的核心观点在于,它巧妙地融合了ELMo的双向性特征和GPT的微调策略。经过一系列实验验证,我们发现这种双向性与微调技术的结合,确实能显著提升模型在各项任务上的表现。更进一步地,当我们通过增加模型的大小来扩展其容量时,模型的性能还能得到进一步的提升。这些发现共同构成了BERT论文的关键论点,展示了其在自然语言处理领域的强大潜力与优势。

人工智能论文GPT v1(1):2018.6 Improving Language Understanding by Generative Pre-Training;摘要;引言-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ank1983/article/details/136382791

人工智能论文GPT v2(1):2019.2 Language Models are Unsupervised Multitask Learners;摘要;引言;增强通用能力,而不是特定应试能力-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ank1983/article/details/137755241

  • 33
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这个错误通常是由于使用了错误的tokenizer类导致的。在使用HuggingFaceEmbeddings时,你需要使用与模型相对应的tokenizer。如果使用了不兼容的tokenizer,就会出现这个错误。 在BERT模型的情况下,可以使用`BertTokenizer`或`BertTokenizerFast`。但是值得注意的是,这两个类的输入格式不同: - `BertTokenizer`的输入是单个句子或句子对,可以使用`encode`方法将句子转换为输入向量。 - `BertTokenizerFast`的输入是一批句子,需要使用`__call__`方法将句子转换为输入向量。 所以,如果你使用`BertTokenizerFast`类,你需要将句子封装成列表或元组,并将其传递给tokenizer。例如: ```python from transformers import BertTokenizerFast, BertModel from sentence_transformers import SentenceTransformer tokenizer = BertTokenizerFast.from_pretrained('bert-base-cased') model = BertModel.from_pretrained('bert-base-cased') sentences = ['This is an example sentence', 'Each sentence is converted'] input_ids = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt') outputs = model(**input_ids) sentence_transformer_model = SentenceTransformer(modules=[model, tokenizer]) embeddings = sentence_transformer_model.encode(sentences) ``` 在这个例子中,我们使用了`BertTokenizerFast`类,并将句子列表传递给tokenizer进行编码。然后使用编码后的输入向量来计算BERT模型的输出。最后,我们使用SentenceTransformer将句子转换为嵌入向量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ankie(资深技术项目经理)

打赏就是赞赏,感谢你的认可!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值