import os
import glob
import re
import json
import torch
import torch.utils.data
from transformers import AutoTokenizer, AutoModel
from tqdm import tqdm
from langchain.document_loaders import UnstructuredFileLoader,UnstructuredPDFLoader
from langchain.embeddings import SentenceTransformerEmbeddings
from langchain.vectorstores import FAISS
from textsplitter import ChineseTextSplitter
from langchain.document_loaders import PyPDFLoader
folder_path = 'knowledge'#知识库路径
file_names = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]
filepaths = [os.path.join(folder_path, f) for f in file_names]
docs=[]
for file in filepaths:
if file.lower().endswith(".md"):
loader = UnstructuredFileLoader(file, mode="elements")
docs += loader.load()
embeddings=SentenceTransformerEmbeddings(model_name="M3e")#embedding模型路径
vector_stroe=FAISS.from_documents(docs,embeddings)
tokenizer = AutoTokenizer.from_pretrained("ChatGLM2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("ChatGLM2-6b", trust_remote_code=True).bfloat16().cuda()
choices = ["A", "B", "C", "D"]
choice_tokens = [tokenizer.encode(choice, add_special_tokens=False)[0] for choice in choices]
def build_prompt(doc,text):
return "[Round {}]\n\n基于以下已知信息,简洁和专业的来回答用户的问题。不允许在答案中添加编造成分。\n\n已知信息:{}\n\n问:{}\n\n答:".format(1, doc, text)
extraction_prompt = '综上所述,ABCD中正确的选项是:'
answer=[]
answer1=[]
gen_kwargs = {"num_beams": 5, "do_sample": False, "top_p": 0.7, "max_length": 2048,
"temperature": 0.95, "logits_processor": None}
with torch.no_grad():
for entry in glob.glob("electric/question.jsonl", recursive=True):
dataset1 = []
dataset2 = []
dataset3 = []
with open(entry, encoding='utf-8') as file:
for line in file:
line=json.loads(line)
if line['type']=='单选':
dataset1.append(line)
elif line['type']=='多选':
dataset2.append(line)
else:
dataset3.append(line)
dataloader1 = torch.utils.data.DataLoader(dataset1, batch_size=8)
for batch in tqdm(dataloader1):
context=[]
texts = batch["inputs_pretokenized"]
docs=[vector_stroe.similarity_search(text) for text in texts]
for doc0 in docs:
context.append([doc.page_content for doc in doc0])
# queries = [build_prompt(query) for query in texts]
queries = [build_prompt(doc,query) for doc,query in zip(context,texts)]
inputs = tokenizer(queries, padding=True, return_tensors="pt", truncation=True, max_length=2048).to('cuda')
outputs = model.generate(**inputs, do_sample=False, max_new_tokens=512,num_beams=3,repetition_penalty=0.8,num_beam_groups=3,diversity_penalty=0.8)
intermediate_outputs = []
for idx in range(len(outputs)):
output = outputs.tolist()[idx][len(inputs["input_ids"][idx]):]
response = tokenizer.decode(output)
intermediate_outputs.append(response)
answer_texts = [text + intermediate + "\n" + extraction_prompt for text, intermediate in
zip(texts, intermediate_outputs)]
input_tokens = [build_prompt(doc,answer_text) for doc,answer_text in zip(context,answer_texts)]
inputs = tokenizer(input_tokens, padding=True, return_tensors="pt", truncation=True, max_length=2048).to('cuda')
outputs = model(**inputs, return_last_logit=True)
logits = outputs.logits[:, -1]
logits = logits[:, choice_tokens]
preds = logits.argmax(dim=-1)
for i in preds.cpu():
answer.append(choices[i])
extraction_prompt = '综上所述,ABCD中正确的选项是:'
dataloader2 = torch.utils.data.DataLoader(dataset2, batch_size=8)
for batch in tqdm(dataloader2):
# 处理多选题的逻辑
context=[]
texts = batch["inputs_pretokenized"]
docs=[vector_stroe.similarity_search(text) for text in texts]
for doc0 in docs:
context.append([doc.page_content for doc in doc0])
queries = [build_prompt(doc,query) for doc,query in zip(context,texts)]
# queries = [build_prompt(query) for query in texts]
inputs = tokenizer(queries, padding=True, return_tensors="pt", truncation=True, max_length=2048).to('cuda')
outputs = model.generate(**inputs, do_sample=False, max_new_tokens=512,num_beams=3,repetition_penalty=0.8,num_beam_groups=3,diversity_penalty=0.8)
intermediate_outputs = []
for idx in range(len(outputs)):
output = outputs.tolist()[idx][len(inputs["input_ids"][idx]):]
response = tokenizer.decode(output)
intermediate_outputs.append(response)
answer_texts = [text + intermediate + "\n" + extraction_prompt for text, intermediate in
zip(texts, intermediate_outputs)]
input_tokens = [build_prompt(doc,answer_text) for doc,answer_text in zip(context,answer_texts)]
inputs = tokenizer(input_tokens, padding=True, return_tensors="pt", truncation=True, max_length=2048).to('cuda')
outputs = model(**inputs, return_last_logit=True)
logits = outputs.logits[:, -1]
logits = logits[:, choice_tokens1]
preds = logits.argmax(dim=-1)
s=''
time=0
for i in preds.cpu():
if choices[i]=='A':
s+=chr(time+ord('A'))
time+=1
if (time==4):
answer.append('、'.join(s))
s=''
time=0
dataloader3 = torch.utils.data.DataLoader(dataset3, batch_size=8)
for batch in tqdm(dataloader3):
# 处理问答题的逻辑
context=[]
texts = batch["inputs_pretokenized"]
docs=[vector_stroe.similarity_search(text) for text in texts]
for doc0 in docs:
context.append([doc.page_content for doc in doc0])
# queries = [build_prompt(query) for query in texts]
queries = [build_prompt(doc,query) for doc,query in zip(context,texts)]
inputs = tokenizer(queries, padding=True, return_tensors="pt", truncation=True, max_length=2048).to('cuda')
outputs = model.generate(**inputs, do_sample=False, max_new_tokens=512,num_beams=3,repetition_penalty=0.8,num_beam_groups=3,diversity_penalty=0.8)
generated_responses = [tokenizer.decode(output, skip_special_tokens=True) for output in outputs]
generated_responses = [re.search(r'答:(.*)', text, re.DOTALL).group(1).strip() for text in generated_responses]
for i in generated_responses:
answer.append(i)
with open('electric/output.jsonl', 'w', encoding='utf-8') as output_file:
for i in range(len(answer)):
output_data={
"id": i,
"predict":answer[i]
}
json.dump(output_data, output_file,ensure_ascii=False)
output_file.write('\n')
没有合适的资源?快使用搜索试试~ 我知道了~
基于ChatGLM2-6B的电力QA系统(python)
共283个文件
md:257个
pyc:11个
py:11个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 192 浏览量
2024-04-04
11:00:15
上传
评论
收藏 4.42MB ZIP 举报
温馨提示
利用ChatGLM2-6b实现电力领域的QA,其中knowledge中的文件均是从网上搜集和赛方提供,其中题库占大部分,主要来自百度题库,经人工处理整合,统一调整为Markdown文件。通过构建合适的指令,让大模型对相应的题目进行作答。同时收集电子、物理、化学、数学等学科的背景知识以及注册电气工程师的参考资料和题库,利用langchain框架,先以检索的方式检索出和当前问题相关的知识,再作为背景知识输入到模型,帮助模型进行作答。 代码文件结构 ├── document_loaders ├── knowledge ├── testsplitter ├── test.py ├── setup.py ├── predict.py ├── question.json ├── requirements.txt └── README.md 代码文件说明 * test.py 模型QA文件 * setup.py 数据格式转换文件 * predict.py 结果文件
资源推荐
资源详情
资源评论
收起资源包目录
基于ChatGLM2-6B的电力QA系统(python) (283个子文件)
question.json 114KB
question.jsonl 223KB
output.jsonl 17KB
Public Basis of the Registered Electrical Engineer Licensing Examination.md 1.75MB
Detailed explanation of the typical test points of the Registered Electrical Engineer Qualification Professional Examination (Power Supply and Distribution Major).md 1.72MB
Registered Electrical Engineer Professional Knowledge 1-513 Refresher Tutorial.md 1001KB
Advanced Mathematics 6th Edition Volume I (Tongji University).md 734KB
Circuits and Electronics. LI Xiaoming. Text version.md 677KB
Electrical Engineering (Sixth Edition) Volume I + Qin Zenghuang Editor-in-Chief.md 570KB
Volume 3 Fundamentals of Electrical and Information Technology.md 561KB
Electrical Engineering (Sixth Edition) Volume II + Qin Zenghuang Editor-in-Chief.md 544KB
Analysis and Application of DC Transmission Control and Protection-Tao Yu.md 507KB
Registered Electrical Engineer (Professional Basic) training materials.md 501KB
Registered Electrical Engineer (Professional Foundation) training materials.md 410KB
Volume 2 Fundamentals of Mechanics.md 386KB
linear algebra.md 367KB
Volume 4 Engineering Economics and Laws and Regulations.md 342KB
2022年注册电气工程师供配电专业考试题库(完整版).md 143KB
火力发电厂与变电站设计防火标准.md 129KB
电力装置电测量仪表装置设计规范.md 111KB
职业技能知识测试标准题库-配电线路工高级工题库.md 107KB
2022年注册电气工程师供配电专业考试题库(含答案) 1-137.md 95KB
题库.md 91KB
3工厂供电试题库三-单选题.md 83KB
电气装置安装工程.md 75KB
煤矿电气安全试题.md 73KB
电力技术监督上岗员:监控自动化技术监督考试题库一.md 60KB
2023年-2024年高压电工作业证考试题库附答案(通用版).md 50KB
2005年注册电气工程师供配电专业基础考试真题及答案.md 47KB
电力公司装表接电项目竞赛试题库全面复习资料.md 40KB
建筑物防雷设计规范.md 40KB
人事考试命题--(电气)资料.md 35KB
2022-2023年注册电气工程师《电气工程师发输变电专业》预测试题4(答案解析).md 35KB
book1.md 34KB
工厂供电试题库填空题.md 32KB
2022年注册电气工程师供配电专业考试题库(含答案) 138-238.md 32KB
注册电气工程师专业考试(供配电专业)模拟25.md 32KB
用电负荷等级划分.md 30KB
电气工程试题.md 29KB
GB50057-2010防雷规范.md 27KB
《爆炸危险环境电力装置设计规范》GB50058专家解析.md 27KB
2022~2023注册电气工程师考试题库及答案参考18.md 26KB
2021年防雷检测技术人员能力考察题库答案.md 26KB
电工电子技术复习提纲与复习试题资料(答案).md 25KB
2022~2023注册电气工程师考试题库及答案参考48.md 25KB
2022-2023年注册电气工程师《电气工程师供配电专业》预测试题24(答案解析).md 25KB
2022~2023注册电气工程师考试题库及答案参考36.md 24KB
2022~2023注册电气工程师考试题库及答案参考78.md 24KB
2022~2023注册电气工程师考试题库及答案参考35.md 24KB
供配电系统-答案.md 23KB
城市道路照明设计标准.md 23KB
电力系统的基础知识.md 23KB
低压电动机保护器.md 21KB
电气工程师考试试题.md 21KB
2021年房地产电气工程师面试问题(1).md 21KB
「期终复习题类型解答(供配电)」.md 19KB
2021年注册电气工程师(发输变电)《专业知识考试(上)》真题及详解.md 19KB
2019年注册电气工程师(供配电)《专业知识考试(下)》真题及详解.md 18KB
2014年注册电气工程师(供配电)《专业知识考试(上)》真题及详解.md 17KB
建筑智能检测考试题.md 17KB
2021年注册电气工程师(发输变电)《专业知识考试(上)》真题及详解(1).md 17KB
电缆敷设规范(最全-绝对标准!).md 17KB
2021年注册电气工程师(供配电)《专业知识考试(上)》真题及答案解析【完整版】.md 17KB
2021年高压电工练习题和答案(Part13).md 17KB
电力拖动系统.md 17KB
2021年电气工程师发输变电专业习题和答案(Part32).md 16KB
2018年注册电气工程师(供配电)《专业知识考试(上)》真题及详解.md 16KB
GB 50034-2013 建筑照明设计标准.md 16KB
建筑照明设计标准.md 16KB
电缆知识最全总结.md 15KB
2021年电气工程师发输变电专业练习题和答案(Part11).md 15KB
电气考试题及答案.md 15KB
2019年注册电气工程师(供配电)《专业知识考试(上)》真题及详解.md 15KB
消防控制室通用技术要求.md 15KB
电力工程直流系统设计技术规程.md 14KB
2020年注册电气工程师(供配电)《专业知识考试(上)》真题及详解.md 14KB
2022~2023注册电气工程师考试题库及答案第501期.md 14KB
2021年电工资格证考试必考多选题库及答案(共120题).md 14KB
2021年电气工程师发输变电专业试卷和答案(14).md 14KB
2022年电力电缆考试内容及考试题库含答案参考17.md 14KB
注册电气工程师(供配电专业)分类模拟题110kV及以下供配电系统(三).md 14KB
2021年电气工程师发输变电专业习题和答案(Part15).md 14KB
电气工程强制条文资料汇总.md 14KB
2021年注册电气工程师发输变电专业考试历年真题题库(含答案).md 14KB
2021年注册电气工程师(供配电)《专业知识考试(下)》真题及答案解析【完整版】.md 14KB
2021年电气工程师发输变电专业试卷和答案(16).md 14KB
2021年电气工程师发输变电专业试卷和答案(37).md 14KB
供配电系统--考点大全.md 14KB
2021年电气工程师发输变电专业习题和答案(Part4).md 14KB
2021年电气工程师发输变电专业习题和答案(Part10).md 14KB
2013年注册电气工程师(供配电)《专业知识考试(上)》真题及详解.md 13KB
2021年电气工程师发输变电专业习题和答案(Part6).md 13KB
照明配电系统.md 13KB
2022~2023注册电气工程师考试题库及答案第904期.md 13KB
浅谈低压电动机的保护配置.md 13KB
2021年电气工程师发输变电专业练习题和答案(Part42).md 13KB
2021年电气工程师发输变电专业练习题和答案(Part9).md 13KB
2021年电气工程师发输变电专业习题和答案(Part5).md 13KB
2021年电气工程师发输变电专业练习题和答案(Part40).md 13KB
2022~2023注册电气工程师考试题库及答案第898期.md 13KB
共 283 条
- 1
- 2
- 3
资源评论
十小大
- 粉丝: 9695
- 资源: 2555
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功