自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

圖解DSPy:Prompt的時(shí)代終結(jié)者?!

發(fā)布于 2024-11-20 15:28
瀏覽
0收藏

DSPy是一種編程模型,旨在改進(jìn)語言模型 (LM)在復(fù)雜任務(wù)中的使用方式。傳統(tǒng)上,LM使用特定的提示模板(Prompt)進(jìn)行控制,這些模板是基本前期大量的嘗試而找到的預(yù)設(shè)指令。DSPy通過將LM流水線抽象為文本轉(zhuǎn)化圖譜,例如被其他申明模塊觸發(fā)的LM的命令計(jì)算圖譜。

1.Prompt Engineering

要理解DSPy,需要先理解提示詞工程Prompt Engineering。提示詞工程也稱之為上下文提示詞或者上下文學(xué)習(xí)。它指的是在不更新模型權(quán)重的情況下引導(dǎo)LLM的行為以獲得預(yù)期結(jié)果的方法,它屬于非參數(shù)的模型微調(diào)。

20%的EMNLP'23的出版物都是關(guān)于提示詞工程,其中最受歡迎的字符串模板庫有LangChain和LlamaIndex。

提示詞工程很好用,簡單,高效而且低開銷。它在不占用GPU,5分鐘之內(nèi)可以通過調(diào)用API快速的試錯(cuò),而且大部分的提示詞可以用一到兩句話來解釋。

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

上圖為提示詞工程的示例,加上一句話“按照artstation的風(fēng)格來”,結(jié)果大不一樣。

但是提示詞工程最大的問題是它很脆弱,而且缺乏系統(tǒng)性的方法來提升。很多的技巧需要大量的實(shí)驗(yàn)和啟發(fā)式方法,結(jié)果不能普遍應(yīng)用于所有 LLMs/VLM,甚至不能應(yīng)用于同一LLM家族的不同版本,例如gpt 3->3.5->4。

在繼續(xù)往下之前,先來復(fù)習(xí)下傳統(tǒng)的Prompt Engineering有哪些?

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

?

Zero-Shot,直接提問將數(shù)據(jù)直接塞給LLM

?

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

Few-Shot,在提問的時(shí)候,列出一些例子然后和問題一起送給LLM回答。上面要引導(dǎo)大模型進(jìn)行情感分析,然后列舉了一些例子。這里好比你學(xué)了很多知識,但是考試的時(shí)候,總需要有人告訴你答題的規(guī)則。

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

Instruction-Prompt,在提問的時(shí)候,針對回答給出明確的指令。

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

Chain-OF-thought,在提問的時(shí)候,幫助大模型整理思維鏈,以便于大模型能夠按照思維鏈進(jìn)行回答。

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

Chain-OF-thought,可以配合zero-shot或者Few-shot進(jìn)行提問,靠人工或者自動化生成的推導(dǎo)思維鏈作為上下文。

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

Program-OF-thought,在提問的時(shí)候,讓大模型給出可以運(yùn)行的代碼,然后運(yùn)行可以得到更加正確的答案。

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

當(dāng)然基于PROMPT的原理,還可以外掛知識庫,比如目前比較流行的RAG

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

以上為傳統(tǒng)提示詞工程的概覽圖

2.DSPy

對照傳統(tǒng)的Prompt Engineering,DSPy其實(shí)覆蓋了灰色部分:

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

那么什么是DSPy?

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

DSPy 是一個(gè)用于算法優(yōu)化提示和 LM 權(quán)重的框架。然而,它的學(xué)習(xí)曲線是陡峭的,“是的,伙計(jì),我到處都能看到DSPy,但還沒有時(shí)間看?!薄【幮α藒

DSPy有三個(gè)抽象,各位讀者先記一下。分別為signatures(簽名,這個(gè)取名不大貼切), modules(模塊或者組件), 和teleprompters(提示器或者優(yōu)化器)。

DSPy有兩個(gè)特點(diǎn),其一,它閉環(huán)了提示詞工程。它將提示詞工程從通常的手動和人工的過程轉(zhuǎn)變?yōu)榻Y(jié)構(gòu)化、定義明確的機(jī)器學(xué)習(xí)工作流程(這個(gè)流程包括準(zhǔn)備數(shù)據(jù)集、定義模型、訓(xùn)練、評估和測試)。這應(yīng)該是最具革命性的方面。下圖應(yīng)該很形象地將這段文字表達(dá)了出來。

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

