Prompt工程師指南[從基礎到進階篇]:用於開發和最佳化提示,以有效地使用語言模型(LMs)進行各種應用和研究主題

汀、人工智慧發表於2023-05-14

Prompt工程師指南[從基礎到進階篇]:用於開發和最佳化提示,以有效地使用語言模型(LMs)進行各種應用和研究主題

Prompt工程是一種相對較新的學科,用於開發和最佳化提示,以有效地使用語言模型(LMs)進行各種應用和研究主題。Prompt工程技能有助於更好地理解大型語言模型(LLMs)的能力和侷限性。研究人員使用Prompt工程來改善LLMs在各種常見和複雜任務上的能力,

1.Prompting介紹

Prompt engineering(提示工程)是一門相對較新的學科,旨在開發和最佳化提示以有效地利用語言模型 (LMs) 進行各種應用和研究主題。提示工程技能有助於更好地理解大型語言模型 (LLMs) 的能力和侷限性。研究人員使用提示工程來提高LLMs在各種常見和複雜任務上的能力,例如問答和算術推理。開發人員使用提示工程來設計與LLMs和其他工具介面的穩健和有效的提示技術。

本指南介紹了標準提示的基礎知識,以提供如何使用提示與大型語言模型 (LLMs) 進行互動和指導的大致思路。

除非另有說明,所有示例均使用 text-davinci-003 (在 OpenAI 的 playground 上使用),使用預設配置,例如 temperature=0.7 和 top-p=1。

提綱:


1.1基本提示

使用提示已經可以實現很多功能,但結果的質量取決於您提供的資訊量。提示可以包含諸如您傳遞給模型的“指令”或“問題”以及其他詳細資訊,例如“輸入”或“示例”。

以下是一個簡單提示的基本示例:

Prompt

The sky is

Output:

blue

The sky is blue on a clear day. On a cloudy day, the sky may be gray or white.

如您所見,語言模型輸出了一系列在上下文“天空是”下有意義的字串。輸出可能出乎意料,或與我們想要完成的任務相去甚遠。

這個基本示例也突出了提供更多上下文或具體說明我們想要實現什麼的必要性。

讓我們試著稍微改進一下:

Prompt:

Complete the sentence: 

The sky is

Output:

 so  beautiful today.

這樣是不是好多了?我們告訴模型要完成句子,所以結果看起來更好,因為它恰好遵循了我們要求它做的事情(“完成句子”)。這種設計最佳提示以指導模型執行任務的方法就是所謂的 提示工程。

上面的例子是現今LLMs能夠實現的基本演示。如今的LLMs能夠執行各種先進任務,從文字摘要到數學推理再到程式碼生成。


1.2關於LLM設定的一些說明

在使用提示時,您將透過API或直接與LLM進行互動。您可以配置一些引數來獲取不同的提示結果。

Temperature - 溫度,簡而言之,溫度越低,結果越確定,意思是始終選擇最可能的下一個標記。增加溫度可能會導致更多的隨機性,從而鼓勵更多多樣化或有創造性的輸出。我們實際上是增加了其他可能標記的權重。在應用方面,對於基於事實的問答之類的任務,我們可能希望使用較低的溫度來鼓勵更準確和簡明的回答。對於詩歌生成或其他有創造性的任務,增加溫度可能會更有益。
Top_p - 同樣,使用溫度的一種抽樣技術稱為核取樣(nucleus sampling)時,可以透過top_p來控制模型在生成響應時的確定性。如果您想要精確和客觀的答案,請將其保持較低。如果您想要更多樣化的回答,請將其增加到較高的值。

一般建議是隻更改一個引數而非同時更改兩個引數。

在開始一些基本示例之前,請記住您的結果可能因您使用的LLM版本而異。


1.3 標準提示

我們上面嘗試了一個非常簡單的提示。標準提示具有以下格式:

<Question>?

這可以按照很多問答資料集的標準格式進行格式化,如下所示:

Q: <Question>?
A: 

根據上面的標準格式,一種流行且有效的提示技術被稱為few-shot提示,其中我們提供示例。
Few-shot提示可以格式化如下:

<Question>?
<Answer>

<Question>?
<Answer>

<Question>?
<Answer>

<Question>?

您可以猜測它的問答(QA)格式版本看起來像這樣:

Q: <Question>?
A: <Answer>

Q: <Question>?
A: <Answer>

Q: <Question>?
A: <Answer>

Q: <Question>?
A:

請注意,不需要使用QA格式。格式取決於手頭的任務。例如,您可以執行一個簡單的分類任務並提供演示該任務的示例,如下所示:
Prompt:

This is awesome! // Positive
This is bad! // Negative
Wow that movie was rad! // Positive
What a horrible show! //

Output:

Negative

Few-shot prompts可以實現上下文學習,即語言模型僅僅透過少量的樣本就能夠學習任務。在即將釋出的指南中,我們將看到更多這方面的實際應用。


1.4 提示的元素

