---
# System prepended metadata

title: 生成文字講義

---

# 文字生成講義

## 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)






