手把手教利用Bert实现知识库问答(详细注释)

跟着DataFountain学的,加了一些代码注释,DataFountain有数据集,链接:个人工作平台https://work.datafountain.cn/forum?id=121&type=2&source=1

一、数据处理

1、数据分析

数据格式如下:这个题目的意思就是判断Question和Sentence是否匹配,如果匹配label就是1

# 统一导入工具包
import csv
import transformers
import torch
import warnings
warnings.filterwarnings('ignore')

"""
1.数据说明
"""
# pd_table = pd.read_csv('./datasets/raw/WikiQA-train.tsv', encoding="utf-8", sep='\t')
"""
每条数据为以下6个字段:
    QuestionID: 问题id
    Question: 问题文本
    DocumentID: 检索到的作为答案来源的文档ID
    Document: 检索到的作为答案来源的文档标题
    SentenceID: 对于文档摘要中的每个句子的id
    Sentence: 文档中摘要中的句子
    label: 判断句子是否是答案的标签
"""

"""

2、数据加载处理

接下来加载有用的数据,将数据加载为<question, answer, label>这样的三元组,如果answer是question的正确答案,则lable为1,每个三元组用一个字典来存储。

def load(filename):
    result = []  
    with open(filename, mode='r', encoding="utf-8") as csvfile:
        spamreader = csv.reader(csvfile, delimiter='\t', quotechar='"')  # 这里的spamreader装了csv中每一行的
        next(spamreader, None)  # 这里自动迭代了一次,就跳过了第一行(第一行是标题),否则会读取到第一行
        for row in spamreader:  # 对每一行进行遍历
            res = {}  # 每一行的三元组用这个字典来存储
            res['question'] = str(row[1])  # 将Question赋值给字典的question
            res['answer'] = str(row[5])  # 将Sentence赋值给字典的answer
            res['label'] = int(row[6])  # 将label赋值给字典的label
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值