英文抽取式问答怎么做?用 DistilBERT 返回答案并核对原文位置

用英文 DistilBERT 抽取式问答返回原文片段、分数和起止位置,核对有答案与无答案样本,识别长文和拒答限制。

如果答案就在一段英文材料中,抽取式问答模型能返回一个原文片段及其起止位置。它适合从已提供的段落找地点、日期等信息;这篇教程用 DistilBERT 检查答案是否能回到原文,随后用有答案与无答案的问题区分“程序运行”和“回答可靠”。

先确认语言和任务

本例模型在英文 SQuAD v1.1 上微调。question 是问题,context 是你实际提供的英文正文。它不会自动搜索网站、读整个文件或为问题补充常识;先把需要的段落放入 context。这个检查点不适合直接当中文问答模型,也不能因为接口有 score 就将其视为经过校准的正确率。

英文抽取式问答怎么做?用 DistilBERT 返回答案并核对原文位置

示例面向有基础 Python 经验的读者,按 Transformers 4.57.1 接口编写。Windows 可用以下独立环境;macOS/Linux 用 python3 创建环境,并把后续解释器路径换为 .venv/bin/python。首次加载模型需要网络、磁盘和足够内存,CPU 可以执行但速度取决于机器。安装失败时先看 Python 版本与 pip 报错,不能把安装成功当成模型已跑通。

py -m venv .venv
.venv\Scripts\python -m pip install "torch>=2.6" "transformers==4.57.1" safetensors

运行一段有明确答案的材料

保存下面代码为 qa_demo.py,运行 .venv\Scripts\python qa_demo.py。人为构造的材料把地点写成 Berlin;问句只问地点,先用这个简单样本验证环境,再换真实段落。

from transformers import pipeline

qa = pipeline("question-answering",
    model="distilbert/distilbert-base-cased-distilled-squad", device=-1)
context = ("The tutorial workshop will take place in Berlin on Friday. "
           "Participants should bring a laptop. Registration closes on Tuesday.")
question = "Where will the workshop take place?"
result = qa(question=question, context=context, top_k=1)
start, end = int(result["start"]), int(result["end"])
assert 0 <= start < end <= len(context)
original_span = context[start:end]
assert original_span.strip() == result["answer"].strip()
print({"question": question, "answer": result["answer"],
       "score": float(result["score"]), "start": start, "end": end,
       "original_span": original_span})

按原文位置核对答案

核对输出中的 original_span 是否来自原材料,并检查地点答案是否为 Berlin。start 包含起点,end 不包含终点;不要在推理后删除空格、改换行或翻译 context,否则同一偏移无法定位原文。代码里的断言只证明范围和片段一致,不能证明模型选中了正确事实。

用无答案问题暴露失败边界

再把 question 改为 What is the registration fee?。材料没有费用,应由业务规则或人工标为“资料未说明”,而不是接受模型挑出的其他片段。本例采用 SQuAD v1.1 检查点,没有据此验证可靠拒答能力;启用 handle_impossible_answer 也不能让未针对无答案任务训练的模型自动变成可信拒答器。要上线先准备有答案、无答案、否定句、多个日期的人工样本分别验收。

长文和低分怎样处理

一次输入越长,定位错误的机会越多。先按文档结构提供相关段落并记录段落编号;长上下文会按 max_seq_len 划成窗口、按 doc_stride 保留重叠;应核对窗口参数和每个答案的原文位置。问题本身还受 max_question_len 限制,过长问题可能被截断,不能把它理解为没有长度限制的全文问答。低分可以触发复核,但拒答阈值应在你自己的标注样本上选定,本文不给出通用阈值。

本文已核对官方接口与模型资料,示例输入为人为构造;未在本文环境下载并实跑所列公开模型,未测速度或任务准确率。下面的检查方法由你在实际运行后执行,不能把演示代码当成质量评测结果。

官方资料与版本依据

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31341.html

赞 (0)
AI小管家的头像AI小管家
智能体怎么集成 OpenAI API?模型调用、工具、状态与权限架构
上一篇 1天前
英文人名和机构怎么提取?用 BERT NER 导出实体与字符位置
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部