AI輔助編程2 AI編碼技術的工作原理

来源:https://www.cnblogs.com/testing-/p/18232515
-Advertisement-
Play Games

目錄條款32:確定你的public繼承塑模出is-a關係(Make sure public inheritance models “is-a”)public繼承的含義設計良好的繼承關係is-a的例外條款33:避免遮掩繼承而來的名稱(Avoid hiding inherited names)作用域的隱 ...


2 AI編碼技術的工作原理

在本章中,我們將揭開人工智慧輔助編程工具的神秘面紗,瞭解它們的工作原理。我們將簡要回顧一下歷史,體驗一下變換器模型和LLM,並演示OpenAI Playground。然後,我們將獲得一些關於如何評估LLM的建議。

掌握這項強大的技術能做什麼、不能做什麼,將為在實際軟體項目中更明智地使用人工智慧輔助編程工具鋪平道路。

2.1關鍵功能

GitHub Copilot、Tabnine、CodiumAI 和 Amazon CodeWhisperer 等人工智慧輔助編程工具在市場上引起了熱議。每種產品的製造商都試圖標榜自己的特色。不過,這些工具也有不少共同的功能。

  • 代碼建議:根據註釋和文件上下文提供代碼建議;推薦單行或整個函數。
  • 上下文感知補全:提供基於全部或部分代碼庫的上下文感知代碼補全,以及幫助編碼的建議。
  • 測試生成: 分析代碼以生成有意義的測試、映射代碼行為並顯示邊緣情況,從而確保軟體在發貨前的可靠性。
  • 用戶與集成開發環境互動:當用戶在集成開發環境中輸入代碼時,自動激活並提供指導;用戶可通過聊天與代碼互動。
  • 代碼分析:分析代碼片段、文檔說明和註釋,提供可靠的代碼預測並標記可疑代碼。
  • 錯誤檢測和修複:識別代碼中的潛在錯誤,並提出修複方法。
  • 自動文檔:自動添加文檔說明並增強代碼文檔。
  • 常規任務自動化:幫助為常規或耗時任務、不熟悉的 API 或 SDK 以及文件操作和圖像處理等其他常見編碼場景創建代碼。
  • API和 SDK使用優化:幫助正確有效地使用 API 和 SDK。
  • 開放源代碼的發現和歸屬:協助發現和歸屬開放源代碼和庫。

這些系統可以為開發人員提供很大的幫助,主要是通過提供代碼建議和上下文感知的補全。我們將在下一節詳細介紹這些功能。

2.2代碼建議和上下文感知補全與智能代碼補全

智能代碼自動補全(也稱為自動完成或微軟的 IntelliSense)是許多集成開發環境的神奇之處。當開發人員敲擊鍵盤時,它們會向開發人員提供幫助,提示、填充和突出顯示代碼段。實際上,這種技術早在上世紀50年代末拼寫檢查程式出現時就已經存在了。

突破性進展出現在20世紀90年代中期。微軟的Microsoft Visual Basic 5.0提供了實時建議和補全,重點放在基本語法和函數簽名上。這大大提高了工作效率,減少了錯誤。

因此,你可能想知道 與人工智慧輔助編程工具相比,IntelliSense的優勢在哪裡?畢竟,IntelliSense在人工智慧和機器學習方面有一定的優勢。

然而,這兩者之間有一個重要的區別。人工智慧輔助工具由生成式人工智慧驅動。它們提供的不僅僅是代碼,還有自助式文檔、規劃文檔和幫助指南等。得益於生成式人工智慧,這些工具能夠根據給定的上下文,嫻熟地生成、調整和理解類似於人類的文本,使它們成為翻譯、摘要、文本分析、主題建模和回答查詢等方面的佼佼者。使用這些工具有時就像與代碼閑聊一樣。以LLM為核心,它們可以從你的輸入中捕捉到上下文和意圖的變化。

2.3編譯器與人工智慧輔助編程工具

要更好地理解人工智慧輔助編程工具,首先要瞭解編譯器的工作。以下是編譯器執行的主要步驟:

  • 詞法分析(標記化)
    編譯器就像一位語言教師,將你的代碼分解成標記。

  • 語法分析

在這裡,編譯器會檢查標記是如何分組的。它確保您的代碼具有正確的結構,而不僅僅是正確的命令。

  • 語義分析(錯誤檢查)

編譯器確保您的代碼在編程語言的上下文中是有意義的。這不僅關係到語法的正確性。它還涉及正確的含義。

  • 生成中間代碼

這是您的代碼開始轉換之旅的地方。編譯器會將高級代碼轉換為中間形式。雖然還不是完全的機器語言,但它已經達到了機器語言的水平。

  • 代碼優化

