当前位置: 首页 > news >正文

day35大模型应用开发-模型微调

为什么需要微调?

在开始学习微调之前,大家首先还是要搞清楚为什么要微调?在什么情况下需要微调?

  • 让模型更懂“专业话”:通用模型就像一个“万事通”,它学过很多东西,但对一些特别专业的领域(比如医学、法律、金融)可能不会特别精通。通过微调,我们可以给模型“补课”,让它学会这些专业领域的知识,从而在这些领域表现得更好。
  • 让模型适应不同的“工作”:不同的任务对模型的要求不一样。比如,有些任务需要模型判断一段文字是好是坏(比如评论是正面还是负面),这就需要模型输出一个明确的答案;而有些任务需要模型写一篇文章或者回答问题,这就需要模型生成流畅、连贯的文字。微调可以让模型根据任务的需求调整自己的能力,更好地完成这些“工作”。
  • 让模型表现得更“平衡”:通用模型在很多通用任务上表现不错,但在一些特定任务上可能会“失衡”。比如,它可能会对某些问题过于敏感,或者对某些问题反应不够。通过微调,我们可以调整模型的“参数”,就像调整汽车的引擎一样,让它在特定任务上表现得更“平衡”。
  • 保护数据的隐私和安全:有时候,我们的数据可能包含一些敏感信息,比如公司的机密文件或者个人隐私。这些数据不能随便上传到云端,否则可能会泄露。微调允许我们在自己的电脑或服务器上训练模型,这样数据就一直掌握在自己手里,不用担心泄露。
  • 节省时间和成本:如果从头开始训练一个模型,就像从零开始盖一座房子,需要很多时间和资源。而微调就像是在现成的房子里进行装修,只需要调整一下细节,就可以让它更适合自己的需求。这样不仅节省时间和成本,而且微调后的模型在特定任务上表现更好,用起来也更高效。

长文本 & 知识库 & 微调的区别

现在各大模型均已支持超长上下文,其容量从最初的4K逐步提升至如今的200K。那么,我们是否能够通过设计一套较为完善的提示词来妥善应对这些问题呢?

当下,各类知识库工具展现出极高的灵活性,我们可否自行搭建一个极为全面的数据库,以此解决相关难题呢?想必这是许多小伙伴心中存在的疑惑。

接下来,我们就深入剖析长文本、知识库以及微调之间的差异,并探讨在不同场景下应当如何做出合适的选择。为便于大家更好地理解,后续我们将把模型回答问题的过程形象地类比为参加一场考试。

长文本

通俗理解:你参加了一场考试,题目是一篇超长的阅读理解。这篇文章内容很多,可能有几千字,你需要在读完后回答一些问题。这就像是“长文本”的任务。模型需要处理很长的文本内容,理解其中的细节和逻辑,然后给出准确的答案。比如,模型要读完一篇长篇小说,然后回答关于小说情节的问题。

优点:

  • 连贯性强:能够生成或理解长篇幅的内容,保持逻辑和语义的连贯性。
  • 适合复杂任务:适合处理需要深入理解背景信息的任务,比如长篇阅读理解或复杂的文章生成。

缺点:

  • 资源消耗大:处理长文本需要更多的计算资源和内存,因为模型需要同时处理大量信息。
  • 上下文限制:即使是强大的模型,也可能因为上下文长度限制而丢失一些细节信息。

适用场景:

  • 写作助手:生成长篇博客、报告或故事。
  • 阅读理解:处理长篇阅读理解任务,比如学术论文或小说。
  • 对话系统:在需要长篇回答的场景中,比如解释复杂的概念。

知识库

通俗理解:你参加的是一场开卷考试,你可以带一本厚厚的资料书进去。考试的时候,你可以随时翻阅这本资料书,找到你需要的信息来回答问题。这就像是“知识库”的作用。知识库就像是一个巨大的资料库,模型可以在里面查找信息,然后结合这些信息来回答问题。比如,你问模型:“爱因斯坦的相对论是什么?”模型可以去知识库中查找相关内容,然后给出详细的解释。

优点:

  • 灵活性高:可以随时更新知识库中的内容,让模型获取最新的信息。
  • 扩展性强:不需要重新训练模型,只需要更新知识库,就能让模型回答新的问题。

缺点:

  • 依赖检索:如果知识库中的信息不准确或不完整,模型的回答也会受影响。
  • 实时性要求高:需要快速检索和整合知识库中的信息,对性能有一定要求。

适用场景:

  • 智能客服:快速查找解决方案,回答用户的问题。
  • 问答系统:结合知识库回答复杂的、需要背景知识的问题。
  • 研究辅助:帮助研究人员快速查找相关文献或数据。

微调

通俗理解:你在考试之前参加了一个课外辅导班,专门学习了考试相关的知识和技巧。这个辅导班帮你复习了重点内容,还教你如何更好地答题。这就像是“微调”。微调是让模型提前学习一些特定的知识,比如某个领域的专业术语或者特定任务的技巧,这样它在考试(也就是实际任务)中就能表现得更好。比如,你让模型学习了医学知识,那么它在回答医学相关的问题时就能更准确。

优点:

  • 性能提升:显著提升模型在特定任务或领域的表现。
  • 定制化强:可以根据需求调整模型的行为,比如改变回答风格或优化任务性能。

缺点:

  • 需要标注数据:需要准备特定领域的标注数据,这可能需要时间和精力。
  • 硬件要求高:微调需要一定的计算资源,尤其是 GPU。

适用场景:

  • 专业领域:如医疗、法律、金融等,让模型理解专业术语和逻辑。
  • 特定任务:如文本分类、情感分析等,优化模型的性能。
  • 风格定制:让模型生成符合某种风格的内容,比如幽默、正式或古风。

微调的基本流程

以下是一个常见的模型微调的过程:

  • 选定一款用于微调的预训练模型,并加载
  • 准备好用于模型微调的数据集,并加载
  • 准备一些问题,对微调前的模型进行测试(用于后续对比)
  • 设定模型微调需要的超参数
  • 执行模型微调训练
  • 还使用上面的问题,对微调后的模型进行测试,并对比效果
  • 如果效果不满意,继续调整前面的数据集以及各种超参数,直到达到满意效果
  • 得到微调好的模型

在这个流程里,有几个基本概念需要大家提前了解,我们还用上面考试的例子举例,微调模型的过程就像是给一个已经很聪明的学生“补课”,让他在某个特定领域变得更擅长。

概念1:预训练模型

预训练模型就是我们选择用来微调的基础模型,就像是一个已经受过基础教育的学生,具备了基本的阅读、写作和理解能力。这些模型(如 GPT、DeepSeek 等)已经在大量的通用数据上进行了训练,能够处理多种语言任务。选择一个合适的预训练模型是微调的第一步。

