最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

增強(qiáng)LLM大語(yǔ)言模型的推理能力的幾種方式總結(jié)

2023-06-26 14:03 作者:搬磚阿姨不要禿  | 我要投稿

LangChain

?LangChain簡(jiǎn)介

我們都知道,LLM模型本身是不支持多輪對(duì)話的,比如ChatGPT,他是在GPT-3.5的基礎(chǔ)上額外加了Memory,才得以實(shí)現(xiàn)多輪對(duì)話的能力;

那么,除此之外,我們還能疊加什么能力呢:

1)代碼執(zhí)行能力:計(jì)算復(fù)雜數(shù)學(xué)問(wèn)題;

2)搜索引擎能力:提高模型回答內(nèi)容的時(shí)效性;

3)數(shù)據(jù)庫(kù)檢索能力:實(shí)現(xiàn)自定義數(shù)據(jù)的分析、總結(jié);

這里就需要用到LangChain這個(gè)框架;

LangChain是一個(gè)能夠讓LLMs快速的落地的部署框架,相當(dāng)于給你的LLM套上了一層盔甲,構(gòu)建屬于你自己的AI產(chǎn)品;

LangChain目前有兩個(gè)語(yǔ)言的實(shí)現(xiàn):python和nodejs。

?LangChain的主要模塊

LangChain主要包括以下幾個(gè)主要的模塊:

1.Prompt Templates

支持自定義Prompt工程的快速實(shí)現(xiàn)以及和LLMs的對(duì)接;

2.LLMs

提供基于OpenAI API封裝好的大模型,包含常見(jiàn)的OpenAI大模型,也支持自定義大模型的封裝;

3.Utils

大模型常見(jiàn)的植入能力的封裝,比如搜索引擎、Python編譯器、Bash編譯器、數(shù)據(jù)庫(kù)等等;

LangChain支持的外掛1
LangChain支持的外掛2

4.Chains

大模型針對(duì)一系列任務(wù)的順序執(zhí)行邏輯鏈;

5.Agents

通常Utils中的能力、Chains中的各種邏輯鏈都會(huì)封裝成一個(gè)個(gè)工具(Tools)供Agents進(jìn)行智能化調(diào)用;

其中,Chains和Agents兩個(gè)模塊是LangChain的亮點(diǎn)。

?LangChain中的組件

一個(gè)LangChain應(yīng)用是通過(guò)很多個(gè)組件實(shí)現(xiàn)的,LangChain主要支持6種組件:

1.Models:模型

各種類型的模型和模型集成,比如GPT-4;

LangChain 中的模型主要分為三類:

1)LLM(大型語(yǔ)言模型):

這些模型將文本字符串作為輸入并返回文本字符串作為輸出。它們是許多語(yǔ)言模型應(yīng)用程序的支柱。

2)聊天模型( Chat Model):

聊天模型由語(yǔ)言模型支持,但具有更結(jié)構(gòu)化的 API。他們將聊天消息列表作為輸入并返回聊天消息。這使得管理對(duì)話歷史記錄和維護(hù)上下文變得容易。

3)文本嵌入模型(Text Embedding Models):

這些模型將文本作為輸入并返回表示文本嵌入的浮點(diǎn)列表。這些嵌入可用于文檔檢索、聚類和相似性比較等任務(wù)。

2.Prompts:提示

包括提示管理、提示優(yōu)化和提示序列化,目前只支持字符形式的提示;

3.Memory:記憶

用來(lái)保存和模型交互時(shí)的上下文狀態(tài);模型是無(wú)狀態(tài)的,不保存上一次交互時(shí)的數(shù)據(jù),回想一下OpenAI的API服務(wù),它是沒(méi)有上下文概念的,而chatGPT是額外實(shí)現(xiàn)了上下文功能。

為了提供上下文的功能,LangChain提供了記憶組件,用來(lái)在對(duì)話過(guò)程中存儲(chǔ)數(shù)據(jù)。

4.Indexes:索引

用來(lái)結(jié)構(gòu)化文檔,以便和模型交互

5.Chains:鏈

一系列對(duì)各種組件的調(diào)用,就是將其他各個(gè)獨(dú)立的組件串聯(lián)起來(lái)

6.Agents:智能體

決定模型采取哪些行動(dòng),執(zhí)行并且觀察流程,直到完成為止

