大家好呀,我是飞鱼。
如果我想要大模型学习我的知识,怎么给他数据呢?
数据是大模型的食物,只有喂对了,模型才能更好地学习和成长。
这里介绍大模型优化的三种方式:长文本提示,RAG,微调。
长文本提示
比如我们上传一篇文章,发给大模型让他总结一下里面的内容,这个就是长文本提示。
我们上传的这篇文章,跟我们的提示词拼接后,会一起发给大模型。
这个长文本数据,它只能在你的这个对话窗口内有效,而且还不能超过它模型本身支持的上下文长度。
在问答系统、内容创作等任务中,提示词可以显著提升模型的表现。
RAG(检索增强生成)
RAG 就是我们经常听到的知识库。
这个知识库就好比我们写论文的时候,在图书馆里有一大堆书,当你开始写某个主题的时候。
- 你才会根据你的需要去把那些相关的书籍段落都找出来参考和引用。
RAG 的知识库数据就是单独放在外面,提什么问你就去搜什么数据,跟我们写论文很像。
在问答系统中,RAG可以利用最新的数据和信息来生成更准确的答案,弥补大模型在知识更新方面的不足。
微调(Fine-Tuning)
其实微调中的数据才是直接给大模型喂进去。
微调大模型是把你喂进去的数据消化成了规律,固定在它的参数里。
其实在微调之前,真正做大模型的厂商已经做过了一步,叫做预训练。
- 这一步用了大量的算力数据让他有了基础知识。
微调它是把接收到的信息压缩成了一种规律,把它记住。
- 那以后能沿着这个规律去做推测。
当需要模型在特定领域或任务中表现更佳时,微调是理想的选择。
- 例如,在医学领域,通过微调可以让模型更好地理解和生成医学文本。
总结:大模型的学习方式就像选课,文本提示是旁听,RAG是图书馆查资料,微调是请家教。
每日一题
题目描述
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
解题思路
中序遍历 目标二叉搜索树,每轮计算相邻节点的差值,并取最小。
在二叉搜索树中,左 < 根 < 右。
因此,最小差值,一定是相邻两个节点的差值。
而 中序遍历,则保证了 上一轮遍历的根 与 当前遍历的根 相邻(为父子关系)。
代码实现
Java代码:
class Solution { private int preNodeValue = -1; private int result = Integer.MAX_VALUE; public int getMinimumDifference(TreeNode root) { inorder(root); return this.result; } private void inorder(TreeNode root) { if (root == null) { return; } inorder(root.left); if (this.preNodeValue != -1) { // 因为是 二叉搜索树,且为 中序遍历 // 因此 左 > 根 > 右,(root.val - this.preNodeValue) 必为正值 this.result = Integer.min(root.val - this.preNodeValue, this.result); } this.preNodeValue = root.val; inorder(root.right); } }