库名称: transformers
标签:
- 问答系统
- 抽取式问答
- modernbert
- transformers
- squad
语言: 英文
数据集:
- squad
评估指标:
- f1分数
- 精确匹配
模型类型: modernbert
许可证: apache-2.0
微调自: answerdotai/ModernBERT-base
流水线标签: 问答系统
ModernBERT-QnA-base-squad 🚀
欢迎来到ModernBERT-QnA-base-squad仓库!本仓库托管了专为问答任务微调的ModernBERT模型。该模型在SQuAD数据集上表现出色,是抽取式问答应用的绝佳选择。
模型概览 🌟
阅读这篇Hugging Face博客文章了解更多关于ModernBERT的能力。
使用方法 💻
以下示例展示了如何使用Hugging Face的pipeline
来调用微调后的问答模型。
目前,在官方PR合并前,你需要安装特定的transformers
分支。
> pip uninstall transformers -y
> git clone https://github.com/bakrianoo/transformers.git
> cd transformers && git checkout feat-ModernBert-QnA-Support && pip install -e .
快速开始
from transformers.models.modernbert.modular_modernbert import ModernBertForQuestionAnswering
from transformers import AutoTokenizer, pipeline
model_id = "rankyx/ModernBERT-QnA-base-squad"
model = ModernBertForQuestionAnswering.from_pretrained(model_id)
tokenizer = AutoTokenizer.from_pretrained(model_id)
question_answerer = pipeline("question-answering", model=model, tokenizer=tokenizer)
question = "BLOOM有多少参数?"
context = "BLOOM拥有1760亿参数,能够生成46种自然语言和13种编程语言的文本。"
result = question_answerer(question=question, context=context)
print(result)
示例输出
{'score': 0.7719728946685791, 'start': 9, 'end': 21, 'answer': '1760亿'}
性能演示 🔥
示例1: 简短上下文
from transformers import pipeline
model_id = "rankyx/ModernBERT-QnA-base-squad"
question_answerer = pipeline("question-answering", model=model_id)
question = "法国的首都是哪里?"
context = "法国的首都是巴黎,以其艺术、美食和文化闻名。"
result = question_answerer(question=question, context=context)
print(result)
预测答案:
{'score': 0.9913662075996399, 'start': 19, 'end': 25, 'answer': ' 巴黎'}
示例2: 长上下文
from transformers import pipeline
model_id = "rankyx/ModernBERT-QnA-base-squad"
question_answerer = pipeline("question-answering", model=model_id)
question = "艾萨克·牛顿的主要成就有哪些?"
context = """
艾萨克·牛顿,1643年1月4日出生,是英国数学家、物理学家、天文学家和作家。他被广泛认为是有史以来最伟大的数学家和最具影响力的科学家之一。牛顿在许多领域做出了开创性贡献,包括运动定律和万有引力定律。他还独立发展了微积分,为经典力学提供了数学基础。此外,牛顿在光学领域的工作导致了反射望远镜的发明。
"""
result = question_answerer(question=question, context=context)
print(result)
预测答案:
{'score': 0.5126065015792847, 'start': 278, 'end': 323, 'answer': ' 运动定律和万有引力定律'}
示例3: 超长上下文
from transformers import pipeline
model_id = "rankyx/ModernBERT-QnA-base-squad"
question_answerer = pipeline("question-answering", model=model_id)
question = "描述联合国的主要关注点。"
context = """
联合国(UN)是1945年成立的国际组织。目前由193个会员国组成。联合国的使命和工作由其创始宪章中规定的宗旨和原则指导。联合国以维和、建设和平、预防冲突和人道主义援助而闻名。它还致力于促进可持续发展、保护人权、维护国际法和提供人道主义援助。通过各种专门机构、基金和计划,联合国解决从健康到教育再到气候变化等各种问题。
"""
result = question_answerer(question=question, context=context)
print(result)
预测答案:
{'score': 0.08445773273706436, 'start': 269, 'end': 347, 'answer': ' 维和、建设和平、预防冲突和人道主义援助'}
微调过程 ⚙️
该模型使用Hugging Face Transformers库和官方问答脚本进行微调。
微调使用的命令
python run_qa.py \
--model_name_or_path "answerdotai/ModernBERT-base" \
--dataset_name squad \
--do_train \
--do_eval \
--overwrite_output_dir \
--per_device_train_batch_size 25 \
--per_device_eval_batch_size 20 \
--eval_strategy="steps" \
--save_strategy="epoch" \
--logging_steps 50 \
--eval_steps 500 \
--learning_rate 3e-5 \
--warmup_ratio 0.1 \
--weight_decay 0.01 \
--doc_stride 128 \
--max_seq_length 384 \
--max_answer_length 128 \
--num_train_epochs 2 \
--run_name="ModernBERT-QnA-base-squad" \
--output_dir="/path/to/output/directory"
如果使用多GPU并遇到错误:RuntimeError: Detected that you are using FX to symbolically trace a dynamo-optimized function
,可以尝试:
accelerate launch run_qa.py \
...其他参数
结果 📊
评估指标
- F1分数: 92.59
- 精确匹配: 86.45
- 训练损失: 0.860
许可证 📜
本模型采用Apache 2.0许可证。详见LICENSE。
引用 ✍️
如果在研究中使用本模型,请按以下方式引用:
@misc{rankyx2024modernbertqna,
title={ModernBERT-QnA-base-squad},
author={Abu Bakr},
year={2024},
howpublished={\url{https://huggingface.co/rankyx/ModernBERT-QnA-base-squad}}
}
致谢 🙌
特别感谢Hugging Face团队提供微调和部署模型的工具与资源。
反馈与贡献 🤝
欢迎反馈和贡献!请随时提交issue或pull request。