我們一起聊聊如何給AI大模型喂數(shù)據(jù)?
大家好呀,我是飛魚。
如果我想要大模型學(xué)習(xí)我的知識,怎么給他數(shù)據(jù)呢?
數(shù)據(jù)是大模型的食物,只有喂對了,模型才能更好地學(xué)習(xí)和成長。
這里介紹大模型優(yōu)化的三種方式:長文本提示,RAG,微調(diào)。
長文本提示
比如我們上傳一篇文章,發(fā)給大模型讓他總結(jié)一下里面的內(nèi)容,這個(gè)就是長文本提示。
我們上傳的這篇文章,跟我們的提示詞拼接后,會一起發(fā)給大模型。
這個(gè)長文本數(shù)據(jù),它只能在你的這個(gè)對話窗口內(nèi)有效,而且還不能超過它模型本身支持的上下文長度。
在問答系統(tǒng)、內(nèi)容創(chuàng)作等任務(wù)中,提示詞可以顯著提升模型的表現(xiàn)。
RAG(檢索增強(qiáng)生成)
RAG 就是我們經(jīng)常聽到的知識庫。
這個(gè)知識庫就好比我們寫論文的時(shí)候,在圖書館里有一大堆書,當(dāng)你開始寫某個(gè)主題的時(shí)候。
- 你才會根據(jù)你的需要去把那些相關(guān)的書籍段落都找出來參考和引用。
RAG 的知識庫數(shù)據(jù)就是單獨(dú)放在外面,提什么問你就去搜什么數(shù)據(jù),跟我們寫論文很像。
在問答系統(tǒng)中,RAG可以利用最新的數(shù)據(jù)和信息來生成更準(zhǔn)確的答案,彌補(bǔ)大模型在知識更新方面的不足。
微調(diào)(Fine-Tuning)
其實(shí)微調(diào)中的數(shù)據(jù)才是直接給大模型喂進(jìn)去。
微調(diào)大模型是把你喂進(jìn)去的數(shù)據(jù)消化成了規(guī)律,固定在它的參數(shù)里。
其實(shí)在微調(diào)之前,真正做大模型的廠商已經(jīng)做過了一步,叫做預(yù)訓(xùn)練。
- 這一步用了大量的算力數(shù)據(jù)讓他有了基礎(chǔ)知識。
微調(diào)它是把接收到的信息壓縮成了一種規(guī)律,把它記住。
- 那以后能沿著這個(gè)規(guī)律去做推測。
當(dāng)需要模型在特定領(lǐng)域或任務(wù)中表現(xiàn)更佳時(shí),微調(diào)是理想的選擇。
- 例如,在醫(yī)學(xué)領(lǐng)域,通過微調(diào)可以讓模型更好地理解和生成醫(yī)學(xué)文本。
總結(jié):大模型的學(xué)習(xí)方式就像選課,文本提示是旁聽,RAG是圖書館查資料,微調(diào)是請家教。
每日一題
題目描述
給你一個(gè)二叉搜索樹的根節(jié)點(diǎn) root ,返回 樹中任意兩不同節(jié)點(diǎn)值之間的最小差值 。
差值是一個(gè)正數(shù),其數(shù)值等于兩值之差的絕對值。
解題思路
中序遍歷 目標(biāo)二叉搜索樹,每輪計(jì)算相鄰節(jié)點(diǎn)的差值,并取最小。
在二叉搜索樹中,左 < 根 < 右。
因此,最小差值,一定是相鄰兩個(gè)節(jié)點(diǎn)的差值。
而 中序遍歷,則保證了 上一輪遍歷的根 與 當(dāng)前遍歷的根 相鄰(為父子關(guān)系)。
代碼實(shí)現(xiàn)
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) {
// 因?yàn)槭?二叉搜索樹,且為 中序遍歷
// 因此 左 > 根 > 右,(root.val - this.preNodeValue) 必為正值
this.result = Integer.min(root.val - this.preNodeValue, this.result);
}
this.preNodeValue = root.val;
inorder(root.right);
}
}