彻底搞懂bert阅读理解源码

本文详细解析Bert & Transformer在阅读理解任务中的源码实现,以run_squad.py为例,涵盖数据处理、模型构造和训练过程。重点讨论如何将原始数据转换为模型输入,以及源码中关键函数的作用,如_SquadExample类、_improve_answer_span等。同时,文章指出在SQuAD1.0和2.0中对待答案缺失的不同处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,
                                    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值