训练文本生成
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

212 lines
23 KiB

2 years ago
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
import torch
from peft import get_peft_model, LoraConfig, TaskType, PeftModel
import time
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
import torch
# model_path = '/home/majiahui/models-LLM/openbuddy-llama-7b-finetune-v1'
# model_path = '/home/majiahui/models-LLM/openbuddy-openllama-7b-v5-fp16'
# model_path = '/home/majiahui/models-LLM/baichuan-vicuna-chinese-7b'
model_path = '/home/majiahui/project/models-llm/openbuddy-llama-7b-v1.4-fp16'
# model_path = "/home/majiahui/project/models-llm/openbuddy-llama-7b-finetune"
model = AutoModelForCausalLM.from_pretrained(
model_path,
device_map="auto",
trust_remote_code=True,
torch_dtype=torch.float16
# torch_dtype=torch.bfloat16
)
tokenizer = AutoTokenizer.from_pretrained(model_path,use_fast=False)
# special_tokens_dict = {"pad_token": "<unk>"}
# tokenizer.add_special_tokens(special_tokens_dict)
# WEIGHTS_NAME = "adapter_model.bin"
# checkpoint_dir = "/home/majiahui/project/LLaMA-Efficient-Tuning/path_to_sft_openbuddy_llama_paper_checkpoint_prompt_freeze_checkpoint/checkpoint-168000"
# weights_file = os.path.join(checkpoint_dir, WEIGHTS_NAME)
# assert os.path.exists(weights_file), f"Provided path ({checkpoint_dir}) does not contain the pretrained weights."
# model_state_dict = torch.load(weights_file, map_location="cuda")
# model.load_state_dict(model_state_dict, strict=False) # skip missing keys
# model = model.cuda()
'''
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_path = 'OpenBuddy/openbuddy-openllama-7b-v5-fp16'
model = AutoModelForCausalLM.from_pretrained(
model_path,
device_map="auto",
trust_remote_code=True,
torch_dtype=torch.float16)
tokenizer = AutoTokenizer.from_pretrained(model_path)
with open('../system.prompt', 'r', encoding='utf-8') as f:
prompt = f.read()
prompt += "\n\nUser: Write a poem about yourself.\nAssistant:"
input_ids = tokenizer.encode(prompt, return_tensors='pt').to('cuda')
with torch.no_grad():
output_ids = model.generate(
input_ids=input_ids,
max_new_tokens=100,
eos_token_id=tokenizer.eos_token_id)
print(tokenizer.decode(output_ids[0], skip_special_tokens=True))
'''
# prompt = '''论文题目是“大型商业建筑人员疏散设计研究”,目录是“一、引言
# 1.1 研究背景
# 1.2 研究意义
# 1.3 研究现状
#
# 二、大型商业建筑人员疏散设计概述
# 2.1 人员疏散设计的定义
# 2.2 人员疏散设计的基本原理
# 2.3 人员疏散设计的主要要素
#
# 三、大型商业建筑人员疏散设计的现状
# 3.1 大型商业建筑人员疏散设计的发展历程
# 3.2 大型商业建筑人员疏散设计的现状
# 3.3 大型商业建筑人员疏散设计存在的问题
#
# 四、大型商业建筑人员疏散设计的实施方法
# 4.1 人员疏散设计的实施流程
# 4.2 人员疏散设计的实施方法
# 4.3 人员疏散设计的实施效果
#
# 五、大型商业建筑人员疏散设计的应用案例分析
# 5.1 案例分析
# 5.2 案例分析的启示
# 5.3 案例分析的优缺点
#
# 六、结论
# 6.1 研究结论
# 6.2 研究展望
#
# 参考文献”,请把其中的小标题“2.1 人员疏散设计的定义”的内容补充完整,补充内容字数在800字左右'''
# prompt = '''论文题目是“马克思恩格斯婚姻家庭观及当代价值研究”,目录是“一、引言\\n\\n1.1 研究背景\\n\\n1.2 研究意义\\n\\n1.3 研究目的\\n\\n二、马克思恩格斯婚姻家庭观综述\\n\\n2.1 马克思恩格斯婚姻家庭观的形成与发展\\n\\n2.2 马克思恩格斯婚姻家庭观的核心思想\\n\\n2.3 马克思恩格斯婚姻家庭观的现实意义\\n\\n三、马克思恩格斯婚姻家庭观的当代价值\\n\\n3.1 当代婚姻家庭问题的现状\\n\\n3.2 马克思恩格斯婚姻家庭观对当代婚姻家庭问题的启示\\n\\n3.3 马克思恩格斯婚姻家庭观的当代应用价值\\n\\n四、马克思恩格斯婚姻家庭观的局限性及其超越\\n\\n4.1 马克思恩格斯婚姻家庭观的局限性\\n\\n4.2 马克思恩格斯婚姻家庭观的超越\\n\\n4.3 马克思恩格斯婚姻家庭观的未来发展方向\\n\\n五、结论\\n\\n5.1 研究结论\\n\\n5.2 研究不足与展望\\n\\n参考文献”,请把其中的小标题“5.1 研究结论”的内容补充完整,补充内容字数在700字左右
# '''
# prompt = "问:帮我写一个请假条\n答:"
# prompt1 = "问:帮我写一个论文题目\n答:"
prompt_en = '''Question: generate the table of contents for the paper title "Research on the Adaptability of Large Class Children under the Connection between Young and Primary Schools", which requires only the first level title and the second level title, and the first level title uses Chinese numerals, such as one, xxx; The secondary title uses Arabic numerals, such as 1.1 xxx; At least 7 first level titles; Each first level title should contain at least 3 second level titles.
Answer:
'''
prompt_0 = "生成目录#\n问:为论文题目《幼小衔接下大班幼儿适应性的研究》生成目录,要求只有一级标题和二级标题,一级标题使用中文数字 例如一、xxx;二级标题使用阿拉伯数字 例如1.1 xxx;一级标题不少于7个;每个一级标题至少包含3个二级标题\n答:\n"
prompt = "生成论文小标题内容#问:论文题目是“大学生村官管理研究”,目录是“一、大学生村官管理现状分析\\n1.1 村官数量及分布情况\\n1.2 村官岗位设置及职责\\n1.3 村官工作绩效评估\\n\\n二、大学生村官管理存在的问题\\n2.1 村官队伍结构不合理\\n2.2 村官工作能力不足\\n2.3 村官管理制度不健全\\n\\n三、大学生村官管理对策研究\\n3.1 加强村官队伍建设\\n3.2 提高村官工作能力\\n3.3 完善村官管理制度\\n\\n四、大学生村官管理案例分析\\n4.1 案例一:某村大学生村官工作情况分析\\n4.2 案例二:某村大学生村官管理策略探讨\\n\\n五、大学生村官管理的未来发展趋势\\n5.1 多元化村官队伍建设\\n5.2 信息化村官管理模式\\n5.3 村官职业化发展\\n\\n六、大学生村官管理的政策建议\\n6.1 加强对大学生村官的培训和管理\\n6.2 完善大学生村官管理制度\\n6.3 提高大学生村官的待遇和福利\\n\\n七、结论与展望”,请把其中的小标题“3.3 完善村官管理制度”的内容补充完整,补充内容字数在800字左右\n答:\n"
#
prompt1 = "生成论文小标题内容#问:论文题目是“埃及申诺达三世时期的科普特人研究”,目录是“一、研究背景和意义\\n1.1 埃及申诺达三世时期的历史背景\\n1.2 科普特人在埃及的历史地位\\n1.3 研究意义和目的\\n\\n二、科普特人的社会生活\\n2.1 科普特人的宗教信仰\\n2.2 科普特人的语言和文化\\n2.3 科普特人的职业和经济状况\\n\\n三、科普特人的艺术和文学\\n3.1 科普特人的绘画和雕塑艺术\\n3.2 科普特人的文学作品\\n3.3 科普特人的音乐和舞蹈艺术\\n\\n四、科普特人的建筑和工程技术\\n4.1 科普特人的建筑风格和特点\\n4.2 科普特人的水利工程和农业技术\\n4.3 科普特人的金属加工和制造技术\\n\\n五、科普特人的医学和药物\\n5.1 科普特人的医学理论和实践\\n5.2 科普特人的药物和草药疗法\\n5.3 科普特人的医疗机构和医疗制度\\n\\n六、科普特人的教育和学术\\n6.1 科普特人的教育体系和教育内容\\n6.2 科普特人的学术研究和学术成就\\n6.3 科普特人的知识传承和学术交流\\n\\n七、科普特人的社会活动和组织\\n7.1 科普特人的社会组织和文化团体\\n7.2 科普特人的慈善和公益活动\\n7.3 科普特人的政治参与和社会影响”,请把其中的小标题“3.2 科普特人的文学作品”的内容补充完整,补充内容字数在1100字左右\n答:\n"
#
prompt2 = "生成目录#问:论文题目为“基于红细胞分布宽度建立乙肝相关慢加急性肝衰竭不良预后的优化预测模型”,以“研究建立一种基于红细胞分布宽度的乙肝相关慢加急性肝衰竭不良预后的优化预测模型,包括数据收集、特征选择、模型构建等方面的研究。最终成果是验证所设计模型对于乙肝相关慢加急性肝衰竭不良预后的预测能力,并对模型进行优化,提高预测准确性和可靠性。”为论文的研究方向,为论文生成目录,要求只有一级标题和二级标题,一级标题使用中文数字 例如一、xxx;二级标题使用阿拉伯数字 例如1.1 xxx;一级标题不少于7个;每个一级标题至少包含3个二级标题\n答:\n"
prompt3 = "生成论文小标题内容#问:论文题目是“多无人艇一致性自主编队控制研究”,目录是“一、引言\\n 1.1 研究背景\\n 1.2 研究意义\\n 1.3 国内外研究现状\\n\\n二、多无人艇编队控制技术综述\\n 2.1 多无人艇编队控制技术分类\\n 2.2 多无人艇编队控制技术研究现状\\n 2.3 多无人艇编队控制技术存在的问题\\n\\n三、多无人艇一致性控制方法研究\\n 3.1 一致性控制方法分类\\n 3.2 多无人艇一致性控制方法研究现状\\n 3.3 多无人艇一致性控制方法存在的问题\\n\\n四、多无人艇一致性自主编队控制方法研究\\n 4.1 自主编队控制方法分类\\n 4.2 多无人艇一致性自主编队控制方法研究现状\\n 4.3 多无人艇一致性自主编队控制方法存在的问题\\n\\n五、多无人艇一致性自主编队控制仿真实验\\n 5.1 实验设计\\n 5.2 实验结果分析\\n 5.3 实验结论\\n\\n六、总结与展望\\n 6.1 研究成果总结\\n 6.2 研究不足与改进方向\\n 6.3 发展前景与应用价值”,请把其中的小标题“3.3 多无人艇一致性控制方法存在的问题”的内容补充完整,补充内容字数在700字左右\n答:\n"
# prompt = "生成论文小标题内容#论文题目是“家庭化流动对流动人口就业的影响”,目录是“一、研究背景和意义\\n1.1 流动人口和家庭化流动的概念\\n1.2 流动人口就业现状分析\\n1.3 家庭化流动的影响因素\\n\\n二、家庭化流动对流动人口就业的影响\\n2.1 家庭化流动对流动人口就业机会的影响\\n2.2 家庭化流动对流动人口就业稳定性的影响\\n2.3 家庭化流动对流动人口就业满意度的影响\\n\\n三、家庭化流动对流动人口就业的政策建议\\n3.1 完善流动人口就业政策\\n3.2 加强家庭化流动人口的社会保障\\n3.3 推进家庭化流动人口的职业培训\\n\\n四、案例分析\\n4.1 湖南省某县家庭化流动人口就业情况分析\\n4.2 广东省某市家庭化流动人口就业政策效果分析\\n4.3 河北省某区家庭化流动人口就业满意度调查\\n\\n五、结论与展望\\n5.1 结论\\n5.2 展望”,请把其中的小标题“3.2 加强家庭化流动人口的社会保障”的内容补充完整,补充内容字数在900字左右"
# prompt = "翻译摘要#请把“本文研究了相干光通信中以太网视频传输系统的关键技术。首先,介绍了相干光通信的基本原理和应用领域,指出了其在高速数据传输中的优势。然后,分析了以太网视频传输系统的特点和需求,包括高带宽、低延迟、高可靠性等。接着,针对传输过程中可能出现的干扰和衰减等问题,提出了多种解决方案,如光纤衰减补偿、信号增强等。此外,还介绍了基于光放大器的信号放大技术和基于光纤光栅的光谱成像技术,以及它们在以太网视频传输系统中的应用。最后,根据系统需求和技术特点,设计了一套完整的以太网视频传输系统,并进行了实验验证。结果表明,该系统具有高带宽、低延迟、高可靠性等优点,可以满足实际应用需求。本文的研究成果对于推动相干光通信技术的发展和应用具有重要意义。”这段文字翻译成英文"
prompt = "翻译摘要#请把“研究背景:\n\n随着全球能源需求的不断增加和化石燃料的日益枯竭,新能源技术的研究和应用已经成为全球性的热点问题。其中,燃料电池作为一种高效、清洁、可再生的新能源技术,已经成为国际上研究的热点之一。而其中,高温质子交换膜燃料电池(HT-PEMFC)由于具有高能量密度、高效率、低污染等优点,被广泛应用于航空航天、汽车、家庭等领域。\n\n然而,HT-PEMFC在启动过程中存在着一定的困难。由于燃料电池的运行需要一定的温度和湿度条件,因此在启动时需要先加热和湿化电池,以达到运行所需的条件。而传统的加热和湿化方法需要较长的时间,且能量消耗较大,因此需要寻找一种快速启动的方法,以提高燃料电池的运行效率和可靠性。\n\n研究意义:\n\n本研究旨在探究一种快速启动HT-PEMFC的方法,以提高其运行效率和可靠性。具体而言,本研究将采用仿真方法,研究在不同的温度和湿度条件下,利用燃料电池的内部能量来快速启动电池的可行性和效果,并分析其影响因素和优化方案。\n\n本研究的意义在于:\n\n1. 提高HT-PEMFC的运行效率和可靠性。采用快速启动方法可以减少启动时间和能量消耗,提高燃料电池的运行效率和可靠性。\n\n2. 探索新的启动方法。传统的加热和湿化方法存在能量消耗大、启动时间长等缺点,因此本研究探索一种新的快速启动方法,为燃料电池的应用提供新的思路和方法。\n\n3. 为燃料电池的应用提供技术支持。燃料电池作为一种新能源技术,其应用前景广阔。本研究为燃料电池的应用提供技术支持,有利于推动其产业化和普及。\n”这段文字翻译成英文"
# prompt = "请写出以《列宁军事理论及其在中国的应用与发展研究》为课题的国内外研究状况综述,字数在800字左右"
# prompt = "以“专利间接侵权责任认定制度研究”为论文题目,写一个论文简短总结,要求在300字以内"
# prompt = "请把“1. 老年长期护理模式\\n2. 问题分析\\n3. 解决方案\\n4. 国际比较与分析\\n5. 改进措施”这几个关键字翻译成英文"
# prompt = "请为“本研究旨在探究基于领导成员交换理论的团队绩效。通过对团队成员之间的领导成员交换关系进行分析,研究团队绩效的影响因素。本研究采用问卷调查法,对不同类型的团队进行调查,以了解不同领导成员交换关系对团队绩效的影响。\\n\\n研究结果表明,领导成员交换关系对团队绩效具有显著影响。在高质量的领导成员交换关系下,团队绩效显著提高。此外,团队成员之间的信任程度、沟通效果、合作精神等因素也对团队绩效产生重要影响。\\n\\n本研究还发现,不同类型的团队对领导成员交换关系的需求也不同。在高度协作的团队中,领导成员交换关系对团队绩效的影响更为显著。而在需要高度专业技能的团队中,领导成员交换关系的影响相对较小。\\n\\n综上所述,基于领导成员交换理论的团队绩效研究对于提高团队绩效具有重要意义。在实践中,团队领导者应该注重领导成员交换关系的建立和维护,以提高团队绩效。此外,团队成员之间的信任程度、沟通效果、合作精神等因素也应该得到重视,以促进团队的协作和合作,提高团队绩效。”这段论文摘要生成3-5个关键字,使用阿拉伯数字作为序号标注,例如“1.xxx \\n2.xxx \\n3.xxx \\n4.xxx \\n5.xxx \\n”"
# prompt = "请帮我生成《眼底图像中微小目标检测算法的研究与实现》为题目的研究内容,包括整体简介和分最少三个方面总结"
# prompt = "生成6点本篇论文应完成的主要内容#请根据题目为《ATP软件可靠性混沌预测研究》,和研究内容为“整体简介:\\n本研究旨在探讨ATP软件的可靠性混沌预测方法,以提高软件开发过程中的可靠性和稳定性。通过对ATP软件的历史数据进行分析,结合混沌理论,建立混沌预测模型,以实现对ATP软件可靠性的预测和控制。\\n\\n分三个方面总结:\\n1. 历史数据分析:通过对ATP软件的历史数据进行分析,包括软件开发过程中的各个环节,如需求分析、设计、编码、测试等,以及软件发布后的使用情况,如稳定性、故障率等,分析软件可靠性的影响因素和规律,为后续建立混沌预测模型提供数据支持。\\n\\n2. 混沌预测模型建立:基于ATP软件的历史数据和混沌理论,建立混沌预测模型,通过对历史数据的拟合和验证,优化模型参数,提高预测精度。同时,结合软件开发过程中的实际情况,不断修正和完善模型,以适应不同的软件开发环境和需求。\\n\\n3. 可靠性控制策略实现:基于混沌预测模型,制定可靠性控制策略,包括对软件开发过程中的各个环节进行监控和调整,对软件发布后的使用情况进行实时监测和反馈,及时发现和解决潜在问题,提高软件的可靠性和稳定性。同时,通过对控制策略的不断优化和改进,不断提高软件开发过程中的效率和质量。”总结出至少6点本篇论文应完成的主要内容,使用阿拉伯数字排列"
# prompt = "生成论文摘要#论文题目是“度假型酒店式公寓项目策划研究”,目录是“一、项目概述\\n1.1 项目背景\\n1.2 项目定位\\n1.3 项目规划\\n\\n二、市场调研\\n2.1 目标客群分析\\n2.2 竞争对手分析\\n2.3 市场需求分析\\n\\n三、设计方案\\n3.1 客房设计\\n3.2 公共空间设计\\n3.3 营销策略设计\\n\\n四、运营管理\\n4.1 人员组织架构\\n4.2 运营流程规划\\n4.3 财务预算与管理\\n\\n五、风险分析\\n5.1 市场风险\\n5.2 技术风险\\n5.3 政策风险\\n\\n六、社会效益\\n6.1 社会影响评估\\n6.2 环保建设\\n6.3 社区责任履行\\n\\n七、总结与展望\\n7.1 项目总结\\n7.2 未来发展展望”,生成论文摘要,要求生成的字数在600字左右"
# prompt = "生成目录#为论文题目“试论杭州“西溪”名称的含义、演变及其原因”生成目录,要求只有一级标题和二级标题,一级标题使用中文数字 例如一、xxx;二级标题使用阿拉伯数字 例如1.1 xxx;一级标题不少于7个;每个一级标题至少包含3个二级标题"
# prompt = "生成目录#为论文题目“中西部地区公共就业服务水平省际差距研究”生成目录,要求只有一级标题和二级标题,一级标题使用中文数字 例如一、xxx;二级标题使用阿拉伯数字 例如1.1 xxx;一级标题不少于7个;每个一级标题至少包含3个二级标题"
# prompt = "生成课题的研究背景和意义#请分别写出以《农村小学少先队活动研究》为课题,以“研究农村小学少先队的活动内容、组织方式和效果,探讨如何提高少先队员的思想品德和综合素质。通过实地调研和问卷调查等方法,分析少先队活动的现状和问题,提出相应的改进措施。最终成果是设计出一套适合农村小学少先队开展的活动方案,有效促进少先队员的全面发展和成长。”为论文的研究方向,生成论文的研究背景和意义,字数不少于1000字"
# prompt = "生成论文小标题内容#论文题目是“黄土高原刺槐人工林土壤磷组分及其有效性对穿透雨改变的响应”,目录是“一、绪论\\n1.1 研究背景\\n1.2 研究意义\\n1.3 国内外研究现状\\n\\n二、材料与方法\\n2.1 研究区域及样地选择\\n2.2 采样与处理\\n2.3 土壤理化性质测定\\n2.4 磷组分测定\\n2.5 数据处理方法\\n\\n三、土壤磷组分及其有效性\\n3.1 土壤磷组分特征\\n3.2 土壤磷有效性特征\\n3.3 土壤磷组分与有效性的相关性\\n\\n四、穿透雨对土壤磷组分及其有效性的影响\\n4.1 穿透雨对土壤磷组分的影响\\n4.2 穿透雨对土壤磷有效性的影响\\n4.3 穿透雨对土壤磷组分与有效性的相关性影响\\n\\n五、讨论\\n5.1 黄土高原刺槐人工林土壤磷组分及其有效性的特征\\n5.2 穿透雨对土壤磷组分及其有效性的影响机制\\n5.3 黄土高原刺槐人工林土壤磷管理的建议\\n\\n六、结论\\n\\n七、参考文献”,请把其中的小标题“3.1 土壤磷组分特征”的内容补充完整,补充内容字数在900字左右"
# prompt = "问:根据核心内容“七夕给女朋友发的情书”,生成不少于1000字中文情书\n答:\n"
# t1 = time.time()
# for i in range(50):
# print("#####################################################################")
# print(f"## {i}")
# print("#####################################################################")
# res, history = model.chat(tokenizer, prompt, history=[], top_p=0.7, temperature=0.3)
#
# print(res)
# t2 = time.time()
#
# print(t2 -t1)
# num_beams = 1
do_sample = True
top_p = 0.7
temperature = 0.9
gen_kwargs = {"do_sample": do_sample, "top_p": top_p,
"temperature": temperature}
t1 = time.time()
for i in range(3):
print("#####################################################################")
print(f"## {i}")
print("#####################################################################")
input_ids = tokenizer.encode(prompt, return_tensors='pt').to('cuda')
# input_txt_list = [prompt1,prompt2,prompt3]
#
# input_ids = tokenizer.batch_encode_plus(input_txt_list, return_tensors="pt",padding=True)["input_ids"].to('cuda')
# print(input_ids)
with torch.no_grad():
output_ids = model.generate(
input_ids=input_ids,
max_new_tokens=2000,
eos_token_id=tokenizer.eos_token_id,
**gen_kwargs
)
# print(output_ids)
output_ids = output_ids.tolist()
print(tokenizer.decode(output_ids[0][len(input_ids[0]):], skip_special_tokens=True))
# for j in range(len(input_txt_list)):
# print("#####################################################################")
# print(f"## {i,j}")
# print("#####################################################################")
#
# print(tokenizer.decode(output_ids[j][len(input_ids[j]):], skip_special_tokens=True))
##########################
# streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
# instruction = "A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. USER: {} ASSISTANT:"
# prompt = instruction.format("How can I improve my time management skills?") # user message
# prompt = "小明的爸爸有3个儿子,三儿子叫大狗,二儿子叫二猫,三儿子叫什么?"
# generate_ids = model.generate(tokenizer(prompt, return_tensors='pt').input_ids.cuda(), max_new_tokens=2048)
# print(generate_ids)
# print(tokenizer.decode(generate_ids[0], skip_special_tokens=True))
#
# t2 = time.time()
#
# print(t2 -t1)