机器阅读理解根据输出答案类型的不同设计不同的输出层

机器阅读理解根据输出的答案类型可以分为:
填空式阅读理解,抽取式阅读理解,多项选择式阅读理解,生成式阅读理解

填空式阅读理解

对于填空式阅读理解,具体的做法如图
在这里插入图片描述
一篇文章对应一个问题,词嵌入之后送入模型,注意就算一篇文章有多个问题,
那么也仍然是一篇文章对应一个问题,如图所示,模型返回的张量shape==(passage_length,1),因为填空式问答只有一个空需要填,所以对应的标签是one_hot形式的张量,只有答案单词那个位置是1。

抽取式阅读理解

抽取式阅读理解指的就是从文章中提取出来一段连续的单词作为答案。
在这里插入图片描述
如图所示,对于抽取式问答来说,我们要预测的是答案的起始位置概率和终止位置概率,最简单的方式就是独立的预测。也就是说模型最后输出的张量V,形状是(passage_length,dim),然后用两个线性层即可得到
S=V*W1,E=V*W2.
其中W1.shape==W2.shape==(dim,1)
S.shape==(passage_length,1)==E.shape
S和E表示的就是passage中每个单词作为答案起始位置的概率和每个单词作为答案终止位置的概率。然后将这两个向量乘积,注意不是向量的点乘。
如上图,两个向量乘积后得到(passage_length,passage_length)的一个矩阵,每一行表示的是passage中某个单词作为答案起始位置的概率,每一列表示的是passage中某个单词作为答案终止位置的概率。上图中矩阵一开始不是上三角的。但是我们要把它强行做成上三角,因为下三角的元素值表示的答案的起始位置大于终止位置。做成上三角矩阵后,我们只需要选出来其中值最大的,那个值做对应的行的下标就是passage中的第几个单词,也就是预测的答案的起始位置,所对应的列就不必说了。

多项选择式问答

多项选择式问答类似于我们考试做的阅读理解题,一篇文章,几个问题,一个问题四个选项。
这种情况下送入模型的仍然是一篇文章对应一个问题,而一个问题又对应四个选项,此时的做法就是(文章,问题,选项1)送入模型中,得到score_1表示的就是模型根据当前这篇文章,当前这个问题以及第一个选项然后给出了对第一个选项的分值。
如图
在这里插入图片描述
后面三个选项按照类似的做法,模型最后给出四个选项的各自的分值
如下图
在这里插入图片描述
对给出的分值和答案做交叉商即可得到loss。这里可以看出问题转变为四分类问题。

生成式阅读理解后续更新
### 机器阅读理解(MRC)的技术原理与实现方法 #### 背景介绍 机器阅读理解(Machine Reading Comprehension, MRC)是一种自然语言处理任务,旨在让计算机能够像人类一样理解和回答基于给定文档的问题。这一领域通常依赖于深度学习模型,尤其是基于Transformer架构的预训练模型。 --- #### 技术原理 MRC的核心目标是从一段文本中提取出针对特定问题的答案。其技术原理主要包括以下几个方面: 1. **上下文建模** 使用神经网络对输入文本进行编码,捕捉词义及其语境关系。这一步骤通常由预训练的语言模型完成,例如BERT、RoBERTa或MacBERT等[^1]。 2. **问答匹配** 将问题和文档联合表示为向量空间中的点,并计算它们之间的相似度。这种匹配可以通过多头自注意力机制实现,从而增强模型对重要信息的关注能力[^3]。 3. **答案抽取/生成** 根据任务需求,可以选择两种方式之一: - **抽取式**:从原文档中定位并返回最可能的答案片段。 - **生成式**:利用解码器重新构建完整的回复字符串。 --- #### 模型架构 典型的MRC系统一般采用两阶段设计——编码与解码。以下是具体组成部分: 1. **编码模块** 输入数据经过分词后送入到一个强大的双向Transformer encoder里做特征提取工作。此部分负责生成高质量的隐状态序列作为后续操作的基础材料[^2]。 2. **交互** 设计专门用于融合query information into passage representation 的子网路结构;比如通过cross attention mechanism 来加强两者间联系强度的同时也降低了噪声干扰概率。 3. **输出预测单元** 对每一个token位置分别估计起始端点以及结束边界得分情况进而决定最佳候选区间范围内的词语组合成为最终回应内容。 --- #### 示例代码 下面是一个简单的Python脚本演示如何使用Hugging Face Transformers库搭建基本框架来进行中文环境下的MRC实验: ```python from transformers import BertTokenizerFast, BertForQuestionAnswering tokenizer = BertTokenizerFast.from_pretrained('hfl/chinese-macbert-base') model = BertForQuestionAnswering.from_pretrained('hfl/chinese-macbert-base') def convert_to_features(question, context): encoding = tokenizer.encode_plus( question, context, max_length=512, truncation=True, padding='max_length', return_tensors="pt" ) return encoding['input_ids'], encoding['attention_mask'] def predict(input_ids, attention_mask): outputs = model(input_ids=input_ids, attention_mask=attention_mask) start_logits = outputs.start_logits end_logits = outputs.end_logits answer_start = torch.argmax(start_logits) answer_end = torch.argmax(end_logits) + 1 tokens = tokenizer.convert_ids_to_tokens(input_ids.squeeze().tolist()) answer = tokenizer.convert_tokens_to_string(tokens[answer_start:answer_end]) return answer.strip() question = "谁发明了电话?" context = "亚历山大·贝尔是苏格兰裔美国科学家和发明家,在1876年获得了专利权之后不久便成功制造出了世界上第一部可用的电话机。" input_ids, attention_mask = convert_to_features(question, context) result = predict(input_ids, attention_mask) print(f"Predicted Answer: {result}") ``` 上述程序展示了如何加载预训练权重文件`chinese-macbert-base`, 并定义好辅助函数以便快速执行推理流程. --- #### 总结 综上所述,现代MRC解决方案大多建立在先进的NLP理论之上,并借助开源工具链简化开发难度。随着硬件性能不断提升加上算法持续优化改进,未来此类应用必将更加普及广泛适用不同场景之中。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值