想了解更多AIGC的內(nèi)容,請(qǐng)?jiān)L問(wèn):
譯者 | 晶顏
審校 | 重樓
不同于互聯(lián)網(wǎng)上隨處可見(jiàn)的傳統(tǒng)問(wèn)題庫(kù),這些問(wèn)題需要跳出常規(guī)思維。
大語(yǔ)言模型(LLM)在數(shù)據(jù)科學(xué)、生成式人工智能(GenAI)和人工智能領(lǐng)域越來(lái)越重要。這些復(fù)雜的算法提升了人類的技能,并在諸多行業(yè)中推動(dòng)了效率和創(chuàng)新性的提升,成為企業(yè)保持競(jìng)爭(zhēng)力的關(guān)鍵。
然而,盡管GenAI和LLM越來(lái)越常見(jiàn),但我們依然缺少能深入理解其復(fù)雜性的詳細(xì)資源。職場(chǎng)新人在進(jìn)行GenAI和LLM功能以及實(shí)際應(yīng)用的面試時(shí),往往會(huì)覺(jué)得自己像是陷入了未知領(lǐng)域。
為此,我們編寫(xiě)了這份指導(dǎo)手冊(cè),收錄了7個(gè)有關(guān)GenAI & LLM的技術(shù)性面試問(wèn)題。這份指南配有深入的答案,旨在幫助您更好地迎接面試,以充足的信心來(lái)應(yīng)對(duì)挑戰(zhàn),以及更深層次地理解GenAI & LLM在塑造人工智能和數(shù)據(jù)科學(xué)未來(lái)方面的影響和潛力。
1. 如何在Python中使用嵌入式字典構(gòu)建知識(shí)圖譜?
一種方法是使用哈希(Python中的字典,也稱為鍵-值表),其中鍵(key)是單詞、令牌、概念或類別,例如“數(shù)學(xué)”(mathematics)。每個(gè)鍵(key)對(duì)應(yīng)一個(gè)值(value),這個(gè)值本身就是一個(gè)哈希:嵌套哈希(nested hash)。嵌套哈希中的鍵也是一個(gè)與父哈希中的父鍵相關(guān)的單詞,例如“微積分”(calculus)之類的單詞。該值是一個(gè)權(quán)重:“微積分”的值高,因?yàn)椤拔⒎e分”和“數(shù)學(xué)”是相關(guān)的,并且經(jīng)常出現(xiàn)在一起;相反地,“餐館”(restaurants)的值低,因?yàn)椤安宛^”和“數(shù)學(xué)”很少出現(xiàn)在一起。
在LLM中,嵌套哈??赡苁莈mbedding(一種將高維數(shù)據(jù)映射到低維空間的方法,通常用于將離散的、非連續(xù)的數(shù)據(jù)轉(zhuǎn)換為連續(xù)的向量表示,以便于計(jì)算機(jī)進(jìn)行處理)。由于嵌套哈希沒(méi)有固定數(shù)量的元素,因此它處理離散圖譜的效果遠(yuǎn)遠(yuǎn)好于矢量數(shù)據(jù)庫(kù)或矩陣。它帶來(lái)了更快的算法,且只需要很少的內(nèi)存。
2. 當(dāng)數(shù)據(jù)包含1億個(gè)關(guān)鍵字時(shí),如何進(jìn)行分層聚類?
如果想要聚類關(guān)鍵字,那么對(duì)于每一對(duì)關(guān)鍵字{A, B},你可以計(jì)算A和B之間的相似度,獲悉這兩個(gè)詞有多相似。目標(biāo)是生成相似關(guān)鍵字的集群。
Sklearn等標(biāo)準(zhǔn)Python庫(kù)提供凝聚聚類(agglomerative clustering),也稱為分層聚類(hierarchical clustering)。然而,在這個(gè)例子中,它們通常需要一個(gè)1億x 1億的距離矩陣。這顯然行不通。在實(shí)踐中,隨機(jī)單詞A和B很少同時(shí)出現(xiàn),因此距離矩陣是非常離散的。解決方案包括使用適合離散圖譜的方法,例如使用問(wèn)題1中討論的嵌套哈希。其中一種方法是基于檢測(cè)底層圖中的連接組件的聚類。
3. 如何抓取像Wikipedia這樣的大型存儲(chǔ)庫(kù),以檢索底層結(jié)構(gòu),而不僅僅是單獨(dú)的條目?
這些存儲(chǔ)庫(kù)都將結(jié)構(gòu)化元素嵌入到網(wǎng)頁(yè)中,使內(nèi)容比乍一看更加結(jié)構(gòu)化。有些結(jié)構(gòu)元素是肉眼看不見(jiàn)的,比如元數(shù)據(jù)。有些是可見(jiàn)的,并且也出現(xiàn)在抓取的數(shù)據(jù)中,例如索引、相關(guān)項(xiàng)、面包屑或分類。您可以單獨(dú)檢索這些元素,以構(gòu)建良好的知識(shí)圖譜或分類法。但是您可能需要從頭開(kāi)始編寫(xiě)自己的爬蟲(chóng)程序,而不是依賴Beautiful Soup之類的工具。富含結(jié)構(gòu)信息的LLM(如xLLM)提供了更好的結(jié)果。此外,如果您的存儲(chǔ)庫(kù)確實(shí)缺乏任何結(jié)構(gòu),您可以使用從外部源檢索的結(jié)構(gòu)來(lái)擴(kuò)展您的抓取數(shù)據(jù)。這一過(guò)程稱為“結(jié)構(gòu)增強(qiáng)”(structure augmentation)。
4. 如何用上下文令牌增強(qiáng)LLM embeddings?
Embeddings由令牌組成;這些是您可以在任何文檔中找到的最小的文本元素。你不一定要有兩個(gè)令牌,比如“數(shù)據(jù)”和“科學(xué)”,你可以有四個(gè)令牌:“數(shù)據(jù)^科學(xué)”、“數(shù)據(jù)”、“科學(xué)”和“數(shù)據(jù)~科學(xué)”。最后一個(gè)表示發(fā)現(xiàn)了“數(shù)據(jù)科學(xué)”這個(gè)詞。第一個(gè)意思是“數(shù)據(jù)”和“科學(xué)”都被發(fā)現(xiàn)了,但是在一個(gè)給定段落的隨機(jī)位置,而不是在相鄰的位置。這樣的令牌稱為多令牌(multi-tokens)或上下文令牌。它們提供了一些很好的冗余,但如果不小心,您可能會(huì)得到巨大的embeddings。解決方案包括清除無(wú)用的令牌(保留最長(zhǎng)的一個(gè))和使用可變大小的embeddings。上下文內(nèi)容可以幫助減少LLM幻覺(jué)。
5. 如何實(shí)現(xiàn)自校正(self-tuning)以消除與模型評(píng)估和訓(xùn)練相關(guān)的許多問(wèn)題?
這適用于基于可解釋人工智能的系統(tǒng),而不是神經(jīng)網(wǎng)絡(luò)黑匣子。允許應(yīng)用程序的用戶選擇超參數(shù)并標(biāo)記他喜歡的那些。使用該信息查找理想的超參數(shù)并將其設(shè)置為默認(rèn)值。這是基于用戶輸入的自動(dòng)強(qiáng)化學(xué)習(xí)。它還允許用戶根據(jù)期望的結(jié)果選擇他最喜歡的套裝,使您的應(yīng)用程序可定制。在LLM中,允許用戶選擇特定的子LLM(例如基于搜索類型或類別),可以進(jìn)一步提高性能。為輸出結(jié)果中的每個(gè)項(xiàng)目添加相關(guān)性評(píng)分,也有助于微調(diào)您的系統(tǒng)。
6. 如何將矢量搜索的速度提高幾個(gè)數(shù)量級(jí)?
在LLM中,使用可變長(zhǎng)度(variable-length)embeddings極大地減少了embeddings的大小。因此,它可以加速搜索,以查找與前端提示符中捕獲到的相似的后端embeddings。但是,它可能需要不同類型的數(shù)據(jù)庫(kù),例如鍵-值表(key-value tables)。減少令牌的大小和embeddings表是另一個(gè)解決方案:在一個(gè)萬(wàn)億令牌系統(tǒng)中,95%的令牌永遠(yuǎn)不會(huì)被提取來(lái)回答提示。它們只是噪音,因此可以擺脫它們。使用上下文令牌(參見(jiàn)問(wèn)題4)是另一種以更緊湊的方式存儲(chǔ)信息的方法。最后,在壓縮embeddings上使用近似最近鄰搜索(approximate nearest neighbor,ANN)來(lái)進(jìn)行搜索。概率版本(pANN)可以運(yùn)行得快得多,見(jiàn)下圖。最后,使用緩存機(jī)制來(lái)存儲(chǔ)訪問(wèn)最頻繁的embeddings 或查詢,以獲得更好的實(shí)時(shí)性能。
概率近似最近鄰搜索(pANN)
根據(jù)經(jīng)驗(yàn)來(lái)看,將訓(xùn)練集的大小減少50%會(huì)得到更好的結(jié)果,過(guò)度擬合效果也會(huì)大打折扣。在LLM中,選擇幾個(gè)好的輸入源比搜索整個(gè)互聯(lián)網(wǎng)要好。對(duì)于每個(gè)頂級(jí)類別都有一個(gè)專門的LLM,而不是一刀切,這進(jìn)一步減少了embeddings的數(shù)量:每個(gè)提示針對(duì)特定的子LLM,而非整個(gè)數(shù)據(jù)庫(kù)。
7. 從你的模型中獲得最佳結(jié)果的理想損失函數(shù)是什么?
最好的解決方案是使用模型評(píng)估指標(biāo)作為損失函數(shù)。之所以很少這樣做,是因?yàn)槟枰粋€(gè)損失函數(shù),它可以在神經(jīng)網(wǎng)絡(luò)中每次神經(jīng)元被激活時(shí)非??斓馗?。在神經(jīng)網(wǎng)絡(luò)環(huán)境下,另一種解決方案是在每個(gè)epoch之后計(jì)算評(píng)估指標(biāo),并保持在具有最佳評(píng)估分?jǐn)?shù)的epoch生成解決方案上,而不是在具有最小損失的epoch生成解決方案上。
我目前正在研究一個(gè)系統(tǒng),其中的評(píng)價(jià)指標(biāo)和損失函數(shù)是相同的。不是基于神經(jīng)網(wǎng)絡(luò)的。最初,我的評(píng)估指標(biāo)是多元Kolmogorov-Smirnov距離(KS)。但如果沒(méi)有大量的計(jì)算,在大數(shù)據(jù)上對(duì)KS進(jìn)行原子更新(atomic update)是極其困難的。這使得KS不適合作為損失函數(shù),因?yàn)槟阈枰獢?shù)十億次原子更新。但是通過(guò)將累積分布函數(shù)(cumulative distribution)改變?yōu)榫哂袛?shù)百萬(wàn)個(gè)bins參數(shù)的概率密度函數(shù)(probability density function),我能夠想出一個(gè)很好的評(píng)估指標(biāo),它也可以作為損失函數(shù)。
原文標(biāo)題:7 Cool Technical GenAI & LLM Job Interview Questions,作者:Vincent Granville
鏈接:https://www.datasciencecentral.com/7-cool-technical-genai-llm-job-interview-questions/。