彻底搞懂bert阅读理解源码

Bert & Transformer阅读理解源码详解

参考论文

https://arxiv.org/abs/1706.03762

https://arxiv.org/abs/1810.04805

在本文中,我将以run_squad.py以及SQuAD数据集为例介绍阅读理解的源码,官方代码基于tensorflow-gpu 1.x,若为tensorflow 2.x版本,会有各种错误,建议切换版本至1.14。

当然,注释好的源代码在这里

章节

Demo传参

python bert/run_squad.py \
  --vocab_file=uncased_L-12_H-768_A-12/vocab.txt \
  --bert_config_file=uncased_L-12_H-768_A-12/bert_config.json \
  --init_checkpoint=uncased_L-12_H-768_A-12/bert_model.ckpt \
  --do_train=True \
  --train_file=SQUAD_DIR/train-v2.0.json \
  --train_batch_size=8 \
  --learning_rate=3e-5 \
  --num_train_epochs=1.0 \
  --max_seq_length=384 \
  --doc_stride=128 \
  --output_dir=/tmp/squad2.0_base/ \
  --version_2_with_negative=True

阅读源码最重要的一点不是拿到就读,而是跑通源码里面的小demo,因为你跑通demo就意味着你对代码的一些基础逻辑和参数有了一定的了解。

前面的参数都十分常规,如果不懂,建议看我的文本分类的讲解。这里讲一下比较特殊的最后一个参数,我们做的任务是阅读理解,如果有答案缺失,在SQuAD1.0是不可以的,但是在SQuAD允许,这也就是True的意思。

需要注意,不同人的文件路径都是不一样的,你不能照搬我的,要改成自己的路径。


数据篇

其实阅读理解任务模型是跟文本分类几乎是一样的,大的差异在于两者对于数据的处理,所以本篇文章重点在于如何将原生的数据转换为阅读理解任务所能接受的数据,至于模型构造篇,请看文本分类


番外句子分类

想必很多人看到SquadExample类的_repr_方法都很疑惑,这里处理好一个example,为什么后面还要进行处理?看英文注释会发现这个类其实跟阅读理解没关系,它只是处理之后对于句子分类任务的,自然在run_squad.py里面没被调用。

_repr_方法只是在有start_position的时候进行字符串的拼接。
在这里插入图片描述


创造实例

用于训练的数据集是json文件,需要用json库读入。

训练集的样式如下,可见data是最外层的

{
   
    "data": [
        {
   
            "title": "University_of_Notre_Dame",
            "paragraphs": [
                {
   
                    "context": "Architecturally, the school has a Catholic character.",
                    "qas": [
                        {
   
                            "answers": [
                                {
   
                                    "answer_start": 515,
                                    
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BERT(Bidirectional Encoder Representation from Transformers)是一种在NLP领域中非常受欢迎的模型。它在2018年10月底由Google发布,并在11项NLP任务中表现出卓越的性能。\[1\] BERT的设计基于Transformer模型,它采用了双向编码器来学习上下文相关的词向量表示。与传统的词向量模型(如word2vec)相比,BERT能够更好地捕捉词语之间的语义关系和上下文信息。\[2\] BERT的训练过程包括两个阶段:Masked LM和下一句预测。在Masked LM阶段,BERT会随机遮盖输入文本中的一些词语,然后通过上下文来预测这些被遮盖的词语。在下一句预测阶段,BERT会判断两个句子是否是连续的。通过这两个任务的训练,BERT能够学习到更全面的语义表示。\[2\] BERT的优势在于它能够在各种NLP任务中进行迁移学习。通过将BERT的预训练模型与特定任务的训练数据进行微调,可以在下游任务中取得很好的性能。这种迁移学习的策略使得BERT成为了目前许多NLP任务的最优解决方案。\[2\] 总结来说,BERT是一种基于Transformer模型的双向编码器,通过预训练和微调的方式,在各种NLP任务中取得了卓越的表现。它的设计使得它能够更好地捕捉词语之间的语义关系和上下文信息,从而提高了NLP任务的性能。\[1\]\[2\] #### 引用[.reference_title] - *1* *3* [彻底搞懂Bert](https://blog.csdn.net/Enjoy_endless/article/details/89226190)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [转:【NLP】彻底搞懂BERT](https://blog.csdn.net/joeland209/article/details/100189836)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值