ChatGPT之樣本提示指令-Zero-Shot, One-Shot 與Few-Shot

Sean Yeh
Python Everywhere -from Beginner to Advanced
18 min readMar 18, 2024

--

Museo del Prado, Madrid, Spain, photo by Sean Yeh

在當今數位時代,大型語言模型(LLM),著名的是像ChatGPT這樣的工具,已漸漸的成為我們日常生活和專業工作中不可或缺的一部分。這些模型的強大能力,使它們能夠回答我們的問題、協助我們撰寫文章,甚至幫助我們解決複雜的技術問題。

想必許多人在初次與ChatGPT互動時,可能會遇到挑戰,感覺就像是面對一台不依照預定規劃工作的自動販賣機。這種挫折感往往源自於溝通的障礙,而非模型本身的限制。

我們都知道與人「溝通」不僅僅是一種技巧,更是一門「藝術」。這個道理在今天我們討論的大型語言模型(LLM)上依然適用。要充分極大化大型語言模型的潛力,其關鍵在於我們如何與它們溝通。而與它溝通最重要的,就是需要提供精確且清晰的指令,即「Prompt」。

藉由深入了解如何有效地使用指令,可以幫助我們顯著的提高與模型「交談」的品質和效率。尤其是當我們掌握了本篇討論的零樣本提示(Zero-Shot)、一次性樣本提示(One-Shot)、和少量樣本提示(Few-Shot)的概念與技巧後,可以更精準地讓模型回應我們的需求。

為何需要提供樣本提示給Prompt指令?

在探討如何提高ChatGPT等大型語言模型的回應效果時,我們經常談到的一個方法就是在prompt指令中提供樣本範例。為什麼這一步驟如此關鍵呢?答案在於這些範例能夠顯著提升模型對使用者需求和上下文的理解,使其能夠產出更加精準、更符合期望的回答或解決方案。

首先,提供樣本範例是一種有效的溝通方式,能夠直接向LLM模型顯示我們期望的回答方式與回覆格式。在樣本提示的情境下,這些範例的提供對於引導LLM模型準確解讀指令,並快速回應任務需求,非常的重要。

其次,提供樣本範例有助於設定溝通的語言風格和期望的水準。透過具體範例的展示,不僅在告訴模型「這是我想要的回答方式」,同時也在指導模型理解和適應特定的語言風格和複雜性。這個方式有助於確保生成出來的回答不僅在內容上符合我們的期望,並且在表達方式和風格上也達到我們的要求。

再談到樣本範例能夠明確界定任務的範圍和脈絡。當我們提供一個或多個範例時,實際上是在建立一個參考架構,協助LLM模型理解特定任務的限制。這對於LLM模型是否能夠準確解讀指令並提供有效回答至關重要。

透過設計過的prompt樣本提示指令,我們能夠更有效地發揮模型的能力,選擇更合適的生成方式,並進一步優化回答的品質和相關性。它不僅增加了我們與LLM模型對話的準確度,也大大提高了我們從LLM模型得到有用回答的機率,是極大化ChatGPT及其他LLM大型語言模型效能的關鍵方式。

樣本提示指令有哪些?

想要與ChatGPT等LLM大型語言模型進行有效互動的關鍵,在於精確使用提示指令。提示指令若以是否提供樣本做分類,可分為:零樣本提示(Zero-Shot)、一次性樣本提示(One-Shot)與少量樣本提示(Few-Shot)。零樣本提示使模型能夠在無先前範例下提供回答;一次性樣本提示則利用單一範例來提升回答品質;少量樣本提示則透過提供一個以上的範例指示LLM模型,來解決更複雜問題。分別依照不同的使用情境採用這三種方式,使我們能夠更準確地達成所需的結果。接下來的文章將分別詳細介紹這些樣本提示技術。

零樣本提示(Zero-Shot)

