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": "应对心理健康症状的方法包括寻求帮助和支持、采用积极的应对策略、保持良好的生活习惯和心理素质。首先,人们应该寻求专业心理咨询或治疗,以获得专业的帮助和支持。其次,人们可以采用积极的应对策略,如放松技巧、认知行为疗法、心理咨询等,以应对压力和情绪变化。最后,人们需要保持良好的生活习惯和心理素质,如保持规律的作息时间、进行适当的锻炼、保持积极的人际关系等,以增强心理适应性和抗压能力。"
}
]
通过以上步骤,我们可以自动化地从大量文本中生成高质量的问答对数据,为自然语言处理模型的训练提供丰富的素材。
热门推荐
独栋别墅风水布局大揭秘!
沈阳别墅软装搭配:打造奢华舒适空间
如何正确使用小儿复方鸡内金散?
金庸教你如何给主角起个霸气名字
南长街&南禅寺:无锡必打卡美食天堂
南长街:无锡夜生活的璀璨明珠
雷玟:英雄联盟手游中的高机动战士,三段位移与连招技巧揭秘
高压线在下雨时会不会漏电?
园林景观设计如何让房子增值?
Intel 13/14代酷睿i9不稳定的一个原因找到了!需更新微代码和BIOS
华硕BIOS中刷入新的CPU微代码全解析:步骤、风险与注意事项
四川端午节旅游推荐:特色文化与自然风光的完美融合
人工智能(AI)包含的主要技术和领域
夫妻幸福生活中伴侣的支持与理解为什么是关键呢?
肝损伤早期症状表现
别墅风水布局的科学解析:孙先生的专业解读
欧式豪华别墅装修全攻略:从设计到施工,打造梦想中的贵族之家
糯玉米种植技术与管理
惠州“500强”镇毗邻深莞区位优越 布局新材料智能制造等产业
黄瓜的保鲜技巧(如何让黄瓜保鲜更久?)
走!虚拟技术带你去北京中轴线Citywalk一下
户外生活方式时代已来,趋势与机遇洞察
Citywalk:年轻人热衷的新休闲方式如何重塑逛街经济?
City Walk与城市空间设计:塑造互动性城市体验
雪球App教你通过重仓持有提升收益
《茶馆》经典再现:如何用肢体语言塑造角色?
长痘痘了怎么消除最快?三招助你快速摆脱痘痘烦恼
保定现代农业:乡村振兴的“金钥匙”
贾玲也在坚持的“16+8饮食法”,手把手教会你
XWP数据盘人生:突破传统八字局限的科学探索