?LangChain的使用場(chǎng)景

1.個(gè)人助手

2.基于文檔的問(wèn)答系統(tǒng)

3.聊天機(jī)器人

4.Tabular數(shù)據(jù)查詢

5.API交互

6.信息提取

7.文檔總結(jié)

zero-shot CoT

?zero-shot CoT簡(jiǎn)介

直接在問(wèn)題上追加輔助推理Prompt

Paper地址:https://arxiv.org/abs/2205.11916

?zero-shot CoT?技術(shù)原理


Zero-shot CoT原理圖


分為兩個(gè)階段(如上圖所示),第一階段在提問(wèn)的問(wèn)題上追加“Let’s think step by step”這句提示語(yǔ),LLM會(huì)輸出具體的推理過(guò)程;第二階段,在第一階段的問(wèn)題后,拼接LLM輸出的具體推理過(guò)程,并再追加Prompt=“Therefore, the answer (arabic numerals) is”,此時(shí)LLM會(huì)給出答案。如此簡(jiǎn)單的操作,卻可以大幅增加LLM在各項(xiàng)推理任務(wù)中的效果,比如在數(shù)學(xué)推理測(cè)試集GSM8K上,加上提示語(yǔ)后,推理準(zhǔn)確率直接從原先的10.4%提升到了40.4%,可謂神奇。

CoTChain?of?Thought

?CoT簡(jiǎn)介

首先來(lái)看一個(gè)簡(jiǎn)單的例子:計(jì)算 3 * (4 + 5)

1.將問(wèn)題輸入模型:“計(jì)算 3 * (4 + 5)”

2.模型輸出第一步的結(jié)果:“計(jì)算 4 + 5”

3.將上一步的結(jié)果作為輸入,再次輸入模型:“計(jì)算 3 * 9”

4.模型輸出最終結(jié)果:“結(jié)果是 27”

我們可以看到模型是怎么樣通過(guò)一系列連貫的思考鏈(步驟)來(lái)逐步解決問(wèn)題的,這種能力就較多CoT(chain-of-thought)技術(shù)。通過(guò)思維鏈?zhǔn)椒椒ㄓ?xùn)練大型語(yǔ)言模型需要將訓(xùn)練過(guò)程分解成較小、相互關(guān)聯(lián)的任務(wù),以幫助模型理解和生成連貫、上下文感知的響應(yīng)。

Paper地址:https://arxiv.org/abs/2201.11903(最早提出CoT)

CoT相關(guān)發(fā)展paper參考:https://github.com/mattian7/CoT-Papers-Note

二?CoT技術(shù)原理

原理

CoT的主體思想其實(shí)很直白;為了教會(huì)LLM模型學(xué)會(huì)推理,給出一些人工寫好的推理示例,示例里把得到最終答案前,一步步的具體推理步驟說(shuō)清楚,而這些人工寫的詳細(xì)推理過(guò)程,就是思維鏈Prompting,具體例子可參照上圖中藍(lán)色文字部分。CoT的意思是讓LLM模型明白一個(gè)道理;就是在推理過(guò)程中,步子不要邁得太大,否則很容易出錯(cuò),改變思維模式,化大問(wèn)題為小問(wèn)題,步步為營(yíng),積小勝為大勝。

在數(shù)學(xué)計(jì)算數(shù)據(jù)集上的跑分

這里用GPT-3為例,用Chain-of-thought方法訓(xùn)練一個(gè)更先進(jìn)的GPT-3模型,來(lái)簡(jiǎn)單介紹下CoT有關(guān)的實(shí)現(xiàn)原理:

  1. 收集大量的語(yǔ)料庫(kù),包括各種主題和風(fēng)格的文本??梢詮母鞣N來(lái)源獲取數(shù)據(jù),如網(wǎng)站、社交媒體、新聞、書籍等。

  2. 對(duì)語(yǔ)料庫(kù)進(jìn)行預(yù)處理,包括分詞、標(biāo)記化、去除停用詞、處理語(yǔ)法結(jié)構(gòu)等。

  3. 3.定義一個(gè)上下文窗口,即模型需要考慮的前面和后面的文本內(nèi)容。