一般来说,为了成本和运行效率考虑,我们都会选择一些开源的小参数模型来进行微调,比如 Matellama、阿里的 qwen,以及爆火的 DeepSeek(蒸馏版)

image-20250810095734997

概念2:数据集

数据集就是我们用于模型微调的数据,就像是“补课”时用的教材,它包含了特定领域的知识和任务要求。这些数据需要经过标注和整理,以便模型能够学习到特定领域的模式和规律。比如,如果我们想让模型学会算命,就需要准备一些标注好的命理学知识作为数据集。

一般情况下,用于模型训练的数据集是没有对格式强要求的,比如常见的结构化数据格式:JSON、CSV、XML 都是支持的。数据集中的数据格式也没有强要求,一般和我们日常与 AI 的对话类似,都会包括输入、输出。

image-20250810095904327

为了模型的训练效果,有时候我们也会为数据集添加更丰富的上下文,比如在下面的数据集中,以消息(messages)进行组织,增加了 System(系统消息,类似于角色设定),user(用户消息)、assistant(助手回复消息)的定义,这样就可以支持存放多轮对话的数据,这也是 OPEN AI 官方推荐的数据集格式:

image-20250810095932750

大家练习或测试的话可以去网上找一些公开数据集,这里推荐两个可以获取公开数据集的网站:

第一个:Hugging Face,我们可以把 Hugging Face 平台比作 AI 领域的 GitHub,它为开发者提供了一个集中化的平台,用于分享、获取和使用预训练模型和数据集。就像 GitHub 是代码共享和协作的中心一样,Hugging FaceAI 模型和数据共享的中心。

第二个:选择国内的一些类似社区,比如 GitCode 的 AI 社区:https://ai.gitcode.com/datasets

概念3:超参数

超参数就像是你在给模型 “补课” 之前制定的教学计划和策略。它们决定了你如何教学、教学的强度以及教学的方向。如果你选择的教学计划不合适(比如补课时间太短、讲解速度太快或复习策略不合理),可能会导致学生学习效果不好。同样,如果你选择的超参数不合适,模型的性能也可能不理想。

通过平台微调大模型

目前市面上很多 AI 相关平台都提供了在线微调模型的能力,比如我们以最近比较火的硅基流动为例。网址是:https://cloud.siliconflow.cn/me/fine-tune

image-20250810100656414

选择预训练模型

我们尝试新建一个微调任务,可以看到目前硅基流动支持微调的模型还不是很多,而且也没看到 DeepSeek 相关模型,这里我们选择 Qwen2.5-7B 来测试一下:

Snip20250826_34

准备数据集进行上传

Snip20250826_35

我们目前硅基流动仅支持 .jsonl 格式的数据集:

JSONL 文件(JSON Lines)是一种特殊的 JSON 格式,每一行是一个独立的 JSON 对象,JSONL 文件是“扁平化”的,彼此之间没有嵌套关系。

image-20250826202822328

Json格式:

image-20250826202923190

Jsonl格式:

image-20250826203032366

且需符合以下要求:

image-20250826200234014

验证数据集

数据集上传完成后,下一步就是输入一个微调后模型的名字,以及设置验证数据集。

image-20250826200401925

验证数据集 就是从我们的整体数据中划分出来的一部分数据。它通常占总数据的一小部分(比如 10%~20%)。这部分数据在训练过程中不会被用来直接训练模型,而是用来评估模型在未见过的数据上的表现。

简单来说,验证数据集就像是一个“模拟考试”,用来检查模型是否真正学会了知识,而不是只是“背诵”了训练数据。这里我们选择默认的 10% 即可。

超参数设置

最后就是设置一些模型训练的 “超参数” 了,给出可以设置的参数非常多,我们这里只介绍最关键的三个参数:

image-20250826200606964

为了方便理解,我们还以考试前复习的例子来进行讲解,假设你正在准备一场重要的考试,你有一本厚厚的复习资料书,里面有 1000 道题目。你需要通过复习这些题目来掌握考试内容。

训练轮数(Number of Epochs) Epoch 是机器学习中用于描述模型训练过程的一个术语,指的是模型完整地遍历一次整个训练数据集的次数。换句话说,一个 Epoch 表示模型已经看到了所有训练样本一次。

通俗来说,训练轮数就是我们从头到尾复习这本书的次数。

  • 轮数少:比如你只复习一遍,可能对书里的内容还不是很熟悉,考试成绩可能不会太理想。
  • 轮数多:比如你复习了 10 遍,对书里的内容就很熟悉了,但可能会出现一个问题——你对书里的内容背得很熟,但遇到新的、类似的问题就不会解答了,简单讲就是 “学傻了“,只记住这本书里的内容了,稍微变一变就不会了(过拟合)。

学习率(Learning Rate) 决定了模型在每次更新时参数调整的幅度,通常在 (0, 1) 之间。也就是告诉模型在训练过程中 “学习” 的速度有多快。学习率越大,模型每次调整的幅度就越大;学习率越小,调整的幅度就越小。

image-20250826200749611

通俗来说,学习率可以用来控制复习的“深度”,确保不会因为调整幅度过大而走偏,也不会因为调整幅度过小而进步太慢。如果你每次复习完一道题后,你会根据答案和解析调整自己的理解和方法。

  • 学习率大(比如0.1):每次做完一道题后,你会对解题方法进行很大的调整。比如,你可能会完全改变解题思路。优点是进步可能很快,因为你每次都在进行较大的调整。缺点就是可能会因为调整幅度过大而“走偏”,比如突然改变了一个已经掌握得很好的方法,导致之前学的东西都忘了。
  • 学习率小(比如0.0001):每次做完一道题后,你只对解题方法进行非常细微的调整。比如,你发现某个步骤有点小错误,就只调整那个小错误。优点是非常稳定,不会因为一次错误而“走偏”,适合需要精细调整的场景。缺点就是进步会很慢,因为你每次只调整一点点。

批量大小(Batch Size) 是指在模型训练过程中,每次更新模型参数时所使用的样本数量。它是训练数据被分割成的小块,模型每次处理一个小块的数据来更新参数。

通俗来说,批量大小可以用来平衡复习速度和专注度,确保既能快速推进复习进度,又能专注细节。假设你决定每次复习时集中精力做一定数量的题目,而不是一次只做一道题。

  • 批量大(比如100):每次复习时,你集中精力做100道题。优点是复习速度很快,因为你每次处理很多题目,能快速了解整体情况。缺点是可能会因为一次处理太多题目而感到压力过大,甚至错过一些细节。
  • 批量小(比如1):每次复习时,你只做一道题,做完后再做下一道。优点是可以非常专注,能仔细分析每道题的细节,适合需要深入理解的场景。缺点就是复习速度很慢,因为每次只处理一道题。

