import pandas as pd
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
from vllm_wrapper import vLLMWrapper
from tqdm import tqdm
sft_path = "/mnt/sdd/Qwen-7B-Chat"
tokenizer = AutoTokenizer.from_pretrained(sft_path, trust_remote_code=True)
model = vLLMWrapper(sft_path, tensor_parallel_size=1)
# model = AutoModelForCausalLM.from_pretrained(sft_path, device_map="auto", trust_remote_code=True).eval()
import uuid
def data_load():
zb = pd.read_csv('/home/wangyp/Big_Model/infectious_disease/data/zb.csv', header=0)
# print(zb.head(10))
nums = []
yins = {}
nulls = []
for item in zb.itertuples(index=False):
if item.normal_desc is not None and item.normal_desc.strip() != '':
yins[item.NAME.strip()] = item.normal_desc.strip()
if( (item.range_floor is not None and str(item.range_floor).strip() != '') and (item.range_ceil is not None and str(item.range_ceil).strip() != '') ):
nums.append({item.NAME.strip(): str(item.range_floor).strip() + "-" + str(item.range_ceil).strip() })
else:
nulls.append(item.NAME.strip())
return yins, nums, nulls
def zao_yins(yins):
res = []
for key in yins.keys():
res.append({"name": key, "value": key + "这种体检指标阳性。"})
res.append({"name": key, "value": key + "的检测结果异常,与正常值不符。" })
res.append({"name": key, "value": key + "的检测显示出阳性反应。" })
res.append({"name": key, "value": key + "检测结果为阳性,提示异常。" })
res.append({"name": key, "value": key + "的阳性结果在体检中被检测到。" })
res.append({"name": key, "value": key + "试验为阳性异常状态" })
res.append({"name": key, "value": key + "的阳性结果在体检中得到了确认。" })
res.append({"name": key, "value": key + "的检测结果表明为阳性。" })
res.append({"name": key, "value": "在进行检测" + key + "指标时,结果被判定为阳性。" })
return res
def zao_nums(nums):
res = []
keys_list = [key for d in nums for key in d.keys()]
for key in keys_list:
res.append({"name": key, "value": key + "检测结果显示异常。"})
# res.append({"name": key, "value": key + "的检查值超出了正常范围。"})
res.append({"name": key, "value": key + "的测量值与标准值不符。"})
# res.append({"name": key, "value": key + "检测结果呈现异常状态。"})
res.append({"name": key, "value": key + "的数值在体检中被标记为异常。"})
# res.append({"name": key, "value": key + "检查结果显示了不正常的数值。"})
res.append({"name": key, "value": key + "的检测结果不在正常参考值内。"})
# res.append({"name": key, "value": key + "检查报告提示数值异常。"})
# res.append({"name": key, "value": "体检报告指出" + key + "水平不正常。"})
res.append({"name": key, "value": "体检中发现" + key + "水平异常。"})
# res.append(key + "检测结果显示异常。")
return res
# 体检中发现尿酮水平异常,帮我生成10条描述,保持句子意思不变
def z_nulls(nulls):
res = []
for key in nulls:
res.append("体检结果显示" + key + "水平出现异常。")
res.append("在进行体检时,发现" + key + "的数值不在正常范围内。")
res.append("体检报告中指出" + key + "水平有异常情况。")
res.append("体检时," + key + "水平的测定结果超出了预期的正常值。")
res.append("体检中测得的" + key + "水平与正常值有所偏差。")
res.append("体检数据中," + key + "的数值检测出异常。")
res.append(key + "的检测结果表明存在异常。")
res.append(key + "的检测值在体检中被标记为异常。")
res.append(key + "水平的体检结果提示有异常。")
return res
yins_template = """
"""
# 定义一个带有槽位的字符串模板
"""
狼疮抗凝血因子试验检查结果显示阳性。 你是一名体检报告领域的专家,请生成一段关于该体检指标异常的改善建议。\n
下面是生成体检指标相关的建议时的要求:健康建议严格包含如下几项:体检指标名称、 检测结果、正常参考值、就医建议、进一步检查、定期复查、饮食建议、运动建议、睡眠建议、压力管理、预防措施、心理支持、后续跟进、紧急情况 这几项。生成建议请参考以下格式:\n
体检指标名称:狼疮抗凝血因子试验\n
检测结果:只能是[阴性/阳性]中的一种,\n
正常参考值:阴性\n
就医建议:[建议咨询的专科医生或医疗机构]\n
进一步检查:[关于狼疮抗凝血因子试验这个指标可能需要的进一步检查项目]\n
定期复查:[狼疮抗凝血因子试验这个指标建议的复查时间和频率]\n
饮食建议:[针对狼疮抗凝血因子试验该指标的饮食建议]\n
运动建议:[适量的运动建议]\n
睡眠建议:[保证充足睡眠的重要性]\n
压力管理:[如何有效管理压力]\n
预防措施: \n
避免风险因素:[针对狼疮抗凝血因子试验该指标应避免的风险因素,如果没有就写无]\n
疫苗接种:[如果适用,建议接种狼疮抗凝血因子试验相关的疫苗,如果没有就写无]\n
心理支持: 如果检测结果引起担忧,建议寻求心理支持。\n
后续跟进: 建议与医生讨论后续的治疗计划或健康管理策略。\n
紧急情况: 如果出现[狼疮抗凝血因子试验该指标相关的具体症状],请立即就医。\n
"""
yins_template = """
{disc}你是一名体检报告领域的专家,请生成一段关于该体检指标异常的改善建议。\n
下面是生成体检指标相关的建议时的要求:健康建议严格包含如下几项:体检指标名称、 检测结果、正常参考值、就医建议、进一步检查、定期复查、饮食建议、运动建议、睡眠建议、压力管理、预防措施、心理支持、后续跟进、紧急情况 这几项。生成建议请参考以下格式:\n
体检指标名称:{name}\n
检测结果:只能是[阴性/阳性]中的一种,\n
正常参考值:阴性\n
就医建议:[建议咨询的专科医生或医疗机构]\n
进一步检查:[关于{name}这个指标可能需要的进一步检查项目]\n
定期复查:[{name}这个指标建议的复查时间和频率]\n
饮食建议:[针对{name}该指标的饮食建议]\n
运动建议:[适量的运动建议]\n
睡眠建议:[保证充足睡眠的重要性]\n
压力管理:[如何有效管理压力]\n
预防措施: \n
避免风险因素:[针对{name}该指标应避免的风险因素,如果没有就写无]\n
疫苗接种:[如果适用,建议接种{name}相关的疫苗,如果没有就写无]\n
心理支持: 如果检测结果引起担忧,建议寻求心理支持。\n
后续跟进: 建议与医生讨论后续的治疗计划或健康管理策略。\n
紧急情况: 如果出现[{name}该指标相关的具体症状],请立即就医。\n
"""
nums_template = """
{disc}你是一名体检报告领域的专家,请生成一段关于该体检指标异常的改善建议。\n下面是生成体检指标相关的建议时的要求:健康建议严格包含如下几项:复检确认、营养评估、医疗咨询、健康饮食、生活方式调整、药物治疗、定期监测、记录症状这几项。生成建议请参考以下格式:\n体检结果提示您的{name}不在正常参考值内,这可能与多种因素有关,包括营养不良、维生素缺乏或某些疾病状态。以下是一些建议:\n复检确认:{name}相关的复检建议。\n营养评估:考虑针对{name}进行一次全面的营养评估。\n医疗咨询:咨询医生,以确定是否需要进一步的检查和{name}相关的其他检测。如血红蛋白电泳、血清铁蛋白、维生素B12和叶酸水平检测。\n健康饮食:饮食建议,这些食物富含补充{name}必要的营养素。\n生活方式调整:保持适度的体育活动,避免饮酒和吸烟,这些都可能影响{name}的健康。\n药物治疗:如果医生建议,可能需要服用补充剂或药物来纠正{name}异常。\n定期监测:根据医生的建议,定期监测{name}和其他{name}相关指标。\n记录症状:注意任何可能与{name}相关的症状,如疲劳、头晕或呼吸困难,并及时告知医生。\n请记住,{name}的异常可能是多种情况的指标,因此重要的是遵循医疗专业人员的指导进行进一步的评估和治疗。\n
"""
# filled_nums_template = nums_template.format(name=name)
def load_model():
pass
if __name__ == '__main__':
all = []
yins, nums, nulls = data_load()
# 遍历,一个字段造10个template,存储到list中,写入文件
yins_tem = zao_yins(yins)
# nums_tem = zao_nums(nums)
# nulls_tem = z_nulls(nulls)
# all = yins_tem + nums_tem + nulls_tem
# print(len(yins_tem))
# print(len(nums_tem))
# print(len(nulls_tem))
# nums_conversations = []
# for num in tqdm(nums_tem):
# filled_nums_template = nums_template.format(disc=num["value"], name=num["name"])
# response, history = model.chat(filled_nums_template, history=None)
# nums_conversations.append({"id": str(uuid.uuid4()), "conversations": [{"from": "user", "value": num["value"]}, {"from": "assistant", "value": response}]})
#
# with open("/home/wangyp/Big_Model/infectious_disease/data/zb_train.json", "w", encoding="utf-8") as f:
# f.write(",\n".join(str(i) for i in nums_conversations))
# print("nums_conversations数据处理完毕。。。。。。。。。。。。。。。。。。。")
nums_conversations = []
for num in tqdm(yins_tem):
filled_yins_template = yins_template.format(disc=num["value"], name=num["name"])
response, history = model.chat(filled_yins_template, history=None)
nums_conversations.append({"id": str(uuid.uuid4()), "conversations": [{"from": "user", "value": num["value"]}, {"from": "assistant", "value": response}]})
with open("/home/wangyp/Big_Model/infectious_disease/data/zb_yin_train.json", "w", encoding="utf-8") as f:
f.write(",\n".join(str(i) for i in nums_conversations))
print("yins_conversations数据处理完毕。。。。。。。。。。。。。。。。。。。")
体检指标生成健康建议
最新推荐文章于 2025-01-23 14:10:57 发布