4.將訓(xùn)練過(guò)程分解為一系列逐步更復(fù)雜的子任務(wù)。例如,可以將訓(xùn)練過(guò)程分解為理解語(yǔ)法和詞匯、生成單詞和短語(yǔ)、生成連貫的句子和段落、理解上下文等子任務(wù)。

5.為每個(gè)子任務(wù)定義適當(dāng)?shù)挠?xùn)練目標(biāo)和損失函數(shù),并使用訓(xùn)練數(shù)據(jù)來(lái)訓(xùn)練模型。例如,為了訓(xùn)練模型理解上下文,可以定義一個(gè)損失函數(shù),它評(píng)估模型生成的響應(yīng)與上下文的相關(guān)性。

6.在訓(xùn)練完成后,使用測(cè)試數(shù)據(jù)來(lái)評(píng)估模型的性能。例如,檢查模型是否能夠生成連貫的響應(yīng),以及是否能夠維護(hù)文本中的思維鏈。

7.迭代地對(duì)模型進(jìn)行微調(diào)和優(yōu)化。

可以看到,在Chain-of-thought訓(xùn)練中,將數(shù)據(jù)集中的輸入分解為一系列任務(wù)是非常關(guān)鍵的一步。一般來(lái)說(shuō),這個(gè)過(guò)程需要根據(jù)特定的任務(wù)和數(shù)據(jù)集來(lái)進(jìn)行定制。以下是一些通用的方法:

1)首先,需要定義一個(gè)目標(biāo)任務(wù),即要求模型完成的最終任務(wù)。例如,如果目標(biāo)任務(wù)是自然語(yǔ)言生成,那么數(shù)據(jù)集中的輸入可能是一句話或一個(gè)段落,模型需要將其轉(zhuǎn)化為自然語(yǔ)言響應(yīng)。

2)然后,需要將目標(biāo)任務(wù)分解為一系列子任務(wù)。這些子任務(wù)應(yīng)該是相互關(guān)聯(lián)的,每個(gè)子任務(wù)的輸出都可以作為下一個(gè)子任務(wù)的輸入。例如,在自然語(yǔ)言生成任務(wù)中,可以將其分解為理解輸入的語(yǔ)義、確定輸出的語(yǔ)法結(jié)構(gòu)、生成文本等子任務(wù)。

每個(gè)子任務(wù)的輸入和輸出都需要定義。例如,在自然語(yǔ)言生成任務(wù)中,輸入可能是一組與上下文相關(guān)的單詞,輸出可能是下一個(gè)單詞或整個(gè)句子。

3)然后,為每個(gè)子任務(wù)定義一個(gè)訓(xùn)練目標(biāo)和相應(yīng)的損失函數(shù)。這些目標(biāo)和損失函數(shù)應(yīng)該與任務(wù)相關(guān),并幫助模型學(xué)習(xí)與該任務(wù)相關(guān)的知識(shí)。

4)最后,需要將所有子任務(wù)組合起來(lái),構(gòu)建一個(gè)完整的模型。每個(gè)子任務(wù)的輸出都將成為下一個(gè)子任務(wù)的輸入,直到完成目標(biāo)任務(wù)。

需要注意的是,如何分解數(shù)據(jù)集中的輸入取決于特定的任務(wù)和數(shù)據(jù)集。一個(gè)好的分解方案應(yīng)該具有適當(dāng)?shù)膶哟谓Y(jié)構(gòu),使得模型能夠在學(xué)習(xí)過(guò)程中逐步掌握更加復(fù)雜的任務(wù)。在實(shí)際應(yīng)用中,可能需要進(jìn)行多次嘗試和調(diào)整,才能找到最優(yōu)的分解方案。

盡管 chain-of-thought 方法在處理一些復(fù)雜問(wèn)題時(shí)可能有所幫助,但它并非萬(wàn)能的。有時(shí),模型可能無(wú)法生成正確的答案,或者在多次迭代中陷入死循環(huán)。

總之,chain-of-thought 是一種有效的技巧,可以幫助大型預(yù)訓(xùn)練語(yǔ)言模型在多步驟任務(wù)和復(fù)雜問(wèn)題中生成連貫的輸出。然而,在實(shí)際應(yīng)用中,可能需要結(jié)合其他技巧來(lái)克服其局限性,以實(shí)現(xiàn)更好的性能。

SCSelf-Consistency