在实际的微调场景中,我们需要通过一次次的调整这些参数,最后验证对比模型效果,来产出效果最好的微调模型。当然,如果你是小白用户,这些参数简单理解就行了,刚开始不需要调整这些参数,默认推荐的一般可以满足大部分场景的需求。

微调后调用

微调完成后,我们可以得到一个微调后模型的标识符:

image-20250826201040673

后续我们可以通过接口(/chat/completions)即可直接调用微调后的模型:

from openai import OpenAI
client = OpenAI(api_key="您的 APIKEY", # 从https://cloud.siliconflow.cn/account/ak获取base_url="https://api.siliconflow.cn/v1"
)messages = [{"role": "user", "content": "用当前语言解释微调模型流程"},
]response = client.chat.completions.create(model="您的微调模型名", #上图中的最终模型messages=messages,stream=True,max_tokens=4096
)for chunk in response:print(chunk.choices[0].delta.content, end='')

我们现在已经了解了模型微调需要的大部分基础概念,也通过硅基流动平台走完了一个完整的微调流程,但是在这个过程中我们发现有几个问题:

  • 可以选择的基础模型太少了,没有我们想要的 DeepSeek 相关模型
  • 模型训练过程中的 Token 消耗是要自己花钱的,对于有海量数据集的任务可能消耗比较大
  • 微调任务触发不太可控,作者在测试的时候创建的微调任务,等了一天还没有被触发,可能是硅基流动最近调用量太大,资源不足的问题。

为了解决这个问题,最终我们还是要使用代码来微调,这样我们就能灵活选择各种开源模型,无需担心训练过程中的 Token 损耗,灵活的控制微调任务了。

微调数据集的常见分类

很多同学弄不清楚,给模型喂的数据究竟需要什么样的格式,实际上就是还没分清楚几种常见的微调任务类型。为了在不同的业务场景下解决不同的问题,我们可能采取的微调任务类型是不一样的,那所用的数据集格式肯定也会有所差别。

"监督微调“是目前应用最广泛也是最常用的微调技术,当然目前我们普通人想在特定行业里去微调自己的大模型,最常用的也是监督微调,所以监督微调的数据集格式是我们后续重点学习的内容。

接下来,我们就从预训练开始,逐步带领大家对不同微调任务和其对应数据集格式进行详细说明!

预训练

从零开始训练一个模型,一般这个流程叫做预训练,这个过程的目的就是让模型掌握语言的通用规律,以及基本的语言理解能力。

目前我们市面上主流的大模型,比如 ChatGPT、DeepDeek 等等,都属于 “自回归模型”,而 “自回归模型” 的本质就是:用过去的自己来预测未来的自己

我们都知道,大模型输出文本的时候是按照 Token 来输出的。

Token 简单理解就是把句子拆成最小语义单元(如中文拆字 / 词,英文拆词或子词)。

当你给定模型一个问题时,模型先会预测出第一个 Token,然后根据问题和第一个 Token 再去预测第二个 Token,知道整句话输出完成,比如下面的例子:

image-20250907080554003

回答被拆分出了 4 个 Token,每个 Token 都是根据前面的问题 + 已经输出的 Token 预测出来的。 那怎么能让模型把后面输出的每个 Token 预测的更准确呢?这就要靠我们的预训练数据集了,在预训练的数据集中,这些关键字出现在一起的次数越多,那模型输出的概率越大。所以我们的数据集越丰富,模型预测 Token 输出的准确率就越高,最终的输出效果也就更好。

所以在预训练的过程中,我们一般用海量非结构化文本(比如书籍、网页、对话),通过「预测下一个词」来训练模型,这也就意味着预训练的数据集格式是没有明确要求的,例如下面这些数据我们可以直接用于训练:

image-20250907080635145

预训练的过程,就像婴儿学说话,听到的是各种声音(非结构化),不管是什么,直接让他多听,慢慢多就能学会语言规律;因此预训练的过程我们可以理解成一个无需人工监督,自己学习和锻炼能力的过程,对应的,想要让模型具备特定的能力,就要用到监督微调了。

监督微调

监督微调(Supervised Fine-Tuning,SFT),顾名思义就是需要人去监督微调的过程。

怎么 “监督” 呢?就是通过标注过的数据直接教模型做事,适合有明确目标的任务。最简单的,我们直接告诉模型输入对应的输出是什么就可以了。

比如:我们想训练一个中英翻译模型,把英文翻译为中文就是一个非常明确的需求场景,所以在数据集里只需要有输入、输出就可以了:

{"input": "Hello", "output": "你好"}

指令微调

那假如我们想让模型具备多种语言理解的能力呢,这时候只靠两个字段就不够了,因为在 Input 是同样一个词语的时候,根据我们想让模型完成的不同任务,output 可能是不一样的,这时候我们就要多引入一个指令的概念,比如这个数据集:

[{"instruction": "将这句英文翻译成法语","input": "Hello, how are you?","output": "Bonjour, comment ça va ?"},...
]

我们告诉模型明确的指令:将英文翻译为法语,再将 Input(英文)、Output(法语)告诉模型, 模型就能准确理解要做什么了,这就是指令微调。

指令微调常见的业务场景:

  • 智能教育:实现作业辅导、规划个性化学习路径、辅助语言学习。
  • 智能办公:可处理文档、邮件,进行日程管理。
  • 智能翻译:应用于专业领域翻译、特定场景翻译及多语言交互。
  • 数据分析:让模型根据分析需求指令,对数据进行准确解读和洞察。

指令微调典型开源数据集(包含指令、输入、输出字段):

```Alpaca` 数据集:由斯坦福大学创建,通过微调模型生成,包含约 5.2 万个指令跟随数据样本。涵盖多种任务,如常识问答、文本生成等,助力模型在指令理解和生成方面优化。数据集地址:https://huggingface.co/datasets/shibing624/alpaca-zh``

image-20250907081257899

指令微调的数据集制作相对还是比较简单的,因为我们要执行的任务一般很明确,往往也有比较明确的答案了,比如想要微调模型在翻译方面的能力,那就用现成的翻译 API 来构造数据集;想要微调模型在数学解题方面的能力,其实也有现成的题目 + 答案可以用来构造。所以指令微调场景的数据集一般不太难做,主要进行一些格式转换的工作即可。

对话微调

另外一种常见的微调任务就是对话微调。

对话微调(Dialogue Tuning) 是通过多轮对话数据训练模型生成连贯、符合语境的回复,强调对话历史的上下文理解和回复的自然流畅性。其核心在于教会模型处理对话中的逻辑关系、情感表达和角色身份,对话微调的数据集通常包含对话的上下文以及对应的回复。

