iT邦幫忙

2023 iThome 鐵人賽

DAY 4
1
AI & Data

OpenAI 從提示工程(Prompt Engineering)到語義核心(Semantic Kernel)的實踐系列 第 4

提示工程(Prompt Engineering):Prompt 進階技法 In-Context Learning

  • 分享至 

  • xImage
  •  

前言

前一篇提到Prompt 的基本技法,本篇開始會談一些進階式的用法,首先來看的是In-Context Learning。雖然前一篇的Prompt 基本技法在多數的基本應用場景下,已經可以讓模型生成不錯的回應,但是在複雜的場景下,就不是那麼足夠了,特別是我們都知道以ChatGPT模型來說,它的訓練集資料處理2021年為止,表示著如果沒有對模型本身做資料的更新,那麼它就只能就預訓練的知識去生成回應,但是如果要更新ChatGPT模型,成本又太高並具效果未知(例如Fine-tuning),因此通常會建議先採取In-Context Learning技法。

接下來的內容均以ChatGPT-4模型做為示範

In-Context Learning的基本概念

In-Context Learning,就字面的直譯為"在上下文中學習",本質上是一種讓語言模型在特定的上下文中學習的技術。In-Context Learning與微調(fine-tuning)不同,In Context Learning不需要重新訓練模型,而是透過prompts來引導模型。例如,如果我們想教模型學習一個新的詞語或概念(不在模型預訓練的資料集中),可以在prompts提供一些關於這個詞語或概念的描述,然後再問模型,模型就可以根據這個特定的上下文進行學習和回應。

這個例子展示了一個In-Context Learning的結果,當我們在prompts給予動物與食性的範例後,接著問ChatGPT,ChatGPT能夠明白我們的意思,並回應出相對的答案。這個過程中並未涉及到調整ChatGPT內部資料的動作(事實上如果做Fine-tuning,所需要的資料集遠遠大於這幾個詞句)。

https://ithelp.ithome.com.tw/upload/images/20230919/20126569Sp4sqWBGIZ.png

然而In-Context Learning是教會ChatGPT新知識嗎?
根據"Rethinking the Role of Demonstrations:What Makes In-Context Learning Work?"論文研究顯示In-Context Learning技法是教會模型學習特定的表達風格,就像上面的範例,詞句的風格是"動物VS食性",而非動物與食性間的真正關聯性。

研究發現首先給模型幾個範例(demonstrations),告訴模型需要學習怎樣的對應,接著進行詢問,模型就能給出對應的label。

https://ithelp.ithome.com.tw/upload/images/20230919/20126569uztvcKsuir.png
(來源:https://arxiv.org/pdf/2202.12837.pdf)

  • 研究發現 In-context learning 給定的標籤正確性對結果的影響不大

圖中顯示範例資料中正確標籤比例的下降,對預測結果的影響幾乎可以忽略,也就是說模型其實並不是真正學習範例資料的對應關係性,其比較可能是學習到語義關係或是風格,例如海洋->魚、陸地->大象

https://ithelp.ithome.com.tw/upload/images/20230919/20126569wMmPDxWXds.png

  • In-context learning過程中,模型學習的是資料與標籤間的分佈

研究中隨機替換資料的標籤,沒有保持一致性,其測試結果模型表現就明顯下降,例如:老虎—>動物,獅子—>4隻腳,魚->水裡,如此一來變混亂了,模型無法學習一致的關聯性,就無法表現的很好

https://ithelp.ithome.com.tw/upload/images/20230919/20126569XEkl4C28sn.png

不過要注意的是,任何研究都有其限制,當研究的模型不同,模型大小不同,都有可能產生不同結論,因此這篇研究只是代表使用In-context learning確實對於模型的生成有所影響

Zero shot / One shot / Few shot

那麼既然可以使用 In-context learning 讓模型在不更新訓練資料的情況,做即時學習和回應,那通常採到哪些技法來處理呢?

  • Zero shot
    首先一般的一問一答方式,我們稱之為Zero shot,這時候靠的是模型預訓練的能力而做出的生成回應,例如:

https://ithelp.ithome.com.tw/upload/images/20230919/20126569Q4LlqFwM7e.png

  • One shot
    故名思義,給予一個範例,模型只看一個範例就學習新任務,例如:

https://ithelp.ithome.com.tw/upload/images/20230919/20126569XZw5WyuVrl.png

  • Few shot
    就是給予多於1個但少量的範例,讓模型根據prompt所提供的資料學習新任務,例如:

https://ithelp.ithome.com.tw/upload/images/20230919/20126569LO2qwE8djZ.png

https://ithelp.ithome.com.tw/upload/images/20230919/20126569TdnNLIXbsN.png

結語

現在我們理解了In-Context Learning的概念,以及Zero shot / One shot / Few shot技法,只要透過Prompts注入了範例,讓模型能基於範例學習,就能創造更多的生成回應,這個技法完全不需要更新模型參數或是重新訓練模型,便可以賦予模型即時學習和適應的能力。

參考資料:https://arxiv.org/pdf/2202.12837.pdf

嗨,我是Ian,我喜歡分享與討論,今年跟2位朋友合著了一本ChatGPT主題書,如果你是一位開發者,這本書或許會有些幫助,https://www.tenlong.com.tw/products/9786263335189
這次的鐵人賽文章也會同時發佈於個人blog,歡迎關注我的blog : https://medium.com/@ianchen_27500


上一篇
提示工程(Prompt Engineering):Prompt 初階技法
下一篇
提示工程(Prompt Engineering):Prompt 進階技法 chain-of-thought (CoT)
系列文
OpenAI 從提示工程(Prompt Engineering)到語義核心(Semantic Kernel)的實踐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言