基于Python的自然语言处理系列(25):QANet

embedded/2024/10/18 23:26:50/

        QANet 是在2018年提出的一种新型机器阅读理解模型,其显著特点是不依赖传统的循环神经网络(RNN),而是完全基于卷积和自注意力机制。循环神经网络由于其顺序处理的特性在训练和推理时速度较慢,而QANet通过卷积捕获文本的局部结构,通过自注意力机制学习全局词对的交互,从而提高了效率。

        本文将详细讲解QANet模型的构建过程,展示如何实现它的核心模块,包括深度可分离卷积、多头自注意力、上下文-查询注意力等,并在SQuAD数据集上进行训练。

1. 加载预处理数据

        与之前的BiDAF模型类似,QANet也需要处理上下文和问题对的嵌入。我们可以直接加载之前保存的预处理过的数据,包括单词和字符的索引。

import pickle
import pandas as pdwith open('bidafw2id.pickle', 'rb') as handle:word2idx = pickle.load(handle)
with open('bidafc2id.pickle', 'rb') as handle:char2idx = pickle.load(handle)train_df = pd.read_pickle('bidaftrain.pkl')
valid_df = pd.read_pickle('bidafvalid.pkl')idx2word = {v: k for k, v in word2idx.items()}
2. 数据加载器

        QANet的数据加载器与BiDAF类似,用于动态生成批次数据并进行适当的填充,以便模型能够处理变长的上下文和问题输入。

class SquadDataset:def __init__(self, data, batch_size):self.batch_size = batch_sizedata = [data[i:i+self.batch_size] for i in range(0, len(data), self.batch_size)]self.data = datadef make_char_vector(self, max_sent_len, sentence, max_word_len=16):char_vec = torch.zeros(max_sent_len, max_word_len).type(torch.LongTensor)for i, word in enumerate(nlp(sentence, disable=['parser','ner'])):for j, ch in enumerate(word.text):if j == max_word_len:breakchar_vec[i][j] = char2idx.get(ch, 0)return char_vec def __iter__(self):for batch in self.data:max_context_len = max([len(ctx) for ctx in batch.context_ids])padded_context = to

http://www.ppmy.cn/embedded/123718.html

相关文章

docker 进入容器运行命令

要进入正在运行的Docker容器并在其中执行命令,你可以使用docker exec命令。以下是具体步骤和示例: 1. 查看正在运行的容器 首先,确认你的容器正在运行,可以使用以下命令查看所有运行中的容器: docker ps2. 进入容器…

实验OSPF路由协议(课内实验)

实验1:OSPF路由协议 实验目的及要求: 通过实验,能够理解链路状态型路由协议OSPF协议的工作原理,掌握如何实现单区域 OSPFv2配置指令,能够熟练的应用各种OSPF协议相关的配置指令完善网络设计。掌握验证OSPFv2网络连接…

rabbitMq-----路由匹配模块

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言交换机类型binding_key 和 routing_key匹配算法 前言 交换机有三种类型,直接交换,广播交换,主题交换。 其中交换机类型不同…

【Qt】控件概述 (1)—— Widget属性

控件概述 1. QWidget核心属性1.1核心属性概述1.2 enable1.3 geometry——窗口坐标1.4 window frame的影响1.4 windowTitle——窗口标题1.5 windowIcon——窗口图标1.6 windowOpacity——透明度设置1.7 cursor——光标设置1.8 font——字体设置1.9 toolTip——鼠标悬停提示设置1…

Hadoop之WordCount测试

1、Hadoop简介: Hadoop是Apache旗下的一个用Java语言实现的开源软件框架,是一个开发和运行处理大规模数据的软件平台。 Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)和MapReduce编程模型。HDFS是一个高度容错的系统&#xf…

expressjs,实现上传图片,返回图片链接

在 Express.js 中实现图片上传并返回图片链接,你通常需要使用一个中间件来处理文件上传,比如 multer。multer 是一个 node.js 的中间件,用于处理 multipart/form-data 类型的表单数据,主要用于上传文件。 以下是一个简单的示例&a…

arm32版的ubuntu20.04

参考链接 https://blog.csdn.net/weixin_40837318/article/details/123688236

vue-scrollto实现页面组件锚点定位

文章目录 前言背景操作指南安装及配置步骤vue组件中使用 参考文章 前言 博主介绍:✌目前全网粉丝3W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容:Java后端、大数据…