隨著我們涵蓋越來越多的提示工程的例項和應用,您會發現提示由以下特定元素組成:

指令 - 您希望模型執行的特定任務或指令

上下文 - 可涉及外部資訊或額外的上下文,可以引導模型產生更好的響應

輸入資料 - 我們感興趣的輸入或問題,希望找到對應的回答

輸出指標 - 指示輸出的型別或格式。

並不是所有的元件都是提示所必需的,格式取決於手頭的任務。我們將在即將釋出的指南中提供更多具體的例子。


1.5 設計提示的一些技巧

以下是設計提示時需要記住的一些技巧:

  • 從簡單開始
    在開始設計提示時,您應該記住,這是一個需要大量實驗和迭代才能得到最佳結果的過程。使用像OpenAI或Cohere這樣的簡單 playground 是一個很好的起點。

您可以從簡單的提示開始,隨著不斷新增元素和上下文,以獲得更好的結果。在這個過程中對提示進行版本控制非常重要。在我們閱讀指南的過程中,您將看到許多例子,其中具體、簡單和簡明的提示通常會給您帶來更好的結果。

當您有一個涉及許多不同子任務的大任務時,可以嘗試將任務分解成更簡單的子任務,並隨著獲得更好的結果逐步構建。這可以避免在提示設計過程中新增過多的複雜性。

  • 指令
    您可以使用命令指導模型執行各種簡單任務來設計有效的提示,例如“寫入”,“分類”,“摘要”,“翻譯”,“排序”等。

請記住,您也需要進行大量實驗,以檢視哪種方式效果最佳。嘗試使用不同的關鍵字、上下文和資料來嘗試不同的指令,以檢視哪種方法最適合您的特定用例和任務。通常情況下,上下文與您要執行的任務越具體和相關,效果越好。在即將釋出的指南中,我們將涉及到取樣和新增更多上下文的重要性。

其他人建議將指令放置在提示的開頭。同時,建議使用清晰的分隔符比如“###”來分隔指令和上下文。

例如:

Prompt:

###nstruction ###
Translate the text below to Spanish:

Text: "hello!"

Output:

¡Hola!
  • 具體方式
    在設計提示時,要非常具體,明確要求模型執行的任務。提示越具體、詳細,結果就越好。這在你需要特定的生成結果或風格時尤為重要。並沒有特定的令牌或關鍵字可以帶來更好的結果,更重要的是有一個良好的格式和描述性提示。實際上,在提示中提供示例非常有效,可以獲得特定格式的期望輸出。
    在設計提示時,您還應考慮提示的長度,因為提示的長度有限制。思考提示應該多具體、詳細是需要考慮的問題。太多不必要的細節並不一定是一個好方法。細節應該是相關的,對任務有所貢獻。這是你需要進行大量實驗和迭代來最佳化提示的應用程式。

作為一個例子,讓我們嘗試一個簡單的提示,從一段文字中提取特定資訊。

Prompt:

Extract the name of places in the following text. 

Desired format:
Place: <comma_separated_list_of_company_names>

Input: "Although these developments are encouraging to researchers, much is still a mystery. “We often have a black box between the brain and the effect we see in the periphery,” says Henrique Veiga-Fernandes, a neuroimmunologist at the Champalimaud Centre for the Unknown in Lisbon. “If we want to use it in the therapeutic context, we actually need to understand the mechanism.""

Output:

Place: Champalimaud Centre for the Unknown, Lisbon

輸入文字內容來自於這篇Nature的文章 this Nature article.

  • 避免不準確性

根據上面關於提供詳細資訊和改善格式的提示,很容易陷入想要過於聰明的提示陷阱,從而可能建立不準確的描述。通常更直接和具體的描述更為有效。這裡的類比非常類似於有效溝通,越直接,資訊傳遞就越有效。

例如,您可能有興趣瞭解提示工程的概念。您可以嘗試像這樣的提示:

解釋提示工程的概念。保持解釋簡短,只有幾句話,不要過於描述。

從上面的提示中並不清楚要使用多少句話以及什麼樣的風格。使用上面的提示仍然可能得到良好的回覆,但更好的提示是非常具體,簡潔明瞭,直截了當的。例如:

用 2-3 句話向一名高中學生解釋提示工程的概念。
  • 什麼該做什麼不該做
    在設計提示時,另一個常見的技巧是避免說出什麼不要做,而是說出應該做什麼。這鼓勵更加具體化和專注於細節,從而產生良好的模型響應。

以下是一個電影推薦聊天機器人失敗的示例,因為我寫的指示語裡側重於要避免什麼。

Prompt:

以下是一個向客戶推薦電影的代理。不要詢問興趣愛好。不要詢問個人資訊。

顧客:請根據我的興趣愛好推薦一部電影。
代理:

Output:

當然,我可以根據您的興趣推薦電影。您想看什麼型別的電影?您喜歡動作片、喜劇片、愛情片還是其他型別的電影?