?SC簡(jiǎn)介

CoT提出不久,很快在22年3月份,一項(xiàng)被稱為“Self-Consistency”的改進(jìn)技術(shù)就將GSM8K測(cè)試集準(zhǔn)確率提高到74.4%;

Paper地址:https://arxiv.org/abs/2203.11171

?SC技術(shù)原理

SC思路原理

Self-Consistency”的思路也很直觀(參考上圖):首先可以利用CoT給出幾個(gè)寫了推理過(guò)程的示例,然后要求LLM對(duì)給定的問(wèn)題進(jìn)行推理,如果是CoT,直接輸出一個(gè)推理過(guò)程和答案,整個(gè)過(guò)程就結(jié)束了?!癝elf-Consistency”則不然,它要求LLM輸出多個(gè)不同的推理過(guò)程和答案,然后采用投票的方式選出最佳答案,思路非常簡(jiǎn)單直接,但是效果也確實(shí)好?!癝elf-Consistency”其實(shí)是教導(dǎo)LLM學(xué)會(huì)這么一個(gè)道理:孔乙己說(shuō)過(guò)茴香豆的“茴”字有四種寫法,類似的,一個(gè)數(shù)學(xué)題的正確解法也可以有很多種,每個(gè)不同的推導(dǎo)過(guò)程都指向最終的答案。條條大路通羅馬,雖說(shuō)也有個(gè)別迷路走到北京的,但是迷路的畢竟是少數(shù),看看大多數(shù)人走到哪里,哪里就是正確答案。簡(jiǎn)單的方法往往蘊(yùn)含著深刻的哲學(xué)含義,是不是這道理?

然后,還有一篇paper:https://arxiv.org/abs/2206.02336,他在SC的基礎(chǔ)上進(jìn)行拓展,將一個(gè)prompt問(wèn)題拓展到了多個(gè),檢查推理中間步驟的正確性,以及對(duì)多個(gè)輸出的回答加權(quán)投票:

SC變體

PHP

?PHP簡(jiǎn)介

華為聯(lián)和港中文發(fā)表論文《Progressive-Hint Prompting Improves Reasoning in Large Language Models》,提出 Progressive-Hint Prompting (PHP),用來(lái)模擬人類做題過(guò)程。在 PHP 框架下,Large Language Model (LLM) 能夠利用前幾次生成的推理答案作為之后推理的提示,逐步靠近最終的正確答案。

論文鏈接:https://arxiv.org/abs/2304.09797

代碼鏈接:https://github.com/chuanyang-Zheng/Progressive-Hint

?PHP技術(shù)原理

基本思想:將當(dāng)前推理后得到的答案,作為提示,與原始問(wèn)題進(jìn)行合并,再送給模型推理,如果兩次得到的答案一致,就認(rèn)為是得到的是準(zhǔn)確答案并返回,相當(dāng)于做了一次double?check;

所以,要使用 PHP,需要滿足兩個(gè)要求:

1)問(wèn)題能夠和推理答案進(jìn)行合并,形成新的問(wèn)題;

2) 模型可以處理這個(gè)新的問(wèn)題,給出新的推理答案。

推理過(guò)程

但是,有個(gè)問(wèn)題,如果回答出了錯(cuò)誤答案,作為提示以后會(huì)不會(huì)對(duì)準(zhǔn)確答案有干擾呢?

于是,作者希望 PHP prompt 能夠讓大模型學(xué)習(xí)到兩種映射模式:

1)如果給的 Hint 是正確答案,那么返回的答案依然要是正確答案 (具體如上圖所示的「Hint is the correct answer」);

2)如果給的 Hint 是錯(cuò)誤答案,那么 LLM 要通過(guò)推理,跳出錯(cuò)誤答案的 Hint,返回正確答案(具體如上圖所示的「Hint is the incorrect answer」)。

ToT

?ToT簡(jiǎn)介


人的認(rèn)知過(guò)程


由普林斯頓和谷歌DeepMind聯(lián)合提出的全新「思維樹」框架,讓GPT-4可以自己提案、評(píng)估和決策,推理能力最高可提升1750%。

