上海交大林云:揭秘大模型的可解釋性與透明度,AI 編程的未來在這裏

在軟件開發的世界里,代碼的生成、編輯、測試和調試一直是核心活動。然而,隨著大語言模型的介入,這些環節正在經歷一場深刻的變革。這些變革不僅提高了開發效率,也為我們帶來了新的挑戰和問題。在8月18-19日,AICon 上海站有幸邀請到了上海交通大學 計算機科學與工程系副教授林雲,他將與我們探討語言模型如何影響軟件開發的每一個環節,並為我們展示如何通過先進的分析技術來優化和增強模型的預測能力。

本文為會前採訪文章,他深入探討了大語言模型在軟件開發中的應用,分享了提高模型可解釋性的策略,如可視化技術和影響函數。通過 ISSTA’24 的案例,他展示了全項目感知的交互式編輯方案,並討論了數字孿生技術在驗證模型能力中的應用;最後,他預測了 AI 對軟件開發範式的影響,並強調了開發者在 AI 時代需要的新技能。

大語言模型在軟件工程中的應用與挑戰

InfoQ:您認為當前大語言模型在代碼生成、編輯、測試和調試等方面的表現如何?有哪些具體的應用案例?

林雲:這些軟件工程任務的自動化手段的原本瓶頸在於專有或者領域知識的不足,比如特定文件資源的獲取以及特定錯誤或異常的根因定位等;而語言模型的出現通過將大量的編程知識壓縮和編碼,使得彌補這種「知識鴻溝」變成了現實。我們課題組和字節進行合作,在代碼自動編輯進行探索,提出了基於語言模型的端到端編輯方案,來解決編輯的傳播、定位、生成和反饋循環等問題。

目前在定位和生成的準確率都達到了相對理想的效果;至於測試,我們正在嘗試來讓語言模型進一步學習領域知識,來生成領域相關的測試用例;至於調試,我們也在期望讓模型生成出整個調試的過程,由此使得技術更加實用。

InfoQ:大語言模型在不同類型的編程任務中表現出了哪些優勢和局限性?

林雲:語言模型的優勢在於常識量巨大,能夠解決帶至於泛化出各種基於大量常識知識的解決方案。而局限在於長上下文的確定性推理(比如,跨文件的數據流分析等)。所以如果將語言模型和傳統的程序分析工具有效解決,是一個非常有價值的課題。

可解釋性方法與模型透明度

InfoQ:在訓練和使用大語言模型時,您遇到過哪些可解釋性的挑戰?如何解決這些挑戰?

林雲:主要的可解釋性問題在於代碼表徵分析和訓練樣本歸因兩個方面。表徵分析其實希望理解模型是否能夠理解兩片代碼的相近語義,這段泛化模型的能力非常重要。而訓練樣本歸因在於解決模型的預測源自於哪些訓練數據,這個對數據集質量非常重要。

對於前者,我們開發了表徵空間可視化技術來理解模型訓練過程中的訓練動態;對於後者,我們優化了傳統的影響函數(Influence Function),來觀測訓練樣本的貢獻和彼此之間簽在的衝突。

InfoQ:您能否詳細說明基於數據和基於表徵的可解釋性方法,並分別討論它們在實際中的應用效果?

林雲:深度學習本質上是表徵學習,任何樣本都會在一個高維向量空間上有一個向量表示。我們目前的做法是把表徵空間上發生的各種訓練事件轉化成一個可交互式動畫,來觀測訓練過程。

在這個過程中,我們可以觀測樣本之間語義距離的變化,並且利用影響函數(一種基於數據的可解釋性方法)來進一步推斷這種變化的根因。這些可解釋性方法的組合使用在現實中可以有效幫助我們分析訓練數據質量、模型的表達能力、以及訓練數據標註中的一些問題。

InfoQ:您提到的 ISSTA’24 的代碼編輯工作是如何實現全項目感知的交互式編輯的?能否分享一些具體的實現細節?

林雲:我們 ISSTA’24 的工作提出了一種端到端的代碼編輯方案,叫做 CoEdPilot。當用戶給定一個編輯要求後,我們的工具能夠迭代式地完成全項目編輯定位和編輯生成。並且通過將先前的編輯作為用戶反饋,進一步調整和精化定位和生成的結果。

我們通過設計兩個 transformer 將一個大的端到端任務拆解成兩個小模型,來交互式地完成這個任務。一個小型的語言模型用於編輯定位,另一個小型的語言模型作為編輯生成。我們通過收集大量代碼提交歷史記錄來循環指令微調這兩個模型,來達到比較好的效果。更多詳細信息可以關注 AICon 上海站的分享。

InfoQ:在這個案例中,您是如何分析和追溯訓練樣本的?使用了哪些技術手段來構建數字孿生環境?

林雲:我們通過設計了自己的影響函數來將一個預測溯源回對它貢獻最大的訓練樣本。這裏基本的思想是分析一個訓練樣本和一個測試樣本之間的預測聯動性來完成的。至於數字孿生驗證場景,我們期望將一個靜態的代碼提交恢復成一個動態的代碼編輯場景,來驗證模型的能力。

InfoQ:您在演講中提到了代碼深度表徵分析和數字孿生模擬編程場景。能否進一步解釋這兩種技術的具體實現方式及其對模型性能的影響?

林雲:這裏主要解決的問題在於模型訓練準確率不等於模型對真實編程的生產力,所以我們設計了這個技術來解決兩者之間的差距。如上文所說,我們將一個靜態的代碼提交恢復成一個動態的代碼編輯場景,來進一步驗證模型的能力。

InfoQ:如何通過這些技術提高模型的透明度和可信度?

林雲:通過這些可解釋性技術,我們期望能夠有效幫助程序員來將模型訓練的過程白盒化。比如通過訓練數據歸因,模型的使用者能夠更好地理解模型做出決策的依據,這樣可以方便使用者來更好的接納或者拒絕模型的建議。

未來展望與開發者技能

InfoQ:您認為大語言模型在未來將如何影響軟件開發範式?會有哪些新的趨勢或創新?

林雲:語言模型嵌入程序開發活動已經是大勢所趨。以往的代碼開發的一些知識可能是程序員之間口口相傳,有了語言模型之後,大家會逐漸思考留下更多的代碼開發歷史並訓練相應的模型來完成推薦。所以在未來,代碼開發活動,同時也是數據標註活動,這可能會引起面向模型的開發活動的思考和創新。

InfoQ:針對 AI 時代,您認為開發者需要掌握哪些新的技能和知識以適應這種變化?

林雲:我覺得開發人員可能在一定程度上需要瞭解 AI 模型的運行原理。因為交付可靠的軟件其實仍然是不變的要求,但如果把工作交給一個概率驅動的語言模型,這一方面需要有比較強的驗證機制來檢驗概率模型結果的可靠性;另一方面需要理解語言模型本身的局限性。這樣才能有更加好的人機協作編程方式,來交付更加可靠的軟件製品。

本文來自微信公眾號「AI前線」(ID:ai-front),作者:李忠良,36氪經授權發佈。