Pipeline 方式 - 阅读理解任务
1 课程概览
本课讲解 Pipeline 方式进行阅读理解。阅读理解也叫抽取式问答,输入一段文本和一个问题,让模型输出结果。Transformers 有三种调用方式:管道(Pipeline)、自动(AutoModel)、具体模型。本课使用管道方式。使用 Chinese Pretrain MRC RoBERTa 模型。
2 核心概念与定义
- 阅读理解(Question Answering):抽取式问答,输入文本和问题,输出答案。
- 抽取式问答:从给定文本中抽取答案。
3 模型与算法详解
三种调用方式
| 方式 | 名称 | 说明 |
|---|---|---|
| 管道 | Pipeline | 最简单,直接出结果 |
| 自动 | AutoModel | 中等,可 DIY |
| 具体模型 | 具体模型 | 最灵活,原材料 |
带头任务头 vs 不带任务头
| 类型 | 说明 | 示例 |
|---|---|---|
| 带头任务头 | 成品,直接出结果 | 情感分类、完形填空、阅读理解 |
| 不带任务头 | 半成品,需结合其他模型 | 特征提取 |
阅读理解流程
1. 创建 pipeline 对象(question-answering)
2. 定义问答句子(context + questions)
3. 将数据传给模型
4. 输出结果
模型选择
使用 Chinese Pretrain MRC RoBERTa 模型。
| 任务 | 模型 |
|---|---|
| 阅读理解 | chinese-pretrain-mrc-roberta |
传参方式
关键字传参,与参数顺序无关。
- 位置传参:与参数顺序有关
- 关键字传参:与参数顺序无关
4 数学原理与推导
阅读理解
$$\text{answer} = \text{model}(\text{context}, \text{question})$$
其中:
- $\text{context}$ 是上下文文本
- $\text{question}$ 是问题
- $\text{answer}$ 是答案
抽取式问答
$$\text{start}, \text{end} = \text{model}(\text{context}, \text{question})$$
$$\text{answer} = \text{context}[\text{start}:\text{end}]$$
5 代码示例
from transformers import pipeline
def dm04_question_answering():
"""Pipeline 方式:阅读理解"""
# 1. 创建 pipeline 对象
model_path = "C:/software/softwallg/pretrained_model/chinese-pretrain-mrc-roberta"
my_model = pipeline(
"question-answering", # 阅读理解任务
model=model_path,
tokenizer=model_path
)
# 2. 定义问答句子
context = "我叫翰哥,我是一名教师,我的喜好是BBQ和抬手"
questions = [
"我叫啥?",
"我是做什么的?",
"我的爱好是什么?" # 注意:上文说"喜好",问题问"爱好"
]
# 3. 将数据传给模型(关键字传参)
for question in questions:
output = my_model(context=context, question=question)
print(f"问题: {question}")
print(f"答案: {output['answer']}")
print(f"分数: {output['score']:.4f}")
print("-" * 50)
return my_model
# 测试
if __name__ == "__main__":
print("=== Pipeline 方式:阅读理解 ===")
my_model = dm04_question_answering()
代码说明
| 代码 | 说明 |
|---|---|
pipeline("question-answering", ...) | 创建阅读理解 pipeline |
chinese-pretrain-mrc-roberta | 中文阅读理解模型 |
my_model(context=..., question=...) | 关键字传参 |
6 重难点与易错提醒
- ❗重点:阅读理解是抽取式问答,输入文本和问题,输出答案。
- ❗重点:使用关键字传参,与参数顺序无关。
- ⚠️易错:模型能理解近义词(如"喜好"和"爱好")。
- 💡技巧:路径要合法,可用本地路径。
7 课堂问答精选
Q1:阅读理解任务是什么?
A:阅读理解也叫抽取式问答,输入一段文本和一个问题,让模型输出结果。
Q2:Transformers 有几种调用方式?
A:三种:①管道(Pipeline),最简单;②自动(AutoModel),中等;③具体模型,最灵活。
Q3:带头任务头和不带任务头有什么区别?
A:带头任务头是成品,直接出结果(如情感分类、完形填空、阅读理解);不带任务头是半成品,需结合其他模型(如特征提取)。
Q4:如何传参?
A:使用关键字传参,如 my_model(context=context, question=question),与参数顺序无关。
8 本课小结
- 阅读理解:抽取式问答,输入文本和问题,输出答案。
- 三种调用方式:管道、自动、具体模型。
- 使用 chinese-pretrain-mrc-roberta 模型。
- 关键字传参,与参数顺序无关。
- 模型能理解近义词。
9 延伸思考
- Pipeline 方式如何进行文本摘要?
- 文本摘要使用什么模型?