2022年,前谷歌大腦華人科學(xué)家Jason Wei在一篇思維鏈的開山之作中首次提出,CoT可以增強(qiáng)LLM的推理能力。但即便有了思維鏈,LLM有時(shí)也會(huì)在非常簡(jiǎn)單的問(wèn)題上犯錯(cuò)。最近,來(lái)自普林斯頓大學(xué)和Google DeepMind研究人員提出了一種全新的語(yǔ)言模型推理框架——「思維樹」(ToT)。
ToT將當(dāng)前流行的「思維鏈」方法泛化到引導(dǎo)語(yǔ)言模型,并通過(guò)探索文本(思維)的連貫單元來(lái)解決問(wèn)題的中間步驟。

論文地址:https://arxiv.org/abs/2305.10601

項(xiàng)目地址:https://github.com/kyegomez/tree-of-thoughts

?ToT技術(shù)原理


現(xiàn)有使用LLM解決通用問(wèn)題方法的2個(gè)主要缺點(diǎn):

  1. 局部來(lái)看,LLM沒(méi)有探索思維過(guò)程中的不同延續(xù)——樹的分支。

  2. 總的來(lái)看,LLM不包含任何類型的計(jì)劃、前瞻或回溯,來(lái)幫助評(píng)估這些不同的選擇。


基于上述2個(gè)缺陷,提出了ToT,簡(jiǎn)單來(lái)說(shuō),「思維樹」可以讓LLM:

  • 自己給出多條不同的推理路徑

  • 分別進(jìn)行評(píng)估后,決定下一步的行動(dòng)方案

  • 在必要時(shí)向前或向后追溯,以便實(shí)現(xiàn)進(jìn)行全局的決策

ToT

添加代碼程序

?簡(jiǎn)單鋪墊

上面提到的集中方式,可以說(shuō)都是基于prompt的方式,核心思想是通過(guò)合適的提示語(yǔ)或提示樣本,更好地激發(fā)出LLM本身就具備的推理能力,Google在這個(gè)方向做了大量很有成效的工作。


但是同時(shí),關(guān)于LLM的推理能力,目前還觀察到一個(gè)有趣且費(fèi)解的現(xiàn)象:除了文本外,如果能夠加入程序代碼一起參與模型預(yù)訓(xùn)練,則能大幅提升LLM模型的推理能力;

這就是另一類提高LLM推理能力的做法,基于代碼程序的方法,這類方法的代表就是OpenAI的GPT3.5,ChatGPT肯定具備很強(qiáng)的推理能力,但它并不要求用戶必須提供一些推理示例,所以ChatGPT強(qiáng)大的推理能力,大概率來(lái)源于使用代碼參與GPT 3.5的預(yù)訓(xùn)練。

?核心原理

核心思想是在預(yù)訓(xùn)練過(guò)程中引入程序代碼,和文本一起參與預(yù)訓(xùn)練,以此進(jìn)一步增強(qiáng)LLM的推理能力;

對(duì)比推理能力

圖出自這篇論文:https://arxiv.org/abs/2206.02336


總結(jié)和思考

利用代碼增強(qiáng)LLM推理能力,這體現(xiàn)出一種通過(guò)增加多樣性的訓(xùn)練數(shù)據(jù),來(lái)直接增強(qiáng)LLM推理能力的思路;

而基于Prompt的方法,它并不會(huì)促進(jìn)LLM本身的推理能力,只是讓LLM在解決問(wèn)題過(guò)程中更好地展示出這種能力的技術(shù)方法。


可以看出,前者治本,后者治標(biāo)。當(dāng)然,兩者其實(shí)也是互補(bǔ)的,但從長(zhǎng)遠(yuǎn)看,治本的方法更重要。


增強(qiáng)LLM大語(yǔ)言模型的推理能力的幾種方式總結(jié)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
连山| 富平县| 漳平市| 平遥县| 延寿县| 三门县| 正镶白旗| 全南县| 宾阳县| 朝阳市| 海晏县| 黔江区| 永宁县| 浦城县| 抚顺市| 安宁市| 东乌珠穆沁旗| 疏附县| 财经| 台湾省| 轮台县| 板桥市| 宁河县| 旬邑县| 仁化县| 怀来县| 华阴市| 桑植县| 高清| 庆阳市| 钦州市| 建始县| 六盘水市| 政和县| 台东县| 如东县| 丘北县| 定陶县| 新宁县| 松潘县| 乐昌市|