Self-QA:生成自然语言处理训练数据的实用方法
创作时间:
作者:
@小白创作中心
Self-QA:生成自然语言处理训练数据的实用方法
引用
CSDN
1.
https://blog.csdn.net/m0_56090828/article/details/138361006
在自然语言处理(NLP)领域,问答对(QA pairs)的生成是一个基础且重要的任务。传统的手动编写问答对方式既耗时又低效,而自助问答(Self-QA)技术则提供了一种自动化解决方案。本文将详细介绍Self-QA的概念、应用场景,并通过一个实际案例展示如何使用Python代码实现Self-QA,自动生成高质量的问答对数据。
什么是Self-QA?
Self-QA是一种利用大型语言模型从文本中自动提取问题和对应答案的技术。这种方法的核心在于,它使用模型的预测能力来创造出和文本内容紧密相关的问题,然后再生成准确的答案。这样不仅提高了数据的质量,还增加了问答对的多样性和覆盖范围。
想象一下,你是一个老师,面前坐着的是一群渴望知识的学生(在我们的案例中,这些学生就是AI模型)。这些学生通过回答问题来学习。Self-QA技术就像是一个无微不至的助教,它从提供的文章中自动提炼出问题并找到答案,这样学生们就可以通过这些问答对进行学习了。
Self-QA的应用场景
- 聊天机器人培训:通过反复练习自动生成的问答对,聊天机器人可以更准确地理解并回应人类的提问。
- 教育软件开发:自动生成的问答对可以用来帮助学生复习考试,或提供互动学习的材料。
- 企业内部知识库构建:将公司文档转换为问答对,可以帮助员工快速检索信息,提高工作效率。
实现Self-QA技术的执行步骤
- 文本获取与预处理:我们首先从网上获取文章,就像在数字图书馆中借阅书籍一样。利用
newspaper
库,我们可以轻松下载并解析网页内容。 - 文本分段:将长文章分割为更小的段落,确保每段都在模型可以高效处理的长度范围内。这就像把一块大蛋糕切成适口的小块,确保每位宾客都能轻松享用。
- 生成QA对:对于每个独立的文本段落,使用预训练的语言模型生成相关的问答对。这个过程类似于在沙滩上寻找宝藏,每个正确的问答对都是一颗珍珠。
- 数据保存:所有生成的问答对都将被保存为JSON格式的文件,方便以后的访问和使用。
本次练习选取的网站是关于如何保持心理健康(Mentally Fit)的专家指导 - Athlete365。
以下是具体的Python代码实现:
from newspaper import Article
from transformers import AutoTokenizer, AutoModel
import os
import json
import re
import torch
# 指定gpu显卡
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
SYSTEM_PROMPT = """
你是一个能根据提供的文本内容生成QA对的机器人。以下是你的任务要求:
1. 生成尽可能多的QA对。
2. 每个QA对包含一个问题和一个简洁的答案。
3. 答案必须用简体中文。
4. 生成的QA对不能重复。
5. 使用json格式将QA对包裹起来,问题用"question"表示,答案用"answer"表示。
示例格式:
[
{
"question": "...",
"answer": "..."
},
{
"question": "...",
"answer": "..."
}
]
以下是给定的文本内容:
"""
# 加载模型和分词器
model_dir = "../../../../../chatglm3-6b"
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
model = AutoModel.from_pretrained(model_dir, trust_remote_code=True).half().cuda()
# 设置模型为评估模式
model = model.eval()
# 使用newspaper库从网上抓取文章,并使用以下函数解析文章内容:
def get_article_text(url):
a = Article(url)
try:
a.download()
a.parse()
return a.text
except Exception as e:
print(f"url解析失败,错误原因:{e}")
return ""
# 中文文本分段处理
def split_text(text, maxlength=512):
# 根据中文标点符号分段,确保每段文本长度不超过最大长度限制
sentences = re.split('([。])', text)
segments = []
current_segment = ""
for i in range(0, len(sentences) - 1, 2):
# sentences[i] 表示列表中的句子部分
# sentences[i+1] 表示随后的标点符号部分
# 如果句子是列表中的最后一个元素,它后面可能没有标点符号
sentence = sentences[i] + (sentelines[i + 1] if i + 1 < len(sentences) else "")
if len(current_segment) + len(sentence) <= maxlength:
current_segment += sentence
else:
segments.append(current_segment)
current_segment = sentence
if current_segment:
segments.append(current_segment)
return segments
def main():
url = "https://olympics.com/athlete365/zh-hans/%e8%ba%ab%e5%bf%83%e5%81%a5%e5%ba%b7/%e5%85%b3%e7%88%b1%e5%bf%83%e7%90%86%e5%81%a5%e5%ba%b7%e7%9a%84%e6%96%b9%e6%b3%95/"
content = get_article_text(url)
if content != "":
segments = split_text(content)
qa_pairs = []
history = []
# 生成QA对
for segment in segments:
prompt = SYSTEM_PROMPT + f"{segment} 请开始生成 QA 对:"
qa_text, history = model.chat(tokenizer, prompt, history=history)
qa_data = json.loads(qa_text)
qa_pairs.extend(qa_data)
print(qa_pairs)
script_dir = os.path.dirname(__file__)
file_path = os.path.join(script_dir, "QA_extension.json")
with open(file_path, "w", encoding="utf-8") as f:
json.dump(qa_pairs, f, ensure_ascii=False, indent=4)
print("QA对已保存至QA_extension.json文件")
else:
print("获取文章内容失败")
if __name__ == '__main__':
main()
生成的问答对示例
以下是使用上述代码从心理健康相关文章中生成的部分问答对:
[
{
"question": "什么是精神的力量?",
"answer": "精神的力量是指个体内心所具有的积极、向上的、有助于应对困境和压力的能力。它可以帮助人们保持心理平衡,增强心理适应性和抗压能力。通过培养良好的心理素质,人们可以更好地应对生活中的挑战和困难。"
},
{
"question": "如何辨识压力源?",
"answer": "辨识压力源需要了解自己的生活习惯、性格特点和心理状况,观察自己的情绪变化,并注意自己的身体反应。一些常见的压力源包括工作压力、学习压力、家庭关系紧张、人际关系问题、生活事件(如失业、离婚、疾病)等。通过识别压力源,人们可以采取有效的应对措施,减轻心理压力和负担。"
},
{
"question": "抑郁症症状有哪些?",
"answer": "抑郁症症状表现为持续的悲伤、哭泣、烦躁、睡眠或食欲改变、悲观、郁郁寡欢、内疚、自我厌恶、失败感、疲劳和/或自残想法。这些症状可能会出现在精英运动员生活的各个时期,包括顺境和困境。通过了解这些症状,人们可以及时采取措施,减轻心理压力和负担,避免病情恶化。"
},
{
"question": "如何通过了解自己的压力源和触发因素来找到新的自我管理方法?",
"answer": "了解自己的压力源和触发因素可以帮助人们找到更好的自我管理方法。首先,人们需要识别自己的压力源,然后观察自己的情绪和身体反应,以便了解自己的心理状况。接下来,人们可以尝试不同的自我管理方法,如放松技巧、认知行为疗法、心理咨询等,以应对压力和情绪变化。最后,人们需要持续地调整和完善自己的自我管理方法,以保持心理平衡和健康。"
},
{
"question": "什么是需要避免的情况、经历、人或事物?",
"answer": "需要避免的情况、经历、人或事物是指那些会增加压力或引发心理健康症状(如感到焦虑、抑郁或需要用酒精或药物来应对)的情况、经历、人或事物。这些因素可能包括工作压力、学习压力、家庭关系紧张、人际关系问题、生活事件(如失业、离婚、疾病)等。通过避免这些情况、经历或与这些人或事物保持距离,人们可以降低压力水平,保持心理健康。"
},
{
"question": "如何识别心理健康症状?",
"answer": "识别心理健康症状需要关注自己的情绪和行为变化,观察是否有持续的悲伤、哭泣、烦躁、睡眠或食欲改变、悲观、郁郁寡欢、内疚、自我厌恶、失败感、疲劳和/或自残想法等表现。如果出现这些症状,人们应该及时寻求帮助和支持,避免病情恶化。"
},
{
"question": "如何应对心理健康症状?",
"answer": "应对心理健康症状的方法包括寻求帮助和支持、采用积极的应对策略、保持良好的生活习惯和心理素质。首先,人们应该寻求专业心理咨询或治疗,以获得专业的帮助和支持。其次,人们可以采用积极的应对策略,如放松技巧、认知行为疗法、心理咨询等,以应对压力和情绪变化。最后,人们需要保持良好的生活习惯和心理素质,如保持规律的作息时间、进行适当的锻炼、保持积极的人际关系等,以增强心理适应性和抗压能力。"
}
]
通过以上步骤,我们可以自动化地从大量文本中生成高质量的问答对数据,为自然语言处理模型的训练提供丰富的素材。
热门推荐
无痛肠胃镜检查:安全性和潜在风险全解析
包头东大肛肠医院:胃肠镜检查全攻略
耳闷、耳鸣常见于哪些原因?外中内耳出现问题都会引起!
8分钟读懂催眠:最完整的催眠与潜意识指南
如何觉察自己的潜意识
电动自行车事故起诉全解析
中科院苏州医工所研发新型等离子体设备,20分钟内实现海水弧菌完全灭活
吉林长春净月潭:AAAAA级景区,亚洲第一大人工林海
VMware不同网络连接情况下的连通性测试与分析
回族饮食文化体系解析
春天晚餐建议:少喝大米粥,多吃这3样,助你睡得香
差生高三逆袭:有效学习策略助你提升成绩
云手机:深度剖析其原理、优势与应用全景
临时用电安全管理措施与法律法规的遵循
布袋除尘器烟囱高度标准
如何缓解胃癌的疼痛方法
王者荣耀英雄攻略:如何通过实战演练与复盘分析快速提升你的游戏水平?
土地承包经营权纠纷法条:法律解析与实务应对
什么是土地纠纷协调
品味天津蓟县地道风味:麻酱鸡蛋的醇香之旅
光伏产业高质量发展之道:科技创新引领 产业集群支撑 场景拓展赋能
电气工程及其自动化行业发展趋势分析
高铁票开车前多久可以网上退票的法律规定及实务操作
原来外教招聘广告要这样写
建筑支模用到哪些材料
利用磁导率了解磁芯饱和度
我国计划2035年完成下一代北斗系统建设
羊蝎子火锅的做法 羊蝎子火锅怎么做
体育教育专业求职者怎样写好技能特长
曹爽的坚持与胜算:历史的假设与现实的思考