LLM微调(精讲)-以高考选择题生成模型为例(DataWhale AI夏令营)
前言
你好,我是
GISer Liu
😁,一名热爱AI技术的GIS开发者,上一篇文章中,作者介绍了基于讯飞开放平台进行大模型微调的完整流程;而在本文中,作者将对大模型微调的数据准备部分进行深入;
简介
在上一篇文章中,作者详细介绍了如何利用讯飞开放平台进行大模型微调的完整流程。
本文将深入探讨微调过程中的数据准备阶段,重点阐述数据处理和微调理论,旨在帮助读者更深入地理解微调的本质,并鼓励大家基于此理论再次尝试微调模型,以优化模型的输出结果。
本文的核心内容包括:
- 数据处理思路:分析比赛数据结构,探讨如何从原始数据中提取和清洗关键信息,构建高质量的微调数据集。
- 微调数据分析:详细介绍微调数据的输入和输出部分,以及如何通过数据分析确保数据清理的高效性。
- 数据处理方案:展示如何运用正则表达式、pandas库和LLM提取处理等方法,对数据进行清洗和处理,最终生成适用于微调的格式。
通过本文的学习,读者将能够掌握从数据准备到模型微调的全过程,为实际应用中的模型优化打下坚实的基础。
一、 数据处理思路
1.赛题分析
根据比赛提供的数据可以看出,我们原始数据包含:
打开数据可以看到如下字段:
这说明我们的数据由以下部分构成:
- 阅读文本(中、英)
- 题目(中、英)
- 答案(中、英)
我们需要对这个数据进行处理,构建一个微调数据集,内容分别是:
- input 部分:经过数据清洗的阅读文本;
- target 部分:经过数据清洗的问答QA对;
而为了制作高质量微调数据集,我们就需要对原始数据进行清洗;
2.微调数据分析
为了保证高效的清理数据,我们对数据内容进行分析:
①微调数据Input部分
微调数据的Input部分由两部分组成:
阅读材料
用户提示词Prompt
下图分别是中文的阅读材料和英文的阅读材料:
②微调数据Target部分
这里我们可以看做将阅读材料和用户提示词一起输入到LLM,则LLM会输出符合用户要求的内容,这里我们需要LLM输出标准格式的QA对,例如下面是一个官方输出的标准案例:
{
1. 以下哪个选项是“具身认知”的定义?
A. 认知在功能上的独立性、离身性构成了两种理论的基础。
B. 认知在很大程度上是依赖于身体的。
C. 认知的本质就是计算。
D. 认知和心智根本就不存在。答案:B2. 以下哪个实验支持了“具身认知”的假设?
A. 一个关于耳机舒适度的测试。
B. 一个关于眼睛疲劳程度的测试。
C. 一个关于人类感知能力的实验。
D. 一个关于人类记忆力的实验。答案:A3. 以下哪个选项是“离身认知”的教育观的特点?
A. 教育仅仅是心智能力的培养和训练,思维、记忆和学习等心智过程同身体无关。
B. 教育观认为身体仅仅是一个“容器”,是一个把心智带到课堂的“载体”。
C. 教育观认为知识经验的获得在很大程度上依赖于我们身体的体验性。
D. 教育观认为知识经验的获得在很大程度上依赖于我们大脑的记忆能力。答案:A4. 以下哪个选项是“具身认知”带来的教育理念和学习理念的变化?
A. 更强调全身心投入的主动体验式学习。
B. 更注重操作性的体验课堂,在教学过程中将学生的身体充分调动起来,这在教授抽象的概念知识时尤为重要。
C. 更强调教师的教学方法和学生的学习方法。
D. 更注重教师的教学技巧和学生的学习技巧。答案:A}
{
Which of the following is not a type of art form that Nick Smith uses in his pixelated collages?
A) Painting
B) Photography
C) Embroidery
D) Video art
Answer:C
What does the word "Psychology" in the title PSYCOLOURGY: January 2015 refer to in relation to Nick Smith's work?
A) The study of human behavior and mental processes
B) The concept of using colour to convey emotions and ideas
C) The use of pixelated images in his collages
D) A specific series of artworks from 2015
Answer:B
Which of the following is true about Nick Smith's career as an artist?
A) He has only worked in the fine arts category
B) His work is primarily focused on interior design
C) He has never used hand-made collages in his work
D) His first collage experiment was inspired by Marilyn Monroe
Answer:D
Which of the following can be inferred about the text employed in Nick Smith's work?
A) It is always narrative and sequential
B) It is often open to interpretation by the viewer
C) It is always written in a specific language or script
D) It is always placed under each swatch of colour
Answer:B
}
这里可以看出,LLM将阅读材料输出为问题、选项以及答案组成的QA组;
③ 中文数据分析
为了保证模型训练数据的质量,我们需要将官方给定资料中无用的部分过滤掉,这里我们对数据进行分析:
案例如下:
原文:
根据《杜登德语辞典》,"语言"是一种人类自我表达的能力。如此看来,只有我们人类可以说话,但是如果我们可以知道树木是否也会自我表达,这不是最有趣吗?那么树木会如何"说话"呢?我们当然不可能听得见,因为它们肯定是静悄悄的,那些强风刮过时才技丫摇摆的嘎嘎声,以及轻风拂面时叶片婆婆的较轻声,都是被动发出的。不过它们确实以另一种方式沟为通:通过气味。在非洲大陆的举原上,金合欢树是长颈鹿的珍馐,为了摆脱这种草食性的庞然大物,金合欢树短短几分钟内就可以在叶子里散布毒素。长颈鹿便会转移到其他树木那里。是旁边的树吗?不。它们会避开邻近的树木,然后在大约100米开外的全合欢树那里重新开始大快朵颐。因为被啃食的金合欢树会花施放一种警示气体,向邻近的同伴传递不速之客来袭的信息。所有得到警讯的树木会立即分泌毒素来回应。长颈鹿因为知道金合欢树的这个把戏,所以会走远一些,以寻找那些尚未知情的树木。又或者它们会逆风而行,因为气味信息是顺着风向其他树木传送的。这样的防卫行为自然需要时间,所以早期预警阶段的工作如何协调就具有决定性的意义,对此,树木当然不能只依赖空气,它也通过根部来传送信息。一棵树白的根可以蔓延得很广,其距离大过树冠宽度的两倍,因此在地底下会与周遭树木的根交错而产生联系。但也有偶然情形,因为森林里也有独行侠,一点也不想与别人有任何瓜葛。所以有没有可能因为这些家伙的不不合群,而导致警示信息被阻断呢?幸好不会。树木为了确保信息能够快速传递,多数情况下都会以真菌为谋介,其作用就像网络光纤那样,纤细的菌丝密布在土壤中,并以我们无法想象的密度交织成网络,借助。其网络,真菌可以把从某棵树得到的信号继续传递下去,帮助它们交换害虫、干旱或其他危险消息。在共同司的生存空间里,可能森林里所有的植物都会以这种方式进行交流。但我们若踏入田野,就会发现所有的绿色植物都很沉默。这是因为人工栽培的植物在育种繁殖的过程中,大多已经失去这种在地面或地下进行沟通的能力。它们几乎是又哑,因此特别容易成为昆虫的猎物。而这自然也是现代农业必须使用这么多多农药的原因之一,或许今后育种专家应该要多多少少再从森林里"剽窃"一点野性基因,例如把"多嘴"这个属性加入谷物及马铃薯的品种里。虽然我一开始时说过树木是静悄悄的,但这点从最新的发现来看却值得质疑。一些研究人员想测试地底下是不是可以听到什么声音,不过要想把树木带进实验?室里有点不切实际,因此他们观察的对象是谷物幼苗。果不其然!仪器很快就记录到了由根部发出的轻响,频率约220赫兹。而且有趣的是没有参与实验的幼苗对它也会起反应--在播放着频率约220赫兹声响的环境里,这些幼苗的顶端总会往声源方向生长,这意味着禾本科草类可以察觉到,或是干脆直接说"听到"这个频率。所以,植物可以通过声波来交换信息?我还没想过这可能代表着什么,因为这一领域的研究才刚刚起步。不过下次当你漫步在森林里,那些林间传来的塞牢细响,说不定不只是因为风......
(摘编自彼得·渥雷本《树的秘密生命》,钟宝珍译)
- 选项:
4.下列对原文相关内容的理解和分析,正确的一项是(3分)
A.叶片婆娑的簌簌声以及谷物幼苗根部发出的轻响,都属于植直物被动发出的声音,而并非是它们在通
过声波交换信息。
B.当金合欢树被长颈鹿啃食时,它既会分泌出毒素进行自我防卫,也能够通过施放气体向邻近的其他
树木发出警告。
C.树木凭借流动的空气可以做到早期的预警,但是这种预警需要的的时间较长,因此气味"语言"一般
作为一种辅助手段。
D.森林中的独行侠由于失去了与其他植物进行沟通的能力,无法意识到步步逼近的灾难,因而终将沦
为昆虫的大餐。
5.下列对原文相关内容的分析和评价,正确的一项是(3分)
A.作者认为,《杜登德语辞典》将"语言"定义为"一种人类自我表达的能力"并不全面,其
实树木也可以通过特定的语言进行沟通。
B.下面的发现可以作为证明第一段中心观点的材料:当昆!虫啃噬橡树时,橡树为了自救会把苦
涩且具有毒性的单宁酸导入树皮与叶子中。
C.第二段中的"多嘴"以及第三段中的"听到",这两处使用的引号有表示特殊含义的作用,
这种用法与第段中的"语言"具有明显的不同。
D.作者在介绍禾本科草类的科学实验和地下真菌网络时,都使用了打比方和举例子的说明方法,
这使本文的内容更准确、更科学,也更具说服力。
6.与野生植物不同,人工载培的植物要经常喷洒浓药,这给我我们带来哪些思考?(6分)
- 答案:
4.B
5.C
6.①在育种繁殖的过程中应采取措施恢复人工栽培植物在地面或地下的沟通能力,从而提高抵抗病虫害的能
力,减少农药的使用量.
②育种专家可借鉴自然野生植物的野性基因,如把利用气味传递信息等属性加入人工栽培植物的属性中去。
对于原文部分,无明确格式要求,无需处理,可以直接使用;
- 选项和答案:
- 需要去掉题目中的打分分值,如(6分);
④英文数据分析
- 阅读文本
Bike Rental & Guided Tours Welcome to Amsterdam, welcome to MacBike. You see much more from the seat of a bike! Cycling is the most
economical, sustainable and fun way to explore the city, with its beautiful canals, parks, squares and countless lights.
You can also bike along lovely landscapes outside of Amsterdam.
Why MacBike MacBike has been around for almost 30 years and is the biggest bicycle rental company in Amsterdam. With over 2,500 bikes stored in our five rental shops at strategic locations, we make sure there is always a bike available for you. We offer the newest bicycles in a wide variety, including basic bikes with foot brake (AU 4), bikes with hand
brake and gears (HI-I'4), bikes with child seats, and children's bikes. Price: 1 hour, 3 hours, 1 day(24hours), Each additional day Hand Brake, Three Gears: €7.50, €11.00, €14.75, €8.00 Foot Brake, No Gears: €5.00, €7.50, €9.75, €6.00 The 2.5-hour tour covers the Gooyer Windmill, the Skinny Bridge, the Rijksmuseum, Heineken Brewery and much more. The tour departs from Dam Square every hour on the hour, starting at 1:00 pm every day. You can buy
your ticket in a MacBike shop or book online.
- 选项
21. What is an advantage of MacBike?
A. It gives children a discount.
B. It of offers many types of bikes.
C. It organizes free cycle tours.
D. It has over 2,500 rental shops.
22. How much do you pay for renting a bike with hand brake and three gears for two days?
А. €15.75.
B. €19.50.
C. €22.75.
D. €29.50.
23. Where does the guided city tour start?
A. The Gooyer, Windmill.
C. Heineken Brewery.
B. The Skinny Bridge.
D. Dam Square.
- 答案
21. B. It offers many types of bikes. 22. D. €29.50. 23. D. Dam Square.
同上,阅读文本不用考虑格式,只需要考虑选项和答案;
这里题目中选项用ABCD序号分开,但是有些答案有文字解释,需要思考怎么把答案选项从答案中抽取出来。
3. 数据处理方案
① 数据清洗方法
为了高效地从数据中提取和清洗关键信息,我们采用了以下三种主要方法:
- 正则表达式:利用正则表达式在文本预处理中的强大功能,例如精确提取特定模式、高效替换字符串等,确保数据的准确性和一致性。
- pandas库:借助pandas库在数据清洗和处理中的广泛应用,如数据框操作、缺失值处理、数据转换等,提升数据处理的效率和质量。
- LLM提取处理:虽然速度较慢,但LLM(大型语言模型)提取处理能够提供高质量的数据清洗结果。通过提示词工程或API厂商提供的Json模式,实现经济实惠且高效的数据清洗,尽管在处理速度上稍显不足。
② 处理目标
- 数据清洗与处理 :使用pandas库分别读取Input和Target数据,并进行细致的数据清洗,确保数据的纯净度和可用性。
- 数据合并:将清洗后的中文和英文数据进行整理,合并为一个结构化的dataFrame,便于后续的数据分析和处理。
- 导出与格式转换:将最终的dataFrame存储为csv或Jsonl格式,以便无缝上传至讯飞开放平台进行模型的微调,为模型的优化和提升奠定坚实的基础。
③处理流程
这里参考datawhale的本期task2的流程图
二、 微调流程介绍
1. 大模型概念
这里参考作者过去撰写的这篇文章即可:文章传送门
2. 微调介绍
①什么是模型微调
根据你提供的资料和参考链接,以下是完善后的“微调流程介绍”部分的内容。这个部分将结合你的大纲结构和提供的内容,补充必要的细节,以确保完整性和实用性。
二、微调流程介绍
1. 大模型概念
关于大模型的概念部分,读者可以参考作者之前撰写的文章 文章传送门,这里不再赘述。
2. 微调介绍
① 什么是模型微调
模型微调(Fine-tuning)是指在已经预训练好的大模型基础上,针对特定任务和数据集进行进一步的训练,以便模型能够更好地适应特定的应用场景。预训练模型通常在大规模数据集上进行训练,具备了较为通用的特征提取能力,而微调则是在此基础上,通过少量数据进行专门训练,使模型能够处理更细化的任务。
② 两种微调范式:
-
增量预训练微调(Continue PreTraining):
- 使用场景:适用于需要让基座模型学习新领域知识的情况,如某个垂直领域的常识。
- 训练数据:可以使用文章、书籍、代码等领域相关的文本数据。
- 优点:通过让模型吸收特定领域的新知识,提高模型在该领域的表现。
-
指令跟随微调(Supervised Finetuning):
- 使用场景:用于让模型学习特定的对话模板或应对特定指令的能力,例如聊天机器人根据人类指令进行对话。
- 训练数据:通常是高质量的对话和问答数据。
- 优点:模型能够更好地理解和响应人类指令,适应性更强。
我们当前构建选择题生成就是相当于指令跟随微调,用于生成指定格式的输出;
③ 为什么要微调?
- 节省资源:相比从头开始训练,微调可以大幅减少计算资源和时间,并且有时还能提高模型的准确率。
- 增强适应性:预训练模型虽然在大型数据集上进行了训练,但并不总能适应特定任务。微调能帮助模型在新任务上表现更好。
④ 什么情况下使用微调?
- 数据集相似度:当你的任务数据集与预训练模型的数据集相似时,微调效果最好。相似度低的情况下,微调效果可能不如预期。
- 资源限制:如果计算资源有限,微调是比从头训练更好的选择。
- 模型准确率:如果你使用的模型在现有任务上准确率不高,通过微调可以提高模型性能。
不同数据集下的微调策略:
- 数据量少、数据相似度高:只需修改最后几层的权重,例如修改Softmax层的输出类别。
- 数据量少、数据相似度低:冻结预训练模型的前几层,只对剩余的几层进行重新训练。
- 数据量大、数据相似度低:这种情况下,最好从头开始训练模型(Training from scratch)。
- 数据量大、数据相似度高:这是最理想的情况,使用预训练模型的权重进行微调效果最佳。
⑤ 微调的注意事项:
- 调整最后一层:通常需要截断预训练网络的最后一层,并替换为与新任务相关的Softmax层。
- 使用较小的学习率:微调时,使用较小的学习率可以避免破坏预训练模型已经学到的权重。
- 冻结部分层数:当数据集较小或中等时,可以考虑冻结预训练模型的前几层,只训练后续层。
3. LORA(Low-Rank Adaptation)
① 概念
- LORA(Low-Rank Adaptation)是一种高效的微调方法,旨在通过引入低秩矩阵,减少模型参数的微调成本,从而降低硬件要求并提高训练效率。
② 原理
- LORA通过在模型中引入低秩矩阵,专门对这些矩阵进行微调,同时保持原始模型的大部分权重不变。这种方法能够显著减少需要调整的参数数量,进而减少计算负担。
如果一个大模型是将数据映射到高维空间进行处理,这里假定在处理一个细分的小任务时,是不需要那么复杂的大模型的,可能只需要在某个子空间范围内就可以解决,那么也就不需要对全量参数进行优化了,我们可以定义当对某个子空间参数进行优化时,能够达到全量参数优化的性能的一定水平(如90%精度)时,那么这个子空间参数矩阵的秩就可以称为对应当前待解决问题的本征秩(intrinsic rank)。
- 预训练模型本身就隐式地降低了本征秩,当针对特定任务进行微调后,模型中权重矩阵其实具有更低的本征秩(intrinsic rank)。同时,越简单的下游任务,对应的本征秩越低。(Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning)因此,权重更新的那部分参数矩阵尽管随机投影到较小的子空间,仍然可以有效的学习,可以理解为针对特定的下游任务这些权重矩阵就不要求满秩。我们可以通过优化密集层在适应过程中变化的秩分解矩阵来间接训练神经网络中的一些密集层,从而实现仅优化密集层的秩分解矩阵来达到微调效果。
③ 优势
- 高效切换任务:LORA可以针对不同任务构建小型模块,实现任务之间的快速切换。
- 低硬件门槛:通过减少参数数量,LORA降低了对硬件资源的需求,适合资源有限的环境。
- 无推理延迟:LORA设计简单,在部署时可将可训练矩阵与冻结权重合并,不会引入额外的推理延迟。
- 与其他方法兼容:LORA可以与其他微调方法结合,进一步优化模型性能。
详细步骤:
-
数据准备:首先需要根据任务需求准备训练数据。确保数据经过清洗和预处理,能够被模型正确加载。
-
模型加载:使用预训练模型作为基础,通常可以通过模型库(如Hugging Face Transformers)加载模型。
-
微调参数设置:根据任务和数据集设置微调参数,包括学习率、批量大小、训练轮数等。
-
训练与验证:进行模型训练,并在验证集上监控模型性能,以确保模型没有过拟合。
4. 微调实践
完整代码如下:
import pandas as pd
import re
import json# 通用函数:删除空格和换行符
def remove_whitespace_and_newlines(input_string):result = input_string.replace(" ", "").replace("\n", "").replace(".", "")return result# 通用函数:提取答案
def get_answers(text):text = remove_whitespace_and_newlines(text)pattern = re.compile(r'(\d)\s*([A-D])')matches = pattern.findall(text)res = []for match in matches:number_dot, first_letter = matchres.append(first_letter)return res# 通用函数:提取问题和选项
def get_questions(text):text = text.replace('\n', ' ')+' 'pattern = re.compile(r'(\d+\..*?)(A\..*?\s{2})([B-D]\..*?\s{2})([B-D]\..*?\s{2})(D\..*?\s{2})', re.DOTALL)matches = pattern.findall(text)questions_dict_list = []for match in matches:question, option1, option2, option3, option4 = matchpattern_question = re.compile(r'(\d+)\.(.*)')question_text = pattern_question.findall(question.strip())[0][1]options = {option1[0]: option1, option2[0]: option2, option3[0]: option3, option4[0]: option4}question_dict = {'question': question_text,'options': {'A': options.get('A', '').strip(),'B': options.get('B', '').strip(),'C': options.get('C', '').strip(),'D': options.get('D', '').strip()}}questions_dict_list.append(question_dict)return questions_dict_list# 生成英文提示文本
def get_prompt_en(text):prompt = f'''你是⼀个⾼考选择题出题专家,你出的题有⼀定深度,你将根据阅读文本,出4道单项选择题,包含题目选项,以及对应的答案,注意:不⽤给出原文,每道题由1个问题和4个选项组成,仅存在1个正确答案,请严格按照要求执行。
The reading text is mainly in English. The questions and answers you raised need to be completed in English for at least the following points:### 回答要求(1)Understanding the main idea of the main idea.(2)Understand the specific information in the text.(3)infering the meaning of words and phrases from the context### 阅读文本{text}'''return prompt# 处理英文数据集
def process_en(df):res_input = []res_output = []for id in range(len(df)):data_options = df.loc[id, '选项']data_answers = df.loc[id, '答案']data_prompt = df.loc[id, '阅读文本']data_options = get_questions(data_options)data_answers = get_answers(data_answers)data_prompt = get_prompt_en(data_prompt)if len(data_answers) == len(data_options):res = ''for id, question in enumerate(data_options):res += f'''{id+1}.{question['question']}{question['options']['A']}{question['options']['B']}{question['options']['C']}{question['options']['D']}answer:{data_answers[id]}'''+'\n'res_output.append(res)res_input.append(data_prompt)return res_input, res_output# 读取并处理英文数据集
df_en = pd.read_excel('训练集-英语.xlsx')
df_en = df_en.replace('.', '.', regex=True) \.replace('А.', 'A.', regex=True) \.replace('В.', 'B.', regex=True) \.replace('С.', 'C.', regex=True) \.replace('D.', 'D.', regex=True)en_input, en_output = process_en(df_en)# 生成中文提示文本
def get_prompt_cn(text):prompt = f'''你是⼀个⾼考选择题出题专家,你出的题有⼀定深度,你将根据阅读文本,出4道单项选择题,包含题目选项,以及对应的答案,注意:不⽤给出原文,每道题由1个问题和4个选项组成,仅存在1个正确答案,请严格按照要求执行。
The reading text is mainly in Chinese. The questions and answers you raised need to be completed in Chinese for at least the following points:### 回答要求(1)理解文章的主要意思。(2)理解文章中的具体信息。(3)根据上下文推断词语和短语的含义。### 阅读文本{text}'''return prompt# 处理中文数据集
def process_cn(df):res_input = []res_output = []for id in range(len(df)):data_options = df.loc[id, '选项']data_answers = df.loc[id, '答案']data_prompt = df.loc[id, '阅读文本']data_options = get_questions(data_options)data_answers = get_answers(data_answers)data_prompt = get_prompt_cn(data_prompt)if len(data_answers) == len(data_options):res = ''for id, question in enumerate(data_options):res += f'''{id+1}.{question['question']}{question['options']['A']}{question['options']['B']}{question['options']['C']}{question['options']['D']}answer:{data_answers[id]}'''+'\n'res_output.append(res)res_input.append(data_prompt)return res_input, res_output# 读取并处理中文数据集
df_cn = pd.read_excel('训练集-中文.xlsx')
cn_input, cn_output = process_cn(df_cn)# 数据集整合
df_new = pd.DataFrame({'input': cn_input+cn_input[:30]+en_input+en_input[:20], 'output': cn_output+cn_output[:30]+en_output+en_output[:20]})# 数据集格式转换导出
# 打开一个文件用于写入 JSONL,并设置编码为 UTF-8
with open('output.jsonl', 'w', encoding='utf-8') as f:# 遍历每一行并将其转换为 JSONfor index, row in df_new.iterrows():row_dict = row.to_dict()row_json = json.dumps(row_dict, ensure_ascii=False,)# 将 JSON 字符串写入文件,并添加换行符f.write(row_json + '\n')# 打印确认信息
print("JSONL 文件已生成")
三、模型训练
完成数据准备后,我们就可以利用这些数据进行模型的微调训练。这里使用了 Spark A-13B 的预训模型,这里的步骤和上一篇文章一模一样,按照流程使用即可;
1. 上传数据集
首先我们进入讯飞开放平台官网网页,点击新建数据集:
这里我们配置一下数据集的相关信息;
接着我们上传之前制作的数据集,并且选择正确的问题和答案字段;
等待数据集上传成功,然后开始训练;
进入训练配置界面,我们配置模型名称,预训练模型,学习率,数据集等信息;
等待模型训练成功,这个过程需要至少30分钟这里我们可以喝杯咖啡等待一下!
如果大家没有应用请到 https://console.xfyun.cn/app/myapp 点击创建创建一个。
点击发布。稍等片刻,模型即可发布成功;内容如下:
这个界面我们可以可以看到我们发布模型的相关参数,我们要保存好以下参数,用于后续测试使用:
serviceId:---------
resourceId:-----------
APPID:------
APIKey:---------
APISecret:------------
至此,模型训练部分完毕!
四、本地测试
模型训练完成后,我们需要对模型进行本地测试,确保其生成的题目符合预期。
以下是本地测试的代码,通过向模型提供一个 prompt
,我们可以查看模型生成的题目和答案。
from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler
from sparkai.core.messages import ChatMessageSPARKAI_URL = 'wss://xingchen-api.cn-huabei-1.xf-yun.com/v1.1/chat'
#星火认知大模型调用秘钥信息,请结合飞书文档,前往讯飞微调控制台(https://training.xfyun.cn/modelService)查看
SPARKAI_APP_ID = 'xxxxxxx'
SPARKAI_API_SECRET = 'xxxxxxx'
SPARKAI_API_KEY = 'xxxxxxxxxxxxxxxxxxx'
serviceId = 'xxxxxxxxx'
resourceId = 'xxxxxxxxx'if __name__ == '__main__':spark = ChatSparkLLM(spark_api_url=SPARKAI_URL,spark_app_id=SPARKAI_APP_ID,spark_api_key=SPARKAI_API_KEY,spark_api_secret=SPARKAI_API_SECRET,spark_llm_domain=serviceId,model_kwargs={"patch_id": resourceId},streaming=False,)messages = [ChatMessage(role="user",content=prompt)]handler = ChunkPrintHandler()a = spark.generate([messages], callbacks=[handler])print(a.generations[0][0].text)
运行结果如下:
输出正常!
希望这篇博客对各位读者进行模型微调有所帮助。
参考链接
- 代码文档
- 比赛链接
如果觉得我的文章对您有帮助,三连+关注便是对我创作的最大鼓励!或者一个star🌟也可以😂.
相关文章:
LLM微调(精讲)-以高考选择题生成模型为例(DataWhale AI夏令营)
前言 你好,我是GISer Liu😁,一名热爱AI技术的GIS开发者,上一篇文章中,作者介绍了基于讯飞开放平台进行大模型微调的完整流程;而在本文中,作者将对大模型微调的数据准备部分进行深入;…...
安全基础学习-RC4加密算法
这里仅仅记录一些基础的概念。后期有需求进一步扩展。 RC4 是一种对称流加密算法,由罗恩里维斯特(Ron Rivest)于1987年设计。RC4 的设计目的是提供一种简单且高效的加密方法。尽管 RC4 曾经广泛使用,但它的安全性在现代已受到质疑…...
雨云宁波电信大带宽服务器测评(非广告)
提示:本文非广告,非宣传! 本文长期更新地址:雨云宁波电信大带宽服务器测评(非广告) 雨云现在有一个国内的新区——宁波 宣传的是电信大带宽,可附加100G防御,采用NVME,和铂…...
2024年,最新前端趋势
随着技术的不断发展,前端开发领域在2024年迎来了新的趋势和挑战。对于开发者来说,紧跟这些趋势不仅能提升技术水平,还能在激烈的市场竞争中脱颖而出。今天,我想向大家介绍一款在这波趋势中脱颖而出的开发神器——MemFire Cloud。这…...
Linux静态进程和动态进程查看管理
1.静态进程的查看PS PPID:谁启动的父亲ID USER:运行进程的用户名称 PID:进程ID %CPU:CPU的占用比例占用资源 %MEM:内存使用的占用比例 VSZ:占用虚拟内存多少 RSS:占用实际内存多少 TTY:…...
CPU飙升 怎么定位问题
传统的方法 【top】 查看所有进程占系统CPU的排序,定位是哪个进程搞的鬼。PID那一列就是进程号。 【top -Hp pid】 定位进程中使用 CPU 最高的线程tid 【printf ‘0x%x’ tid】 线程 tid 转化 16 进制,例如printf ‘0x%x’ 11882 得到16进制的 0x2e6a 【jstack…...
The Sandbox 游戏制作教程第 4 章|使用装备制作游戏,触发独特互动
欢迎回到我们的系列,我们将记录 The Sandbox Game Maker 的 “On-Equip”(装备)功能的多种用途。 如果你刚加入 The Sandbox,On-Equip 功能是 “可收集组件”(Collectable Component)中的一个多功能工具&a…...
JS 和 JSX、TS 和 TSX 的区别
1. JS(JavaScript) 定义与特性: JavaScript(简称JS)是一种轻量级、解释型或即时编译型的编程语言。它基于原型编程、多范式的动态脚本语言,支持面向对象、命令式、声明式、函数式编程范式。JavaScript 是…...
25款极氪007上市,小米SU7就不该买?
文 | AUTO芯球 作者 | 谦行 我是刚刚才知道 买小米SU7的原来是盯着他这两个功能 可爱的小女孩喊小爱同学帮她停个车 妈妈给她说SU7自己能停好,她还叮嘱一句“小爱同学你给我好好停” SU7滴溜溜的就停在车位上,全程不到一分钟 视频属实温馨&#x…...
旋转字符串 | LeetCode-796 | 模拟 | KMP | 字符串匹配
🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 🕹️KMP算法练习题 LeetCode链接:796. 旋转字符串 文章目录 1.题目描述🍑2.题解🫐2.1 暴力解法🫒2.2 模拟…...
网络安全测试工具Burp Suite基本使用
一、介绍 Burp Suite 是一款由 PortSwigger 开发的集成网络安全测试工具,广泛用于渗透测试和漏洞扫描。它提供了一系列功能强大的工具和功能,帮助安全研究人员和渗透测试人员识别和修复 Web 应用程序中的安全漏洞。以下是 Burp Suite 的主要功能和特点&…...
使用pytest+selenium编写网页UI自动化脚本和用例
1 UI自动化测试 UI自动化测试(User Interface Automation Testing)是一种通过编写脚本或使用自动化测试工具,对界面(UI)进行自动化测试的方法。原理主要是模拟用户打开客户端或网页的UI界面,自动化执行用户…...
新能源遇“秋老虎”,8月第二周销量集体下滑,问界惨遭腰斩
文/王俣祺 导语:随着日前7月份乘用车销量的公布,我们发现7月并没有因6月各车企的“冲量”行为迎来反噬,对于这种“淡季不淡”的现象市场上一片看好。但从近日公布的8月销量数据来看,人们对于“秋老虎”的恐怖可以说是一无所知。随…...
SEO模板网站的wordpress主题最适合google外贸SEO
在寻找最适合Google外贸SEO的WordPress主题时,有几个关键因素需要考虑:速度、SEO友好性、多语言支持、以及是否易于定制。以下是一些推荐的WordPress主题,它们不仅速度快,而且对SEO非常友好,非常适合外贸网站ÿ…...
fetch跨域请求数据的前端设置和后端php的header设置
跨源请求,也称为CORS(Cross-Origin Resource Sharing)请求,是Web开发中常见的一种需求,允许一个网页的JavaScript代码向与该网页不同源的服务器发出HTTP请求。以下是使用JavaScript中的fetch函数进行跨源请求的一个基本…...
Ted靶机
信息收集: 靶机地址:https://www.vulnhub.com/entry/ted-1,327/ (1)ip扫描 nmap 192.168.254.0/24 -sn | grep -B 2 00:0C:29:FF:7F:9A (2)端口扫描 nmap -p- -A 192.168.254.159 (3&#x…...
HarmonyOS ArkTS 构建布局
在 HarmonyOS 中,ArkTS 是一种基于 TypeScript 的编程语言,专为开发 HarmonyOS 应用而设计。构建布局是开发应用的关键步骤之一。以下是如何在 ArkTS 中构建布局的基本指南。 1. 创建项目和页面 首先,确保已经创建了一个 HarmonyOS 项目。如…...
yolov5详解(二):通过yaml文件构建完整模型
依然拿yolov5l v6.0版本来讲解 1. yaml文件 以下是yolov5l.yaml文件内容 # YOLOv5 🚀 by Ultralytics, GPL-3.0 license# Parameters nc: 80 # number of classes depth_multiple: 1.0 # model depth multiple width_multiple: 1.0 # layer channel multiple …...
8月8日学习笔记 python基础
1.环境 python2, python3 yum list installed|grep python yum -y install python3 # 最新安装3.12可以使⽤源码安装,教程是在第⼀个星期pdf python3 --version 3.6.8 #进⼊到python的编辑状态 python3 # 如果直接输⼊python,也会进⼊到pyth…...
电动自行车出海黑马Avento独立站拆解(上)丨出海笔记
这次我们来拆解一个电动自行车的独立站 为什么选电动自行车? 因为全球疫情,带来出行问题——避免聚集,大家都减少了公共交通工具,而改为自行车,电动自行车...... 君不见疫情之后无论是出行自行车,还是健…...
Gerrit 使用教程
一、Gerrit简介 Gerrit,一种开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的程序员,可以相互审阅彼此修改后的代码,决定是否能够提交,退回或是继续修改。它使用版本控制系统Git作为底…...
sudu提权命令账号安全控制(su命令)执行单个命令并返回原用户、执行多个命令并返回原用户、保持当前环境变量、配置文件/etc/sudoers
su命令 su 命令是 Linux 和 Unix 系统中用于切换用户身份的命令。它允许一个用户变成另一个用户并以该用户的权限运行命令或启动新的 shell 会话。 基本语法 su [选项] [用户名] 用途: su[选项][-][用户[arg]…] 将有效用户id和组id更改为user的id。 A merely-im…...
【线性代数】【二】2.7 矩阵的秩
文章目录 前言一、向量组的秩二、矩阵的秩三、矩阵的可逆性与秩总结 前言 在前面的内容中,我们已经陆陆续续地给出了秩的概念。本文可以看成是对以往概念与性质的总结,那专门针对秩进行分析。 一、向量组的秩 在笔记2.2中,我们学习了极大线…...
计算机网络部分基础知识
网络协议的意义 单台主机内部的设备之间需要发送和接收消息,那么和相隔很远的两台主机之间发送消息有什么区别呢?两台主机通过网络发送消息,相当于两个网卡设备之间进行通信,最大的区别在于距离变长了。而距离变长带来的结果就是&…...
WESWOO合作的出海企业(一)
分享一些我们在shopify开发上合作的品牌介绍1. **韶音科技(SHOKZ)**: - WESWOO为韶音科技设计了多个产品页面,如OPENFIT、OPENSWIMPRO等,这些页面展示了产品特点、滑动特效、比较功能等,并通过品牌VI统一&a…...
vue 项目中 使用vxe-grid 表格中给表格的表头设置特殊的格式 , 并且给指定的列文字设置颜色
项目场景: 相关背景: vue 项目中 使用vxe-grid 表格中给表格的表头设置特殊的格式,并为指定的列文字设置颜色 实现方案: 具体实现方法及步骤: 一、给表格的表头设置特殊的格式 实现方式一: :header-row-s…...
基于SpringBoot的企业资产管理系统
TOC springboot117基于SpringBoot的企业资产管理系统 系统概述 1.1 研究背景 智慧养老是面向居家老人、社区及养老机构的传感网系统与信息平台,并在此基础上提供实时、快捷、高效、低成本的,物联化、互联化、智能化的养老服务。 随着科技进步&#…...
ps快捷键,学习
ps快捷键图片变的特别大,归位,ctrl0背景图层锁住 选中图层,点击顶部图层,新建,背景图层,确定,就解开了,想在锁住,在点一次...
python代码模拟服务器实验2:IO多路复用select
实验代码的环境是在windows,和linux是有差别的 在Windows系统上,select模块需要传递特定的对象类型,而不是文件描述符。在Unix-like系统上,文件描述符是一个整数,而在Windows上,select期望得到的是socket对…...
修改ubuntu的终端显示语言为英文,界面保持为中文
修改ubuntu的终端显示语言为英文,界面保持为中文 sudo nano /etc/default/locale LANGzh_CN.UTF-8nano ~/.bashrc 在文件未尾加入下列两行 export LANGen_US.UTF-8 export LANGUAGEen在终端执行 source ~/.bashrc之后提示语言就变成英文了...
织梦网站广告代码教程/肇庆seo
1. 效果示例图 2. 创建方法 (1)第一种方法与ListView等普通控件一样,直接在布局文件中添加ExpandableListView控件即可。 (2)第二种方法则是创建一个Activity继承自ExpandableListActivity,而后通过getExpa…...
杭州萧山网站建设/电商平台链接怎么弄
DataInputStream 是数据输入流。它继承于FilterInputStream。DataInputStream 是用来装饰其它输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。应用程序可以使用DataOutputStream(数据输出流)写入由DataInputStream(数据输入流)读…...
找网站开发/开发新客户的十大渠道
S参数描述了RF网络的基本特征,其主要类型有小信号、大信号、脉冲、冷模式和混合模式S参数。 引言 本文延续之前的一系列短文,旨在为非RF工程师讲解RF的奥秘。其中一些RF文章如下:“RF揭秘——了解波反射”,探讨了波反射…...
静态网站建设参考文献/网站制作公司
Android403R2模拟器安装在最新的Android 4.0.3 R2模拟器中,已经加入了GPU支持,可以支持OpenGL ES 2.0标准,让开发者可以借助模拟器来测试自己的OpenGL游戏。在去年新增了摄像头支持之后,现在的新版模拟器也加入了包括多点触摸输入…...
wordpress smtp不成功/中国站长素材网
我正在运行NodeJS服务器,该服务器使用综合路由来提供文件index.html。 在该文件中,我链接到同一目录中的javascript文件。 该javascript文件未正确加载。 我的控制台中的错误为"未捕获的SyntaxError:意外的令牌这是我的代码server.jsvar…...
基于拍卖的拍卖网站开发/seo网站优化经理
一. 苹果ios官网 1.主页 http://developer.apple.com/ios 官网上的入门教程 http://developer.apple.com/library/ios/#referencelibrary/GettingStarted/RoadMapiOSCh/chapters/Introduction.html 2.管理设备列表页 (右上角【IOS provisioning Portal】->左侧…...