其二,它將邏輯和文本表達(dá)分離。說白了就是將傳統(tǒng)的提示詞工程通過一些語法糖,比較優(yōu)雅的進(jìn)行封裝。

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

下面來一段讓讀者們感受下便捷性,首先要先預(yù)設(shè)下大模型

import dspy
#設(shè)置大語言模型
turbo = dspy.OpenAI(model='gpt-3.5-turbo-0125', api_key='KEYS', model_type='text')
dspy.settings.configure(lm=turbo)

第二步定義一個(gè)類,看起來和PyTorch定義模型一個(gè)調(diào)調(diào),只不過父類變成了dspy.Module。

class HelloQA(dspy.Module):
    def __init__(self):
        super().__init__()
        self.prog = dspy.Predict("question -> answer")
    #在這里定義基本的邏輯
    def forward(self, question):
        return self.prog(questinotallow=question)

這個(gè)時(shí)候不用寫提示詞工程了,直接:

QA = HelloQA()
response = QA.forward("How many legs does elephant has?")
print(response.answer)

結(jié)果顯示為“Elephant has four legs.”,就是這么干凈漂亮!

Elephant has four legs.

3.小結(jié)

至此已經(jīng)完成了DSPy的初步入門,上面的鋪墊之后回頭再看看DSPy的三大組件。

Signatures是聲明性規(guī)范,它抽象出DSPy編程模型中模塊的輸入/輸出行為。這些簽名用于指定任務(wù)需要執(zhí)行的操作,而不是如何提示語言模型執(zhí)行任務(wù)。這種方法抽象了提示和微調(diào)過程,使其更加模塊化。

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

Modules取代了現(xiàn)有的手動提示詞技術(shù),并且可以在管道中隨意集成。它利用LM執(zhí)行各種任務(wù)的程序塊。DSPy中的每個(gè)模塊都是參數(shù)化的,這意味著它具有可學(xué)習(xí)的參數(shù),包括提示的細(xì)節(jié)、要使用的語言模型以及提示。它根據(jù)定義的Signatures處理輸入,并根據(jù)該處理返回輸出。

圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū)

DSPy內(nèi)置了如下幾個(gè)模塊:

dspy.Predict :基本預(yù)測變量

dspy.ChainOfThought:教LM在對Signatures響應(yīng)之前逐步思考

dspy.ProgramOfThought:教LM 輸出代碼

dspy.ReAct:能夠?qū)崿F(xiàn)某個(gè)Signatures功能的代理(利用工具)

dspy.MultiChainComparison:可以比較多個(gè) ChainOfThought 輸出以產(chǎn)生最終預(yù)測

例如要實(shí)現(xiàn)RAG,分分鐘的事情:

import dspy
class RAG(dspy.Module):
    def __init__(self, num_passages=3):
        self.retrieve = dspy.Retrieve(k=num_passages)
        self.generate_answer = dspy.ChainOfThought("context, question -> answer")


    def forward(self, question):
        context = self.retrieve(question).passages
        return self.generate_answer(cnotallow=context, questinotallow=question)

Teleprompters優(yōu)化管道中的所有模塊,以便于獲取最優(yōu)的評估指標(biāo)。DSPy 優(yōu)化器,以前稱為提詞器,是一種算法,可以調(diào)整 DSPy 程序的參數(shù)(即提示和/或 LM 權(quán)重),以最大限度地提高指定指標(biāo),例如準(zhǔn)確性。

借助DSPy可以用簡潔明了的用Modules替換手工制作的提示詞工程,而不會降低質(zhì)量或表達(dá)能力。對Modules進(jìn)行參數(shù)化并將提示視為優(yōu)化問題,使DSPy能夠更好地適應(yīng)不同的LM。它的模塊化能夠構(gòu)建更加具有實(shí)用性的應(yīng)用以及更佳細(xì)膩的效果評估標(biāo)準(zhǔn)。

編譯正確的Modules可將不同的 LM 的準(zhǔn)確率從 4-20% 提高到 49-88%。

? 圖解DSPy:Prompt的時(shí)代終結(jié)者?!-AI.x社區(qū) 圖片 ?

本文轉(zhuǎn)載自 ??魯班模錘??,作者: 龐德公

標(biāo)簽
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