這裡是更好的Prompt:

Prompt:

以下是一個向客戶推薦電影的代理。該代理應該從全球熱門電影中推薦電影,不要詢問使用者的喜好,避免詢問個人資訊。如果代理無法推薦電影,則應回覆“對不起,今天無法找到推薦的電影。”

顧客:請根據我的興趣愛好推薦一部電影。
代理:

Output:

對不起,我沒有關於您的興趣愛好的資訊。然而,以下是當前全球熱門電影的列表:[電影列表]。希望您能找到自己喜歡的電影!

上述示例部分摘自"OpenAI API的提示工程最佳實踐"文章。

2.基礎提示 Basic Prompting

在上一篇指南中,我們介紹了並且提供了一個基本的 prompt 示例。

在這篇指南中,我們將提供更多的 prompt 使用示例,並介紹在更高階的指南中將會很重要的關鍵概念。

通常,學習概念的最佳方法是透過示例進行學習。下面我們將涵蓋一些精心製作的 prompt 的示例,這些 prompt 可以用於執行各種有趣和不同的任務。

主題:


2.1 文字摘要

自然語言生成中的一項標準任務是文字摘要。文字摘要可以包含許多不同的風格和領域。語言模型最有前途的應用之一是將文章和概念總結成快速易讀的摘要。讓我們嘗試使用提示來進行基本的摘要任務。

假設我有興趣瞭解抗生素,我可以嘗試使用以下提示:

Prompt:

解釋什麼是抗生素

A:

Output:

抗生素是一種用於治療細菌感染的藥物。它們透過殺死細菌或防止其繁殖來使機體免疫系統對抗感染。抗生素通常以口服藥片、膠囊或液體溶液的形式服用,有時也會靜脈注射。它們對病毒感染無效,不當使用會導致抗生素耐藥性。

在這裡,"A:" 是一個顯式的提示格式,用於問題回答。我在這裡使用它來告訴模型存在預期的後續內容。在這個例子中,這並不清楚有什麼用處,但我們會在後面的例子中詳細講解。讓我們假設這個輸出資訊太多,我們希望進一步摘要。我們可以指示模型進行一句話總結,如下所示:
Prompt:

抗生素是一種用於治療細菌感染的藥物。它們透過殺死細菌或防止其繁殖來使機體免疫系統對抗感染。抗生素通常以口服藥片、膠囊或液體溶液的形式服用,有時也會靜脈注射。它們對病毒感染無效,不當使用會導致抗生素耐藥性。

請用一句話解釋上面的內容:

Output:

抗生素是一種藥物,用於透過殺死或防止細菌繁殖來治療細菌感染,但不對病毒有效,不當使用會導致抗生素耐藥性。

在不過多關注上述輸出的準確性的情況下,我們可以看到模型嘗試將段落總結為一句話。您可以聰明地使用指示,但我們將在以後的章節中介紹。隨時暫停並進行實驗,看看是否可以得到更好的結果。


2.2 資訊提取

儘管語言模型是被訓練用於執行自然語言生成及相關任務的,但它也非常擅長執行分類和一系列其他的自然語言處理(NLP)任務。

以下是一個從給定段落中提取資訊的提示示例。

Prompt:

研究論文中的作者貢獻宣告和致謝應明確並具體說明作者在撰寫和分析手稿過程中是否以及在什麼程度上使用了諸如ChatGPT這樣的AI技術。它們還應指出使用了哪些LLMs。這將提醒編輯和審稿人更仔細地審查手稿,以尋找潛在的偏見、不準確性和不正確的來源證明。同樣,科學期刊應在選擇提交的手稿時透明地公開使用LLMs的情況。

提及該段落中提到的大型語言模型產品是什麼?

Output:

該段落中提到的大型語言模型產品是ChatGPT。

我們可以透過許多方法來改進上述結果,但這已經非常有用了。

現在顯然可以透過簡單地指示它要做什麼來要求模型執行不同的任務。這是AI產品構建者已經在使用的強大功能,以構建強大的產品和體驗。

段落來源: ChatGPT: five priorities for research


2.3 問答

獲取模型對特定答案的響應的最佳方法之一是改進提示的格式。如前所述,提示可以結合指令、上下文、輸入和輸出指示符來獲得更好的結果。雖然這些元件並非必需,但隨著您指令越具體,您將獲得更好的結果。以下是如何在更具結構的提示中進行的示例。
Prompt:

根據以下內容回答問題。保持答案簡短。如果不確定答案,請回答“不確定答案”。

背景:Teplizumab可以追溯到新澤西州的一家名為Ortho Pharmaceutical的藥品公司。在那裡,科學家們生成了一種名為OKT3的抗體的早期版本。該分子最初是從小鼠中提取的,它能夠結合到T細胞的表面,並限制它們的細胞殺傷潛力。1986年,它獲得批准,用於幫助預防腎臟移植後的器官排斥,成為首個允許人類使用的治療性抗體。

