一、ChatGPT 簡介
ChatGPT的火爆
ChatGPT作為一個web應用,自22年12月發布,僅僅不到3個月的時間,月活用戶就累積到1億,在此之前,最快記錄的保持者也需要9個月才達到月活1億,
ChatGPT的反爬
https://chat.openai.com 因為各種政策&傾向性問題,ChatGPT目前在中國無法訪問,而它又是如此火爆,所以就有大量用戶通過代理、爬蟲等形式來體驗ChatGPT,
OpenAI不是專業做網路服務的公司,因此把反爬交給第三方公司CloudFlare去做,
CloudFlare目前全球最大CDN服務商,占比16%;而OpenAI的流量在CloudFlare中占比已經占據前二,
ChatGPT的打字效果
可以看到ChatGPT的輸出是逐字輸出的打字效果,這里應用到了SSE(SeverSideEvent)服務端推送的技術,一個SSE服務的Chrome開發工具化network截圖 :
SSE對比常見Websocket如下:
那么這種打字效果它是故意的還是不小心的?
二、ChatGPT核心原理
ChatGPT我們可以拆解成 Chat、G、P、T 這四個部分講述,在后續內容前,我們先補充幾個機器學習容易理解的概念:
1.模型:所謂模型,本質上就是一個程式(函式),類似 y=ax+bx^2,這里的a和b就是引數,比如GPT3的引數量就是175B說的就是1750億引數的程式,ChatGLM-6B的引數量是60億,
2.機器學習:我們平時寫的函式,是人來控制的邏輯和引數,而機器學習指的是機器通過某種方式(訓練)來確認引數,這個找特定引數的函式的程序,一般分別為3步:
- 確定函式集合:盡可能窮盡所有引數的可能,比如文章中常見的CNN、RNN、Transform等就是函式集合;
- 資料:通過資料集,得到評價函式好壞的方式;
- 執行程序的引數:比如每批次對每個函式執行多少次,最大執行多少次等,這些引數一般稱為“超參”,區別于函式內的引數(演算法工程師一般自嘲的調參工程師,指的是這個“超參”)
Generative 文字接龍
ChatGPT本質上是個不斷遞回執行的生成式的函式,下面我們來看2個例子:
Case1:蘿卜青菜
當你看到蘿卜青菜這4個字的時候,腦海中想的是什么?
我想大概率是各有所愛,
給到GPT的時候,GPT根據這4個字和逗號,推測出下個字的大概率是各
然后GPT會再次將蘿卜青菜,各輸入給自己,推測出下個字的大概率是有
這就是ChatGPT在輸出文字時是逐字輸出的原因,這種形式最符合LLM運行的底層原理,在用戶體驗上也能讓用戶更快看到第一個字,體驗上接近聊天而不是閱讀,它是故意的,這里我們得到第一個結論:
ChatGPT(模型 / Fn)的運行原理是每次輸入文本(包含上次回傳的內容),預測輸出后續1個字詞,
Case2:書呆子
舉個【原創】前端技術十年回顧 文章中的例子:
在這個例子中,為什么輸出是“欺負一樣”?
從全文中看,這里的主體應該是前端技術,單純考慮前端技術和就像在小學被,我們可以想出“推廣”、“普及,即使不考慮“前端技術”,單純從就像在小學被,還有可能推測出后文是“教育”、“表揚”,都很難聯想到“欺負”,
這里出現“欺負”,很大原因是在前文中欺負(就像,這幾個關鍵字的影響遠大于前端技術,所以我們得到第二個結論:
在生成式語言模型中,上文單詞離得越遠,對生成結果的影響就越小
文字接龍VS完形填空
這里補充下GPT類似的BERT,他們都是基于后面提到的Transform結構,他們的對比如下,總的來說,文字接龍更服務人類大部分情況下的語言模式,因此像馬斯克也更青睞于這種第一性原理的東西,
Transform 注意力機制
Case3:綠洲
在這個Case中,綠洲的出現,反而不是因為最近的尋找新的,而是3句話之前的沙漠和駱駝,這里就不得不提到大名鼎鼎的Transform結構,這是Google在2017年在一篇論文 《Attention is all you need》首次提出的一種類神經網路結構,它和核心是自注意力機制,用來解決長距離文本的權重問題,
作者不是機器學習專業,就不展開說了,建議看相關論文和講解的文章,
Pretrained 預訓練
通過前面的文字接龍模式,用大量資料喂出來的預訓練模型,使其具備通用的語言能力,這里的預訓練有2層含義:
- 能完成各種通用NLP任務(分類、排序、歸納等等)
- 稍加微調訓練,能完成特定領域的語言任務(不必從頭開始)
Chat 對話(通過Finetuning實作)
因為預訓練是無人類的監督,因此通用模型不一定按照聊天形式回傳文本,因為它的訓練素材包羅萬象,比如我說今天天氣差,它根據歷史的經驗:今天天氣差的表述方式有下面幾種,就會輸出這句話的不同的表述,而不是像聊天一樣跟我一起吐槽 ,下面的OpenAI的GPT3模型對今天天氣差的輸出:
要讓GPT3像聊天一樣輸出,就需要有針對性的對它就行微調(fine-tuning)訓練,例如通過特定的問答結構的語料訓練:
能聊天之后,想要上線,就必須給模型上枷鎖,不能回答和人類價值觀不符的內容,否則資本主義的鐵拳也會降臨
OpenAI通過人工標注和強化訓練的方式提升ChatGPT回答質量并校正它的價值觀傾向,想要更多了解這塊內容,可以了解下ChatGPT背后的演算法模型,
三、ChatGPT的應用
OpenAI官方給到了49個常見的ChatGPT應用場景:
https://openai.com/blog/chatgpt
總的來說可以分為:
- 文案創作
- 提煉總結
- 代碼撰寫
- 語言美化/跨語言轉換
- 角色扮演
對于前端開發同學來說,最關注它的代碼能力,正好在一個小程式轉taro重構的專案中體驗了ChatGPT的能力:
1. 能理解小程式模板語法,并轉換出ts的taro組件
2. 理解小程式頁面邏輯,并修正props
小程式的頁面邏輯page.js是獨立于index.wxml的,在得到純wxml生成的taro組件后,把page.js的代碼合并進去
3. 可以補充知識,教它舉一反三特有的語法
HiBox融合ChatGPT
這么好的能力,應該如何沉淀呢?
我們首先想到了VSCode插件,剛好HiBox本身有登錄態、自定義Webview、遠程配置化的能力,那就將ChatGPT集成到HiBox中(太酷啦),Node端接入ChatGPT的介面,通過Webview前端實作一個聊天窗,再通過配置系統集成常用的Prompt,這樣前端開發就能通過VSCode方便地用到ChatGPT的能力,整體結構如下:
資料源方面,也從爬蟲版本ChatGPT,逐步切換到API代理服務中,代理服務接入GPT3.5的模型能力,整體體驗非常接近ChatGPT,代理服務檔案:
https://joyspace.jd.com/pages/yLnDY3B5UJ1rXP8UYrN6
HiBox的ChatGPT目前僅需erp登錄即可免費使用,更多使用方式和安裝方式:HiBox快速開始
私域資料集成
在使用ChatGPT的程序中,也注意到2個問題:
- 公司敏感的代碼和資訊不能傳給ChatGPT
- 特定領域的非敏感知識,比如水滴模板,ChatGPT沒學習過
首先想到的是,采用微調(fine-tuning)的方式,將私域資料資料集成到大語言模型(LLM)中,然后私有化部署在公司的服務器上,這樣任意代碼和檔案都可以發送給它,我們嘗試了下面2種方式:
GPT3 fine-tuning
一是通過OpenAI官網提到的GPT3的fine-tuning介面,將私域資料傳給OpenAI,OpenAI在他們的服務器里微調訓練,然后部署在OpenAI的服務器中,整個程序是黑盒,
ChatGLM-6B fine-tuning
二是用清華開源的ChatGLM-6B作為基礎模型,在公司的九數平臺上申請GPU機器,將私域資料通過LORA的方式微調得到LORA權重,然后自己部署,整個程序完全私有化,
GPT3.5 langChain
上面的兩種方式總的來說,部署后的推理效果都很難達到GPT3.5-API的效果,因此我們最后嘗試了embedding外掛知識庫的方式,使用開源的langchain處理檔案切割、向量化存盤、向量化匹配等,資料還是會暴露給OpenAI,
四、LLM現狀和展望
LLM大爆發
其實在20年GPT3出來之后,機器學習的大部分頭部都意識到了這條路線的可行性,積極地在跟進了:
這里專門講下百度,據公開可靠的檔案,百度早在2019年就推出了Ernie(對標谷歌Bard,Ernie和bard在影片Muppet中是1對兄弟),確實是國內最早接入LLM的玩家,百度走的和谷歌一樣,是BERT的完形填空的路線,因為在2018~2019年的時間點,GPT一代剛剛問世,第一代的GPT對比各方面都不如BERT,再加上百度和谷歌一樣在搜索引擎方面沉淀較多,因此選擇的路線是BERT,
近期羊駝系列和國內大語言模型也在大爆發:
LLM應用現狀&趨勢
平臺化
LLM的角色扮演能力可能是下個人機互動變革的關鍵點,OpenAI也推出了Plugin模型,通過插件,用戶可以通過一句自然語言聊天就買一張機票,搜索想看的文章,有人說這是類似AppStore發布的IPhone時刻:
自驅動、能力集成
類似Auto-GPT,langchain等,通過約定特性的模板,可以讓ChatGPT回傳執行特定命令的文本,例如和ChatGPT約定如果要搜索的時候,回傳[search: 搜索內容],然后在客戶端通過正則匹配 /[search:(.*?)]/,拿到對應的內容執行搜索,再將結果回傳給ChatGPT整理最終答案,
虛擬一個例子:
1. user: 深圳明天的天氣怎么樣?
2. chatgpt(觸發知識限制2021年,回傳約定的搜索格式):[search:2023年4月27日的深圳天氣]
3. user接收到正則匹配觸發搜索,打開無頭瀏覽器搜索百度并取第1條結果:2023年4月27日星期四深圳天氣:多云,北風,風向角度:0°風力1-2級,風速:3km/h,全天氣溫22℃~27℃,氣壓值:1006,降雨量:0.0mm,相對濕度:84%,能見度:25km,紫外線指數:4, 日照...
4. user(將搜索的內容連帶問題第二次發給ChatGPT): 深圳明天的天氣怎么樣?可參考的資料:2023年4月27日星期四深圳天氣:多云,北風,風向角度:0°風力1-2級,風速:3km/h,全天氣溫22℃~27℃,氣壓值:1006,降雨量:0.0mm,相對濕度:84%,能見度:25km,紫外線指數:4, 日照...
5. chatgpt(根據問題和背景關系,輸出人類語言的表達): 深圳明天的天氣還可以,整體多云為主,氣溫22℃~27℃
多模態
4月份發布的GPT4已經具備影像識別的能力,下面的Case是主持人用一致設計稿草圖生成前端頁面的程序,經典“前端已死”時刻:
LLM的局限
雖然我們看到ChatGPT的技術強大,但是也要審慎看待它的局限,它本質上是個基于歷史資料的經驗主義的模仿人類的文字輸出函式,
例如,ChatGPT完全做不了4位數的乘法運算,它大概率會根據6乘和7等于這2塊關鍵資訊,得到答案是以2結尾,根據4和乘以3這2塊關鍵資訊,得到答案是以1開頭,而中間的隨機性完全收斂不到正確的答案,不管是ChatGPT和GPT4都是一樣的情況:
再比如問它特別小眾、普通人也容易錯的專業領域知識,它也會根據大部分普通人的錯誤答案輸出錯誤答案:
比如在V8 Promise原始碼全面解讀,其實你對Promise一無所知文章中一個很奇葩的題目,下面的代碼會列印什么?
Promise.resolve().then(() => {
console.log(0);
return Promise.resolve(4)
}).then(res => {
console.log(res);
})
Promise.resolve().then(() => {
console.log(1);
}).then(() => {
console.log(2);
}).then(() => {
console.log(3);
}).then(() => {
console.log(5);
}).then(() => {
console.log(6);
})
大部分人都會回答:0、1、4、2、3、5、6
GPT3.5的回答:0、1、4、2、3、5、6
GPT4的回答:0、1、2、3、4、5、6
只有GPT-4的回答正確,但是即使它的回答正確,它的具體分析也是錯誤,因為它可能在某個場景學習過類似答案,但是它并不“理解”,后面的分析內容也是大部分人容易錯的分析
結尾
最后用流浪地球2中周喆直的臺詞做個結尾,
對于AI的到來,我們戰略上不要高估它,AI本身有它的局限性,保持樂觀,前端沒那么容易死;戰術重視和關注它的發展,嘗試在我們的作業生活中應用,技術變革的浪潮不會隨個人的意志變化,
通宵趕稿,碼字不易,看到這里同學幫忙點個贊吧 Thanks?(?ω?)?
作者:京東零售 陳隆德
內容來源:京東云開發者社區
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/554797.html
標籤:其他
下一篇:返回列表
