官术网_书友最值得收藏!

ChatGPT總是根據概率選擇下一個詞,但是這些概率是從何而來的呢?讓我們從一個更簡單的問題開始:考慮逐字母(而非逐詞)地生成英文文本。怎樣才能計算出每個字母應當出現的概率呢?

我們可以做一件很小的事,拿一段英文文本樣本,然后計算其中不同字母的出現次數。例如,下面的例子統計了維基百科上“cats”(貓)的條目中各個字母的出現次數。

對“dogs”(狗)的條目也做同樣的統計。

結果有些相似,但并不完全一樣。(毫無疑問,在“dogs”的條目中,字母o更常見,畢竟dog一詞本身就含有o。)不過,如果我們采集足夠大的英文文本樣本,最終就可以得到相當一致的結果。

這是在只根據這些概率生成字母序列時得到的樣本。

我們可以通過添加空格將其分解成“詞”,就像這些“詞”也是具有一定概率的字母一樣。

還可以通過強制要求“詞長”的分布與英文中相符來更好地造“詞”。

雖然并沒有碰巧得到任何“實際的詞”,但結果看起來稍好一些了。不過,要進一步完善,我們需要做的不僅僅是隨機地挑選每個字母。舉例來說,我們知道,如果句子中有一個字母q,那么緊隨其后的下一個字母幾乎一定是u。

以下是每個字母單獨出現的概率圖。

下圖則顯示了典型英文文本中字母對[二元(2-gram或bigram)字母]的概率??赡艹霈F的第一個字母橫向顯示,第二個字母縱向顯示。

可以看到,q列中除了u行以外都是空白的(概率為零)?,F在不再一次一個字母地生成“詞”,而是使用這些二元字母的概率,一次關注兩個字母。下面是可以得到的一個結果,其中恰巧包括幾個“實際的詞”。

有了足夠多的英文文本,我們不僅可以對單個字母或字母對(二元字母)得到相當好的估計,而且可以對更長的字母串得到不錯的估計。如果使用逐漸變長的 n 元(n-gram)字母的概率生成“隨機的詞”,就能發現它們會顯得越來越“真實”。

現在假設—多少像ChatGPT所做的那樣—我們正在處理整個詞,而不是字母。英語中有大約50000個常用詞。通過查看大型的英文語料庫(比如幾百萬本書,總共包含幾百億個詞),我們可以估計每個詞的常用程度。使用這些信息,就可以開始生成“句子”了,其中的每個詞都是獨立隨機選擇的,概率與它們在語料庫中出現的概率相同。以下是我們得到的一個結果。

毫不意外,這沒有什么意義。那么應該如何做得更好呢?就像處理字母一樣,我們可以不僅考慮單個詞的概率,而且考慮詞對或更長的 n 元詞的概率。以下是考慮詞對后得到的5個結果,它們都是從單詞cat開始的。

結果看起來稍微變得更加“合理”了??梢韵胂?,如果能夠使用足夠長的 n 元詞,我們基本上會“得到一個ChatGPT”,也就是說,我們得到的東西能夠生成符合“正確的整體文章概率”且像文章一樣長的詞序列。但問題在于:我們根本沒有足夠的英文文本來推斷出這些概率。

在網絡爬取結果中可能有幾千億個詞,在電子書中可能還有另外幾百億個詞。但是,即使只有4萬個常用詞,可能的二元詞的數量也已經達到了16億,而可能的三元詞的數量則達到了60萬億。因此,我們無法根據已有的文本估計所有這些三元詞的概率。當涉及包含20個詞的“文章片段”時,可能的20元詞的數量會大于宇宙中的粒子數量,所以從某種意義上說,永遠無法把它們全部寫下來。

我們能做些什么呢?最佳思路是建立一個模型,讓我們能夠估計序列出現的概率—即使我們從未在已有的文本語料庫中明確看到過這些序列。ChatGPT的核心正是所謂的“大語言模型”,后者已經被構建得能夠很好地估計這些概率了。

主站蜘蛛池模板: 山阴县| 怀集县| 鄯善县| 安义县| 金华市| 靖江市| 开远市| 靖西县| 濉溪县| 泽库县| 余姚市| 江口县| 北宁市| 湖口县| 项城市| 天峻县| 惠来县| 青浦区| 从化市| 宾川县| 阜阳市| 上高县| 嵊州市| 密山市| 金山区| 黄浦区| 来宾市| 黄石市| 钟祥市| 和田市| 龙里县| 富顺县| 繁昌县| 台东市| 澎湖县| 永仁县| 津市市| 赣州市| 顺昌县| 黑龙江省| 察哈|