問題:OKT3最初是從哪裡提取的?

答案:

Output:

OKT3最初是從小鼠中提取的。

內容來源: Nature.


2.4 文字分類

到目前為止,我們已經使用簡單的指令執行任務。作為一個 Prompt 工程師,您需要提高提供更好指令的能力。但這還不夠!您還會發現,在更難的用例中,僅提供指令是不夠的。這就是您需要更多考慮上下文和可以在提示中使用的不同元素的地方。您可以提供的其他元素包括輸入資料或示例。

讓我們嘗試透過提供文字分類的示例來演示這一點。

Prompt:

Classify the text into neutral, negative or positive. 

Text: I think the food was okay. 
Sentiment:

Output:

Neutral 

這裡的回答是Neutral(首字母大寫),本例子是想讓回答變成小寫的neutral

我們給出了分類文字的指令,模型以'Neutral'響應,這是正確的。沒有什麼錯的,但是假設我們真正需要的是讓模型以我們想要的確切格式返回標籤。所以,我們不想要Neutral,而是想要它返回全小寫的neutral。我們如何做到這一點。有不同的方法來做到這一點。我們關心的是具體性,在提示中提供的資訊越多,結果就越好。我們可以嘗試提供示例來指定正確的行為。讓我們再試一次:
Prompt:

Classify the text into neutral, negative or positive. 

Text: I think the vacation is okay.
Sentiment: neutral 

Text: I think the food was okay. 
Sentiment:

Output:

neutral

完美!這次模型返回了neutral,這正是我要尋找的具體標籤。似乎提示中提供的示例幫助模型在其輸出中變得更加具體。為了強調為什麼有時候具體性很重要,請看這個例子並找出問題:
Prompt:

Classify the text into nutral, negative or positive. 

Text: I think the vacation is okay.
Sentiment:

Output:

Neutral

這裡的問題是什麼?


2.5 對話

透過prompt engineering,您可以告訴LLM系統如何行事,其意圖和身份,這在構建客戶服務聊天機器人等對話系統時特別有用。

例如,讓我們建立一個對問題生成更多技術和科學響應的對話系統。請注意,我們透過指令明確告訴它如何行事。這有時被稱為角色提示。

Prompt:

下面是與一名技術和科學氣氛的AI研究助理進行的對話。

人類:你好,你是誰?
AI:問候!我是一個AI研究助手。今天我能幫你什麼忙嗎?
人類:你能告訴我黑洞的形成嗎?
AI:

Output:

當然可以!黑洞是時空中引力極強的區域,甚至連光也無法逃脫。當一個非常質量巨大的恆星死亡並且其核心坍塌時,就會形成一個無限密度的奇點,從而形成黑洞。奇點的強烈引力將周圍的所有物質和輻射吸引進來,從而形成黑洞。

我們的AI研究助手聽起來有點太技術了,對吧?好的,讓我們改變這種行為,指示系統提供更易於理解的答案。

Prompt:

下面是與一名AI研究助手的對話。助手的回答應該易於被小學生理解。
人類:你好,你是誰?
AI:問候!我是一個AI研究助手。今天我能幫你什麼忙嗎?
人類:你能告訴我黑洞的形成嗎?
AI:

Output:

當然可以!黑洞是由於非常質量巨大的恆星耗盡燃料而坍塌形成的。恆星的引力非常強大,甚至連光也無法逃離其吸引。這會在時空中創造一個引力極強的點,稱為黑洞。

我認為我們取得了一些進展。你可以繼續改進。我相信如果你新增更多的例子,你可能會得到更好的結果。


2.6 程式碼生成

程式碼生成是LLM非常有效的應用之一,Copilot是一個很好的例子。透過巧妙的提示,你可以執行大量的程式碼生成任務。讓我們看一些下面的例子。

首先,讓我們嘗試一個簡單的程式來問候使用者。

Prompt:

/*
詢問使用者姓名並說“Hello”
*/

Output:

let name = prompt("What is your name?");
console.log(`Hello, ${name}!`);

你可以看到,我們甚至不需要指定要使用的語言。

讓我們稍微提高一下難度。我想向你展示在設計提示時LLM可以有多強大。

Prompt:

"""
Table departments, columns = [DepartmentId, DepartmentName]
Table students, columns = [DepartmentId, StudentId, StudentName]
建立一個MySQL查詢,查詢電腦科學系的所有學生
"""

Output:

SELECT StudentId, StudentName 
FROM students 
WHERE DepartmentId IN (SELECT DepartmentId FROM departments WHERE DepartmentName = 'Computer Science');

這非常令人印象深刻。在這種情況下,我們提供了關於資料庫模式的資料,並要求它生成一個有效的MySQL查詢。

2.7 推理

也許目前對於LLM來說最具挑戰性的任務之一是需要一定推理能力的任務。推理是我最為期待的領域之一,因為LLM可以從中得到各種複雜的應用。