「零樣本提示」技術是一項讓ChatGPT在未提供任何先前經驗或示例的情況下也能生成回答的創新方法。這種策略利用了模型豐富的預訓練知識庫,使其能夠理解並回答廣泛的問題,從而顯著提升了ChatGPT的適應性和靈活性。透過零樣本提示,ChatGPT得以在多樣的情境中提供有價值的見解,無需依賴特定的指導或範例。

實踐零樣本提示時,雖然不需要事先準備示例,但精確地表達問題或需求的能力仍然至關重要。這意味著撰寫者需要能夠清楚地描述他們的詢問,並基於模型的預訓練知識來結構化Prompt。零樣本提示特別適用於教育場景,例如自動評分和生成學習資源,在這些情境下,ChatGPT可以提供一致性強且客觀的輸出,為教師節省時間並給予學生即時的學習反饋。

為加深對於零樣本提示實際應用的理解,以下將提供幾個範例,顯示如何對ChatGPT提出一個零樣本提示的請求。

零樣本提示的應用例子

零樣本提示讓我們在未給予任何先例下,有效地要求ChatGPT執行特定任務的能力。使用這種方式的關鍵在於「如何巧妙的設計Prompt指令,讓ChatGPT能夠僅根據其本身豐富的預訓練模型,理解我們的請求並產生適當的回應」。

以下展示了利用零樣本提示進行關鍵詞提取、情感分類,以及文本摘要的具體操作範例。

#範例1:提取關鍵字
如果要從一段文字中篩選出關鍵字,我們不需要提供操作範例,只需以清晰的Prompt指令來指示ChatGPT我們的需求,方法如以下所示:

"""
Extract keywords from the below text.
Text: [這裡放入需要被篩選關鍵字的一段文字]
Keywords:
"""

這個Prompt指令清楚告訴ChatGPT我們的目的是從指定文本中提取關鍵字,展現了如何直接而明確地引導模型理解和執行任務。

#範例2:情感分析
對於情感分析,我們可以藉由指定ChatGPT一個清楚的輸出格式,使它能夠準確執行情感分類:

"""
Classify the following text's sentiment as positive, neutral, or negative.
Desired Format: a number, -1 for negative, 0 for neutral, and 1 for positive
Input: [這裡放入需要被篩選關鍵字的一段文字]
Sentiment:
"""

透過這種方法,即便我們沒有提供任何具體的範例,ChatGPT也能理解的請求並依照我們期望格式回答(-1代表負面、0代表中性、1代表正面)。

#範例3:文章摘要
同樣的,若要從一篇較長的文章中提取並產生成摘要,我們可以採用一個結構化的Prompt指令,在指令中直接告訴ChatGPT我們的需求:

"""
Generate a summary for the following text.
Text: [這裡放入長文本]
Summary:
"""

這個Prompt指令不僅指示ChatGPT要執行摘要任務,同時也暗示了所期望的輸出結構,即對指定文字段落進行概要的描述方式。透過這種方式,我們不需要提供任何先前的範例或特定的指令,ChatGPT就能夠理解任務需求並執行相應的操作。

從以上範例我們可以看到,即便在沒有在指令中提供操作範例的情況下,如何透過精心設計的Prompt指令來引導ChatGPT,在沒有範例的情況下,讓ChatGPT也能根據其預先訓練的模型,辨別出任務的本質,並產生合適的輸出。

一次性樣本提示(One-Shot)

一次性樣本提示(One-Shot),是一種透過向ChatGPT提供一個具有代表性的範例來指引其生成特定的回答或內容的方法。這樣子做不僅提高了LLM模型回答的準確度和相關性,尤其是在需要獲得特定格式或特殊風格需求的答案時更是如此,也為使用者與ChatGPT之間的溝通的帶來了更上一層的效率和品質。

在實行一次性樣本提示時,一個高品質的範例對於提升ChatGPT的輸出質量相當重要,尤其可以在需要根據特定情境或條件下,提供量身定做回答的領域看到這樣的影子。例如醫療、法律或客戶服務等。

下面的程式碼範例將顯示如何利用一次性樣本提示進行各項任務。它們不僅提高了生成結果的準確度,也為使用者提供了一種用來引導模型理解和完成特定任務的方式。

