Views
No views yet
1import json
2file_path = '/root/dev-zen-v1.0.json'
3SEP_TOKEN = "<sep>"
4
5data_loader = []
6
7with open(file_path, 'r') as f:
8 data = json.load(f)
9 for content in data['data']:
10 title = content['title']
11 paragraphs = content['paragraphs']
12 for paragraph in paragraphs:
13 context = paragraph['context']
14 qas = paragraph['qas']
15 for qa_pair in qas:
16 question = qa_pair.get('question', None)
17 answers = qa_pair.get('answers', None)
18 for answer in answers:
19 answer_text = answer.get('text', None)
20 if answer_text and question != None:
21 data_loader.append({'title': title, 'context': context, 'question': question, 'answer': answer_text})
22
23
24prompt_templatae = """根据下面input的上下文,生成和上下文有关的问答对,并输出到output中。"""
25
26prompt_chunk = []
27
28for i in data_loader:
29 # prompt_chunk.append(prompt_templatae.format(i['context'],f"question:{i['question']} {SEP_TOKEN} answer:{i['answer']}"))
30 prompt_chunk.append({"instruction": prompt_templatae, "input": i['context'], "output": ''})
31
32
33with open('prompt_chunk_predict.json', 'w') as f:
34 json.dump(prompt_chunk, f, ensure_ascii=False, indent=4)pip install -r requirements.txt1git lfs install #先确保安装过lfs
2git clone https://www.modelscope.cn/qwen/qwen2-1.5b-instruct.git1from transformers import AutoTokenizer, AutoModelForCausalLM
2import torch
3import numpy as np
4from datasets import Dataset
5from peft import PeftModel
6import json
7
8checkpoint_path = '' #checkpoint
9base_model_name = "Qwen2-1.5B-Instruct" # 基础模型
10SEP_TOKEN = '<sep>'
11
12# 加载基础模型和 tokenizer
13tokenizer = AutoTokenizer.from_pretrained(base_model_name)
14model = AutoModelForCausalLM.from_pretrained(base_model_name)
15# 使用 PeftModel 从微调的 checkpoint 加载权重
16model = PeftModel.from_pretrained(model, checkpoint_path)
17
18context = """""" #在这里输入需要生成问答对的context
19
20instruction = """根据下面input的上下文,生成和上下文有关的问答对,并输出到output中。"""
21input_prompt = f"instruction: {instruction} input: {context} output:"
22
23input_ids = tokenizer(input_prompt, return_tensors="pt")['input_ids']
24
25output = model.generate(
26 input_ids=input_ids,
27 max_new_tokens = 64, #生成的问答对的字数限制,其实可以设的更低
28 num_return_sequences=5, #返回的问答对个数
29 pad_token_id=tokenizer.eos_token_id,
30 temperature=0.8, #随机度
31 )
32
33for i in range(len(output)):
34 output_text = tokenizer.decode(output[i], skip_special_tokens=True)[len(input_prompt):] #解码
35 print(output_text) #输出