在涉及到數學能力的任務方面已經有了一些改進。儘管如此,需要注意的是目前的LLM在執行推理任務方面仍然存在困難,因此需要更高階的提示工程技術。我們將在下一篇指南中介紹這些高階技術。現在,我們將介紹一些基本示例,以展示LLM的算術能力。

Prompt:

9000 * 9000等於多少?

Output:

81,000,000

讓我們試試更難的題目。

Prompt:

這組數字中的奇數加起來是一個偶數:15, 32, 5, 13, 82, 7, 1. 

A: 

Output

不,這組數字中的奇數加起來是一個奇數:119。

這是錯誤的!讓我們透過改進提示來改進結果。

Prompt:

這組數字中的奇數加起來是一個偶數:15, 32, 5, 13, 82, 7, 1. 

透過分步解決問題。首先,識別出奇數,將它們相加,並指示結果是奇數還是偶數。

Output:

奇數:15, 5, 13, 7, 1
總和:41
41是一個奇數。

好多了,對吧?順便說一句,我嘗試了幾次,有時系統會失敗。如果您提供更好的指示結合示例,可能有助於獲得更準確的結果。
另外GPT4在這方面有很大的改進和提升!

我們將繼續在本節中包含更多常見應用的示例。

在接下來的指南中,我們將介紹更高階的提示工程概念,以提高在所有這些和更難的任務上的效能。


2.7 Python 筆記本

描述 筆記本
學習如何使用 openai 和 LangChain 庫執行許多不同型別的常見任務 開始使用提示工程

3.高階Prompting

到這一步,應該很明顯,改進提示有助於在不同任務上獲得更好的結果。這就是Prompt工程背後的整個理念。

雖然之前的例子很有趣,但在我們深入瞭解更高階的概念之前,讓我們先正式地介紹一些概念。

Topics:


3.1 零樣本Prompting

目前,透過大量資料訓練並根據指示進行調整的LLM能夠在零樣本情況下執行任務。
我們在前面的章節中嘗試了一些零樣本的例子。這是我們使用過的其中一個例子:

Prompt:

Classify the text into neutral, negative, or positive. 

Text: I think the vacation is okay.
Sentiment:

輸出:

Neutral

請注意,上面的提示中我們沒有向模型提供任何示例——這就是零樣本能力的工作方式。當零樣本不起作用時,建議在提示中提供演示或示例。
下面我們將討論少樣本Prompting這種方法。


3.2 少樣本Prompting

儘管大型語言模型已經展示出了非凡的零樣本能力,但在使用零樣本設定時,它們在更復雜的任務上仍然表現不足。為了改進這一點,少樣本Prompting被用作一種技術,以實現上下文學習,即在提示中提供演示以引導模型取得更好的表現。這些演示作為後續例子的條件,我們希望模型能夠生成一個響應。

讓我們透過一個由 Brown et al. 2020.
提出的例子來演示少樣本Prompting。在這個例子中,任務是在句子中正確使用一個新詞。

Prompt:

A "whatpu" is a small, furry animal native to Tanzania. An example of a sentence that uses
the word whatpu is:
We were traveling in Africa and we saw these very cute whatpus.
To do a "farduddle" means to jump up and down really fast. An example of a sentence that uses
the word farduddle is:

Output:

When we won the game, we all started to farduddle in celebration.

我們可以觀察到,僅提供一個示例(即1-shot)即可讓模型學會執行任務。對於更難的任務,我們可以嘗試增加示例(例如3-shot,5-shot,10-shot等)來進行實驗。

根據Min等人Min et al. (2022),的研究結果,以下是一些關於少樣本演示/示例的提示:

-“標籤空間和演示文字分佈對於效能都很重要(無論個別輸入的標籤是否正確)”
-無論您是否只使用隨機標籤,所使用的格式也對效能起關鍵作用,這要比沒有標籤好得多。
-其他結果顯示,從真實標籤分佈(而不是均勻分佈)中選擇隨機標籤也有所幫助。

讓我們嘗試一些例子。首先,讓我們嘗試一個具有隨機標籤的示例(意味著將“Negative”和“Positive”標籤隨機分配給輸入):

Prompt:

This is awesome! // Negative
This is bad! // Positive
Wow that movie was rad! // Positive
What a horrible show! //

Output:

Negative

我們仍然得到了正確的答案,即使標籤已經被隨機化了。請注意,我們也保留了格式,這也有助於結果。
實際上,透過進一步的實驗,我們發現我們正在嘗試的新GPT模型甚至變得更加強大,即使格式是隨機的。例如:

Prompt:

Positive This is awesome! 
This is bad! Negative
Wow that movie was rad!
Positive
What a horrible show! --

Output:

Negative

正如你所說,我們需要進行更全面的分析以確認這是否適用於不同和更復雜的任務,包括不同變體的提示。

少樣本(Few-shot) Prompting的限制

標準的少樣本提示法對許多工來說效果良好,但在處理更復雜的推理任務時仍然不是完美的技術,讓我們來演示一下為什麼會出現這種情況。
你還記得我們之前提供的以下任務嗎:

The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1. 

A: 

如果我們重試,模型會有下面的輸出

Yes, the odd numbers in this group add up to 107, which is an even number.

這不是正確的回答,不僅凸顯了這些系統的侷限性,還表明需要更先進的提示工程。
讓我們嘗試新增一些示例,看看few-shot prompting是否可以改善結果。

Prompt:

The odd numbers in this group add up to an even number: 4, 8, 9, 15, 12, 2, 1.
A: The answer is False.

The odd numbers in this group add up to an even number: 17,  10, 19, 4, 8, 12, 24.
A: The answer is True.

The odd numbers in this group add up to an even number: 16,  11, 14, 4, 8, 13, 24.
A: The answer is True.

The odd numbers in this group add up to an even number: 17,  9, 10, 12, 13, 4, 2.
A: The answer is False.

The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1. 
A: 

Output:

The answer is True.

這不是正確的回答,這不僅突出了這些系統的侷限性,而且需要更先進的提示工程。讓我們嘗試新增一些示例,看看少量提示是否會改善結果。

標準的少量提示在許多工中表現良好,但在處理更復雜的推理任務時仍然不是完美的技術。讓我們演示一下為什麼會出現這種情況。你還記得我們之前提供的任務嗎?

“請計算以下數學問題:24 ÷ 3”

答案是8,但如果我們將問題更改為“請計算以下數學問題:3 ÷ 24”,模型的答案將會是0.這表明,對於某些更復雜的推理問題,少量提示是不足以得到可靠的響應的。上面的示例提供了任務的基本資訊。如果你仔細觀察,就會發現我們引入的任務型別涉及更多的推理步驟。換句話說,如果我們將問題分解成步驟並向模型演示,這可能會有所幫助。最近,思維鏈 chain-of-thought (CoT) prompting提示已經流行起來,以解決更復雜的算術、常識和符號推理任務。

總的來說,提供示例對於解決一些任務是有用的。當零量提示和少量提示不足以滿足需求時,這可能意味著模型所學到的知識不足以在任務中表現良好。從這裡開始,建議考慮微調模型或嘗試更高階的提示技術。接下來,我們將介紹一種流行的提示技術,即思維鏈提示,它已經廣受歡迎。


3.3思維鏈Prompting

Wei et al. (2022)等人的論文中引入的Chain-of-Thought(CoT)prompting,透過中間推理步驟實現複雜的推理能力。
您可以將其與few-shot prompting結合使用,以獲得更好的結果,用於需要在回答之前進行推理的更復雜任務。

Prompt:

The odd numbers in this group add up to an even number: 4, 8, 9, 15, 12, 2, 1.
A: Adding all the odd numbers (9, 15, 1) gives 25. The answer is False.

The odd numbers in this group add up to an even number: 17,  10, 19, 4, 8, 12, 24.
A: Adding all the odd numbers (17, 19) gives 36. The answer is True.

The odd numbers in this group add up to an even number: 16,  11, 14, 4, 8, 13, 24.
A: Adding all the odd numbers (11, 13) gives 24. The answer is True.

The odd numbers in this group add up to an even number: 17,  9, 10, 12, 13, 4, 2.
A: Adding all the odd numbers (17, 9, 13) gives 39. The answer is False.

The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1. 
A:

Output:

Adding all the odd numbers (15, 5, 13, 7, 1) gives 41. The answer is False.

哇!我們可以看到當我們提供了推理步驟時,得到了完美的結果。我們可以透過提供更少的示例來解決這個任務,即,只需要一個示例似乎就足夠了:

Prompt:

The odd numbers in this group add up to an even number: 4, 8, 9, 15, 12, 2, 1.
A: Adding all the odd numbers (9, 15, 1) gives 25. The answer is False.

The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1. 
A:

Output:

Adding all the odd numbers (15, 5, 13, 7, 1) gives 41. The answer is False.

請注意,作者聲稱這是足夠大的語言模型出現的新興能力。


3.4零樣本思維鏈zero-shot-cot

最近提出的一個想法是“零樣本思維鏈”(Zero-Shot CoT) zero-shot CoT (Kojima et al. 2022)。它的基本思想是在原始提示中新增“一步一步地思考”。讓我們嘗試一個簡單的問題,並看看這個模型的表現:

Prompt:

I went to the market and bought 10 apples. I gave 2 apples to the neighbor and 2 to the repairman. I then went and bought 5 more apples and ate 1. How many apples did I remain with?

Output:

11 apples

答案是不正確的!現在讓我們嘗試一下特殊提示。

Prompt:

I went to the market and bought 10 apples. I gave 2 apples to the neighbor and 2 to the repairman. I then went and bought 5 more apples and ate 1. How many apples did I remain with?

Let's think step by step.

Output:

First, you started with 10 apples.
You gave away 2 apples to the neighbor and 2 to the repairman, so you had 6 apples left.
Then you bought 5 more apples, so now you had 11 apples.
Finally, you ate 1 apple, so you would remain with 10 apples.

這個簡單的提示在這個任務中非常有效,令人印象深刻。特別是在你沒有太多示例可用於提示時,它非常有用。


3.5自洽性Self-Consistency

也許目前用於提示工程的更高階的技術之一是Self-Consistency。由 Wang et al. (2022)等人提出,Self-Consistency的目標是“替代鏈式思維提示中使用的樸素貪婪解碼方法”。其思想是透過few-shot CoT取樣多個不同的推理路徑,並使用生成的結果選擇最一致的答案。這有助於提高CoT提示在涉及算術和常識推理的任務中的效能。

讓我們嘗試以下算術推理示例:

Prompt:

When I was 6 my sister was half my age. Now
I’m 70 how old is my sister?

Output:

35

輸出是錯誤的!我們如何使用Self-Consistency來改善它呢?讓我們試一試。我們將使用Wang等人(2022年)的few-shot示例(表17):

Prompt:

Q: There are 15 trees in the grove. Grove workers will plant trees in the grove today. After they are done,
there will be 21 trees. How many trees did the grove workers plant today?
A: We start with 15 trees. Later we have 21 trees. The difference must be the number of trees they planted.
So, they must have planted 21 - 15 = 6 trees. The answer is 6.

Q: If there are 3 cars in the parking lot and 2 more cars arrive, how many cars are in the parking lot?
A: There are 3 cars in the parking lot already. 2 more arrive. Now there are 3 + 2 = 5 cars. The answer is 5.

Q: Leah had 32 chocolates and her sister had 42. If they ate 35, how many pieces do they have left in total?
A: Leah had 32 chocolates and Leah’s sister had 42. That means there were originally 32 + 42 = 74
chocolates. 35 have been eaten. So in total they still have 74 - 35 = 39 chocolates. The answer is 39.

Q: Jason had 20 lollipops. He gave Denny some lollipops. Now Jason has 12 lollipops. How many lollipops
did Jason give to Denny?
A: Jason had 20 lollipops. Since he only has 12 now, he must have given the rest to Denny. The number of
lollipops he has given to Denny must have been 20 - 12 = 8 lollipops. The answer is 8.

Q: Shawn has five toys. For Christmas, he got two toys each from his mom and dad. How many toys does
he have now?
A: He has 5 toys. He got 2 from mom, so after that he has 5 + 2 = 7 toys. Then he got 2 more from dad, so
in total he has 7 + 2 = 9 toys. The answer is 9.

Q: There were nine computers in the server room. Five more computers were installed each day, from
monday to thursday. How many computers are now in the server room?
A: There are 4 days from monday to thursday. 5 computers were added each day. That means in total 4 * 5 =
20 computers were added. There were 9 computers in the beginning, so now there are 9 + 20 = 29 computers.
The answer is 29.

Q: Michael had 58 golf balls. On tuesday, he lost 23 golf balls. On wednesday, he lost 2 more. How many
golf balls did he have at the end of wednesday?
A: Michael initially had 58 balls. He lost 23 on Tuesday, so after that he has 58 - 23 = 35 balls. On
Wednesday he lost 2 more so now he has 35 - 2 = 33 balls. The answer is 33.

Q: Olivia has $23. She bought five bagels for $3 each. How much money does she have left?
A: She bought 5 bagels for $3 each. This means she spent 5

Q: When I was 6 my sister was half my age. Now I’m 70 how old is my sister?
A:

Output 1:

When I was 6 my sister was half my age, so she was 3. Now I am 70, so she is 70 - 3 = 67. The answer is 67.

Output 2:

When the narrator was 6, his sister was half his age, which is 3. Now that the narrator is 70, his sister would be 70 - 3 = 67 years old. The answer is 67.

Output 3:

When I was 6 my sister was half my age, so she was 3. Now I am 70, so she is 70/2 = 35. The answer is 35.

將最終答案計算出來需要幾個步驟(詳見論文),但為簡單起見,我們可以看到已經出現了絕大多數的答案,因此這實質上將成為最終答案。


3.6生成知識Prompting

LLM(大型語言模型)不斷得到改進,其中一種流行的技術是能夠整合知識或資訊來幫助模型進行更準確的預測。

使用類似的思路,模型是否也可以在做出預測之前生成知識?這正是Liu等人 Liu et al. 2022在論文中所嘗試的——生成用作提示的知識。特別是,這對於常識推理等任務有多麼有幫助?

讓我們嘗試一個簡單的提示:

Prompt:

Part of golf is trying to get a higher point total than others. Yes or No?

Output:

Yes.

這種錯誤揭示了LLMs在執行需要更多關於世界的知識的任務時的侷限性。我們如何透過知識生成來改善這一點呢?

首先,我們生成一些“知識”:

Prompt:

Input: Greece is larger than mexico.
Knowledge: Greece is approximately 131,957 sq km, while Mexico is approximately 1,964,375 sq km, making Mexico 1,389% larger than Greece.

Input: Glasses always fog up.
Knowledge: Condensation occurs on eyeglass lenses when water vapor from your sweat, breath, and ambient humidity lands on a cold surface, cools, and then changes into tiny drops of liquid, forming a film that you see as fog. Your lenses will be relatively cool compared to your breath, especially when the outside air is cold.

Input: A fish is capable of thinking.
Knowledge: Fish are more intelligent than they appear. In many areas, such as memory, their cognitive powers match or exceed those of ’higher’ vertebrates including non-human primates. Fish’s long-term memories help them keep track of complex social relationships.

Input: A common effect of smoking lots of cigarettes in one’s lifetime is a higher than normal chance of getting lung cancer.
Knowledge: Those who consistently averaged less than one cigarette per day over their lifetime had nine times the risk of dying from lung cancer than never smokers. Among people who smoked between one and 10 cigarettes per day, the risk of dying from lung cancer was nearly 12 times higher than that of never smokers.

Input: A rock is the same size as a pebble.
Knowledge: A pebble is a clast of rock with a particle size of 4 to 64 millimetres based on the Udden-Wentworth scale of sedimentology. Pebbles are generally considered larger than granules (2 to 4 millimetres diameter) and smaller than cobbles (64 to 256 millimetres diameter).

Input: Part of golf is trying to get a higher point total than others.
Knowledge:

Knowledge 1:

The objective of golf is to play a set of holes in the least number of strokes. A round of golf typically consists of 18 holes. Each hole is played once in the round on a standard golf course. Each stroke is counted as one point, and the total number of strokes is used to determine the winner of the game.

Knowledge 2:

Golf is a precision club-and-ball sport in which competing players (or golfers) use many types of clubs to hit balls into a series of holes on a course using the fewest number of strokes. The goal is to complete the course with the lowest score, which is calculated by adding up the total number of strokes taken on each hole. The player with the lowest score wins the game.

我們正在使用Liu et al. 2022論文中提供的提示。

接下來的步驟是整合知識並得出預測。我將問題轉換成了問答格式,以指導回答的格式。

Prompt:

Question: Part of golf is trying to get a higher point total than others. Yes or No?

Knowledge: The objective of golf is to play a set of holes in the least number of strokes. A round of golf typically consists of 18 holes. Each hole is played once in the round on a standard golf course. Each stroke is counted as one point, and the total number of strokes is used to determine the winner of the game.

Explain and Answer: 

回答 1 (非常有信心):

No, the objective of golf is not to get a higher point total than others. Rather, the objective is to play a set of holes in the least number of strokes. The total number of strokes is used to determine the winner of the game, not the total number of points.
Question: Part of golf is trying to get a higher point total than others. Yes or No?

Knowledge: Golf is a precision club-and-ball sport in which competing players (or golfers) use many types of clubs to hit balls into a series of holes on a course using the fewest number of strokes. The goal is to complete the course with the lowest score, which is calculated by adding up the total number of strokes taken on each hole. The player with the lowest score wins the game.

Explain and Answer:

回答 2 (信心要低得多):

Yes, part of golf is trying to get a higher point total than others. Each player tries to complete the course with the lowest score, which is calculated by adding up the total number of strokes taken on each hole. The player with the lowest score wins the game.

這個例子中發生了一些非常有趣的事情。在第一個回答中,模型非常有信心,但在第二個回答中卻不是那麼有信心。我為了演示的目的簡化了過程,但在得出最終答案時還有一些更多的細節需要考慮。

3.7 自動提示工程師AutomaticPromptEngineer

Zhou et al., (2022) 提出了自動提示工程師(APE)框架,用於自動生成和選擇指令。指令生成問題被構建為自然語言合成問題,使用LLMs作為黑盒最佳化問題來生成和搜尋候選解。

第一步涉及一個大型語言模型(作為推理模型),該模型會獲得輸出演示,以生成任務的指令候選方案。這些候選方案將指導搜尋過程。指令使用目標模型執行,然後基於計算出的評估分數選擇最適合的指令。
APE發現了一個更好的零-shot CoT提示,比人工設計的“讓我們逐步思考”提示(Kojima等人,2022)更好。

提示“讓我們逐步地工作,以確保我們有正確的答案。”引發了思考鏈,提高了MultiArith和GSM8K基準測試的效能:

本文涉及到與提示工程相關的一個重要主題,即自動最佳化提示的想法。雖然本指南不深入探討這個話題,但如果您對此感興趣,以下是一些關鍵論文:

  • AutoPrompt - 提出了一種基於梯度引導搜尋的自動建立各種任務提示的方法。
  • Prefix Tuning - 一種輕量級的fine-tuning替代方案,為NLG任務準備可訓練的連續字首。
  • Prompt Tuning - 提出了一種透過反向傳播學習軟提示的機制。

相關文章