# 範例1:文章分類

假設要對文件內容是否與科技相關進行分類,我們可提供模型一個範例,藉此指導ChatGPT進行分類:


"""
Classify the following texts as related to technology or not.

Input: "Apple releases new iPhone with innovative features."
Classification: Related to technology

Input: {text}
Classification:
"""

首先,這個Prompt提供了一個明確的範例(Input: “Apple releases new iPhone with innovative features.” Classification: Related to technology),說明了如何將一段特定的文字內容分類為與科技相關。然後要求它使用這個範例作為參考,來分類另一段文字內容(Input: {text} Classification:)是否與科技相關。

# 範例2:語言翻譯

在使用ChatGPT進行翻譯時,可以建立一個包含翻譯範例的指令:

"""
Translate the following sentence into French.

Input: "Hello, how are you?"
Translation: "Bonjour, comment ça va?"

Input: {text}
Translation:
"""

這個範例提供了一個英文句子及其法文翻譯,然後要求ChatGPT根據這個範例去翻譯另一段文字。透過這種方式,即使是在沒有任何額外說明的情況下,ChatGPT也能夠理解我們的需求並進行對應的翻譯工作。

# 範例3:數據分析解釋

當我們需要透過ChatGPT來解釋數據分析的結果時,可以提供一個相關範例來輔助解釋:

"""
Explain the following data analysis result.
Input: "Our A/B testing shows a 20% increase in user engagement
for the new interface."
Explanation: "This indicates that the new interface effectively
engages users, likely due to its improved design or features.
A 20% increase signifies a significant enhancement over the
previous interface."
Input: {data analysis result}
Explanation:
"""

這個範例中,我們的指令先給出了一個關於A/B測試結果的描述,並提供了對這個結果的解釋。接著,我們要求ChatGPT根據這個範例去解釋另一個數據分析結果。這種方法不僅幫助模型理解如何處理和解釋數據分析的結果,也提供了一種有效的方式,讓我們轉化專業數據分析為易於理解的解釋。

從以上這些例子,我們可以看到,透過提供一個清楚的範例來有效地指導ChatGPT完成特定任務。一次性樣本提示不僅擴大了ChatGPT的應用範圍,也提升了使用者與人工智慧互動的效率和準確度。

少量樣本提示(Few-Shot)

少量樣本提示(Few-Shot),是藉由提供數個(一個以上)精選的範例,來指示ChatGPT處理特定的問題或請求。這種方法有助於讓模型學習新任務,因為這個方法替模型提供了豐富的上下文資訊,進而提升了回答的品質並加速了模型的學習過程。少量樣本提示特別適用於需要快速且精確的分析大量數據的場合,如金融市場分析或趨勢預測。

少量樣本提示技術透過幾個精選的範例,強化了LLM模型對特定任務的理解與執行能力。例如,在金融領域方面,透過提供少量而關鍵的市場報告或數資訊,讓ChatGPT能夠生成更為深入的市場分析報告,為投資者提供較為精準的投資建議,藉此幫助他們做出更聰明的決策。

以下是運用少量樣本提示的實際範例,範例顯示如何在情緒分析、內容摘要,以及基於前後文的對話問答等不同使用情境下使用此技術。

# 範例1:情緒分析

"""
Classify the sentiment of the following texts as positive, neutral,
or negative.

- "This is the best day of my life!" => Positive
- "I guess it could have been worse." => Neutral
- "This was the worst experience I've ever had." => Negative

Your input: "I love this new song."
Sentiment:
"""

這個範例藉著提供三種情緒的文字範例(正面Positive、中性Neutral、負面Negative),目的是幫助ChatGPT模型理解如何根據文件的情緒進行分類,進而提高對新文件情緒分析的準確度。

# 範例2:文字摘要

"""
Generate a summary for the following texts.

Text1: "Stripe provides APIs that allow businesses to accept payments online."

Summary1:"Stripe offers online payment APIs for businesses."

Text2: "OpenAI has trained cutting-edge language models that can understand and generate human-like text."

Summary2:"OpenAI's language models mimic human text comprehension and generation."

Your input Text: "The Great Wall of China is one of the greatest wonders of the world."
Summary:
"""