[{"dialogue": [{"role": "user", "content": "今天天气怎么样?"},{"role": "assistant", "content": "北京今日多云转晴,气温22℃,适合户外活动。"},{"role": "user", "content": "那适合去长城吗?"},{"role": "assistant", "content": "长城景区海拔较高,建议携带外套,注意防晒。"}]},...
]

对话微调数据集的核心特点:包含多轮对话上下文、标注角色身份,注重回复连贯性与逻辑性。通过这样的数据,模型可以学习到在不同对话场景下如何生成合适的回复,从而提高对话的连贯性和相关性。

对话微调常见的业务场景:

  • 智能客服系统:提升客服机器人在处理用户咨询时的对话能力,能够更准确地理解用户意图并提供解决方案。
  • 聊天机器人:让聊天机器人更自然地与用户进行多轮对话,提高用户体验。
  • 语音助手:优化语音助手在语音交互中的对话表现,使其更符合用户的期望。

对话微调典型开源数据集:

image-20250907081649028

数据集地址:https://huggingface.co/datasets/philschmid/guanaco-sharegpt-style?

一个用于训练对话模型的多语言问答数据集,其内容结构和风格符合 ShareGPT 对话格式:数据集中的每个样本为一个对话轮次,包含人类提问和模型回答,数据覆盖多语言(英语、西班牙语、中文、俄语等)和多样化领域。

对话微调的数据集制作也不困难,一般可从在线聊天平台、客服对话记录、或者一些公开的访谈记录来获取数据,也能通过众包方式让标注人员模拟对话生成,只需整理为特定格式,如标注对话角色、意图等。

领域适配

接下来,可能是最近我见过最多的大家对于微调的一类诉求和场景,基于微调让模型对特定领域进行适配。预训练的模型虽然基于海量数据具备了通用的文字理解和生成能力,但是由于预训练的数据集在特定领域可能并不会覆盖的那么全面,这些模型在某些特定领域或任务上的表现可能并不理想,这时候就需要进行领域适配微调。

领域适配(Domain Adaptation)是指将模型在特定领域的数据上进行微调,使其更好地适应特定领域的任务和需求。

怎么进行领域适配呢?我们需要在特定领域的数据集上对模型进行训练,这些数据集通常包含该领域的专业术语、特定格式和相关任务的标注。例如,在医疗领域,数据集可能包含病历文本、医学术语以及对应的诊断结果等信息。

[{"instruction": "分析患者的症状描述","input": "55岁男性,持续性胸骨后疼痛3小时,含服硝酸甘油无效","output": "可能诊断:急性心肌梗死(STEMI),建议立即行心电图检查及心肌酶谱检测","domain": "医疗"},{"instruction": "解释法律条款","input": "《民法典》第1032条","output": "该条款规定自然人享有隐私权,任何组织或个人不得以刺探、侵扰、泄露、公开等方式侵害他人隐私权","domain": "法律"},...
]

领域适配数据集的核心特点:领域术语标注(如医学本体库、法律术语库)、复杂规则建模(如药物相互作用、合同条款逻辑)、场景化数据增强(如模拟问诊对话、合同审查流程);

领域适配典型的业务场景:

  • 医疗领域适配:用于病历分析、疾病诊断辅助、医疗文献检索等。
  • 法律领域适配:辅助法律文件分析、案例检索、合同审查等。
  • 金融领域适配:用于风险评估、市场分析报告生成、金融产品推荐等。

领域适配典型开源数据集:

image-20250907081907876

数据集地址:https://huggingface.co/datasets/qiaojin/PubMedQA

基于 PubMed 文献的医学问答数据集,包含医学研究相关问题,适合医疗信息抽取与领域适配任务。

在领域适配的任务上,数据集的准备相对就困难一点了,首先我们可以尝试去一些开源数据集平台(如 HuggingFace) 上检索是否有复合我们需求的数据集,如果没有找到合适的,或者开源数据集无法完全满足我们的需求的时候,可能就得靠我们自己的一些领域文献来构造数据集。

将领域文献构造成数据集,一般就两个途径:

  • 第一个就是靠纯人工整理,或者与领域专家合作标注数据(可以借助一些三方的标注平台),将数据处理为模型可接受的格式,可能涉及术语标准化等工作。
  • 第二个就是借助 AI 辅助生成,注意这里 AI 起到的作用只是辅助和提效,并不能完全自动化,就算大家真的能够借助某些工具全自动将领域文献转化成数据集,我也不建议大家直接用,在不经过人工二次确认的情况下,质量肯定难以保障,最终模型微调的效果也不会很好。

在后面的实战章节,我会教大家如何借助一个神器,低成本的将领域内的文献批量转成可供模型微调的数据集。

模型推理微调

对于推理模型的微调其实是监督微调的一种特殊形式,通过在数据集中显式标注思维链(Chain of Thought, COT),训练模型不仅给出最终答案,还能生成逻辑推导过程。其核心在于让模型学会「分步思考」,适用于需要复杂逻辑推理的场景(如数学证明、代码调试)。

在推理模型(比如 DeepSeek-R1)的回答中,<think></think> 中包含的这部分其实就是模型的推理过程,它其实是根后面的答案一起作为一个回答输出的,只不过在大部分的 C 端应用中对这部分提取出来做了特殊展示。

随着最近推理模型 DeepSeek-R1 的爆火,开始让推理模型走进大众的视野,大家在选择模型进行微调时,也会去选择具备推理能力的模型,如 DeepSeek-R1 的蒸馏版本。在用于推理模型微调的数据集中,通常需要额外包含模型思考过程的部分:

[{"instruction": "解决数学应用题","input": "小明买了3支铅笔,每支2元;又买了5本笔记本,每本比铅笔贵4元。总花费多少?","chain_of_thought": ["铅笔单价:2元/支 → 3支总价:3×2=6元","笔记本单价:2+4=6元/本 → 5本总价:5×6=30元","合计花费:6+30=36元"],"output": "总花费为36元"},...
]

不过有一点需要大家注意,其实并不是所有任务都适合用推理模型,因为推理模型的幻觉比较大,有些情况选择推理模型反而会起到相反的效果,在处理简单明确的任务时,推理模型可能会把问题复杂化,导致思考过度、响应较慢,甚至增加幻觉的风险。比如如果你让推理模型去完成检索、解释类的任务时,当它找不到可以参考的信息就会按照自己的思考过程进行输出,结果并不一定准确,下面则是一些适合用于推理模型微调的场景:

  • 代码生成与调试:推理模型能够理解复杂的编程问题,生成高效的代码解决方案,并辅助开发人员进行代码调试。
  • 数学问题求解:在数学建模、复杂计算和逻辑推理任务中,推理模型表现出色,能够提供详细的解题步骤和准确的答案。
  • 复杂数据分析:推理模型擅长处理需要多步骤推理和策略规划的复杂数据分析任务,帮助科学家和研究人员进行更深入的数据挖掘。
  • 法律与金融分析:在处理法律合同、金融协议等复杂文档时,推理模型能够提取关键条款,理解模糊信息,辅助决策。