在這一步驟中,編譯器就像是代碼的私人教練,使代碼更精簡、更高效。它會調整中間代碼,使其運行更快,占用空間更少。

  • 代碼生成

這是最後的轉換。編譯器將優化後的中間代碼轉換成CPU可以理解的機器代碼或彙編語言。

  • 鏈接和載入:

鏈接有時被認為是編譯過程的一部分,它涉及將各種代碼和庫組合成一個單一的可執行程式。載入是將程式放入記憶體執行的過程。

至於像Copilot這樣的人工智慧輔助編程工具,則是另一回事。它們不像編譯器那樣能真正“理解”編程語言。相反,它們使用人工智慧,根據大量已有的代碼進行猜測並提出代碼建議。由於這些工具在玩概率游戲,因此建議可能會有很大差異。然後,編譯器會將這些代碼編譯成機器可以運行的程式。

有時,人工智慧工具可能會漏掉一些簡單的地方,比如一個括弧,而人類編碼員或編譯器會立刻發現。這是因為LLM基於預測模式,而不是編譯引擎。如果有些東西在訓練中並不常見,它們可能就不會發現。此外,這些工具可能會變得花哨,並根據情況建議複雜的代碼。是的,人工智慧輔助編程工具可能會走火入魔。

說到發現錯誤,人工智慧輔助編程工具一般都很有效,但仍無法與編譯器忍者般的查錯技能相提並論。不過,這些工具仍然很強大。例如,它們可以幫助捕捉惱人的語法錯誤--缺少分號、函數名中的錯別字、括弧不匹配--並迅速提出正確的修正建議。它們還能幫助你避免常見的編碼陷阱。無論是提醒你在打開文件後正確關閉文件,還是建議你以更有效的方式迴圈使用數組,這款工具都能為你提供支持。說到邏輯錯誤,人工智慧輔助編程工具的洞察力令人驚訝。它們可能無法解決所有複雜問題,但往往能提出你可能未曾考慮過的替代方法或解決方案,將你的問題解決之旅引向正確的方向。

這一切都意味著,雖然人工智慧工具有助於讓編碼更順暢,但它們並不能取代編譯器的全面檢查或人類編碼員的敏銳眼光。

這些缺點真正強調了將人工智慧輔助工具的智能與編譯器的全面檢查和人性化相結合是多麼重要。畢竟,你要確保代碼不僅是好的,而且是準確無誤的。

2.4能力水平

2023年10月,Sourcegraph的首席執行官兼聯合創始人Quinn Slack分享了一篇頗有見地的博文。他深入研究了Copilot等人工智慧輔助編程工具的世界,並提出了一種有趣的思考方式,他稱之為 “代碼人工智慧水平”。他的分步框架讓每個人都能更容易地瞭解這些人工智慧工具的功能,並檢查銷售這些工具的公司誇誇其談的說法是否真的站得住腳。

前三個級別側重於由人類主導的編碼,其中開發人員是主要參與者。從0級開始,沒有人工智慧的輔助,這是老式的編碼。開發人員在沒有人工智慧的情況下手工完成所有工作。這是基線,為人工智慧以後的介入奠定了基礎。

然後是第一級,即代碼完成。這時,人工智慧開始介入,並根據周圍的情況幫助完成單行或整段代碼。在這個階段,開發人員仍然處於主導地位,指揮整個程式,並使用人工智慧作為典型編碼任務的捷徑。

第二級,代碼創建,提升了人工智慧。在這裡,人工智慧的動手能力更強,並能編寫更長的代碼部分。例如,人工智慧可以設計應用程式介面,甚至修複現有代碼。當然,這一切都需要人工智慧的監控。這一級需要人工智慧瞭解代碼庫及其周圍的環境,這樣才能編寫出不僅正確,而且非常適合的代碼。

從第三級(受監督的自動化)開始,我們看到人工智慧在編碼方面的主導地位發生了轉變。在這一階段,人工智慧會處理多項任務,以實現人類設定的更廣泛的目標,而且不需要每次都進行檢查。在這個階段工作,就像把工作委托給初級開發人員。這個級別的人工智慧已經足夠精明,它可以整理錯誤、添加新功能、將系統整合在一起,併在過程中向人類同行請教任何問題。

到了第4級,也就是完全自動化,人工智慧才真正提高了自己的水平。在這裡,它可以獨自處理複雜的任務,而不需要人類對代碼豎起最後的大拇指。想象一下,如果你是首席執行官或產品經理,你會多麼信任一位一流的工程師。這就是這個級別所追求的關係。人工智慧不只是做出反應。它在主動關註代碼,發現並解決出現的問題。

