# ChatGpt比較:費用、概念、模型與使用介紹 ## 如何註冊使用Chatgpt 1. 前往OpenAI chatgpt的網站:https://chat.openai.com/auth/login 2. 點擊sign up按鈕,進入註冊頁面 3. 填寫註冊信息,包括電子郵件地址和密碼或是可以使用Google第三方登入 4. 收完驗證信或是綁定後要輸入姓名生日及手機 ## 什麼是Chatgpt? ![](https://i.imgur.com/ehjD8Ua.png) 由預訓練(自督導學習)的gpt(基石模型)微調後繼續訓練增強學習 ![](https://i.imgur.com/Tg1BVT0.png) 投影片來源: [2023機器學習 -李宏毅](https://www.youtube.com/watch?v=yiY4nPOzJEg&list=PLJV_el3uVTsOePyfmkfivYZ7Rqr2nMk3W) (超推老師的教學,有空可以去聽聽) :::spoiler ChatGPT? - ChatGPT 是 OpenAI 針對對話生成式預訓練的 GPT(Generative Pre-trained Transformer)模型家族的其中一員,它是一種基於Transformer模型架構的深度學習模型,目前是基於GPT-3.5模型的大型語言模型。 - ChatGPT 通過在大型文本語料庫上進行無監督的訓練,學習了自然語言的潛在模式和規律,能夠根據輸入的文本生成自然流暢、上下文相關的語言回應,因此被廣泛應用於自然語言處理任務中,例如聊天機器人、問答系統、文本摘要、翻譯等。 >白話文:預訓練:大量餵文本資料 >運用上一句話去接下一句話(文字接龍) ::: >KEYWORDS:自然語言處理(Natural language processing)、Language modeling(LM)、Deep learning、Transformer architecture、無監督學習 :::spoiler Language modeling(LM) 建立一個模型來預測文本序列中的下一個詞語。 (怎樣算一句人話,如何建立一句人話) ::: :::spoiler Deep learning Deep learning 是一種機器學習技術,旨在模仿人類大腦的神經網絡,通過層次化的方式來進行高效的特徵提取和學習。Deep learning 中使用的神經網絡通常由多層神經元組成,稱為深度神經網絡(deep neural network,DNN),因此也被稱為深度學習。 相比於傳統的機器學習技術,Deep learning 的主要優勢在於它能夠自動學習高級抽象特徵,並在處理複雜問題時具有更好的表現能力。例如,在圖像識別問題中,傳統的機器學習算法通常需要人工設計特徵,而 Deep learning 能夠自動學習圖像的特徵,並且在圖像識別準確率上表現更好。 ::: :::spoiler 自然語言處理(Natural language processing) NLP 的核心技術包括語言分析、語言生成、知識表示和機器學習等。其中,語言分析包括詞法分析、句法分析、語義分析和語用分析等,而語言生成則包括文本生成、語音合成等。知識表示方面,NLP 通常采用符號邏輯和語義網絡等形式進行表示。而機器學習方面,NLP 通常使用深度學習模型,如循環神經網絡(RNN)、卷積神經網絡(CNN)和 Transformer 等。 ::: :::spoiler 無監督學習 是一種機器學習的方法,它是一種無需標籤數據的學習方式,從未經標記的數據中發現潛在的結構、模式和規律。在無監督學習中,算法需要自主地學習,通過探索數據中的相似性和差異性來進行分類、分群、降維等任務,從而發現數據中的潛在結構。 ::: :::spoiler Transformer architecture 主要特點是完全基於注意力機制(self-attention mechanism)來捕捉輸入序列中的關係和依賴關係。相比於傳統的循環神經網絡(RNN)或卷積神經網絡(CNN),Transformer 能夠更好地捕捉長距離依賴關係,並且能夠並行處理輸入序列中的信息,從而大大加快模型的訓練速度。 ::: ## Chatgpt4 vs Chatgpt 3.5 ### 1. 比較表格: | 項目 | ChatGpt-4 |ChatGpt-3.5| | ---- | ---- |---| | Year |2023 |2022| | Price | $20 usd |Free| | Trained | 100萬億(100-trillion ) |1750億| | 資料輸入 | text&images data |only text data| | 回答長度限制 | 25,000 |700| | 考試能力 | top 10% | lowest 10%| | English | proficiency 85% | proficiency 70%| | Token Limits |8,192 |2,049| | Prompt |requires lesser context to provide the same answers.| ![Key Differences Between GPT-3.5 and GPT-4 | CitiMuzik](https://cdn.appuals.com/wp-content/uploads/2023/03/GPT-3-vs-GPt-4.jpg) >圖片來源Key Differences Between GPT-3.5 and GPT-4 | CitiMuzik* >參考文章:https://appuals.com/gpt-3-5-vs-gpt-4/ ### 2. 模型對應詳細價格表(資料製作時間:2023/4) | Model | Context |Prompt price/1k tokens|Completion price/1K tokens | ---- | ---- |---|---| | text-davinci-003|4k |$0.02|$0.02| | gpt-3.5-turbo | 4k |$0.002|$0.002| | gpt-4 | 8k |$0.03|$0.06| | gpt-4-32k | 32k |$0.06|$0.12| 備註:token怎麼算? | |繁體中文| 英文| |---|---|---| |每個字耗費的平均token數|2.03|1.25| >官方的計算token的測試工具:https://platform.openai.com/tokenizer ## Chatgpt模型原理介紹 ### 語言模型(LM): 語言模型就是告訴我們一句話是不是人話。 註:LLM:Large Language Model(大型語言模型) #### 以學習目標分類的語言模型 - Autoregressive Language Models:當前我們可以以GPT為代表。 - Autoencoder Language Models:以Google(BERT)為代表。 #### 以技術原理區分的語言模型: ##### 1. Statistical Language Models:主要是使用傳統的統計技術, N-Gram, HMM以及部分語言學規則來學習序列的概率分佈。 給定一句話: “I love eating apples.” N表示我們在建模的時候要看幾個單詞,unigram(1-gram)表示一次就看一個單詞,2-gram (or bigram)表示一次看兩個,以此類推。 - unigram:最簡單最直接的一種建模思路,我們直接統計每個詞出現的頻率,然後作為概率來計算。 - Bigram/Trigram:N-gram語言模型學習的目標是給定一個條件(前序word(s)),給出後面接不同詞語的概率(鍊式法則),對於bigram來說,會這樣建 ``` p(I love eating apples) = p(I) * p(love| I) * p(eating| love) * p(apples| eating) ``` :::spoiler python示範 ```python n_gram_sents = [i.strip().split(' ') for i in data_text.strip().split('\n') if i] # from nltk.corpus import reuters from nltk import bigrams, trigrams from collections import Counter, defaultdict # Create a placeholder for model model = defaultdict(lambda: defaultdict(lambda: 0)) list(trigrams(n_gram_sents[0], pad_right=True, pad_left=True)) # 观察一下 # Count frequency of co-occurance # 统计共现的频率。trigrams将sentence变成了三元组。举例来说,The unanimous一起存在的时候,Declaration出现的次数 for sentence in n_gram_sents: for w1, w2, w3 in trigrams(sentence, pad_right=True, pad_left=True): model[(w1, w2)][w3] += 1 # Let's transform the counts to probabilities # 统计分母,举例来说,The unanimous一起存在过多少次,全部加起来就是;后面跟过的每一个词出现的次数,除以The unanimous一起存在的次数即可。 for w1_w2 in model: total_count = float(sum(model[w1_w2].values())) for w3 in model[w1_w2]: model[w1_w2][w3] /= total_count ``` >程式碼來源: https://zhuanlan.zhihu.com/p/608047052 例如:model['in','the']利用這個模型計算in the之後要接什麼詞,defaultdict會返回{'Course':0.25,'Name':0.125} ::: ##### 2. Neural Language Models:主要是使用NN來學習序列的概率分佈。 - Neural Probabilistic Language Mode(NPLM) 利用NN學習了概率語言模型,本身是在優化n-gram的學習問題,輸入是上下文單詞的one-hot編碼或者是對應的詞向量,輸出是下一個單詞的概率分布。NPLM使用的是靜態的詞向量表示。 - Word Embedding:Word2vec: (Mikolov et al. 2013) is a framework for learning word vectors。 - Embedding from Language Models(ELMO) ELMo 使用深度學習神經網絡來訓練語言模型,該模型可以學習單詞在上下文中的含義和語法。與傳統的詞向量不同,ELMo 的向量是動態生成的,這意味著每個單詞的向量表示會隨著上下文的變化而變化。 ### 關於聊天機器人Chatbot #### 1. 分類: - 技術分類: pipeline形式(rasa)vs.end2end形式(chatgpt) - 對話形式: 單輪(即問答,QA類型) vs. 多輪(可以基於之前的回答,進行當前的回答) - 任務類型 Task-oriented vs. Open domain >chatgpt可以定義為是一個多輪對話的end2end open domain對話系統。 #### 2. 學習路徑 模型的學習路徑是這樣的,首先訓練一個好的LM(GPT系列),然後通過Reinforcement Learning from Human Feedback (RLHF)進行訓練,接著構建對話學習chatgpt。 ![](https://cdn.appuals.com/wp-content/uploads/2023/03/Screenshot-2023-03-25-at-11.03.32-AM-2048x1215.png) 備註: :::spoiler 微調(Fine-tune) 是指在預訓練好的模型基礎上,進一步針對特定任務進行微調的過程。在機器學習領域中,這個過程通常稱為遷移學習。 在自然語言處理中,預訓練語言模型(如BERT、GPT等)通常使用大規模文本數據進行訓練,以學習單詞和語言結構的含義和規律。這些預訓練模型可以通過微調來適應特定的下遊任務,如文本分類、命名實體識別、語言翻譯等。 在微調過程中,我們會把預訓練模型的參數作為初始值,並通過在特定任務上的反向傳播來微調參數,以最小化損失函數。通過微調,預訓練模型可以學習到任務特定的語言表達方式和特征,從而提高模型在該任務上的性能。 * 反向傳播(Backpropagation)最主要的概念,就是將誤差值往回傳遞資訊,使權重可以利用這樣的資訊進行梯度下降法來更新權重,進一步的降低誤差。 ::: ## 使用Chatgpt讀取即時/私人/公司數據並回答相關訊息要怎麼做? ### 1. 直接餵處理好的資料 1.直接爬現有網站的資料web scraping or現有data(例如價格商品介紹等) 2.對資料用python進行處理( chunk embedding等) 3.使chatgpt讀資料並儲存那些詞向量與數據 4.前端使用者輸入問題,連接讀過資料的chatgpt後端 >官方說明文件:https://platform.openai.com/docs/tutorials/web-qa-embeddings 備註:使用開源組合llama+langchain來讀取並處理資料 llama-index操作實例:https://zhuanlan.zhihu.com/p/613155165 langchain, llama-index介紹:[langchain+ llama-index 到底是什麼?](https://hackmd.io/@flora8411/langchain-llama-index) ### 2.Chat plugins 1.可以直接提供定義好的api文件及說明 2.只有ChatGPT Plus 須申請加入waitlist的人可以使用 3.unverified的plugin只能被最多15個人安裝使用 >官方說明文件:https://platform.openai.com/docs/plugins/getting-started 備註: 如果不是提供api文件也可以使用這個: https://github.com/openai/chatgpt-retrieval-plugin#chatgpt-retrieval-plugin ----------------------- ### 關於第一種方式補充說明: 透過OpenAI的embedding模型和自己的database,先在本地搜索data獲得上下文,然後在調用ChatGPT的API的時候,加上本地數據庫中的相關內容,這樣就可以讓ChatGPT從你自己的數據集獲得了上下文,再結合ChatGPT自己龐大的數據集給出一個更相關的理想結果。 具體解釋一下它的實現原理(參考圖)。 ![](https://i.imgur.com/ZNQ6XBM.jpg) 1. 首先準備好要用來學習的文本資料,把它變成CSV或者Json這樣易於處理的格式,並且分成小塊(chunks),每塊不要超過8191個Tokens,因為這是OpenAI embeddings模型的輸入長度限制 2. 然後用一個程序,分批調用OpenAI embedding的API,目前最新的模式是text-embedding-ada-002,將文本塊變成文本向量。 簡單解釋,對於OpenAI來說,要判斷兩段文本的相似度,它需要先將兩段文本變成數字向量(vector embeddings),就像一堆坐標軸數字,然後通過數字比較可以得出一個0-1之間的小數,數字越接近1相似度越高。 ![](https://i.imgur.com/O6grTk5.jpg) 3. 需要將轉換後的結果保存到本地數據庫。注意一般的關系型數據庫是不支持這種向量數據的,必須用特別的數據庫,比如Pinecone數據庫,比如Postgres數據庫(需要 pgvector 擴展)。 當然保存的時候,需要把原始的文本塊和數字向量一起存儲,這樣才能根據數字向量反向獲得原始文本。(類似於全文索引中給數據建索引) (參考圖一從Script到DB的步驟) 4. 等需要搜索的時候,先將你的搜索關鍵字,調用OpenAI embedding的API把關鍵字變成數字向量。 (參考圖一 Search App到OpenAI) 拿到這個數字向量後,再去自己的數據庫進行檢索,那麽就可以得到一個結果集,這個結果集會根據匹配的相似度有個打分,分越高說明越匹配,這樣就可以按照匹配度倒序返回一個相關結果。 (參考圖一 Search App到DB的步驟) 5. 聊天問答的實現要稍微覆雜一點 當用戶提問後,需要先根據提問內容去本地數據庫中搜索到一個相關結果集。 (參考圖一中Chat App到Search App的步驟) 然後根據拿到的結果集,將結果集加入到請求ChatGPT的prompt中。 (參考圖一中Chat App到OpenAI的步驟) 比如說用戶提了一個問題:“What's the makers's schedule?”,從數據庫中檢索到相關的文字段落是:“What I worked on...”和"Taste for Makers...",那麽最終的prompt看起來就像這樣: ```js [ { role: "system", content: "You are a helpful assistant that accurately answers queries using Paul Graham's essays. Use the text provided to form your answer, but avoid copying word-for-word from the essays. Try to use your own words when possible. Keep your answer under 5 sentences. Be accurate, helpful, concise, and clear." }, { role: "user", content: `Use the following passages to provide an answer to the query: "What's the makers's schedule?" 1. What I worked on... 2. Taste for Makers...` } ] ``` (LlamaIndex就是實現了這個原理) >本段落程式碼參考專案:https://github.com/mckaywrigley/paul-graham-gpt >paul-graham-gpt作者有提供youtube教學影片:https://www.youtube.com/watch?v=RM-v7zoYQo0&t=4085s >本段落文章參考來源:https://m.weibo.cn/status/4875446737175262 ## 其他新誕生的結合的AI project #### - AgentGPT https://agentgpt.reworkd.ai/ ---> AutoGPT: 將任務分解為多個步驟,然後對每個步驟進行分析和決策的過程可以參考以下步驟: 1. 理解任務:Auto-GPT首先通過自然語言理解技術,將輸入的任務語句轉換為可以處理的結構化數據。 2. 分解任務:Auto-GPT將任務分解成多個步驟。這個過程類似於將大型項目分解成更小的任務或子任務。每個子任務應該是具有明確目標的小步驟。 3. 生成解決方案:對於每個子任務,Auto-GPT將利用其學習到的知識和經驗,生成可以解決該任務的解決方案。解決方案可以是一系列指令、操作或決策。 4. 執行方案:一旦生成了解決方案,Auto-GPT將自動執行指令、操作或決策,以完成指定任務的每個子任務。 5. 監控進度:Auto-GPT還將監控任務執行的進度,並在必要時進行調整。如果存在異常情況或錯誤,它將重新分析任務,並生成新的解決方案,以確保任務完成。 可參考:https://www.zhihu.com/question/595359852 #### - 整理新推出的各種開源專案網站 https://theresanaiforthat.com/timeline/#switch