数据集中的思维链,在某些特定场景下可能比较容易获取,比如在数学推理任务的微调上,一般数据集本身带的解题过程就可以作为思维链,比如下面的数学解题数据集:

image-20250907082303485

数据集地址:https://huggingface.co/datasets/AI-MO/NuminaMath-CoT

约 86 万道中国高中数学练习题、以及美国和国际数学奥林匹克竞赛的题目,每个问题的解答都采用了思维链(CoT)的格式。

还有就是靠带推理能力的大模型蒸馏获取,像 OPEN AI 的 O1、O3 这种模型,为了避免大家窃取思考过程,思维链都是直接隐藏掉的,但是我们的国货之光 DeepDeek 是完全开源且开放思考过程的,目前很多带思维链的开源数据集都是从 DeepSeek-R1 蒸馏而来。或者我们也可以引导不具备推理能力的模型来产出思考过程。

微调数据集的常用格式

模型微调已经不是什么新技术了,只是最近由于 DeepSeek 的横空出世,导致逐步开始被各领域更广泛的应用,在这之前,哪些数据集格式效果好,哪些容易整理,已经总结了很多经验,比如目前广泛被大家使用的有两种数据集格式,AlpacaShareGPT

Alpaca

Alpaca是由斯坦福大学团队提出的轻量级指令微调数据格式,最初用于训练LLaMA模型的指令适配版本。其核心目标是通过小规模但高质量的“指令-输入-输出”三元组,提升模型对特定任务的执行能力。

JSON字段组成

{"instruction": "任务描述(必填)",      // 明确的指令或任务目标"input": "可选的上下文/素材",           // 若无额外信息可留空字符串"output": "期望生成的答案(必填)"      // 模型应输出的结果
}

特点:单轮交互、无对话历史、结构简单易解析,适合单向任务型场景。

优点与局限性

  • 优势:
    • 高效性:数据生成成本低(可通过GPT类模型自动合成),适合快速实验和小规模数据集训练。
    • 通用性:广泛适用于文本生成、翻译、摘要、代码编写等单一任务。
  • 局限:缺乏多轮上下文建模能力,难以捕捉复杂对话逻辑;数据多为合成,可能偏离真实人类行为。

典型应用场景

  • 示例1:翻译任务

    {"instruction": "将以下英文句子译为中文。","input": "The quick brown fox jumps over the lazy dog.","output": "敏捷的棕色狐狸跳过了懒狗。"
    } 
    
  • 示例2:诗歌创作

    {"instruction": "写一首关于春天的诗。","input": "","output": "春风轻拂柳丝绿,花开满园鸟儿啼。"
    }  
    

适用场景:单次问答、文本转换、逻辑推理等无需多轮交互的任务。

ShareGPT

ShareGPT源自OpenAI ChatGPT的真实用户对话记录,旨在构建贴近实际应用场景的对话数据集。其核心是多轮对话序列,强调上下文依赖性和自然交互流程。

JSON字段组成

