動(dòng)動(dòng)發(fā)財(cái)?shù)男∈直肷迹c(diǎn)個(gè)贊吧毅往!
簡(jiǎn)介
當(dāng)我使用 GPT 模型編寫(xiě)我的前幾行代碼時(shí)是 2021 年,那一刻我意識(shí)到文本生成已經(jīng)到了一個(gè)拐點(diǎn)派近。在此之前攀唯,我在研究生院從頭開(kāi)始編寫(xiě)語(yǔ)言模型,并且我有使用其他文本生成系統(tǒng)的經(jīng)驗(yàn)渴丸,所以我知道讓它們產(chǎn)生有用的結(jié)果是多么困難侯嘀。作為我在 Azure OpenAI 服務(wù)中發(fā)布 GPT-3 的公告工作的一部分,我很幸運(yùn)能夠及早使用 GPT-3谱轨,并且我嘗試了它以準(zhǔn)備它的發(fā)布戒幔。我讓 GPT-3 總結(jié)了一份長(zhǎng)文檔,并嘗試了少量提示土童。我可以看到結(jié)果比以前的模型先進(jìn)得多诗茎,這讓我對(duì)這項(xiàng)技術(shù)感到興奮,并渴望了解它是如何實(shí)施的娜扇。而現(xiàn)在后續(xù)的 GPT-3.5错沃、ChatGPT 和 GPT-4 模型正在迅速獲得廣泛采用,該領(lǐng)域的更多人也對(duì)它們的工作原理感到好奇雀瓢。雖然其內(nèi)部運(yùn)作的細(xì)節(jié)是專(zhuān)有且復(fù)雜的枢析,但所有 GPT 模型都共享一些不太難理解的基本思想。我這篇文章的目標(biāo)是解釋一般語(yǔ)言模型的核心概念刃麸,特別是 GPT 模型醒叁,并針對(duì)數(shù)據(jù)科學(xué)家和機(jī)器學(xué)習(xí)工程師進(jìn)行解釋。
生成語(yǔ)言模型的工作原理
讓我們從探索生成語(yǔ)言模型的工作原理開(kāi)始泊业。最基本的想法如下:他們將 n 個(gè)標(biāo)記作為輸入把沼,并產(chǎn)生一個(gè)標(biāo)記作為輸出。
這似乎是一個(gè)相當(dāng)簡(jiǎn)單的概念吁伺,但為了真正理解它饮睬,我們需要知道token
是什么。
token
是一段文本篮奄。在 OpenAI GPT 模型的上下文中捆愁,常用詞和短詞通常對(duì)應(yīng)于單個(gè)標(biāo)記割去,例如下圖中的“我們”一詞。長(zhǎng)的和不常用的詞通常被分解成幾個(gè)標(biāo)記昼丑。例如呻逆,下圖中的“擬人化”一詞被分解為三個(gè)標(biāo)記。像“ChatGPT”這樣的縮寫(xiě)可以用單個(gè)標(biāo)記表示菩帝,也可以分解成多個(gè)咖城,具體取決于字母一起出現(xiàn)的常見(jiàn)程度。你可以去 OpenAI 的 Tokenizer 頁(yè)面呼奢,輸入你的文本宜雀,然后看看它是如何被分割成標(biāo)記的。您可以在用于文本的“GPT-3”標(biāo)記化和用于代碼的“Codex”標(biāo)記化之間進(jìn)行選擇控妻。我們將保留默認(rèn)的“GPT-3”設(shè)置州袒。
您還可以使用 OpenAI 的開(kāi)源 tiktoken 庫(kù)使用 Python 代碼進(jìn)行標(biāo)記化。 OpenAI 提供了一些不同的分詞器弓候,每個(gè)分詞器的行為都略有不同。在下面的代碼中他匪,我們使用“davinci”的分詞器(一種 GPT-3 模型)來(lái)匹配您使用 UI 看到的行為菇存。
import tiktoken
# Get the encoding for the davinci GPT3 model, which is the "r50k_base" encoding.
encoding = tiktoken.encoding_for_model("davinci")
text = "We need to stop anthropomorphizing ChatGPT."
print(f"text: {text}")
token_integers = encoding.encode(text)
print(f"total number of tokens: {encoding.n_vocab}")
print(f"token integers: {token_integers}")
token_strings = [encoding.decode_single_token_bytes(token) for token in token_integers]
print(f"token strings: {token_strings}")
print(f"number of tokens in text: {len(token_integers)}")
encoded_decoded_text = encoding.decode(token_integers)
print(f"encoded-decoded text: {encoded_decoded_text}")
text: We need to stop anthropomorphizing ChatGPT.
total number of tokens: 50257
token integers: [1135, 761, 284, 2245, 17911, 25831, 2890, 24101, 38, 11571, 13]
token strings: [b'We', b' need', b' to', b' stop', b' anthrop', b'omorph', b'izing', b' Chat', b'G', b'PT', b'.']
number of tokens in text: 11
encoded-decoded text: We need to stop anthropomorphizing ChatGPT.
您可以在代碼的輸出中看到這個(gè)分詞器包含 50,257 個(gè)不同的分詞,并且每個(gè)分詞都在內(nèi)部映射到一個(gè)整數(shù)索引邦蜜。給定一個(gè)字符串依鸥,我們可以將其拆分為整數(shù)標(biāo)記,然后我們可以將這些整數(shù)轉(zhuǎn)換為它們對(duì)應(yīng)的字符序列悼沈。對(duì)字符串進(jìn)行編碼和解碼應(yīng)該始終返回原始字符串贱迟。
這讓您對(duì) OpenAI 的分詞器如何工作有一個(gè)很好的直覺(jué),但您可能想知道他們?yōu)槭裁催x擇這些分詞長(zhǎng)度絮供。讓我們考慮一些其他的標(biāo)記化選項(xiàng)衣吠。假設(shè)我們嘗試最簡(jiǎn)單的實(shí)現(xiàn),其中每個(gè)字母都是一個(gè)標(biāo)記壤靶。這使得將文本分解為標(biāo)記變得容易缚俏,并使不同標(biāo)記的總數(shù)保持較小。然而贮乳,我們無(wú)法像 OpenAI 的方法那樣編碼盡可能多的信息忧换。如果我們?cè)谏厦娴睦又惺褂没谧帜傅臉?biāo)記,11 個(gè)標(biāo)記只能編碼“我們需要”向拆,而 OpenAI 的 11 個(gè)標(biāo)記可以編碼整個(gè)句子亚茬。事實(shí)證明,當(dāng)前的語(yǔ)言模型對(duì)它們可以接收的令牌的最大數(shù)量有限制浓恳。因此刹缝,我們希望在每個(gè)令牌中包裝盡可能多的信息碗暗。
現(xiàn)在讓我們考慮每個(gè)單詞都是一個(gè)標(biāo)記的場(chǎng)景。與 OpenAI 的方法相比赞草,我們只需要七個(gè)標(biāo)記來(lái)表示同一個(gè)句子讹堤,這似乎更有效率。按詞拆分也很容易實(shí)現(xiàn)厨疙。然而洲守,語(yǔ)言模型需要有一個(gè)它們可能遇到的標(biāo)記的完整列表,而這對(duì)于整個(gè)單詞來(lái)說(shuō)是不可行的——不僅因?yàn)樽值渲械膯卧~太多沾凄,而且很難跟上領(lǐng)域的步伐——特定術(shù)語(yǔ)和發(fā)明的任何新詞梗醇。
因此,OpenAI 選擇介于這兩個(gè)極端之間的解決方案也就不足為奇了撒蟀。其他公司已經(jīng)發(fā)布了遵循類(lèi)似方法的分詞器叙谨,例如 Google 的 Sentence Piece。
現(xiàn)在我們對(duì)令牌有了更好的理解保屯,讓我們回到我們?cè)瓉?lái)的圖表手负,看看我們是否能更好地理解它。生成模型接受 n 個(gè)標(biāo)記姑尺,可以是幾個(gè)詞竟终、幾段或幾頁(yè)。他們輸出一個(gè)標(biāo)記切蟋,可以是一個(gè)短詞或一個(gè)詞的一部分统捶。
現(xiàn)在這更有意義了。
但是如果你玩過(guò) OpenAI 的 ChatGPT柄粹,你就會(huì)知道它會(huì)產(chǎn)生很多令牌喘鸟,而不僅僅是一個(gè)令牌。那是因?yàn)檫@個(gè)基本思想應(yīng)用于擴(kuò)展窗口模式驻右。你給它 n 個(gè)令牌什黑,它產(chǎn)生一個(gè)令牌輸出,然后它將該輸出令牌合并為下一次迭代輸入的一部分旺入,產(chǎn)生一個(gè)新的令牌輸出兑凿,等等。此模式不斷重復(fù)茵瘾,直到達(dá)到停止條件礼华,表明它已完成生成您需要的所有文本。
例如拗秘,如果我輸入“We need to”作為模型的輸入圣絮,算法可能會(huì)產(chǎn)生如下所示的結(jié)果:
在玩 ChatGPT 時(shí),您可能還注意到該模型不是確定性的:如果您兩次問(wèn)完全相同的問(wèn)題雕旨,您可能會(huì)得到兩個(gè)不同的答案扮匠。那是因?yàn)樵撃P蛯?shí)際上并沒(méi)有產(chǎn)生單個(gè)預(yù)測(cè)標(biāo)記捧请;相反,它返回所有可能標(biāo)記的概率分布棒搜。換句話(huà)說(shuō)疹蛉,它返回一個(gè)向量,其中每個(gè)條目都表示選擇特定標(biāo)記的概率力麸。然后模型從該分布中采樣以生成輸出標(biāo)記可款。
該模型如何得出該概率分布?這就是訓(xùn)練階段的目的克蚂。在訓(xùn)練期間闺鲸,該模型會(huì)接觸到大量文本,并且在給定輸入標(biāo)記序列的情況下調(diào)整其權(quán)重以預(yù)測(cè)良好的概率分布埃叭。 GPT 模型使用大部分互聯(lián)網(wǎng)進(jìn)行訓(xùn)練摸恍,因此他們的預(yù)測(cè)反映了他們所看到的信息的組合。
您現(xiàn)在對(duì)生成模型背后的想法有了很好的理解赤屋。請(qǐng)注意立镶,雖然我只是解釋了這個(gè)想法,但我還沒(méi)有給你一個(gè)算法类早。事實(shí)證明谜慌,這個(gè)想法已經(jīng)存在了幾十年,并且多年來(lái)一直使用幾種不同的算法來(lái)實(shí)現(xiàn)莺奔。接下來(lái)我們將看看其中的一些算法。
生成語(yǔ)言模型簡(jiǎn)史
隱馬爾可夫模型 (HMM) 在 1970 年代開(kāi)始流行变泄。它們的內(nèi)部表示對(duì)句子(名詞令哟、動(dòng)詞等)的語(yǔ)法結(jié)構(gòu)進(jìn)行編碼,并在預(yù)測(cè)新詞時(shí)使用這些知識(shí)妨蛹。然而屏富,因?yàn)樗鼈兪邱R爾可夫過(guò)程,所以它們?cè)谏尚铝钆茣r(shí)只考慮最近的令牌蛙卤。因此狠半,他們實(shí)現(xiàn)了一個(gè)非常簡(jiǎn)單的“n 個(gè)標(biāo)記輸入,一個(gè)標(biāo)記輸出”想法颤难,其中 n = 1神年。因此,它們不會(huì)生成非常復(fù)雜的輸出行嗤。讓我們考慮以下示例:
如果我們將“The quick brown fox jumps over the”輸入到語(yǔ)言模型已日,我們會(huì)期望它返回“l(fā)azy”。然而栅屏,HMM 只會(huì)看到最后一個(gè)標(biāo)記“the”飘千,并且在信息如此少的情況下堂鲜,它不太可能給出我們期望的預(yù)測(cè)。隨著人們對(duì) HMM 進(jìn)行試驗(yàn)护奈,很明顯語(yǔ)言模型需要支持多個(gè)輸入標(biāo)記才能生成良好的輸出缔莲。
N-gram 在 1990 年代開(kāi)始流行,因?yàn)樗鼈兺ㄟ^(guò)將多個(gè)標(biāo)記作為輸入來(lái)修復(fù) HMM 的主要限制霉旗。 n-gram 模型可能會(huì)很好地預(yù)測(cè)前面示例中的“懶惰”一詞痴奏。
n-gram 的最簡(jiǎn)單實(shí)現(xiàn)是具有基于字符的標(biāo)記的二元語(yǔ)法,給定單個(gè)字符奖慌,能夠預(yù)測(cè)序列中的下一個(gè)字符抛虫。您只需幾行代碼就可以創(chuàng)建其中一個(gè),我鼓勵(lì)您嘗試一下简僧。首先建椰,計(jì)算訓(xùn)練文本中不同字符的數(shù)量(我們稱(chēng)之為 n),并創(chuàng)建一個(gè)用零初始化的 n x n 二維矩陣岛马。通過(guò)選擇對(duì)應(yīng)于第一個(gè)字符的行和對(duì)應(yīng)于第二個(gè)字符的列棉姐,每對(duì)輸入字符可用于定位該矩陣中的特定條目。在解析訓(xùn)練數(shù)據(jù)時(shí)啦逆,對(duì)于每一對(duì)字符伞矩,只需將一個(gè)字符添加到相應(yīng)的矩陣單元格即可。例如夏志,如果您的訓(xùn)練數(shù)據(jù)包含單詞“car”乃坤,您可以向“c”行和“a”列中的單元格添加一個(gè),然后向“a”行和“r”列中的單元格添加一個(gè)柱子沟蔑。一旦您累積了所有訓(xùn)練數(shù)據(jù)的計(jì)數(shù)湿诊,將每一行轉(zhuǎn)換為概率分布,方法是將每個(gè)單元格除以該行的總數(shù)瘦材。
然后要進(jìn)行預(yù)測(cè)厅须,您需要給它一個(gè)字符作為開(kāi)頭,例如“c”食棕。您查找對(duì)應(yīng)于“c”行的概率分布朗和,并對(duì)該分布進(jìn)行采樣以生成下一個(gè)字符。然后你選擇你制作的角色簿晓,重復(fù)這個(gè)過(guò)程眶拉,直到你達(dá)到停止條件。高階 n-gram 遵循相同的基本思想抢蚀,但它們能夠通過(guò)使用 n 維張量來(lái)查看更長(zhǎng)的輸入標(biāo)記序列镀层。
N-grams 很容易實(shí)現(xiàn)。然而,由于矩陣的大小隨著輸入標(biāo)記數(shù)量的增加呈指數(shù)增長(zhǎng)唱逢,因此它們不能很好地?cái)U(kuò)展到更大數(shù)量的標(biāo)記吴侦。而且只有幾個(gè)輸入令牌,它們無(wú)法產(chǎn)生好的結(jié)果坞古。需要一種新技術(shù)來(lái)繼續(xù)在該領(lǐng)域取得進(jìn)展备韧。
在 2000 年代,遞歸神經(jīng)網(wǎng)絡(luò) (RNN) 變得非常流行痪枫,因?yàn)樗鼈兡軌蚪邮鼙纫郧暗募夹g(shù)多得多的輸入標(biāo)記织堂。特別是作為 RNN 類(lèi)型的 LSTM 和 GRU,得到了廣泛的應(yīng)用奶陈,并被證明能夠產(chǎn)生相當(dāng)好的結(jié)果易阳。
RNN 是一種神經(jīng)網(wǎng)絡(luò),但與傳統(tǒng)的前饋神經(jīng)網(wǎng)絡(luò)不同吃粒,它們的架構(gòu)可以適應(yīng)接受任意數(shù)量的輸入并產(chǎn)生任意數(shù)量的輸出潦俺。例如,如果我們給 RNN 輸入標(biāo)記“We”徐勃、“need”和“to”事示,并希望它生成更多標(biāo)記直到達(dá)到一個(gè)完整點(diǎn),RNN 可能具有以下結(jié)構(gòu):
上面結(jié)構(gòu)中的每個(gè)節(jié)點(diǎn)都具有相同的權(quán)重僻肖。您可以將其視為連接到自身并重復(fù)執(zhí)行的單個(gè)節(jié)點(diǎn)(因此稱(chēng)為“循環(huán)”)肖爵,或者您可以將其視為上圖中顯示的擴(kuò)展形式。在基本 RNN 上添加到 LSTM 和 GRU 的一個(gè)關(guān)鍵功能是存在一個(gè)從一個(gè)節(jié)點(diǎn)傳遞到下一個(gè)節(jié)點(diǎn)的內(nèi)部存儲(chǔ)單元臀脏。這使后面的節(jié)點(diǎn)能夠記住先前節(jié)點(diǎn)的某些方面劝堪,這對(duì)于做出良好的文本預(yù)測(cè)至關(guān)重要。
然而揉稚,RNN 在處理非常長(zhǎng)的文本序列時(shí)存在不穩(wěn)定問(wèn)題幅聘。模型中的梯度趨向于呈指數(shù)增長(zhǎng)(稱(chēng)為“爆炸梯度”)或減小為零(稱(chēng)為“消失梯度”),從而阻止模型繼續(xù)從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)窃植。 LSTM 和 GRU 可以緩解梯度消失問(wèn)題,但不能完全阻止它荐糜。因此巷怜,即使在理論上他們的架構(gòu)允許任何長(zhǎng)度的輸入,但實(shí)際上對(duì)該長(zhǎng)度有限制暴氏。再次延塑,文本生成的質(zhì)量受到算法支持的輸入令牌數(shù)量的限制,需要新的突破答渔。
2017 年关带,介紹 Transformers 的論文被谷歌發(fā)布,我們進(jìn)入了文本生成的新時(shí)代。 Transformers 中使用的架構(gòu)允許大幅增加輸入令牌的數(shù)量宋雏,消除了 RNN 中出現(xiàn)的梯度不穩(wěn)定問(wèn)題芜飘,并且高度可并行化,這意味著它能夠利用 GPU 的強(qiáng)大功能磨总。 Transformers 在今天被廣泛使用嗦明,它們是 OpenAI 為其最新的 GPT 文本生成模型選擇的技術(shù)。
Transformer 基于“注意力機(jī)制”蚪燕,它允許模型比其他輸入更多地關(guān)注某些輸入娶牌,而不管它們出現(xiàn)在輸入序列中的什么位置。例如馆纳,讓我們考慮以下句子:
在這種情況下诗良,當(dāng)模型預(yù)測(cè)動(dòng)詞“bought”時(shí),它需要匹配動(dòng)詞“went”的過(guò)去式鲁驶。為了做到這一點(diǎn)鉴裹,它必須非常關(guān)注“去了”的令牌。事實(shí)上灵嫌,它可能更關(guān)注標(biāo)記“went”而不是標(biāo)記“and”壹罚,盡管事實(shí)上“went”在輸入序列中出現(xiàn)得更早。
GPT 模型中的這種選擇性注意行為是由 2017 年論文中的一個(gè)新穎想法實(shí)現(xiàn)的:使用“蒙面多頭注意”層寿羞。讓我們分解這個(gè)術(shù)語(yǔ)猖凛,并深入研究它的每個(gè)子術(shù)語(yǔ):
Attention:“注意”層包含一個(gè)權(quán)重矩陣,表示輸入句子中所有標(biāo)記位置對(duì)之間的關(guān)系強(qiáng)度绪穆。這些權(quán)重是在訓(xùn)練期間學(xué)習(xí)的辨泳。如果一對(duì)倉(cāng)位對(duì)應(yīng)的權(quán)重很大,那么這兩個(gè)倉(cāng)位中的token相互影響很大玖院。這種機(jī)制使 Transfomer 能夠比其他標(biāo)記更多地關(guān)注某些標(biāo)記菠红,而不管它們出現(xiàn)在句子中的什么位置。
Masked:如果矩陣僅限于每個(gè)標(biāo)記位置與輸入中較早位置之間的關(guān)系难菌,則注意力層被“屏蔽”试溯。這就是 GPT 模型用于文本生成的內(nèi)容,因?yàn)檩敵鰳?biāo)記只能依賴(lài)于它之前的標(biāo)記郊酒。
Multi-head:Transformer 使用蒙面的“多頭”注意層遇绞,因?yàn)樗鄠€(gè)并行操作的蒙面注意層。
LSTM 和 GRU 的記憶單元還使后來(lái)的標(biāo)記能夠記住早期標(biāo)記的某些方面燎窘。但是摹闽,如果兩個(gè)相關(guān)的標(biāo)記相距很遠(yuǎn),梯度問(wèn)題可能會(huì)成為障礙褐健。變形金剛沒(méi)有這個(gè)問(wèn)題付鹿,因?yàn)槊總€(gè)標(biāo)記都直接連接到它之前的所有其他標(biāo)記。
現(xiàn)在您了解了 GPT 模型中使用的 Transformer 架構(gòu)的主要思想,讓我們看一下當(dāng)前可用的各種 GPT 模型之間的區(qū)別舵匾。
不同的 GPT 模型是如何實(shí)現(xiàn)的
在撰寫(xiě)本文時(shí)俊抵,OpenAI 最新發(fā)布的三種文本生成模型分別是 GPT-3.5、ChatGPT 和 GPT-4纽匙,它們均基于 Transformer 架構(gòu)务蝠。事實(shí)上,“GPT”代表“Generative Pre-trained Transformer”烛缔。
GPT-3.5 是一個(gè)作為完成式模型訓(xùn)練的轉(zhuǎn)換器馏段,這意味著如果我們給它幾個(gè)詞作為輸入,它能夠生成更多可能在訓(xùn)練數(shù)據(jù)中跟隨它們的詞践瓷。
另一方面院喜,ChatGPT 被訓(xùn)練為一種對(duì)話(huà)式模型,這意味著當(dāng)我們與它交流時(shí)晕翠,它表現(xiàn)得最好喷舀,就像我們?cè)谶M(jìn)行對(duì)話(huà)一樣。它基于與 GPT-3.5 相同的 transformer 基礎(chǔ)模型淋肾,但它使用對(duì)話(huà)數(shù)據(jù)進(jìn)行了微調(diào)硫麻。然后使用人類(lèi)反饋強(qiáng)化學(xué)習(xí) (RLHF) 對(duì)其進(jìn)行進(jìn)一步微調(diào),這是 OpenAI 在其 2022 InstructGPT 論文中引入的一項(xiàng)技術(shù)樊卓。在這種技術(shù)中拿愧,我們給模型兩次相同的輸入,取回兩個(gè)不同的輸出碌尔,然后詢(xún)問(wèn)人類(lèi)排序者它更喜歡哪個(gè)輸出浇辜。然后使用該選擇通過(guò)微調(diào)改進(jìn)模型。這種技術(shù)使模型的輸出與人類(lèi)期望保持一致唾戚,這對(duì) OpenAI 最新模型的成功至關(guān)重要柳洋。
另一方面,GPT-4 可用于完成和對(duì)話(huà)叹坦,并擁有自己全新的基礎(chǔ)模型熊镣。該基礎(chǔ)模型還使用 RLHF 進(jìn)行了微調(diào),以更好地符合人類(lèi)期望募书。
編寫(xiě)使用 GPT 模型的代碼
你有兩種選擇來(lái)編寫(xiě)使用 GPT 模型的代碼:你可以直接使用 OpenAI API轧钓,或者你可以在 Azure 上使用 OpenAI API。無(wú)論哪種方式锐膜,您都使用相同的 API 調(diào)用編寫(xiě)代碼,您可以在 OpenAI 的 API 參考頁(yè)面中了解這些內(nèi)容弛房。
兩者之間的主要區(qū)別在于 Azure 提供了以下附加功能:
- 自動(dòng)化負(fù)責(zé)任的 AI 過(guò)濾器道盏,可減少 API 的不道德使用
- Azure 的安全功能,例如專(zhuān)用網(wǎng)絡(luò)
- 區(qū)域可用性,以便在與 API 交互時(shí)獲得最佳性能
如果您正在編寫(xiě)使用這些模型的代碼荷逞,則需要選擇要使用的特定版本媒咳。這是一個(gè)快速備忘單,其中包含 Azure OpenAI 服務(wù)中當(dāng)前可用的版本:
- GPT-3.5: text-davinci-002, text-davinci-003
- ChatGPT: gpt-35-turbo
- GPT-4: gpt-4, gpt-4–32k
兩個(gè) GPT-4 版本的區(qū)別主要在于它們支持的令牌數(shù)量:gpt-4 支持 8,000 個(gè)令牌种远,而 gpt-4–32k 支持 32,000 個(gè)涩澡。相比之下,GPT-3.5 模型僅支持 4,000 個(gè)令牌坠敷。
由于 GPT-4 目前是最昂貴的選擇妙同,因此最好從其他模型之一開(kāi)始,并僅在需要時(shí)升級(jí)膝迎。有關(guān)這些模型的更多詳細(xì)信息粥帚,請(qǐng)查看文檔。
總結(jié)
在本文中限次,我們介紹了所有生成語(yǔ)言模型共有的基本原則芒涡,尤其是來(lái)自 OpenAI 的最新 GPT 模型的獨(dú)特之處。
在此過(guò)程中卖漫,我們強(qiáng)調(diào)了語(yǔ)言模型的核心思想:“n 個(gè)標(biāo)記輸入费尽,一個(gè)標(biāo)記輸出”。我們探討了代幣是如何分解的羊始,以及為什么要以這種方式分解旱幼。我們追溯了語(yǔ)言模型從早期的隱馬爾可夫模型到最近的基于 Transformer 的模型長(zhǎng)達(dá)數(shù)十年的演變。最后店枣,我們描述了來(lái)自 OpenAI 的三個(gè)最新的基于 Transformer 的 GPT 模型速警,每個(gè)模型是如何實(shí)現(xiàn)的,以及如何編寫(xiě)使用它們的代碼鸯两。
到現(xiàn)在為止闷旧,您應(yīng)該已經(jīng)準(zhǔn)備好就 GPT 模型進(jìn)行有見(jiàn)地的對(duì)話(huà),并開(kāi)始在您自己的編碼項(xiàng)目中使用它們钧唐。我計(jì)劃寫(xiě)更多關(guān)于語(yǔ)言模型的解釋?zhuān)哉?qǐng)關(guān)注我忙灼,讓我知道你希望看到哪些主題!感謝您的閱讀钝侠!
本文由mdnice多平臺(tái)發(fā)布