此範例顯示,我們透過提供兩組具體的文字內容以及摘要範例,來引導ChatGPT學習如何從較長的文字描述中擷取重要內容生成新的摘要,藉此提高摘要的精確度與效率。

# 範例3:基於上下文的問答

"""
Based on the provided context, answer the following questions.

Context: "The Great Wall of China stretches over 21,196 kilometers and
was listed as a World Heritage by UNESCO in 1987."

- "How long is the Great Wall of China?" =>
"It stretches over 21,196 kilometers."

- "When was it listed as a World Heritage by UNESCO?" =>
"In 1987."

Your question: "What is the Great Wall of China known for?"
Answer:
"""

這個範例藉由提供一段上下文和相對應的問答案例,幫助ChatGPT理解如何根據上下文的資訊來回答新問題。

透過這些範例,我們看到少量樣本提示技術如何有效地提升ChatGPT對特定任務的理解和處理能力,不僅加快了學習過程,也提高了回答質量,展示了這種技術在多個領域中的應用潛力。

提升生成質量

一次性樣本提示(One-Shot)的優勢:相較於零樣本提示(Zero-Shot)

一次性樣本提示與零樣本提示在許多情境下可以產生明顯不同的結果,尤其是在需要模型以特定的格式回答或細節理解的任務中。

讓我們以下面的例子為例,來比較看看一次性樣本提示(One-Shot)和零樣本提示(Zero-Shot)生成結果的差異。

範例1:產生一篇關於時間管理的短文

# 零樣本提示(Zero-Shot)

零樣本提示下,我們僅向ChatGPT提出需求,而不提供任何範例或背景資訊:

"寫一篇關於時間管理的短文。"

這種情況下,ChatGPT可能會根據其基礎訓練的數據生成一篇關於時間管理的短文。

生成出來的這篇短文可能包含一些時間管理的基本概念和建議,但可能缺乏對特定情境下的特殊建議,以及獨特的觀點。因為我們在提出prompt指令時沒有提供LLM模型具體的範例來引導它產出深度且具有特殊風格的內容。

# 一次性樣本提示(One-Shot)

相較之下,如果我們提供一個具體範例作為指引:

"以下是一篇關於時間管理的短文範例:

在當今快節奏的社會中,有效的時間管理是成功的關鍵。一個人如何分配和利用時間,
可以直接影響到他們的生產力和壓力水平。例如,使用番茄工作法,透過短暫休息來增
強工作焦點和效率,已被證明是提高時間利用效率的有效方法。

現在,請你根據這個範例,寫一篇關於時間管理的短文。"

就如上面的指令,當我們提供這樣的範例後,ChatGPT生成的文章很可能會仿造範例中的風格和結構,產生出更具體的時間管理技巧,並且產生的文字可能會圍繞在如何實施這些技巧。而產生一篇既具備實用的建議,又有一定深度和個性化風格的短篇文章。

# 比較

由於一次性樣本提示(One-Shot)有了具體的範例來指引,它所生成的短文往往更能夠好好地對準讀者的需求,提供更為具體和深入的回答。如此,不僅可以提高短文的特定性和實用性,還能確保生成內容的風格一致性。相較之下,在零樣本提示(Zero-Shot)下所生成的短文可能在內容的深度和個性化個刻畫上不如一次性樣本提示來得豐富與細膩。

範例2:將英文句子翻譯成法文

在語言翻譯任務中,一次性樣本提示(One-Shot)相較於零樣本提示(Zero-Shot)同樣能展現出更優越的結果。這種差異主要展現在翻譯的準確度和對特定語境或專業術語的處理上。以下是一個具體例子來說明這一點。

# 零樣本提示(Zero-Shot)

如果不提供任何上下文或範例直接請求ChatGPT進行翻譯時(prompt指令如下):

"Translate the following sentence into French: 
'The quick brown fox jumps over the lazy dog.'"