{"conversations": [          // 完整的对话历史数组{"from": "user",         // 角色标识(user/assistant)"value": "用户提问内容"   // 对应角色的语言表达},{"from": "assistant","value": "模型回复内容"}]
}

扩展能力:支持函数调用(function_call)、观测结果(observation)和工具描述(tools),适用于代理(Agent)型任务。

优点与局限性

  • 优势:
    • 真实性:基于真实用户对话,覆盖多样化意图和表达方式。
    • 上下文感知:多轮历史帮助模型理解隐含需求,提升连贯性。
    • 灵活性:可集成外部工具(如天气API),实现动态交互。
  • 局限:需脱敏处理隐私数据;原始对话可能存在噪声或冗余信息。

典型应用场景

  • 示例1:基础对话

    {"conversations": [{ "from": "user", "value": "你好,请帮我写一首关于夜晚的诗。" },{ "from": "assistant", "value": "夜幕低垂星光闪,微风拂过树影间。" }]
    }
    
  • 示例2:带工具调用的对话

    {"conversations": [{ "from": "human", "value": "我想知道明天济南的天气预报。" },{ "from": "function_call", "value": "{\"name\": \"get_weather_forecast\", \"arguments\": {\"location\": \"济南\", \"date\": \"明天\"}}" },{ "from": "observation", "value": "{\"temperature_high\": 25, \"condition\": \"多云\"}" },{ "from": "gpt", "value": "明天济南最高气温25℃,天气多云。" }],"tools": [{"name": "get_weather_forecast", "description": "获取指定地点的天气预报"}]
    }  
    
  • 适用场景:聊天机器人、客服系统、多步骤决策支持等需要上下文记忆的场景。

如何选择和使用这两种格式?

选择依据

因素 优先选Alpaca的情况 优先选ShareGPT的情况
任务类型 单轮指令执行(如翻译、摘要) 多轮对话、上下文依赖任务(如聊天、问答链)
数据来源 合成数据或人工标注 真实用户对话记录
模型目标 提升特定技能(代码生成、推理) 培养自然交互能力和长期记忆
资源限制 小数据集快速实验 大规模对话采集与清洗
扩展需求 无工具调用需求 需集成外部API或函数(如天气查询、数据库访问)

混合策略建议

许多项目采用分阶段微调:先用Alpaca数据打底训练基础指令遵循能力,再用ShareGPT数据增强对话流畅性和上下文理解。例如:

  1. 第一阶段:用Alpaca格式的代码生成数据集训练模型掌握语法规范;
  2. 第二阶段:用ShareGPT格式的技术讨论对话优化模型的问题解决能力。

实战案例对比

案例1:医疗咨询系统

  • Alpaca方案:构建症状描述→诊断建议的单轮映射关系。

    {"instruction": "分析患者主诉并提出检查建议","input": "持续咳嗽伴发热三天","output": "建议进行胸部X光检查以排除肺炎可能性。"
    }    
    
  • 优势:直接关联症状与处置方案,适合急诊分诊场景。

案例2:智能助理

  • ShareGPT方案:模拟用户迭代细化需求的多轮交互。

    {"conversations": [{ "from": "user", "value": "我想订一张去北京的机票" },{ "from": "assistant", "value": "请问具体日期和舱位偏好?" },{ "from": "user", "value": "下周五经济舱" },{ "from": "assistant", "value": "已为您找到CA1837次航班,价格¥800。" }]
    }    
    
  • 优势:通过追问逐步明确需求,提升用户体验。

获取公开数据集

很多情况下,如果你只是需要通过微调来提升模型某一方面的能力,在没有特殊的内部数据要求的情况下,是没必要自己去构造数据集的,因为目前互联网上存在着大量的公开且免费使用的数据集,下面就带大家来了解一下,常见的获取公开数据集的途径有哪些,以及对应的使用方法。

HuggingFace

https://huggingface.co/datasets

HuggingFace 是一个专注于自然语言处理和机器学习的社区平台,提供了大量高质量的数据集和预训练模型,也是目前 AI 领域最活跃的社区型平台。其数据集涵盖多种语言和任务,如文本分类、情感分析、机器翻译等。

  • 专注NLP/语音/多模态领域数据集
  • 提供Python库直接加载(datasets库)
  • 支持数据集版本控制与增量更新
  • 附带数据预处理脚本和评估指标

HuggingFace 的 datasets 库也是一个非常方便的工具,可以轻松加载和处理数据集。

from datasets import load_dataset
dataset = load_dataset("glue", "mrpc")  # 示例:加载GLUE基准数据集

Kaggle

https://www.kaggle.com/datasets

Kaggle 是一个数据科学平台,不仅提供大量的公开数据集,还举办各种数据科学竞赛。其数据集涵盖了计算机视觉、自然语言处理、数据可视化等多个领域。

  • 全球最大的数据科学社区驱动平台
  • 包含竞赛数据集、教程和工具
  • 支持在线内核(Kaggle Kernels)进行数据分析
  • 支持通过 API 批量下载

openDataLab

https://opendatalab.com/

openDataLab 是一个专注于中文数据集的平台,也是中国本土最大的开源数据集平台,提供了丰富的中文数据集资源。

ModelScope

https://modelscope.cn/datasets

ModelScope 是阿里巴巴推出的 AI 模型与数据集中心,除了提供预训练模型外,还包含与模型相关的数据集。其实有点类似于中国版的 HuggingFace

相关文章:

day35大模型应用开发-模型微调

为什么需要微调? 在开始学习微调之前,大家首先还是要搞清楚为什么要微调?在什么情况下需要微调?让模型更懂“专业话”:通用模型就像一个“万事通”,它学过很多东西,但对一些特别专业的领域(比如医学、法律、金融)可能不会特别精通。通过微调,我们可以给模型“补课”,…...

P6631 [ZJOI2020] 序列 题解

很好的贪心题。 考虑从左到右枚举每个位置,每次在右边添加一个数时更行答案。 容易想到记录当前前缀可以继续向右延伸的 \(1,2,3\) 操作的个数。记当前需要添加的数为 \(i\),用 \(c,x,y\) 分别表示可以继续向右延伸(从 \(\le i-1\) 的位置)的三种操作的个数:连续区间、奇偶…...

初始化一个rust环境

初始化一个rust环境初始化一个rust环境 rust 安装工具依赖入门 - Rust 程序设计语言一门帮助每个人构建可靠且高效软件的语言。 https://www.rust-lang.org/zh-CN/learn/get-startedrustup 环境变量 RUSTUP_DIST_SERVER : https://mirrors.ustc.edu.cn/rust-static RUSTUP_UPDA…...

编程里边有好多不容易触及的知识点

可能是因为不是原生土长的内容,编程里边有很多没有办法合情理解的领域。框架是其中一个,类似的还有 窗口库,还有好多其它东西。以前刚开始学窗口的时候,总是觉得没办法进行。周围的同学大概都是 拿过来用就可以,创建一个frame增加些lable 写一些事件。这些内容,相当于引用…...

25.9.18随笔联考总结

考试 通读题面,发现前两道是签。然后开做,饭堂,最后花费大部分时间过掉。后面两道题都不会。寄寄。 估计:100+100+0+0。实际:100+100+0+0。 有人藏分,素质有待提高! 改题+总结 T3 需要看出无限制的方案数对应卡特兰数,然后我没有推出来,并且也没有去打表找规律。感觉自…...

漏洞详解--文件上传 如何花样绕过?!

一、漏洞原理 1.1 核心 文件上传漏洞,顾名思义,将攻击者将恶意文件上传到服务器,服务器将恶意文件解析,攻击就达成了。 1.2 漏洞详解 文件上传漏洞非常好理解,有三个关键点,一是上传文件,二是找到文件上传的路径,三是使恶意文件得到解析。 假设一个系统没有防御(后面会…...

使用Windows客户端访问EDA环境的NFS共享

在IC设计环境中, 也总是会有Windows操作系统的开发服务器或者客户端需要使用IC设计平台中Linux主机使用的NFS服务器。 使用者也是IC设计团队中的一员,可能出于设计工具的原因, 他/她的部分工作必须在Windows中完成, 同时也需要保持NFS目录的权限体系,不能为了这少量的Wind…...

Day03-1

public class HelloWorld { public static void main(String[] args) { String teacher = "David"; System.out.println("Hello World"); } //有趣的代码注释 //单行注释 //输出一个Hello,World! //多行注释 :可以注释一段文字 /注释/ /* 我是多行注释 我…...

使用php -S 127.0.0.1:8000 新建php服务

php -S 127.0.0.1:8000 启动服务后 当前坐在目录下的所有文件都可以在浏览器上以 http://127.0.0.1/目录/文件名称 的形式访问 比如: 浏览器访问 http://127.0.0.1/upload_files.php 就会直接调用当前目录 upload_files.php 浏览器访问 http://127.0.0.1/ims/abc.png 就会打开…...

Day03

强类型语言 所有变量都需要定义后才能使用,Java,C++ 弱类型语言 Javascript 数据类型(JAVA) 基本类型 数值类型字符类型 char 占两个字节 浮点类型(小数)float 占四个字节 double 占八个整数类型byte 占一字节 short 占两字节 int 占四字节 long 占八字节boolean类型 占一…...

完整教程:从“我店”模式看绿色积分电商平台的困境与破局

完整教程:从“我店”模式看绿色积分电商平台的困境与破局pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", m…...

Java第三周课前思考

什么样的方法应该用static修饰?不用static修饰的方法往往具有什么特性?Student的getName应该用static修饰吗?完成独立功能或创建类的实例或对类级别的属性进行操作的方法应该用static修饰。 不用static修饰的方法往往具有依赖实例状态、通过实例调用、可访问静态变量和方法、…...

Java的安装及卸载

卸载JDK删除java的安装目录 删除JAVA_HOME(环境配置中) 删除path下关于java的目录(环境配置中) cmd中查找java -version是否仍存在安装JDK百度搜索JDK8,找到下载地址 同意协议 下载电脑对应的版本 双击安装JDK 记住安装的路径 配置环境变量我的电脑-->右键-->属性 环…...

题解:P13882 [蓝桥杯 2023 省 Java A] 小蓝的旅行计划

挺可爱的反悔贪心,乍一看没看出和旅行家的预算的区别,甚至做完才发现不一样的说。 正文 首先我们可以将操作分为两个部分。分别是用油操作和加油操作。 用油 有一个简单的贪心策略,用油的时候首先使用最便宜的油,这点显然。 此外,如果当前油箱里所有油都不能到达下一站,自…...

实用指南:订阅式红队专家服务:下一代网络安全评估新模式

实用指南:订阅式红队专家服务:下一代网络安全评估新模式pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", m…...

更快的布尔矩阵乘法

这是小蝴蝶研读的第二篇论文,时间复杂度的话,原论文写的是 \(\frac{n^3}{2^{\Omega(\sqrt[7]{\log n})}}\),我感觉这个界可以精确分析出来,不过我还没看懂论文,先占个坑。...

数据结构初阶——红黑树的实现(C++) - 教程

数据结构初阶——红黑树的实现(C++) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !im…...

CMC蒲和平3.1

例3(凑)求 \(\int\frac{dx}{\sqrt[3]{(x + 1) ^ 2(x - 1) ^ 4}}\).solution 注意到 \(d(\frac{x + 1}{x - 1}) = \frac{-2}{(x - 1) ^ 2} dx\),考虑凑微分。 \[I = \int \frac{dx}{\sqrt[3]{(\frac{x + 1}{x - 1}) ^ 2} (x - 1) ^ 2} = -\frac{1}{2}\int \frac{d(\frac{x + …...

解码C语言数组

一维数组 数组是相同类型数据元素的有序集合,通过下标(索引)访问元素,内存中连续存储。 数组名表示首元素地址,sizeof(arr) 返回整个数组的字节大小 核心特点元素类型一致:所有元素必须为同一数据类型(如 int, float)。 固定大小:数组长度在声明时确定,静态数组无法动…...

github启用Disscussions讨论功能

配置步骤 1. 设置GitHub仓库并启用Discussions功能 首先需要为你的GitHub仓库启用Discussions功能:访问你的GitHub仓库: https://github.com/KkaiFang/my_notes点击 Settings 标签页向下滚动找到 Features 部分勾选 Discussions 复选框来启用讨论功能2. 配置Giscus评论系统 访…...

RWA技术规范解读:如何实现现实世界资产的合规代币化

RWA技术规范解读:如何实现现实世界资产的合规代币化 近日,深圳市信息服务业区块链协会发布了《RWA技术规范》(T/SZBA-2025),这是国内首个针对现实世界资产代币化的团体标准。本文将深入解读该规范的核心内容,帮助读者全面了解RWA代币化的技术框架和实施要点。 1. 什么是RWA…...

干货预警!Apache SeaTunnel 助力多点 DMALL 构建数据集成平台,探索AI新零售行业应用!

🎉亲爱的社区朋友们,数据集成领域的一场知识盛宴即将来袭!9 月 30 日下午 2 点,Apache SeaTunnel 社区精心策划的又一场线上 Meetup 将准时与大家云端相见!🎉亲爱的社区朋友们,数据集成领域的一场知识盛宴即将来袭!9 月 30 日下午 2 点,Apache SeaTunnel 社区精心策…...

Apache SeaTunnel 2.3.12 发布!核心引擎升级、连接器生态再扩张

近期,Apache SeaTunnel 2.3.12 正式发版。这是继 2.3.11 之后的又一次迭代,本周期合并 82 个 PR,提供 9 项新特性、30+ 项功能增强、20+ 处文档修正,并修复 43 个 Bug。核心改进集中在 SensorsData 与 Databend 生态接入,Paimon、ClickHouse、MaxCompute 等连接器读写能力…...

详细介绍:对于牛客网—语言学习篇—C语言入门—链表的题目解析

详细介绍:对于牛客网—语言学习篇—C语言入门—链表的题目解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New&quo…...

Day17Arrays类的初步认识

package com.cc.array;import java.util.Arrays;public class ArrayDem6 {public static void main(String[] args) {int[] a = {12, 3, 43, 4, 235, 5, 6, 45, 7, 7};System.out.println(a);//[I@f6f4d33//打印数组元素System.out.println(Arrays.toString(a));//toString:以字…...

小学生模拟赛题解

A 正常做这题显然 \(10^{18}\) 是不可做的,所以问题一定出现在 gen 上。 注意到 \(7\mid2009\),换句话说,若 \(t_1=3k(k\in\mathbb N_+)\),那么 \(t_2=t_1+9\),这就导致 \(3\mid t_2\)。以此类推,会发现对于 \(\forall i\in[2,n]\),满足 \(t_i-t_{i-1}=9\),答案就是 \(…...

服务器安装docker、mysql、redis、nginx、nacos、jdk等

一、安装docker 1.1、安装必要工具 sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm21.2、进行仓库源设置 sudo yum-config-manager \ --add-repo \ https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo1.3、docker安装安装最新…...

StringComparer.OrdinalIgnoreCase

StringComparer.OrdinalIgnoreCase 是 .NET 提供的不区分大小写、且按 Unicode 码位排序的字符串比较器,适用于哈希表、字典、集合、排序等需要显式指定比较规则的地方。1. 核心特点特性说明比较规则 不区分大小写(A == a)排序规则 纯 Unicode 码位顺序(文化无关)性能 比文…...

LLM大模型:Qwen3-Next-80B中的next究竟是个啥?

1、近期,国内LLM头号玩家阿里发布了Qwen3-Next-80B模型,但从名字上看就和其之前发布的模型不同:多了next!这就奇怪了:为啥会多出一个next?这个next究竟是啥意思了?2、自从3年前 chatGPT 3.5发布后,AI又开始大火,就是因为效果比传统的机器学习好10倍!效果为啥好了,核…...

中了勒索病毒 peng

中了勒索病毒 peng一,中招 早上一上班,看到电脑屏幕显示这样的壁纸。 居然中招了?不敢相信。 我发现自己的网盘里的所有文件,都被加密并改名,形如 aaaa.jpg.[[VlDy9dk2RaQ1F]].[[Ruiz@firemail.cc]].peng 而且这些文件,都已同步到了网盘,通过手机app访问,也只能看到这些…...

在 WSL 中通过 Bash 函数快速转换 Windows 路径为 Ansible/WSL 路径 - 教程

在 WSL 中通过 Bash 函数快速转换 Windows 路径为 Ansible/WSL 路径 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Cour…...

金融租赁公司厂商租赁业务调研报告

厂商租赁金融租赁公司厂商租赁业务调研报告 报告摘要 本报告旨在全面、深入地分析中国金融租赁公司(下称“金租公司”)厂商租赁业务的现状、模式、市场环境、监管动态、数字化转型路径及绩效评估体系。截至2025年,厂商租赁作为一种深度绑定产业的业务模式,正日益成为金租公…...

普科科技PKC7030H交直流电流探头应用指南​​

普科PKC7030H探头支持DC-120MHz带宽、1%精度,30A连续电流测量,适用于高频大电流交直流混合信号测试。在现代电力电子、新能源及高速数字系统的设计与调试中,对复杂电流波形的精准测量是分析效率、优化性能与保障可靠性的基石。​​普科科技(PRBTEK)PKC7030H高频交直流电流…...

从“分散”到“统一”,中控技术利用SeaTunnel构建高效数据采集框架,核心数据同步任务0故障运行!

本文将深入探讨中控技术基于 Apache SeaTunnel 构建企业级数据采集框架的实践,重点分享集群高可用配置、性能调优、容错机制及数据质量监控等方面的具体思考与方案。作者 | 崔俊乐引言:对企业而言,数据采集的核心挑战从来不仅仅是“同步”,而是如何在大规模、多元异构的复杂…...

再见 Cursor,Qoder 真香!这波要改写 AI 编程格局

如果把未来 AI 编程工具的核心竞争力用一句话总结,那就是:能不能让开发者在透明化的协作中,信任它、依赖它,并且和它一起把项目养大。作者:loonggg 真心建议大家去使用一下这段时间最新推出的一款 AI 编程工具:Qoder 。 真的是太好用了,一点也不比 Cursor 差。 为什么这…...

T/B cell subtype marker - un

B cell ref: https://www.abcam.cn/primary-antibodies/b-cells-basic-immunophenotypingT cell ref: https://www.abcam.cn/primary-antibodies/t-cells-basic-immunophenotyping作者:un-define出处:https://www.cnblogs.com/mmtinfo/p/19099331本文版权归作者和博客园共有,…...

SAP FICO 完全凭证替代

GGB1 这个参数是获取所有行项目的关键USING bool_data TYPE gb002_015*&---------------------------------------------------------------------* *& Form u902 *&---------------------------------------------------------------------* * text *…...

K8s Application模式下的flink任务执行精要

本文分享自天翼云开发者社区《K8s Application模式下的flink任务执行精要》,作者:l****n 构键k8s集群在这里,我们需要搭建一个K8S环境用于提供flink任务的运行时环境。在这里推荐使用kubeadm或者一些脚本工具搭建,可参考本自动k8s脚本工具。具体过程在这里省略,可以参考上…...

从0打造一个TTS语音合成引擎:原理与实现

语音合成技术(Text-to-Speech, TTS)近年来发展迅猛,从早期机械感十足的合成音到如今几乎可以以假乱真的人声,背后是深度学习技术的巨大进步。本文将带你了解现代语音合成的基本原理,并尝试用Python实现一个简易版的TTS系统。 语音合成技术演进图1:语音合成技术发展历程,…...

莫队

Argvchs 说我不会根号算法,把之前的博客搬过来,然后再补点东西。 一种离线算法,可以用 \(O(n\sqrt n)\) 的复杂度处理区间查询问题,当然,也可以带修,下文也会提到。 关于复杂度 莫队优化的关键是排序 + 分块,将每个询问离线下来,按照左端点所在块从小到大排序,假如左端…...

0voice-2.1.1-网络io与io多路复用select/poll/epoll

测试...

Java基本语句-分支语句

Java基本语句-分支语句Day05 如何在API字典中寻找自己想要的Scanner类型 1.点击搜索 输入Scanner 2.字典中回显示各种类型的获取方式: nextByte()、nextShort()、nextInt()、nextLong()、nextdouble()、nextFloat()、next()多种引用使用。 3.调用Scanner类的相关方法,来获取指定…...

丘成桐谈AI

很多重要的科学发现,是在平凡的事情里面突然有个突破。 观念上的突破,在我看人工智能有困难做不到,现在全民学人工智能, 听起来很好听,但是师资不够, 跟数学的整个合作是刚开始, AI看见万千数据 记者:您第一次感觉到AI的冲击时什么时候 Yau:哈哈我坦白跟你讲,我从来没…...

异常检测在网络安全中的应用 - 实践

异常检测在网络安全中的应用 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; …...

大文件分片上传

分片:// 获取文件对象const inputFile = document.querySelector(input[type="file"]);// 设置分片大小:5MBconst CHUNK_SIZE = 5 * 1024 * 1024;// 文件上传事件inputFile.onchange = async (e) => {// 获取文件信息const file = e.target.files[0];// 获取文件…...

人小鼠免疫细胞maker基因 - un

人小鼠ref:https://www.abcam.cn/primary-antibodies/immune-cell-markers-poster作者:un-define出处:https://www.cnblogs.com/mmtinfo/p/19099316本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究…...

HyperWorks许可配置

在工程设计和仿真领域,正确的软件许可配置是确保工作流程顺畅、提高生产效率和实现最佳投资回报的关键。HyperWorks作为业界领先的工程仿真软件,其灵活的许可配置功能为用户提供了广泛的定制选项,确保软件能够完全满足各种业务需求。 什么是HyperWorks许可配置? HyperWorks…...

国标GB28181视频平台EasyGBS如何解决安防视频融合与级联管理的核心痛点?

国标GB28181视频平台EasyGBS如何解决安防视频融合与级联管理的核心痛点?在平安城市、雪亮工程等大型安防项目中,如何解决不同品牌设备与平台之间的互联互通难题?本文深度解析基于国标GB/T28181协议的EasyGBS视频平台的核心特点与技术优势,阐述其如何通过标准化协议,实现大…...

python基础-推导式

1.列表推导式 : 有规律的快速创建或者控制列表1.1 创建列表 eg: list1 = [ i for i in range(10)]1.2 带条件判断的列表推导式eg: list1 = [ i for i in range(50) if i % 3 == 0]3.多个for循环实现的列表推导式eg: list1 = [(item1, item2) for item1 in list2 for item2 in…...

人 CD 抗原完全指南 - un

设立分化簇 (CD) 命名系统的目的是对白细胞表面抗原进行分类。 最初,表面抗原是根据与它们结合的对应单克隆抗体进行命名。随着各实验室逐渐发现抗原常能刺激产生多种单克隆抗体,因此需要采用一种统一的命名系统。1982 年于巴黎举行的第 1 届国际人类白细胞分化抗原专题讨论会…...