# 文字生成講義 ## 1. 原理 ### CHATGPT是什麼 CHAT:聊天 G:生成式(Generative) P:預訓練(Pre-trained) T:變換器(Transformer) * **大型語言模型** 基於大量資料進行預訓練的超大型深度學習模型。早期是將字詞轉換成數值,但看不出字詞間的關係,現在則是使用多維向量儲存(字詞嵌入),使用一系列編碼器及解碼器檢驗字詞間上下文的關係。 * **自然語言處理** 是一種機器學習技術,讓電腦能夠解譯、操縱及理解人類語言。結合運算語言學理解人類語言,透過機器學習訓練期理解語句中含意(暗諷),使用深度學習模型讓他像人類大腦般思考。 簡單來說,CHATGPT是一款基於大型語言模型的系統,並且適用於各種有關自然語言處理方面的事務。 :::spoiler CHATGPT能做什麼 (參考)可以生成文本、回答問題、翻譯...,處理各種有關語言上面的事務。 ::: ### Token Token語言文本的基本單位。把一串字串分成好幾小節,每一小節稱為一個token。 * **unforgiven** 1. 模型一:un + forg + iven = 3個token 2. 模型二:un + for + giv + en = 4個token * **清水高中** 1. 模型一:清 + 水 + 高 + 中 = 4個token 2. 模型二:清水 + 高中 = 2個token ### 大型語言模型運作 依據不同模型,每個字串得出的token數量會不一樣。 1. **訓練資料** 訓練機器知道怎麼接龍,例如輸入「床前明月」,機器就知道要輸出「光」;輸入「疑似地上」,機器就知道要輸出「霜」。 2. **機器學習** 透過訓練的資料找出函式所需要的參數,接著帶入函式使用。第一個過程稱為學習、訓練,第二個過程則是測試、推論。 3. **輸入問題** 以「海線一中是哪個高中為例」。 4. **過程** 每個句子可以接的token有複數個可能,每個token有它的出現機率,接著CHATGPT會像擲骰子選出輸出符號,像是「清」就有40%的機率被選種。 ![IMG_1190](https://hackmd.io/_uploads/B11JLeE-R.jpg) CHATGPT生成答案的方式就像接龍一樣,不斷加入新的token,直到輸出為END時停下並輸出。 ![IMG_1166](https://hackmd.io/_uploads/BknOBEOx0.jpg) ![IMG_1189](https://hackmd.io/_uploads/HJabakNZA.jpg) 5. **輸出結果** 以這個例子會輸出「清水高中」。 ### CHATGPT學習方式 * **一般機器學習(監督式學習)** 機器運用人類的資料來學習,人類提供一些指令,機器學習該如何根據這些指令做出正確回應,稱為監督式學習。像是詢問「台灣最高的山是哪座山?」,AI會將「玉」、「山」串起來,並輸出,這些都是人類事先整理過的資料,然而我們沒有這麼多時間及人力整理好所有資料並提供機器學習。 * **預訓練(pre-train)** 透過網路上龐大的資料來學習,產生最初始的參數,以此做為訓練的第一階段。接著第二階段使用人類整理的資料,並將第一階段的參數丟給第二階段當初始參數,在第二階段進行最佳化,即微調(fine-tuning),第一階段與第二階段的參數不會相差太遠,第一階段的過程稱為預訓練,也稱為自監督式學習。 ![螢幕擷取畫面 2024-04-30 180551](https://hackmd.io/_uploads/H1ERfBCbR.png) * **適配器(Adapter)** 為了讓第一階段與第二階段參數相差不要太遠,還有減少運算量,因此第二階段的過程中,只在第一階段的參數後加入少量的新未知數,並找出他們的參數。 * **監督是學習重要性** 若今天只使用第一段,蒐集大量網路資料學習,可能會出現機器不知道要回答的問題,如下圖。因此第二階段使用監督式學習,教導機器對指令做出正確回應將非常重要。 ![螢幕擷取畫面 2024-04-22 210203](https://hackmd.io/_uploads/Sy9Nek4WA.png) ## 2. 提示工程 ### 提示(prompt) 當我們prompt只下「撰寫一篇作文」時,CHATGPT會這樣回答 ![螢幕擷取畫面 2024-04-22 224610](https://hackmd.io/_uploads/rJZB_lV-C.png) 如果再將我們的prompt變得更細節,「撰寫一篇"隙縫的聯想"的作文」時,會得到這樣的回覆 ![螢幕擷取畫面 2024-04-22 224745](https://hackmd.io/_uploads/BkmiOxV-C.png) 因此如何下prompt是非常關鍵的,以下為一個關於prompt的小遊戲可以玩玩看 https://gandalf.lakera.ai/ ### 提示工程-基礎技法 1. **策略一:撰寫清晰的指令** * 技巧一:提供更多詳盡的資訊 把問題寫的詳細一點,,要確保所有重要資訊即要求皆有提到,否則模型只能猜測你的意思。假設我們今天要在Excel中計算一行數字的總和,如果只問「我該如何在 Excel 中進行加法計算?」,那模型只能猜測你想要加一列還是一行的總和。或許可以改成「我該如何在 Excel 中自動計算一行中的美元總額?我想要的是自動為整張表格的每行進行計算,最終所有的總計數都顯示在右側名為“總計”的列中。」,明確的告訴模型你想要在Excel中做的事,這樣模型就不需要猜測你的目的。 1. 我該如何在 Excel 中進行加法計算? ![螢幕擷取畫面 2024-04-23 185225](https://hackmd.io/_uploads/rJXbmGSb0.png) 2. 我該如何在 Excel 中自動計算一行中的美元總額?我想要的是自動為整張表格的每行進行計算,最終所有的總計數都顯示在右側名為“總計”的列中。 ![螢幕擷取畫面 2024-04-23 185214](https://hackmd.io/_uploads/rJA-QGrbR.png) * 技巧二:讓模型扮演一個角色 我們可以讓模型模仿一個角色來回答我們的問題。假設我們今天要面試,如果只問「如何準備面試?」,那模型不知道你是一位面試官還是面試著,也不知道你要進行怎樣的面試。如果改成「我是一位高三的學生,即將準備面試,而你是一位XX系的教授,請幫我模擬面試,你需要問我一連串的問題,我回答後需要給我一個分數(滿分十分)並給我一些意見進行修改。」讓他模擬一個角色將更好幫助他進入狀況。 1. 如何準備面試? ![螢幕擷取畫面 2024-04-23 185201](https://hackmd.io/_uploads/HJ8HQMHbR.png) 3. 我是一位高三的學生,即將準備面試,而你是一位XX系的教授,請幫我模擬面試,你需要問我一連串的問題,我回答後需要給我一個分數(滿分十分)並給我一些意見進行修改。 ![螢幕擷取畫面 2024-04-23 185445](https://hackmd.io/_uploads/BkFtQzHbC.png) * 技巧三:利用分隔符號清晰區分輸入的不同部分 利用"""來標記重點,能更好的讓模型了解問題的重點。假設我們今天想請模型撰寫一篇文章的大意,這樣詢問「請幫以下文章進行總結:"""文章"""」會比「請總結文章: 文章」讓模型更了解重點內容。 * 技巧四:明確說明完成任務所需的每個步驟 有時候需要會想要讓模型回答一連串相關問題,我們可以用列點的方式讓模型更清楚該如何回答問題。 ![螢幕擷取畫面 2024-04-23 191935](https://hackmd.io/_uploads/B1GwYzH-C.png) * 技巧五:明確輸出長度要求 有時候會覺得模型回答得太過冗長或是太過簡短,或許我們可以限制模型的回答長度來得到理想的答案。 ![螢幕擷取畫面 2024-04-23 192451](https://hackmd.io/_uploads/rJDo9MSZC.png) ![螢幕擷取畫面 2024-04-23 192459](https://hackmd.io/_uploads/Skd29GBbC.png) 2. **策略二:提供參考文本** * 技巧: 使用參考文本來構建答案 1. ![螢幕擷取畫面 2024-04-26 114611](https://hackmd.io/_uploads/S1Zm4i_ZA.png) ![螢幕擷取畫面 2024-04-26 110003](https://hackmd.io/_uploads/SJJSVj_WC.png) ![螢幕擷取畫面 2024-04-26 110011](https://hackmd.io/_uploads/rJ1HEs_WC.png) 2. ![螢幕擷取畫面 2024-04-26 114620](https://hackmd.io/_uploads/Hky_VsOZC.png) ![螢幕擷取畫面 2024-04-26 114812](https://hackmd.io/_uploads/SJ1dNi_-0.png) ![螢幕擷取畫面 2024-04-26 114819](https://hackmd.io/_uploads/HkyO4suWA.png) 3. **策略三:把複雜的任務拆分成簡單的子任務** * 技巧一:把問題分類定義操作 我們可以先把問題分類好,讓模型可以理解問題內容。 1. 假設今天要製作一個客服,我們可以定義以下問題。 ![螢幕擷取畫面 2024-04-26 110516](https://hackmd.io/_uploads/SyRd5qOWR.png) * 技巧二:總結或過濾之前的對話 因為模型的記憶有限,所以可以讓他先總結之前的對話。 ![螢幕擷取畫面 2024-04-26 110347](https://hackmd.io/_uploads/S1pq9q_ZA.png) 4. **策略四:使用外部工具** * 技巧一:使用外掛程式(Plugin) ![螢幕擷取畫面 2024-04-23 202754](https://hackmd.io/_uploads/HJ08tQBZC.png) * 技巧二:使用程式執行來進行更準確的計算 每個機器都有他計算精確值的有效位數,或許我們能讓模型使用程式計算,使他的精確值位數變多。 1. 如果只讓模型計算會發現答案是錯的 ![螢幕擷取畫面 2024-04-26 101605](https://hackmd.io/_uploads/SkR3CtdZ0.png) 2. 正確答案 ![螢幕擷取畫面 2024-04-26 101619](https://hackmd.io/_uploads/HJC2CK_ZR.png) 3. 讓模型運用程式來計算,就會是正確答案 ![螢幕擷取畫面 2024-04-26 101639](https://hackmd.io/_uploads/Sy0hCKdWR.png) ![螢幕擷取畫面 2024-04-26 101653](https://hackmd.io/_uploads/SJ0hRt_bR.png) ### 提示工程-進階技法 * **In-Context Learning(在上下文學習)** 透過prompts來引導模型,而不需要重新訓練模型,像是我們想教模型一個新的詞語或概念,可以在prompts提供一些關於這個詞語或概念的描述,然後再問模型,AI就可以根據這個特定的上下文進行學習和回應。 ![螢幕擷取畫面 2024-04-30 183101](https://hackmd.io/_uploads/rJ1sOBRWA.png) 然而In-Context Learning真的會教會模型新知識嗎?根據研究顯示,模型是學會這種回答風格而不是學會新知識。例子中是「動物->食性」,假設今天輸入的沒關聯性,這樣模型就無法表現好。 ![螢幕擷取畫面 2024-04-30 191212](https://hackmd.io/_uploads/SJ5KmICZC.png) 1. Zero shot 一般的一問一答方式,是透過模型的預訓練來完成回答。 ![螢幕擷取畫面 2024-04-30 184910](https://hackmd.io/_uploads/r1v33SAZ0.png) 2. One shot 給一個範例讓模型學習 ![螢幕擷取畫面 2024-04-30 184845](https://hackmd.io/_uploads/rJT9nSC-0.png) 3. Few shot 給少量範例,讓模型根據prompt所提供的資料學習 ![螢幕擷取畫面 2024-04-30 185038](https://hackmd.io/_uploads/HkmXTrAbC.png) ![螢幕擷取畫面 2024-04-30 185050](https://hackmd.io/_uploads/rJ77arA-A.png) * **Chain of Thought(CoT)** 透過提供模型推理步驟讓模型模仿,進而提高模型答案的準確率。我們可以在提問中加入「That's think step by step.」,讓模型一步步思考,得出準確率較高的結果。 ![螢幕擷取畫面 2024-04-30 185919](https://hackmd.io/_uploads/HJKM1U0bC.png) ![螢幕擷取畫面 2024-04-30 185936](https://hackmd.io/_uploads/HyhOk8AW0.png) ![螢幕擷取畫面 2024-04-30 185945](https://hackmd.io/_uploads/SJVVk8AbC.png) ## 應用 ### CHATGPT * 公司: OPENAI * 免費: GPT3.5 * 付費: GPT4/GPT4 Turbo (附DALL·E) * 優點: 較穩定、安全 * 缺點: 須付費才能使用更多功能 ### Copilot * 公司: Microsoft * 免費: Copilot App/網頁版 * 付費: Copilot with Office 365 * 優點: 免費GPT4、可聯網、可看圖/生圖、可連接Microsoft自家產品 * 缺點: 生成速度較慢 ![螢幕擷取畫面 2024-04-30 190918](https://hackmd.io/_uploads/B1O_ZIAWA.png) ![螢幕擷取畫面 2024-04-30 190923](https://hackmd.io/_uploads/rydu-LCbR.png) ### Gemini * 公司: Google * 免費: Gemini 1.0 * 付費: Gemini 1.5 * 優點: 生成速度很快、可聯網、可讀圖、對中文較熟悉 * 缺點: 不能生圖 ### Claude * Claude * 公司: Anthropic * 免費: Claude 3 * 付費: Claude 3 Haiku、Claude 3 Sonnet、Claude 3 Opus * 優點: 可讀很多資料、可讀檔、免費版能力堪比GPT4 * 缺點: 無聯網、無生圖 ![螢幕擷取畫面 2024-04-30 190641](https://hackmd.io/_uploads/B1NAlICZR.png) ### Coze * 公司: 字節跳動 * 免費: Coze * 付費: 無 * 優點: 可免費使用GPT4幾乎所有功能 * 缺點: GPT4生成速度慢 1. **登入** ![螢幕擷取畫面 2024-04-26 102741](https://hackmd.io/_uploads/H1Ztj5d-A.png) ![螢幕擷取畫面 2024-04-26 103053](https://hackmd.io/_uploads/r1SQA9d-A.png) 2. **建立機器人** ![螢幕擷取畫面 2024-04-26 103215](https://hackmd.io/_uploads/ByPD05_-0.png) * Workplace: 選Personal * Bot name: 自行定義機器人名字 ![螢幕擷取畫面 2024-04-26 103243](https://hackmd.io/_uploads/SyDDC9ObA.png) 3. **設定機器人** * Model: 語言模型 * Temperature: 結果與事實的接近度 * Response max length: AI可回答的最大長度 * Dialog round: AI的記憶力 * 調整模型參數 ![螢幕擷取畫面 2024-04-26 103312-3](https://hackmd.io/_uploads/H1xUhJjObR.png) ![螢幕擷取畫面 2024-04-26 104153](https://hackmd.io/_uploads/S1U3ys_ZA.png) * 選取外掛程式 ![螢幕擷取畫面 2024-04-26 103312-1](https://hackmd.io/_uploads/SkHRJiOZC.png) * 加入這些 ![螢幕擷取畫面 2024-04-26 104408](https://hackmd.io/_uploads/HkSRko_ZR.png) ![螢幕擷取畫面 2024-04-26 104432](https://hackmd.io/_uploads/HJSAyjdbR.png) ![螢幕擷取畫面 2024-04-26 104451](https://hackmd.io/_uploads/S1H0yi_bC.png) 4. **建立自己資料庫** 假設今天是一位律師,他就可以把各種法律條文加入這裡,方便AI查閱。 ![螢幕擷取畫面 2024-04-26 103312-2](https://hackmd.io/_uploads/ryMmlidb0.png) ![螢幕擷取畫面 2024-04-26 105040](https://hackmd.io/_uploads/HkfXxouWC.png) ![螢幕擷取畫面 2024-04-26 105029](https://hackmd.io/_uploads/rywU7sOb0.png) ![螢幕擷取畫面 2024-04-26 105057](https://hackmd.io/_uploads/HyQCSH0ZC.png) * 加入資料 ![螢幕擷取畫面 2024-04-26 105120](https://hackmd.io/_uploads/S1MmxjO-A.png)