当前位置: 首页 > news >正文

基于Python的自然语言处理系列(23):DrQA

        在本篇文章中,我们将实现 DrQA 模型,该模型最初由论文 Reading Wikipedia to Answer Open-Domain Questions 提出。DrQA 是一种用于开放域问答系统的端到端解决方案,最初包括信息检索模块和深度学习模型。本次实现中,我们主要探讨 DrQA 的深度学习模型部分。

1. 数据加载

        DrQA 使用了斯坦福问答数据集(SQuAD)。该数据集由一系列 Wikipedia 文章中的段落和相关问题组成,答案是段落中的某个片段,或问题无法回答。

import jsondef load_json(path):'''加载SQuAD数据集的JSON文件'''with open(path, 'r', encoding='utf-8') as f:data = json.load(f)print("数据集长度: ", len(data['data']))return data# 加载数据
train_data = load_json('data/squad_train.json')
valid_data = load_json('data/squad_dev.json')

2. 数据预处理

        由于 SQuAD 数据集的结构独特,每个段落可能有多个问题和答案,我们需要对其进行解析。我们将每个段落与相关的问题配对,并将其转换为易于处理的结构。

def parse_data(data:dict)->list:'''解析数据集,将每个问题和答案对与对应的段落配对'''qa_list = []for paragraphs in data['data']:for para in paragraphs['paragraphs']:context = para['context']for qa in para['qas']:id = qa['id']question = qa['question']for ans in qa['answers']:qa_dict = {'id': id,'context': context,'question': question,'answer': ans['text'],'label': [ans['answer_start'], ans['answer_start'] + len(ans['text'])]}qa_list.append(qa_dict)return qa_list# 解析数据集
train_list = parse_data(train_data)
valid_list = parse_data(valid_data)

3. 构建词汇表

        为了对文本进行数值化处理,我们需要构建词汇表。我们将使用 spaCy 分词器来帮助处理文本数据。

import spacy
from collections import Counternlp = spacy.load('en_core_web_sm')def build_word_vocab(vocab_text):'''构建词汇表'''words = []for sent in vocab_text:words.extend([word.text for word in nlp(sent, disable=['parser', 'ner'])])word_counter = Counter(words)word_vocab = sorted(word_counter, key=word_counter.get, reverse=True)word_vocab.insert(0, '<unk>')word_vocab.insert(1, '<pad>')word2idx = {word: idx for idx, word in enumerate(word_vocab)}idx2word = {v: k 
http://www.lryc.cn/news/452704.html

相关文章:

  • 誉天Linux云计算课程学什么?为什么保障就业?
  • 无人机控制和飞行、路径规划技术分析
  • 【C++】模拟实现红黑树
  • 离线安装docker
  • MySQL高阶2066-账户余额
  • 《RabbitMQ篇》Centos7安装RabbitMQ
  • 昇思学习打卡营第31天|深度解密 CycleGAN 图像风格迁移:从草图到线稿的无缝转化
  • 跟我学C++中级篇——空值的定义
  • (三)Mysql 数据库系统全解析
  • SAP HCM 0001信息类型一个月内有多个成本中心
  • 字节输入流
  • 深度学习-----------------机器翻译与数据集
  • SOMEIP_ETS_151: SD_Send_triggerEventUINT8Reliable_Eventgroup_2
  • 32 C 语言指针的长度与运算(指针加减整数、指针自增自减、同类型指针相减、指针的比较运算)
  • 【系统架构设计师】经典论文:轮软件三层架构设计
  • (C语言贪吃蛇)13.实现贪吃蛇四方向的移动
  • Spring Boot + MyBatis 项目中常用注解详解(万字长篇解读)
  • AWS Network Firewall -NAT网关配置只应许白名单域名出入站
  • 【C语言系统编程】【第二部分:并发编程】2.3 实践与案例分析
  • React -AppVarContext.Provider 提供者组件
  • 【Python】解密用户代理:使用 Python User Agents 库探索浏览器和设备信息
  • 以串口接口为例介绍关于BSP底层架构开发的迭代过程
  • Label-Studio ML利用yolov8模型实现自动标注
  • 【PostgreSQL】实战篇——用户管理、角色和权限控制的高级用法及技巧
  • Leetcode: 0011-0020题速览
  • Hive数仓操作(七)
  • Redis进阶篇 - 缓存穿透、缓存击穿、缓存雪崩问题及其解决方案
  • 一天认识一个硬件之电源
  • 关于BSV区块链覆盖网络的常见问题解答(上篇)
  • VUE 开发——Node.js学习(一)