最後是第五級,即人工智慧主導的完全自主。這一級別是完全不同的游戲,人工智慧不僅要聽從人類的指令,還要設定自己的目標。這是關於人工智慧在核心獎勵功能基礎上的工作。把它想象成在一個與其他代理對決的世界中玩自己的游戲。當然,這個層面聽起來有點像科幻小說,但考慮到事物發展的速度,我們不難想象,在我們的有生之年,這個層面可能會成為現實。

目前,像Copilot這樣的工具還在第3級左右徘徊。確定確切的級別可能比較困難,但奎因-斯拉克的框架在理解技術及其關鍵互動方面做得相當出色。有一點是肯定的:這項技術的發展並沒有放緩,而是在飛速前進。

參考資料

2.5 生成式人工智慧和大型語言模型 (LLM)

使用人工智慧輔助編程工具並不需要你是一個精通生成式人工智慧技術的奇才。不過,對這項技術有一個鳥瞰式的瞭解會非常方便。你將能夠更敏銳地評估這些工具的反應、能力和局限性。

在這裡,透明度不僅僅是一個流行詞。要讓一項新技術真正流行起來,清楚地瞭解其原理至關重要。採用的關鍵在於信任。在編碼領域,可靠性和責任感不僅僅是花哨的附加功能,它們更是麵包和黃油。

在接下來的章節中,我們將對生成式人工智慧和 LLM 蜻蜓點水,讓你對它們有一個更清晰的認識。

2.5.1 演進