在這種狀況下ChatGPT或許能夠提供一個品質普通的翻譯,因為這個prompt指令可以說是個相對簡單與直接的請求。然而,當更複雜的句子或含有特定領域術語的句子出現時,若是採用零樣本提示,可能就無法確保翻譯的結果具備專業性和語境上的準確度。

# 一次性樣本提示(One-Shot)

相反的,如果在我們請求翻譯時附帶提供模型一個具體範例,引導ChatGPT如何處理類似下面的翻譯時:

"Here is an example of translating English to French:

English: 'Hello, how are you?'
French: 'Bonjour, comment vas-tu?'
Now, translate the following sentence into French:
'The quick brown fox jumps over the lazy dog.'"

透過上面方式提供模型一次性樣本提示,就能讓ChatGPT更精準的抓住目標語言的語感和語境,尤其是當翻譯牽涉到專業度或複雜度更高的句子時,你會發現採用這種方法不但可以提高翻譯結果的準確度,也更能適應特定語境和專業領域的需求。

# 比較

在語言翻譯任務中,一次性樣本提示(One-Shot)會提供模型具體的翻譯範本,幫助模型更有效的理解目標語言的特殊表達方式和語境。

相較之下,雖然零樣本提示(Zero-Shot)也能夠處理基本的翻譯要求,但在碰到更具挑戰性的翻譯任務時,處理的結果恐怕無法達到與一次性樣本提示相同的精確度與自然感。因此,對於想追求高品質翻譯的人來說,一次性樣本提示顯現出它不可替代的價值。

哪種方法更能提升產出的品質?

零樣本提示(Zero-Shot)、一次性樣本提示(One-Shot)和少量樣本提示(Few-Shot)各有各的獨特優勢和適用情境。因此,應該適用何種方式產出的結果讓品質更好,取決於實際上具體的任務和目標。

零樣本提示(Zero-Shot)

零樣本提示這種「不需要提供任何示例,僅依賴模型本身預訓練的知識來理解和回答問題」的優點在於能夠快速的用於各種普遍性的問題,尤其是當我們無法提供具體範例或者是對模型的能力有足夠信心的時後。然而,由於缺乏具體範例的引導,零樣本提示有可能在某些複雜或特定範疇的任務中無法達到最好的品質。

一次性樣本提示(One-Shot)

一次性樣本提示透過提供一個相關提示來引導模型,讓模型更能達到任務的要求和期望。這種方法適合用於那些可以透過一個範例明確表達的任務。然而,其實際效果仍然有賴於我們所提供範例的品質。

少量樣本提示(Few-Shot)

以提供數個範例來引導模型處理我們的特殊請求或問題的少量樣本提示。這種方法,往往能夠讓產生的結果達到更好的品質,尤其是在處理複雜任務的時候。

總結來說在這三種方式中,少量樣本提示(Few-Shot)因為透過提供多個範例來讓模型有足夠的資訊和上下文去理解並完成特定任務,在大多數情況下能夠提供最高品質的結果。然而,這並不意味著其他方法無法在特定情境下提供相同品質甚至更優質的結果。實際上,是否為最佳的選擇,應該取決於任務的具體需求、可使用的資源和我們期望的準確度來決定。在某些情境下,即使是使用零樣本或一次性樣本提示也能達到令人滿意的結果,特別是在時間或資源有限的時後,特別的明顯。

結語

在以上的文章中,我們討論了如何透過提供具體而明確的指令,來引導LLM大型語言模型。尤其是在使用「零樣本提示」、「一次性樣本提示」和「少量樣本提示」的狀況下。透過提供範例,讓模型更加理解使用者的目的,而產生更加個別化和精確的回答。如此,不僅可以提升模型的表現,也可以增加使用者與AI之間互動的滿意度。

--

--

Sean Yeh
Python Everywhere -from Beginner to Advanced

# Taipei, Internet Digital Advertising,透過寫作讓我們回想過去、理解現在並思考未來。並樂於分享,這才是最大贏家。