生成式人工智慧的歷史可以追溯到幾十年前,最早的例子之一是ELIZA,它是麻省理工學院教授約瑟夫-韋曾鮑姆(Joseph Weizenbaum在60年代中期創造的聊天機器人。ELIZA的設計目的是模仿與心理治療師的聊天(你現在還能在網上找到它)。當然,ELIZA是最基本的,它依靠基於規則的演算法運行,主要是模仿用戶的輸入。

然而,許多人發現,與ELIZ 聊天比與真正的心理醫生聊天更愉快,有些人甚至被騙了,以為自己是在與人交流。這種奇特的現象被稱為“ELIZA效應”,它展示了人們是多麼容易想象出電腦程式對人類的理解能力。

然而,生成式人工智慧的發展歷程並非一帆風順。其核心的技術裝備相當基礎,進展更像是緩慢的爬行。但到了 2010年代,這一領域迎來了轉折點。現在的技術世界擁有強大的計算能力、GPU(圖形處理器)等華麗的硬體系統、數據寶庫以及深度學習等複雜模型的微調。就這樣,生成式人工智慧又回到了快車道上。隨著它的發展,出現了不同的方法:

  • 變異自動編碼器(VAEs Variational autoencoders)

這項技術於2013年首次亮相,這要歸功於 Diederik P. Kingma 和 Max Welling 及其論文《變異貝葉斯自動編碼》。他們的 VAE 模型由來自更複雜、更高維度數據的低維度潛空間組成,所有這些都無需監督。它還包括一個編碼器-解碼器結構。當我們說高維數據時,我們指的是具有許多特征的數據,每個特征是一個維度--想想在784維空間中的28×28像素圖像。低維潛在空間就像是這些數據的精簡版,在保留關鍵信息的同時,又捨棄了額外的維度。這一點非常重要,因為它減輕了計算負荷,抵禦了維度詛咒,使數據更易於可視化和解釋。這種從高維空間到低維空間的飛躍被稱為降維,它將數據簡化到了最基本的程度。傳統的自動編碼器會為每個潛在屬性輸出一個單一的值,而VAE 編碼器則不同,它會為你提供一個概率分佈。然後,解碼器從該分佈中選取樣本重建數據。這種在潛空間中提供一系列數據而非單一值的巧妙技巧,為創建新數據或圖像打開了大門。

  • 生成對抗網路(GANs)

生成對抗網路由伊恩-古德費洛(Ian Goodfellow)及其同事於2014年提出,是一類用於無監督機器學習的人工智慧演算法。生成式對抗網路的核心是兩個神經網路,分別被稱為生成器和判別器,它們在類似游戲的對決中正面交鋒。生成器產生新的數據塊,而鑒別器則扮演裁判的角色,分辨真假數據。每一輪,生成器都會提高自己的水平,製作出與真實實例極為相似的數據。這種巧妙的設置打開了通往新可能性的大門,使人工智慧可以創造出逼真的圖像、語音錄音以及其他更多的東西。

這些類型的生成式人工智慧將成為變壓器模型的重要基石,而變壓器模型則是使LLM的強大功能成為現實的真正突破。

2.5.2 Transformer模型—(轉換器)

在變換器大放異彩之前,自然語言處理(NLP)的常用方法是遞歸神經網路(RNN)。RNN專為處理序列或時間序列數據而設計。它們會對隱藏狀態進行監控,以記住序列中先前步驟的比特--這對於語言建模、語音識別和情感分析等工作來說,是一項非常方便的功能。RNN一次處理序列中的一個片段,根據當前輸入和之前處理的內容更新隱藏狀態--這就是所謂的遞歸。但在處理長序列時,它們遇到了一個障礙,即梯度消失或爆炸問題。這使得他們很難跟蹤數據中的長期關係。

轉換器的出現,完全顛覆了這一劇本。變換器並不採用RN 的循序漸進方式,而是以並行方式輕鬆處理數據,並利用註意力機制來跟蹤輸入序列中不同比特之間的關係,無論它們被放置在何處。架構藍圖中的這一變化讓變換器可以輕鬆處理長短序列。它還避免了梯度問題。此外,它們的並行處理能力還能很好地與圖形處理器(GPU graphics processing units)或張量處理單元(TPU tensor processing units)等複雜的晶元架構相匹配。

Ashish Vaswani和他在谷歌的研究人員創建了Transformer,併在2017年發表的開創性論文《Attention Is All You Need》中公佈了核心架構。

轉換器模型就像一位出色的語言學家,善於揭開語言錯綜複雜的面紗。它的神奇之處主要體現在兩個階段:編碼和解碼。每個階段都由各自的層級組成。在編碼階段,模型閱讀並理解輸入文本,就像語言學家理解外語句子一樣。然後在解碼階段,模型根據編碼階段獲得的理解生成新的文本或譯文,就像語言學家將句子翻譯成你的母語一樣。

轉換器的核心是一種名為 “註意力”的機制,它可以評估句子中每個單詞與其他單詞的相關性。它會給每個詞分配一個註意力分數。例如,以句子 “貓坐在墊子上 ”為例。當模型關註sat這個詞時,cat和mat這兩個詞可能會因為與 sitting 這個動作的直接關係而獲得更高的關註分。

該模型的一個顯著特點是自我註意機制。這使它能夠查看整個句子,理解單詞之間的關係,併在長時間的文本閱讀中保留這些關係。這就賦予了轉換器一種長期記憶形式,使其能夠專註於迄今為止出現過的所有單詞或標記(整個單詞或單詞的一部分),從而理解更廣泛的上下文。

然而,儘管有這些能力,轉換器最初還是缺乏識別句子中單詞順序的能力,而這對於理解句子的意思至關重要。在這裡,位置編碼介入了。它就像GPS一樣,為模型提供每個單詞在句子中的位置信息,幫助理解 “貓追老鼠 ”和 “老鼠追貓 ”這樣的分句。

轉換器採用了多頭註意機制,使其更加複雜。設想該模型有多對眼睛,每對眼睛從一個獨特的角度審視句子,並關註不同的方面或詞語之間的關係。例如,一雙眼睛可能專註於理解動作,另一雙眼睛可能專註於識別字元,還有一雙眼睛可能專註於識別位置。這種多視角方法使轉換器能夠掌握對文本更豐富的理解。

此外,轉換器的每個階段都包含多層前饋神經網路,這種直接的網路可幫助處理單詞之間的關係。這進一步增強了對文本的理解和生成。

轉換器採用預訓練模型的形式。它已經在大量數據上經過訓練,可以隨時使用或進一步微調。預訓練完成後,該模型可作為API訪問,從而可立即用於各種語言處理任務。公司或個人可以快速將該模型集成到自己的系統中,如人工智慧輔助編程應用。此外,通過在特定領域的數據上進行微調,預訓練的LLM還可以進一步磨練,使其在醫學或法律文本分析等專業領域表現出色。這樣就無需從頭開始開發複雜的語言模型,從而節省了大量的時間、精力和資源。預訓練模型具有基礎語言理解能力,是開發生成式人工智慧應用的跳板。

構建和運行LLM成本高昂。據《華爾街日報》報道,2023年初,GitHub Copilot平均每個用戶每月虧損超過20美元。在某些情況下,一些用戶每月給公司帶來80美元的虧損。不過,隨著未來幾年生成式人工智慧基礎設施的擴展,每個用戶的成本應該會降低。

轉換器系統的兩種主要類型是生成式預訓練轉換器(GPT generative pretrained transformer)和來自變壓器的雙向編碼器表示(BERT encoder representations from transformers)。GPT是OpenAI推出的一款工具,非常適合創建文本、總結信息和翻譯語言。它基於自回歸LLM架構。這意味著,它在製作文本時,會根據已經輸出的內容仔細考慮每個單詞,就像講故事的人一次一個單詞地敘述故事一樣。它的技能來自於對大量文本數據的訓練。GPT使用解碼器生成內容。

而BERT則使用自動編碼方法。這種設計使其能夠深入理解句子中單詞的上下文,從而善於破譯語言的細微差別和含義。谷歌於2018年開發了BERT,並將其作為一個開源項目。從那時起,核心模型出現了許多變化和增強。

至於人工智慧輔助編程應用,主要的變換器模型類型是GPT。事實證明,它可以根據程式員提供的上下文,高效地預測和自動完成代碼。

2.5.3 OpenAI Playground

OpenAI Playground是一個生成式人工智慧沙盒,可訪問 OpenAI 開發的各種模型。它允許通過直觀的圖形界面定製模型。

OpenAI Playground使人們更容易瞭解各種LLM的優缺點。此外,它還能根據不同的輸入(如溫度)對模型進行實時測試和調整。

不過,OpenAI對平臺的使用收取費用。費用根據使用的代幣數量而定。請記住,價格會定期變化。好消息是,截至本文撰寫時,所有變化都是降價。

首次註冊OpenAI帳戶時,您將獲得5美元的積分,可用於OpenAI Playground。這可用於調用 API。

  • Tokens

OpenAI 有一個名為Tokenizer 的工具:

在標記化過程中,ChatGPT 這個詞由三個標記組成,並用顏色突出顯示。細分為 Chat、G 和 PT。單詞 unbelievable 及其後面的感嘆號有兩個標記,一個表示單詞,一個表示標點符號。至於表情符號,它由三個標記符組成。每個標點符號都是一個標記符。空格包含在相鄰的單詞中。

標記化器適用於 GPT-3、GPT-3.5 和 GPT-4。請記住,不同 LLM 的標記化通常是不同的。

根據經驗,1,000個Token大致相當於750個單詞。

  • 使用平臺

進入OpenAI Playground後,您可以訪問一個儀錶板:

屏幕中間是與 LLM 交互的主要工作流程:

系統:您可以在這裡為 LLM 提供一些背景信息,例如 “您是 Python 編程專家”。系統提示是會話中的第一條信息,為交互奠定了基礎。自定義系統提示可以更好地控制模型在對話中的行為,這對於確保模型保持在所需的參數或上下文範圍內特別有用。

用戶:這是提示的主要指令。例如,您可以要求 LLM 執行編碼任務。

添加信息:這允許您與 LLM 進行持續聊天。

讓我們舉個例子。假設你正在開發一個Python項目,但對如何使用Tkinter庫來獲取用戶輸入有困難。您可以輸入以下內容:

系統消息: 您是專門研究Tkinter的Python 專家。

用戶信息: 我想使用Tkinter創建一個簡單的圖形用戶界面來獲取用戶的姓名和年齡。我該怎麼做?

LLM將生成代碼列表。但假設您想為輸入添加驗證。您可以按下添加按鈕並輸入 "如何確保輸入的年齡是數字而不是文本?

LLM 會給出相應的代碼,使用 try-except 塊將年齡輸入轉換為整數。

當然,這就像使用ChatGPT,但結構更加嚴謹。此外,真正強大的是自定義功能。你可以在屏幕右側找到這些功能:

模式:您可以從多種模型中進行選擇,甚至可以使用自己的微調 LLM,以確保模型專註於您編碼的獨特需求。有關微調模型的更多信息,請參閱 OpenAI API 文檔。

溫度:這可以調整生成內容的隨機性或創造性。

代碼生成 0.2-0.3 確保代碼更加確定、準確,並遵守通用慣例,以獲得可靠、可理解的結果。
代碼審查 0.2 或更少 專註於既定的最佳實踐和標準,以獲得準確的反饋。
錯誤修複 0.2 或更少 對發現的問題提出更準確、更直接的解決方案。
創造性地解決問題 0.7-1.0 探索更廣泛的可能解決方案,有助於頭腦風暴或創新性地解決問題。
學習與實驗 0.7-1.0 提供更廣泛的實例和解決方案,以瞭解解決問題的不同方法。
數據分析和可視化 0.2 或更少 生成準確而有意義的可視化或分析。
優化任務 多種多樣 允許在探索(較高溫度)和利用(較低溫度)之間取得平衡,以獲得高效解決方案。

不過,如果使用的溫度值過高,結果可能會不合理。下麵是使用2值時的提示示例:

提示:在Python中,將數據從CSV文件遷移到MySQL資料庫的步驟是什麼?

當使用溫度為2時,LLM 的結果大多毫無意義

現在,讓我們看看可以調整的其他功能:

最大長度:這是用於生成內容的最大令牌數。該數量包括提示和回覆的使用量。標記與內容的比例取決於您使用的模型。

停止序列:這表示 LLM 停止進一步創建文本的時間點。您可以指定一個特定的字元串或字元序列,當在生成的文本中檢測到該字元串或字元序列時,就會向模型發出停止進程的信號。

Top p:這種技術也稱為核採樣,根據累積概率閾值(用 p 表示,範圍在 0 到 1 之間)來選擇單詞。簡單地說,模型並不總是從最有可能的前幾個下一個單詞中進行選擇,而是根據指定的 p 值來考慮範圍更廣或更窄的可能的下一個單詞。p 值越低,可供選擇的詞語範圍越小,重點越突出,從而使文本的可預測性和連貫性更強。另一方面,p 值越高,可能的下一個詞的範圍就越大,從而生成的文本就越多樣化、越有創意。

頻率懲罰:這有助於解決 LLM 的一個常見問題,即重覆的短語或句子。該值範圍在 0 到 2 之間,值越大,重覆越少。但是,當值大於 1 時,文本生成可能會變得不可預測,甚至毫無意義。

存在懲罰:該值也有 0 到 2 之分。較高的值將允許 LLM 包含更多種類的標記,這意味著要使用更多樣化的辭彙或更廣泛的概念。

有了頻率懲罰、存在懲罰和頂部 p,OpenAI 建議您選擇一種方法來調整您的任務。但不要迴避實驗。由於所涉及的複雜問題錯綜複雜,優化 LLMs 的道路並不是由嚴格的規則鋪就的。

2.6 評估LLM

評估LLM是一項艱巨的任務。這些龐然大物通常非常不透明,似乎無法理解。人工智慧公司之間的競爭只會加劇這種情況。關於這些模型所訓練的數據集、用於微調其行為的參數數量以及為其提供動力的硬體等方面的詳細信息少之又少,這已經成了家常便飯。

不過,斯坦福大學的一些研究人員還是帶來了一些好消息。他們創建了一個名為 “基礎模型透明度指數”(Foundation Model Transparency Index)的評分系統,用於衡量 LLM 的開放程度。這個由一百條標準組成的尺度,旨在讓法律碩士透明度的渾水變得更加清澈。

排名以百分比為基礎。遺憾的是,結果遠非令人鼓舞。研究人員認為,沒有一個接近於達到 “足夠的透明度”,平均得分僅為37%。

基礎模型透明度指數總分 2023,https://crfm.stanford.edu/fmti

LLM 在處理各種領域和任務(如軟體開發)方面的靈活性是一個顯著優勢。然而,這也使評估過程變得複雜,因為它需要特定領域的評估指標和基準,以確保模型在每個特定應用中的有效性和安全性。

儘管如此,在評估 LLM 時仍有一些指標值得考慮:

  • BERTScore

該指標旨在通過比較使用 BERT 嵌入生成的文本和參考文本來評估文本生成模型。雖然它主要用於自然語言文本,但也可擴展或調整用於代碼生成任務,尤其是當代碼以自然語言進行註釋或評論時。

  • 複雜度

這是評估 LLM 等概率模型的常用指標。它量化了模型預測的概率分佈與數據實際分佈的吻合程度。在代碼生成中,較低的複雜度值表明模型在預測代碼序列中的下一個標記時更有優勢。

  • BLEU(雙語評估底稿)

BLEU 最初用於機器翻譯,現在也用於代碼生成,將生成的代碼與參考代碼進行比較。它通過計算 n-gram 精確度分數來量化生成文本和參考文本之間的相似性,這有助於評估生成代碼的語法正確性。n-gram 精確度分數越高,表明生成的代碼與參考文本在特定的 n 個詞序列上的一致性越好。

  • ROUGE(面向召回的 Gisting 評估研究)

這是從 NLP 中借用的另一個指標,可用於評估代碼生成模型。它計算生成文本和參考文本之間 n-grams 的重疊度,從而深入瞭解生成代碼與預期輸出的吻合程度。

  • MBXP(最基本的 X 編程問題)

該基準專門用於評估多種編程語言的代碼生成模型。它使用一個可擴展的轉換框架,將提示和測試用例從原始數據集轉換為目標語言,從而促進對代碼生成模型進行全面的多語言評估。

  • 人類評估

這是一個評估 LLM 代碼生成能力的基準,通過測量 LLM 從文檔腳本合成程式的功能正確性來評估 LLM 的代碼生成能力。該基準對於持續開發和增強代碼生成方面的人工智慧模型至關重要。雖然不同的模型在 HumanEval 上表現出不同的熟練程度,但名為 HUMANEVAL+ 的擴展版本在識別流行 LLM 生成的以前未被髮現的錯誤代碼方面發揮了關鍵作用。

  • 多語言 HumanEval(HumanEval-X)

這是對原始 HumanEval 基準的擴展。Multilingual HumanEval 評估 LLMs 的代碼生成和翻譯能力,涵蓋 10 多種編程語言。它採用了一個轉換框架,將 Python 中的提示和測試用例轉換成目標語言中的相應數據,為多語言代碼生成和翻譯創建了一個更全面的基準。

評估 LLM 的另一種方法是看參數的數量--可能高達數千億。所以參數越多越好,對嗎?不一定。評估應採取更細緻的方法。首先,在計算能力和能源使用方面,擴展參數的成本可能非常高。這可能會使 LLM 在貨幣化應用方面不划算。其次,隨著參數數量的增加,模型的複雜性也在增加,這有可能導致過度擬合。當模型在訓練數據中學得非常好,但在接觸未見數據時卻出現問題時,就會出現過擬合。這會削弱模型的泛化能力。

另一個問題是需要大量不同的訓練數據集來滿足這些模型對數據的貪得無厭的需求。然而,獲取和整理如此廣泛的數據集不僅需要大量資源,而且會帶來數據隱私和偏差方面的挑戰。此外,隨著參數的激增,對這些龐然大物的評估也變得越來越複雜。評估指標需要更加全面和多樣化,以準確衡量模型在各種任務中的表現。

最後,微調是一種更好的方法,無需大幅增加底層 LLM 的參數大小,就能從模型中獲得更多信息。

2.7 LLM的類型

LLM 有多種類型,其中一個突出的類別是開源 LLM。任何人都可以使用、調整或共用它們。它們的透明度意味著你可以看到這些模型是如何運行的。此外,開源 LLM 允許開發人員合作創新,開發附加組件,當然也可以修複討厭的錯誤。

最棒的是什麼?它們沒有價格標簽。

但開源LLM並不都是彩虹和獨角獸。通常沒有專門的團隊來解決這些問題或推出定期更新。因此,如果遇到困難,你可能不得不捲起袖子鑽進論壇尋求幫助。

開源模型的質量和性能有時就像過山車。還有令人頭疼的安全問題。由於一切都是可用的,黑客更有可能找到插入邪惡代碼的方法。建議謹慎行事。

最後,說到用戶指南和文檔,開源LLM可能會讓你希望得到更多。這些指南有時讓人感覺像是用象形文字寫成的。

  • GPT-NeoX-20B EleutherAI 20B 在 “The Pile ”數據集上進行過訓練;能夠完成各種 NLP 任務,如故事生成、聊天機器人和摘要等。
  • LLaMA 2 Meta 7B 至 70B 在 2 萬億個詞塊上進行過訓練;上下文長度是 LLaMA 1 的兩倍 OPT-175B Meta 175B 模型套件的一部分;訓練時的碳足跡低於 GPT-3
  • BLOOM BigScience 176B 在 ROOTSa 語料庫上訓練;設計透明,公開訓練數據細節和評估方法
  • Falcon-40B 技術創新研究所 (TII) 40B 在 1,000B tokens上進行訓練
  • Dolly 2.0 Databricks 12B 基於 EleutherAI 的 Pythia 模型系列;提供類似於 ChatGPT 的指令跟隨互動性
  • Mistral 7B Mistral AI 7.3B 使用分組查詢和滑動視窗關註;在大量數據集上進行了訓練,在較長序列處理方面表現出色
  • Mixtral 8X7B Mistral AI 46.7B 稀疏專家混合模型;像 12.9B 模型一樣執行推理,支持多種語言,在代碼生成和推理等各種任務中表現出色

另一方面,封閉源代碼或專有的 LLM 則更加神秘。它們大多對代碼、訓練數據和模型結構保密。不過,開發這些複雜系統的公司通常擁有巨額資金。

有了這些資源,這些公司就可以聘請世界上最優秀的數據科學家,並建立複雜的基礎設施。因此,LLM 在性能方面往往是最先進的。它們還針對規模和企業的嚴格需求(如安全和隱私)而構建。

至於缺點,那就是信任問題。這些模型是如何做出反應的?幻覺和偏見又是怎麼回事?這些問題的答案可能缺乏細節。

此外,這些大型人工智慧運營商還有可能成為壟斷者。這可能意味著客戶會被鎖定在一個生態系統中。最後,閉源LLM可能比開源項目更容易停滯不前,因為它們可能無法像開源項目那樣受益於多樣化的投入和審查。

2.8 評估人工智慧輔助編程工具

選擇哪種人工智慧輔助編程工具可能會讓人頭疼。你必須權衡許多因素,如精確度、聊天功能、安全性、速度和用戶友好性。有時,歸根結底還是要看使用起來感覺如何。不過話又說回來,如果你的雇主堅持使用特定的系統,你可能會束手無策。

要想瞭解目前的熱門話題,Stack Overflow 的 2023 年開發者調查是一個很方便的資源。Stack Overflow 收集了近 9 萬名程式員對最流行工具的看法,如表 2-7 所示。

通過這張圖表,您可以一窺現有的眾多工具。當你想選擇一款工具時,明智的做法是從其他開發者那裡獲得推薦。此外,最好還能親自試駕幾款工具。幸運的是,大多數工具都提供免費試用版,因此你可以試一試,而不必馬上下定決心。

另一個需要考慮的關鍵因素是公司的財務支持。它有風險投資資金嗎?如果沒有,公司可能不僅難以發展,也難以保持平臺的創新性。目前,已經有幾家人工智慧輔助編程公司不得不停止服務,這對開發者來說確實是個不小的打擊。以 Kite 為例。它是這一領域的早期參與者之一,成立於2014年。然而,到 2022 年,該公司決定終止該項目。一線希望是什麼?它開源了該工具的大部分代碼庫。

2.9 結論

在本章中,我們揭開了生成式人工智慧和LLM的神秘面紗。我們瞭解了一些引人入勝的歷史,例如 ELIZA,然後重點介紹了人工智慧領域最大的突破之一:變換器模型。我們還試用了 OpenAI Playground,並展示瞭如何定製 LLM。

本章的一些重要內容包括:token、利用預訓練模型的優勢、LLM 大小的註意事項、perplexity 和 BLEU 分數等指標,以及開源模型與專有模型。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄智能指針場景引入 - 為什麼需要智能指針?記憶體泄漏什麼是記憶體泄漏記憶體泄漏的危害記憶體泄漏分類如何避免記憶體泄漏智能指針的使用及原理RAII簡易常式智能指針的原理智能指針的拷貝問題智能指針的發展歷史std::auto_ptr模擬實現auto_ptr常式:這種方案存在的問題:Boost庫中的智能指針un ...
  • NumPy 助你處理數學問題:計算序列的差分用`np.diff()`,示例返回`[5, 10, -20]`;找最小公倍數(LCM)用`np.lcm()`,數組示例返回`18`;最大公約數(GCD)用`np.gcd.reduce()`,數組示例返回`4`;三角函數如`np.sin()`,`np.deg... ...
  • 本框架JSON元素組成和分析,JsonElement分三大類型JsonArray,JsonObject,JsonString。 JsonArray:數組和Collection子類,指定數組的話,使用ArrayList來add元素,遍歷ArrayList再使用Array.newInstance生成數組 ...
  • 最近項目中使用了PowerJob做任務調度模塊,感覺這個框架真香,今天我們就來深入瞭解一下新一代的定時任務框架——PowerJob! 簡介 PowerJob是基於java開發的企業級的分散式任務調度平臺,與xxl-job一樣,基於web頁面實現任務調度配置與記錄,使用簡單,上手快速,其主要功能特性如 ...
  • 百度的,後面再補一個Linux文檔操作手冊,是不是很大膽? 準備工作 1、首先得有兩個軟體Xftp(用來上傳文件到)和XShell(連接伺服器執行命令) 2、Linux上有JDK(怎麼安裝可以轉到Linux安裝JDK流程) 3、項目的JAR包 項目jar包 導jar <build> <plugins ...
  • 本文介紹基於Python中GDAL模塊,實現基於一景柵格影像,對另一景柵格影像的像元數值加以疊加提取的方法。 本文期望實現的需求為:現有一景表示6種不同植被類型的.tif格式柵格數據,以及另一景與前述柵格數據同區域的、表示植被參數的.tif格式柵格數據;我們希望基於前者中的植被類型數據,分別提取6種 ...
  • 首發地址: https://mp.weixin.qq.com/s/w6v3RhqN0hJlWYlqTzGCxA 前言 之前在PC微信逆向) 定位微信瀏覽器打開鏈接的call提過要寫一個保存公眾號歷史文章的工具。這篇文章先寫一個將文章保存成pdf和html的工具,後面再補充一個採集歷史的工具,搭配使用 ...
  • ​記錄下FFmpeg的學習筆記目錄,完整的FFmpeg開發實戰內容詳見《FFmpeg開發實戰:從零基礎到短視頻上線》一書。 下麵是補充的FFmpeg開發筆記內容目錄,主要是對《FFmpeg開發實戰:從零基礎到短視頻上線》一書的進階增補。 第一章 Linux環境編譯FFmpeg FFmpeg開發筆記( ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...