阿里最新ChatGPT在推薦任務上的表現評估,值得關注!
在過去的幾十年中,推薦系統取得了長足的進步,得到了廣泛的應用。然而,傳統的推薦方法大多是針對特定任務的,缺乏有效的泛化能力。最近,ChatGPT的出現通過增強會話模型的能力,大大推進了NLP任務。然而,ChatGPT在推薦領域的應用還沒有被深入研究。該文采用ChatGPT作為通用推薦模型,探索其將大規模語料庫中獲取的大量語言和世界知識遷移到推薦場景的潛力。具體地,我們設計了一套提示集,并在評分預測、序列推薦、直接推薦、解釋生成和評論摘要5種推薦場景下對ChatGPT的性能進行了評估。與傳統推薦方法不同,在整個評估過程中沒有對ChatGPT進行微調,僅依靠提示本身將推薦任務轉換為自然語言任務。進一步,探討了使用少樣本提示注入包含用戶潛在興趣的交互信息,以幫助ChatGPT更好地了解用戶需求和興趣。在Amazon Beauty數據集上的綜合實驗結果表明,ChatGPT在某些任務上取得了較好的效果,在其他任務上能夠達到基線水平。在兩個面向可解釋性的任務上進行了人工評估,以更準確地評估不同模型生成的內容的質量。人工評測表明ChatGPT能夠真正理解所提供的信息,并生成更清晰、更合理的結果。希望該研究能夠啟發研究人員進一步挖掘ChatGPT等語言模型提高推薦性能的潛力,為推動推薦系統領域的發展做出貢獻。
//www.zhuanzhi.ai/paper/c1a5e954689aace228e596f676da195e
1. 引用
作為解決信息過載和增強用戶體驗的關鍵技術,推薦系統在過去的十年中取得了長足的進步,被廣泛應用于各種web應用中,如產品推薦[32,49,51,59]、視頻推薦[39,54,66]、新聞推薦[55-57]、音樂推薦[27,47]等。同時,隨著深度學習的發展,推薦系統也經歷了多個階段。在早期,基于協同過濾的方法[5,6,44,62]主要用于從用戶-項目交互中對用戶的行為模式進行建模。后來,隨著用戶和項目邊信息被引入推薦系統,基于內容的推薦[36,37,40,53,58]和基于知識的推薦[2,8,16,18]因其能夠提供個性化推薦而受到關注。
然而,大多數傳統的推薦方法都是針對特定任務的。因此,針對不同的任務或應用場景,需要特定的數據來訓練特定的模型,缺乏高效的泛化能力。為了解決這個問題,研究人員將重點轉移到在推薦場景中實現預訓練語言模型(PLMs),因為PLMs表現出了令人印象深刻的適應性,可以顯著提高下游NLP任務的性能。為了有效地將用戶交互數據轉換為文本序列,設計了各種提示[64]來將用戶交互數據轉換為文本序列。P5[19]和M6-Rec[11]側重于構建基礎模型,以支持廣泛的推薦任務。
最近,ChatGPT的出現通過增強對話模型的能力,大大推進了NLP任務,使其成為企業和組織的有價值的工具。Chataug等[12]利用ChatGPT來重新表達句子以實現文本數據增強。Jiao等,[23]發現ChatGPT在高資源語言和低資源語言上的翻譯能力都與商業翻譯產品具有競爭力。Bang等人[3]發現ChatGPT在情感分析任務中比之前最先進的零樣本模型有很大的優勢。然而,ChatGPT在推薦領域的應用還沒有深入研究,ChatGPT是否能在經典推薦任務上表現良好仍然是一個開放的問題。因此,有必要建立一個基準對ChatGPT與傳統推薦模型進行初步評估和比較,從而為進一步探索大規模語言模型在推薦系統中的潛力提供有價值的見解。 為了彌補這一研究空白,直接將ChatGPT作為一個可以處理各種推薦任務的通用推薦模型,嘗試探索從大規模語料庫中獲取的廣泛的語言和世界知識是否可以有效地遷移到推薦場景中。我們的主要貢獻是構建了一個基準來跟蹤ChatGPT在推薦場景中的表現,并對其優勢和局限性進行了全面的分析和討論。具體地,設計了一套提示集,并在評分預測、順序推薦、直接推薦、解釋生成和評論摘要5個推薦任務上評估了ChatGPT的性能。與傳統推薦方法不同,在整個評估過程中沒有對ChatGPT進行微調,僅依靠提示本身將推薦任務轉換為自然語言任務。此外,還探索了使用少樣本提示注入包含用戶潛在興趣的交互信息,以幫助ChatGPT更好地了解用戶需求和偏好。
在Amazon Beauty數據集上的綜合實驗結果表明,從準確率的角度來看,ChatGPT在評分預測方面表現良好,但在序列推薦和直接推薦任務中表現較差,在某些指標上僅達到與早期基線方法相近的性能水平。另一方面,雖然ChatGPT在解釋生成和評論摘要等可解釋推薦任務的客觀評價指標方面表現不佳,但額外的人工評估表明,ChatGPT優于最先進的方法。這突出了使用客觀評價方法來準確反映ChatGPT真實可解釋推薦能力的局限性。此外,盡管ChatGPT在基于準確率的推薦任務中表現不盡如人意,但值得注意的是,ChatGPT并沒有在任何推薦數據上進行專門的訓練。因此,通過納入更多相關的訓練數據和技術,在未來的研究中仍有很大的改進潛力。相信該基準不僅揭示了ChatGPT的推薦能力,而且為研究人員更好地了解ChatGPT在推薦任務中的優勢和不足提供了一個有價值的起點。此外,我們希望該研究能夠啟發研究人員設計新的方法,利用語言模型(如ChatGPT)的優勢來提高推薦性能,為推薦系統領域的發展做出貢獻。
2. ChatGPT 推薦
使用ChatGPT完成推薦任務的工作流程如圖1所示,包括三個步驟。首先,根據推薦任務的具體特點構建不同的提示(第2.1節);其次,將這些提示信息作為ChatGPT的輸入,根據提示信息中指定的需求生成推薦結果;最后,通過細化模塊對ChatGPT的輸出進行檢查和細化,細化后的結果作為最終的推薦結果返回給用戶(章節2.2)。
2.1 針對任務的提示構建
本節研究ChatGPT的推薦能力,設計針對不同任務的提示。每個提示由三個部分組成:任務描述、行為注入和格式指示符。利用任務描述使推薦任務適應自然語言處理任務。行為注入旨在評估少樣本提示的影響,其中融入了用戶-物品交互,以幫助ChatGPT更有效地捕捉用戶偏好和需求。格式指標用于約束輸出格式,使推薦結果更易于理解和評估。
2.1.1評分預測。評分預測是推薦系統中的一項關鍵任務,旨在預測用戶對特定物品的評分。這項任務對于為用戶個性化推薦和改善整體用戶體驗至關重要。近年來,深度學習模型[20]和矩陣分解技術[26]的使用,有效地解決了推薦系統中的稀疏性問題。與LLM的創新推薦范式一致,我們在評分任務上進行了實驗,涉及制定兩種獨特的提示類型以引出結果。我們在圖2中提供了一些示例提示。
2.1.2 序列推薦。序列推薦是推薦系統的一個子領域,旨在根據用戶過去的順序行為預測用戶的下一個項目或行動。由于其在電子商務、在線廣告、音樂推薦等領域的潛在應用,近年來受到了越來越多的關注。在序列推薦中,研究人員提出了各種方法,包括循環神經網絡[31]、對比學習[68]和基于注意力的模型[52],以捕獲用戶-物品交互中的時間依賴和模式。為順序推薦任務族設計了三種不同的提示格式。這包括:1)根據用戶的交互歷史直接預測用戶的下一個項目,2)從候選列表中選擇一個可能的下一個項目,其中只有一個項目是積極的,并基于用戶的交互歷史,3)使用用戶之前的交互歷史作為基礎,預測特定項目是否會是用戶的下一個交互項目。這些提示格式旨在提高順序推薦的準確性和有效性,并以嚴格的學術原則為基礎。這些提示的例子可以在圖2中看到。
圖2: Beauty數據集上基于準確性的任務提示示例。黑色文本表示任務描述,紅色文本表示格式要求,藍色文本表示用戶歷史信息或少次信息,灰色文本表示當前輸入。
2.1.3 直接推薦。直接推薦,也稱為顯式反饋推薦或基于評分的推薦,是一類依賴用戶評分或評論形式的顯式反饋的推薦系統。與其他依賴隱式反饋(如用戶行為或購買歷史)的推薦系統不同,直接推薦系統通過考慮用戶的顯式偏好,能夠提供更加個性化和準確的推薦。對于這項任務,開發了項目選擇提示,從潛在候選人列表中選擇最合適的項目。這些提示格式基于嚴格的學術原則,旨在優化推薦的準確性和相關性。這些提示的例子可以在圖2中看到。
2.1.4 解釋的生成。解釋生成是指為用戶或系統設計人員提供解釋,以闡明為什么推薦這些項目。從而提高了推薦系統的透明性、說服力、有效性、可信性和用戶滿意度。此外,該模型便于系統設計人員對推薦算法進行診斷、調試和優化。ChatGPT等大型語言模型可以利用其包含的大量知識,通過用戶的歷史交互記錄來了解用戶的興趣,并為用戶的行為提供合理的解釋。具體來說,我們要求ChatGPT模型生成文本解釋,以證明用戶對所選物品的偏好,如圖3所示。對于每個類別,可以包含額外的輔助信息,如提示詞和星級評級。
2.1.5 Review總結。隨著人們對簡潔、易于理解的內容的需求不斷增長,自動生成摘要在自然語言處理中變得越來越重要。與解釋生成任務類似,我們創建了兩種類型的提示:零樣本提示/少樣本提示,并在圖3中提供了一些示例提示。
3.2 輸出Refinement
為了保證生成結果的多樣性,ChatGPT在其響應生成過程中加入了一定程度的隨機性,這可能會導致對于相同的輸入產生不同的響應。然而,在使用ChatGPT進行推薦時,這種隨機性有時會給評估推薦項目帶來困難。雖然prompt構造中的格式指示器可以在一定程度上緩解這個問題,但在實際使用中,它仍然不能保證預期的輸出格式。因此,我們設計了輸出細化模塊來檢測ChatGPT的輸出格式。如果輸出通過格式檢查,則直接將其作為最終輸出。如果沒有,則根據預定義的規則進行修改。如果格式校正成功,則將校正后的結果用作最終輸出。如果沒有,則將相應的提示輸入ChatGPT進行重新推薦,直到滿足格式要求。值得注意的是,在評估ChatGPT時,不同的任務對輸出格式有不同的要求。例如,對于評分預測,只需要一個特定的分數,而對于順序推薦或直接推薦,則需要一個推薦項目的列表。特別是對于序列推薦,一次性將數據集中的所有項目提供給ChatGPT是一個挑戰。因此,ChatGPT的輸出可能與數據集中的項集不匹配。針對這一問題,該文提出了一種基于相似度的文本匹配方法,將ChatGPT的預測結果映射回原始數據集。雖然該方法可能不能很好地反映ChatGPT的能力,但它仍然可以間接地展示其在序列推薦中的潛力
3 評價
為了評估ChatGPT,在Amazon真實數據集上進行了廣泛的實驗。通過與各種代表性方法和消融研究在不同任務上的性能比較,旨在回答以下研究問題: RQ1:與最先進的基準模型相比,ChatGPT的性能如何?
RQ2:少提示對性能有什么影響?
RQ3:如何設計人工評價來評估解釋生成和摘要任務?
**3.3.1 評分預測。**為了評估ChatGPT的評分預測性能,采用了零樣本和少樣本提示,從Beauty數據集上得到的結果總結在表1中。結果表明,對于Beauty數據集上看到的類別,少樣本提示在MAE和RMSE方面都優于MF和MLP。這些結果為利用條件文本生成框架進行評分預測的可行性提供了證據。
3.3.2 序列推薦。為了評估ChatGPT的序列推薦能力,我們分別進行了零樣本和少樣本實驗,實驗結果如表2所示。我們發現,與基線相比,ChatGPT在零樣本提示設置中的性能要差得多,所有指標都明顯低于基線。然而,在小樣本提示設置下,雖然ChatGPT在性能上有了相對的提升,例如NDCG@5超過了GRU4Rec,但在大多數情況下,ChatGPT仍然普遍優于經典的序列推薦方法。可能有兩個主要原因導致了這種結果:首先,在提示設計過程中,所有item都由它們的標題表示。雖然該方法可以在一定程度上緩解冷啟動問題,但可能導致ChatGPT更關注語義相似性而不是項目之間的遷移關系,而這對有效推薦至關重要。其次,由于提示信息的長度限制,無法將物品集合中的所有物品輸入ChatGPT。這導致ChatGPT在預測下一個物品的標題時缺乏約束,導致生成的物品標題在數據集中不存在。雖然可以通過語義相似性匹配將這些預測的標題映射到數據集中現有的標題,但實驗表明,這種映射并沒有帶來顯著的增益。因此,對于順序推薦任務,僅僅使用ChatGPT并不是一個合適的選擇。需要進一步探索引入更多的指導和約束,以幫助ChatGPT準確捕捉歷史興趣,并在有限的范圍內做出合理的推薦。
3.3.3直接推薦。表3展示了ChatGPT在直接推薦任務上的性能。與順序推薦不同,直接推薦要求推薦模型從有限的物品池中選擇與用戶最相關的物品。我們觀察到,在使用零樣本提示時,推薦性能明顯低于有監督推薦模型。這可以歸因于ChatGPT提供的信息不足,導致無法捕捉用戶興趣并生成更隨機的推薦。雖然少樣本提示可以通過提供用戶的一些歷史偏好來提高ChatGPT的推薦性能,但仍然未能超過基線性能。
結論
該文構建了一個評測ChatGPT在推薦任務中的性能的基準,并與傳統的推薦模型進行了比較。實驗結果表明,ChatGPT在評分預測上表現良好,但在順序推薦和直接推薦任務上表現較差,表明還需要進一步探索和改進。盡管有局限性,但ChatGPT在可解釋推薦任務的人工評價方面優于最先進的方法,突出了其在生成解釋和摘要方面的潛力。該研究對ChatGPT在推薦系統中的優勢和局限性提供了有價值的見解,希望能啟發未來探索使用大型語言模型來提高推薦性能的研究。展望未來,我們計劃研究更好的方法,將用戶交互數據納入大型語言模型,彌合語言和用戶興趣之間的語義鴻溝。
最新大模型推薦綜述
大型語言模型(LLMs)已在自然語言處理(NLP)領域嶄露頭角,并在推薦系統(RS)領域近期受到了極大關注。這些模型通過自監督學習在大量數據上進行訓練,已在學習通用表示上取得了顯著成功,并有可能通過一些有效的遷移技術(如微調和提示調整等)來增強推薦系統的各個方面。利用語言模型的力量來提高推薦質量的關鍵在于利用它們對文本特征的高質量表示以及對外部知識的廣泛覆蓋,以建立項目和用戶之間的關聯。為了提供對現有基于LLM的推薦系統的全面理解,本綜述提出了一種分類法,將這些模型分為兩大范式,分別是用于推薦的判別型LLM(DLLM4Rec)和用于推薦的生成型LLM(GLLM4Rec),其中后者是首次被系統地整理出來。此外,我們在每種范式中都系統地回顧并分析了現有的基于LLM的推薦系統,提供了它們的方法、技術和性能的洞察。此外,我們也識別出了關鍵的挑戰和一些有價值的發現,以為研究者和實踐者提供靈感。
//www.zhuanzhi.ai/paper/f88ecfaf9c5216f16d59098d5751bbc5
1. 引言
推薦系統在幫助用戶尋找相關和個性化的項目或內容方面發揮了至關重要的作用。隨著在自然語言處理(NLP)領域出現的大型語言模型(LLMs),人們對利用這些模型的能力來增強推薦系統的興趣日益增強。 將大型語言模型(LLMs)融入推薦系統的關鍵優勢在于,它們能夠提取高質量的文本特征表示,并利用其中編碼的廣泛外部知識[Liu等人,2023b]。此綜述將LLM視為基于Transformer的模型,這種模型參數眾多,通過使用自/半監督學習技術在大規模數據集上進行訓練,例如BERT,GPT系列,PaLM系列等。與傳統的推薦系統不同,基于LLM的模型擅長捕獲上下文信息,更有效地理解用戶查詢、項目描述和其他文本數據[Geng等人,2022]。通過理解上下文,基于LLM的推薦系統(RS)可以提高推薦的準確性和相關性,從而提高用戶滿意度。同時,面對有限的歷史交互數據稀疏問題[Da’u和Salim,2020],LLMs還通過零/少樣本推薦能力[Sileo等人,2022]為推薦系統帶來新的可能性。這些模型可以推廣到未見過的候選項,因為它們通過事實信息、領域專業知識和常識推理進行了廣泛的預訓練,使它們即使沒有接觸過特定的項目或用戶,也能提供合理的推薦。
上述策略已在判別模型中得到了良好的應用。然而,隨著AI學習范式的演變,生成語言模型開始受到關注[Zhao等人,2023]。這一發展的一個重要例證就是ChatGPT和其他類似模型的出現,它們已經對人類的生活和工作模式產生了重大影響。此外,將生成模型與推薦系統相結合,有可能帶來更多創新和實用的應用。例如,可以提高推薦的可解釋性,因為基于LLM的系統能夠根據其語言生成能力提供解釋[Gao等人,2023],幫助用戶理解影響推薦的因素。此外,生成語言模型使得更個性化和上下文感知的推薦成為可能,例如在聊天式推薦系統中用戶可以定制提示[Li等人,2023],增強用戶對結果多樣性的參與和滿意度。 受到上述范式在解決數據稀疏性和效率問題上顯著效果的啟發,將語言建模范式用于推薦已經在學術界和工業界中成為了一個有前景的方向,顯著地推進了推薦系統研究的最新技術。到目前為止,有一些研究回顧了這個領域的相關論文[Zeng等人,2021; Liu等人,2023b]。Zeng等人(2021)總結了一些關于推薦模型預訓練的研究,并討論了不同領域間的知識轉移方法。Liu等人(2023b)提出了一種正交分類法,將現有的基于預訓練語言模型的推薦系統根據它們的訓練策略和目標進行劃分,分析和總結了預訓練語言模型基礎訓練范式和不同輸入數據類型之間的聯系。然而,這兩項調查主要關注的是預訓練語言模型中訓練技術和策略的轉移,而不是探索語言模型及其能力,即基于LLM的方式。此外,他們缺乏對推薦領域中生成大型語言模型最近進展和系統介紹的全面概覽。為解決這個問題,我們深入研究了基于LLM的推薦系統,將它們分為用于推薦的判別性LLM和用于推薦的生成性LLM,我們的回顧重點放在后者上。據我們所知,我們的綜述是第一個對推薦系統的生成大型語言模型進行最新和全面回顧的工作。
我們的綜述主要貢獻如下:
我們對當前基于LLM的推薦系統的狀態進行了系統性的綜述,重點是擴大語言模型的能力。通過分析現有方法,我們對相關進展和應用提供了系統的概覽。
據我們所知,我們的調查是首個專門針對推薦系統的生成型大型語言模型的全面和最新的回顧。
我們的綜述批判性地分析了現有方法的優點、缺點和限制。我們確定了基于LLM的推薦系統面臨的關鍵挑戰,并提出了有價值的發現,可以激發在這個有潛力的領域進一步的研究。
2 建模范式和分類法
所有大型語言模型的基本框架都由幾個Transformer塊組成,例如GPT,PaLM,LLaMA等。這種架構的輸入通常由token嵌入或位置嵌入等組成,而在輸出模塊可以獲得期望的輸出嵌入或token。在這里,輸入和輸出數據類型都是文本序列。如圖1的(1)-(3)所示,對于在推薦中適應語言模型,即建模范式,現有的工作可以大致分為以下三類:
(1) LLM Embeddings + RS。這種建模范式將語言模型視為特征提取器,將物品和用戶的特征輸入到LLM中并輸出相應的嵌入。傳統的RS模型可以利用知識感知嵌入進行各種推薦任務。 (2)** LLM Tokens + RS**。與前一種方法類似,這種方法根據輸入的物品和用戶的特征生成token。生成的令牌通過語義挖掘捕捉潛在的偏好,可以被整合到推薦系統的決策過程中。 (3) LLM作為RS。與(1)和(2)不同,這個范式的目標是直接將預訓練的LLM轉換為一個強大的推薦系統。輸入序列通常包括簡介描述、行為提示和任務指示。輸出序列預計會提供一個合理的推薦結果。
在實際應用中,語言模型的選擇顯著影響推薦系統中建模范式的設計。如圖2所示,在本文中,我們將現有的工作劃分為兩個主要類別,分別是用于推薦的判別性LLM和生成性LLM。用于推薦的LLM的分類可以根據訓練方式進一步細分,不同方式之間的區別在圖3中有所說明。一般來說,判別性語言模型非常適合在范式(1)中嵌入,而生成性語言模型的響應生成能力進一步支持范式(2)或(3)。
3 用于推薦的判別性LLM
確實,所謂的在推薦領域的判別性語言模型主要是指BERT系列的模型[Devlin等人,2019]。由于判別性語言模型在自然語言理解任務中的專業性,它們通常被視為下游任務的嵌入骨干。這也適用于推薦系統。大多數現有的工作通過微調將像BERT這樣的預訓練模型的表現與特定領域的數據進行對齊。另外,一些研究探索了像提示調整這樣的訓練策略。代表性的方法和常用的數據集在表1和表2中列出。
3.1 微調
微調預訓練的語言模型是一種在各種自然語言處理(NLP)任務中,包括推薦系統,受到了顯著關注的通用技術。微調背后的思想是,采取一個已經從大規模文本數據中學習了豐富的語言表達的語言模型,并通過在特定任務的數據上進一步訓練它,使其適應特定的任務或領域。微調的過程包括用其學習到的參數初始化預訓練的語言模型,然后在針對推薦的特定數據集上訓練它。這個數據集通常包括用戶-物品互動、物品的文本描述、用戶配置文件和其他相關的上下文信息。在微調過程中,模型的參數根據特定任務的數據進行更新,使其能夠適應和專門用于推薦任務。在預訓練和微調階段,學習目標可以是不同的。由于微調策略是靈活的,大多數基于BERT增強的推薦方法可以歸納到這個軌道。對于基本的表示任務,邱等人(2021)提出了一種新的基于預訓練和微調的方法U-BERT來學習用戶的表示,該方法利用內容豐富的領域來補充那些行為數據不足的用戶特征。設計了一個評論共匹配層來捕獲用戶和物品評論之間的隱式語義交互。同樣,在UserBERT [Wu et al., 2021b]中,加入了兩個自我監督任務,對未標記的行為數據進行用戶模型預訓練,以增強用戶建模。這個模型利用中等難度的對比學習、遮蔽行為預測和行為序列匹配,通過捕捉內在的用戶興趣和相關性,訓練精確的用戶表示。
預訓練的BERT在排名任務中取得了突破性的成就。BECR [Yang等人,2022]提出了一種輕量級的復合重新排名方案,該方案同時結合了深度上下文token交互和傳統的詞匯詞項匹配特性。通過新穎的復合token編碼,BECR有效地利用基于單字和跳字n-grams的可預計算token嵌入來逼近查詢表示,從而在臨時排名相關性和效率之間實現了合理的權衡。此外,Wu等人(2022)提出了一個端到端的多任務學習框架,用于產品排名,使用領域特定的BERT進行微調,以解決查詢和產品之間的詞匯不匹配問題。作者利用了專家混合層和任務之間的概率轉移,以利用豐富的用戶參與數據。還有許多其他特定任務或場景的相關研究,例如團隊推薦[Zhang等人,2022],搜索/匹配[Yao等人,2022],CTR預測[Muhamed等人,2021]。特別地,"預訓練,微調"機制在幾個順序或基于會話的推薦系統中起到了重要作用,如BERT4Rec [Sun等人,2019],RESETBERT4Rec [Zhao,2022]。然而,上述模型只是利用了訓練策略的優勢,而沒有將大型語言模型擴展到推薦領域,因此不是我們討論的重點。序列表示學習模型UniSRec [Hou等人,2022]開發了一個BERT微調框架,將項目的描述文本關聯起來,在不同的推薦場景中學習可轉移的表示。對于基于內容的推薦,特別是新聞推薦,NRMS [Wu等人,2021a],Tiny-NewsRec [Yu等人,2022],PREC [Liu等人,2022],利用大型語言模型通過處理已知的領域轉移問題或減少轉移成本來增強新聞推薦。總的來說,將BERT微調集成到推薦系統中,融合了強大的外部知識和個性化的用戶偏好,主要目標是提高推薦準確性,同時獲得對具有有限歷史數據的新項目的一些冷啟動處理能力。
3.2 提示調優
與設計特定目標函數來適應不同的下游推薦任務不同,提示調優 [Lester等人,2021]試圖通過硬/軟提示和標簽詞語 verbalizer,將推薦的調優對象與預訓練的損失對齊。例如,Penha和Hauff (2020)利用BERT的Masked Language Modeling (MLM)頭來通過cloze-style提示揭示其對項目類型的理解。他們進一步利用了BERT的Next Sentence Prediction (NSP)頭和表示的相似性 (SIM) 來比較相關和不相關的搜索和推薦查詢-文檔輸入。實驗表明,BERT在沒有任何微調的情況下,可以在排名過程中優先考慮相關項目。Yang等人 (2021)開發了一個帶有提示的對話推薦系統,其中一個基于BERT的項目編碼器直接將每個項目的元數據映射到一個嵌入中。最近,Prompt4NR [Zhang和Wang, 2023]率先應用了提示學習范式進行新聞推薦。這個框架重新定義了預測用戶點擊候選新聞的目標,作為一個cloze-style的 maskprediction任務。實驗發現,通過利用多提示集成,推薦系統的性能顯著提高,超過了在離散和連續模板上使用單一提示所達到的結果。這突出了提示集成在結合多個提示做出更明智決策方面的有效性。
**4 針對推薦的生成型LLMs **
相比于判別型模型,生成型模型具有更好的自然語言生成能力。因此,不像大多數基于判別模型的方法將LLMs學習到的表示與推薦領域對齊,大多數基于生成模型的工作將推薦任務翻譯為自然語言任務,然后應用像在上下文中學習,提示調優,和指導調優這樣的技術,來適應LLMs直接生成推薦結果。此外,隨著ChatGPT展示出的令人印象深刻的能力,這類工作近來受到了更多的關注。如圖2所示,根據是否調整參數,這些基于生成型LLM的方法可以進一步劃分為兩種范例:無調優范例和調優范例。以下兩個小節將分別討論它們的細節。代表性的方法和常用的數據集也在表1和表2中列出。
4.1 無調整范式
LLMs在許多未見任務中展示出強大的零/少量樣本學習能力 [Brown et al., 2020; Ouyang et al., 2022]。因此,一些最近的研究假設LLMs已經具有推薦能力,并試圖通過引入特定的提示來觸發這些能力。他們采用了最近的Instruction和In-Context Learning [Brown et al., 2020]實踐,以在不調整模型參數的情況下將LLMs適應推薦任務。根據提示是否包含示例,這個范式中的研究主要屬于以下兩類:提示和上下文學習。
提示范例 這類工作旨在設計更適合的指示和提示,幫助LLMs更好地理解和解決推薦任務。Liu等人(2023a)系統地評估了ChatGPT在五個常見推薦任務上的表現,即評分預測,序列推薦,直接推薦,解釋生成和評論摘要。他們提出了一個通用的推薦提示構建框架,包括:(1)任務描述,將推薦任務適應為自然語言處理任務;(2)行為注入,將用戶-項目交互納入,幫助LLMs捕獲用戶的喜好和需求;(3)格式指示器,約束輸出格式,使推薦結果更容易理解和評估。同樣,Dai等人(2023)對ChatGPT在三個常見信息檢索任務(包括點對點,對對,和列表排序)上的推薦能力進行了實證分析。他們為不同類型的任務提出了不同的提示,并在提示的開頭引入了角色指示(例如,你現在是一個新聞推薦系統。)來增強ChatGPT的領域適應能力。除了提出一般框架外,有些工作專注于為特定推薦任務設計有效的提示。Sileo等人(2022)從GPT-2的預訓練語料庫中挖掘出了電影推薦提示。Hou等人(2023)介紹了兩種提升LLMs序列推薦能力的提示方法:以近期為重的序列提示,使LLMs能夠感知到用戶交互歷史中的序列信息,和引導法,將候選項目列表多次洗牌并取平均得分進行排名,以緩解位置偏見問題。由于LLMs允許的輸入token數量有限,很難在提示中輸入一個長的候選列表。為解決這個問題,Sun等人(2023)提出了一種滑動窗口提示策略,每次只在窗口中對候選項進行排序,然后以從后到前的順序滑動窗口,最后重復這個過程多次,以獲得總體排名結果。
除了將LLMs作為推薦系統,一些研究還利用LLMs來構建模型特征。GENRE [Liu等人,2023c]引入了三個提示,使用LLMs進行新聞推薦的三個特征增強子任務。具體來說,它使用ChatGPT根據摘要優化新聞標題,從用戶閱讀歷史中提取關鍵詞,并生成合成新聞以豐富用戶的歷史交互。通過整合LLMs構建的這些特征,傳統的新聞推薦模型可以得到顯著改善。類似地,NIR [Wang和Lim,2023]設計了兩個提示來生成用戶偏好關鍵詞,并從用戶交互歷史中提取代表性電影,以改進電影推薦。
在實踐中,除了排序模型外,整個推薦系統通常由多個重要組件組成,如內容數據庫、候選檢索模型等。因此,另一種利用LLMs進行推薦的方法是將它們作為整個系統的控制器。ChatREC [Gao et al., 2023]圍繞ChatGPT設計了一個交互式推薦框架,該框架通過多輪對話理解用戶需求,并調用現有推薦系統提供結果。此外,ChatGPT可以控制數據庫檢索相關內容以補充提示,并解決冷啟動項目問題。GeneRec [Wang et al., 2023]提出了一種生成性推薦框架,并使用LLMs控制何時推薦現有項目或通過AIGC模型生成新項目。總的來說,這些研究利用自然語言提示激活LLM在推薦任務中的零樣本學習能力,提供了一種低成本且實用的解決方案。
4.2 調整范式
如上所述,LLMs具有強大的zero/few-shot能力,通過適當的提示設計,它們在推薦性能方面可以顯著超越隨機猜測。然而,僅以這種方式構建的推薦系統往往無法超越專門針對特定任務和特定數據訓練的推薦模型的性能。因此,許多研究人員通過進一步的微調或提示學習來增強LLMs的推薦能力。在本文中,我們按照[Wei等,2022]的分類,將調整方法的范式劃分為兩種不同類型,分別是提示調整和指令調整。具體而言,在提示調整范式下,LLMs的參數或軟提示針對特定任務進行微調,例如評分預測;而在指令調整范式下,LLMs通過在不同類型的指令下對多個任務進行微調來獲得更好的性能。然而,目前對于這兩種微調范式還沒有明確的劃分或普遍接受的定義。
5 發現
在本綜述中,我們系統地回顧了大型語言模型在推薦系統中的應用范式和適應策略,特別是針對生成式語言模型。我們已經確定了它們在特定任務中改進傳統推薦模型性能的潛力。然而,需要注意的是,這個領域的整體探索仍處于早期階段。研究人員可能會發現確定最值得研究的問題和痛點是具有挑戰性的。為了解決這個問題,我們總結了許多大規模模型推薦研究中提出的共同發現。這些發現突出了一些技術挑戰,并呈現了進一步發展的潛在機會,包括模型偏見、提示設計和評估。
6 結論
本文回顧了大型語言模型(LLMs)在推薦系統領域的研究。我們將現有的工作分為判別模型和生成模型,并通過領域適應方式對其進行了詳細闡述。為了防止概念混淆,我們對LLM-based推薦中的微調、提示、提示調整和指令調整進行了定義和區分。據我們所知,我們的調查是專門針對生成式LLMs在推薦系統中的首次系統且最新的綜述,進一步總結了許多相關研究中提出的共同發現和挑戰。因此,本調查為研究人員提供了寶貴的資源,幫助他們全面了解LLM推薦,并探索潛在的研究方向。
這篇論文對大型語言模型(LLMs)在知識圖譜(KG)構建和推理中的作用進行了詳盡的定量和定性評估。我們使用了八個不同的數據集,涵蓋了實體、關系和事件提取,鏈接預測,和問題回答等方面。實證上,我們的發現表明,GPT-4在大多數任務中表現優于ChatGPT,甚至在某些推理和問題回答的數據集中超過了微調模型。此外,我們的綜述還擴展到了LLMs在信息提取方面的潛在泛化能力,這在虛擬知識提取任務的介紹和VINE數據集的開發中達到了高潮。依據這些實證發現,我們進一步提出了AutoKG,這是一種使用LLMs進行KG構建和推理的多智能體方法,旨在勾畫出這個領域的未來并提供激動人心的進步機會。我們期待我們的研究能為未來的KG的實踐提供寶貴的見解。
1. 引言
知識圖譜(KG)是一個由實體、概念和關系組成的語義網絡(Cai et al., 2022;Chen et al., 2023;Zhu et al., 2022;Liang et al., 2022),它可以催化各種場景的應用,如推薦系統、搜索引擎和問題回答系統(Zhang et al., 2021)。通常,KG構建(Ye et al., 2022b)包括幾個任務,包括命名實體識別(NER)(Chiu和Nichols,2016),關系提取(RE)(Zeng et al., 2015;Chen et al., 2022),事件提取(EE)(Chen et al., 2015;Deng et al., 2020),和實體鏈接(EL)(Shen et al., 2015)。另一方面,KG推理,通常被稱為鏈接預測(LP),在理解這些構建的KG中起著關鍵的作用(Zhang et al., 2018;Rossi et al., 2021)。此外,KG可以被用于問題回答(QA)任務(Karpukhin et al., 2020;Zhu et al., 2021),通過對與問題相關的關系子圖的推理。
早期,知識圖譜的構建和推理主要依賴于監督學習方法。然而,近年來,隨著大型語言模型(LLMs)的顯著進步,研究人員已經注意到它們在自然語言處理(NLP)領域的卓越能力。盡管有許多關于LLMs的研究(Liu et al., 2023;Shakarian et al., 2023;Lai et al., 2023),但在知識圖譜領域系統地探索它們的應用仍然有限。為了解決這個問題,我們的工作研究了LLMs(如ChatGPT和GPT-4,OpenAI,2023)在知識圖譜構建、知識圖譜推理任務中的潛在應用性。通過理解LLMs的基本能力,我們的研究進一步深入了解了該領域的潛在未來方向。
圖1:我們工作的概述。主要有三個部分:1)基礎評估:詳細說明了我們對大型模型(text-davinci-003,ChatGPT和GPT-4)的評估,無論是在零次還是一次設置中,都使用完全監督的最先進模型的性能數據作為基準;2)虛擬知識提取:檢查大型模型在構建的VINE數據集上的虛擬知識能力;3)AutoKG:提出利用多個代理來促進知識圖譜的構建和推理。
具體來說,如圖1所示,我們首先調研了LLMs在實體、關系和事件提取,鏈接預測,和問題回答方面的零樣本和一次樣本性能,以評估它們在知識圖譜領域的潛在應用。實證發現表明,盡管LLMs在知識圖譜構建任務中的性能有所提升,但仍落后于最先進的(SOTA)模型。然而,LLMs在推理和問題回答任務中表現出相對優越的性能。這表明它們擅長處理復雜問題,理解上下文關系,并利用預訓練過程中獲取的知識。因此,像GPT-4這樣的LLMs作為少次信息提取器的效果有限,但作為推理助手的熟練程度相當高。為了進一步研究LLMs在信息提取任務上的表現,我們設計了一個新的任務,稱為“虛擬知識提取”。這個任務旨在判斷性能的觀察到的改進是來自LLMs內在的廣泛知識庫,還是來自于指導調整和人類反饋的強化學習(RLHF)(Christiano et al., 2017)所促進的強大泛化能力。在新建的VINE數據集上的實驗結果表明,像GPT-4這樣的LLMs可以迅速從指令中獲取新的知識,并有效地完成相關的提取任務。 在這些實證發現中,我們認為LLMs對指令的極大依賴使得為知識圖譜的構建和推理設計合適的提示變得費時費力。為了促進進一步的研究,我們引入了AutoKG的概念,它使用多個LLMs的代理自動進行知識圖譜的構建和推理。
總的來說,我們的研究做出了以下貢獻:
我們評估了LLMs,包括GPT-3.5, ChatGPT, GPT-4,通過在八個基準數據集上評估它們在知識圖譜構建和推理的零樣本和一樣本性能,提供了對它們能力的初步理解。
我們設計了一個新的虛擬知識提取任務,并構建了VINE數據集。通過評估LLMs在這個數據集上的性能,我們進一步展示了像GPT-4這樣的LLMs具有強大的泛化能力。
我們引入了使用交際代理自動進行知識圖譜構建和推理的概念,稱為AutoKG。利用LLMs的知識庫,我們使多個LLMs的代理能夠通過迭代對話協助知識圖譜的構建和推理過程,為未來的研究提供了新的洞察。
**LLMs在知識圖譜構建和推理方面的新能力 **
最近,LLMs的出現給NLP領域注入了活力。為了探索LLMs在知識圖譜領域的潛在應用,我們選擇了代表性的模型,即ChatGPT和GPT-4。我們在知識圖譜構建和推理領域的八個不同數據集上對它們的性能進行了全面評估。
**2.1 評估原則 **
在這項研究中,我們對LLMs在各種知識圖譜相關任務上進行了系統評估。首先,我們評估了這些模型在zero-shot和one-shotNLP任務中的能力。我們的主要目標是在面對有限數據時檢查它們的泛化能力,以及在沒有示范的情況下使用預訓練知識有效推理的能力。其次,根據評估結果,我們對導致模型在不同任務中表現不同的因素進行了全面分析。我們旨在探究它們在某些任務中表現優越的原因和潛在缺陷。通過比較和總結這些模型的優點和限制,我們希望提供可能指導未來改進的洞察。
2.2 知識圖譜的構建和推理
2.2.1 設置
實體、關系和事件提取。DuIE2.0 (Li et al., 2019)代表了業界最大的基于模式的中文關系提取數據集,包括超過210,000個中文句子和48個預定義的關系類別。SciERC (Luan et al., 2018)是一組注釋了七種關系的科學摘要。Re-TACRED (Stoica et al., 2021)是TACRED關系提取數據集的顯著改進版本,包含超過91,000個分布在40個關系中的句子。MAVEN (Wang et al., 2020)是一個包含4,480份文件和168種事件類型的通用領域事件提取基準。
鏈接預測 FB15K-237 (Toutanova et al., 2015)廣泛用作評估知識圖譜嵌入模型在鏈接預測上的性能的基準,包括237個關系和14,541個實體。ATOMIC 2020 (Hwang et al., 2021a)是一個全面的常識倉庫,包含關于實體和事件的133萬條推理知識元組。
問答 FreebaseQA (Jiang et al., 2019)是一個基于Freebase知識圖譜構建的開放領域QA數據集,專為知識圖譜QA任務設計。這個數據集包括從各種來源(如TriviaQA數據集等)收集的問題-答案對。MetaQA (Zhang et al., 2018)數據集,從WikiMovies (Miller et al., 2016)數據集擴展,提供了大量的單跳和多跳問題-答案對,總數超過400,000個。
2.2.2 總體結果
實體和關系提取 我們在SciERC, Re-TACRED, 和DuIE2.0上進行實驗,每個實驗涉及到測試/驗證集的20個樣本,并使用標準的micro F1分數進行評估。在此我們分別在每個數據集上使用PaddleNLP LIC2021 IE2,PL-Marker (Ye et al., 2022a)和EXOBRAIN (Park and Kim, 2021)作為基線。如表1所示,GPT-4在這些學術基準提取數據集上無論是zero-shot還是one-shot都取得了相對良好的性能。與ChatGPT相比,它也有所進步,盡管其性能還沒有超過完全監督的小模型。
事件提取 我們在MAVEN數據集的20個隨機樣本上進行事件檢測的實驗。此外,我們使用Wang等人(2022a)的研究作為先前經過微調的SOTA。同時,即使沒有演示,GPT-4也已經取得了值得稱贊的結果。在這里,我們使用F-分數作為評估指標。
鏈接預測任務 鏈接預測任務包括在兩個不同的數據集FB15k-237和ATOMIC2020上進行的實驗。前者是包含25個實例的隨機樣本集,而后者包含23個代表所有可能關系的實例。在各種方法中,最好的微調模型是FB15k-237的C-LMKE (BERT-base) (Wang et al., 2022c)和ATOMIC2020的COMET (BART) (Hwang et al., 2021b)。
問題回答 我們在兩個廣泛使用的知識庫問題回答數據集上進行評估:FreebaseQA和MetaQA。我們從每個數據集中隨機抽取20個實例。對于MetaQA,由于它由不同跳數的問題組成,我們根據它們在數據集中的比例進行抽樣。我們用于兩個數據集的評估指標是AnswerExactMatch。
在涵蓋知識圖譜構建和知識圖譜推理的實驗中,大型語言模型(LLMs)通常在推理能力上表現優于它們的構建能力。對于知識圖譜的構建任務,無論是在 zero-shot 或 one-shot 的情況下,LLMs的表現都沒有超過當前最先進模型的表現。這與之前在信息提取任務上進行的實驗(Ma等人,2023)保持一致,這些實驗表明,大型語言模型通常并不擅長進行少樣本的信息提取。相反,在知識圖譜推理任務中,所有LLMs在one-shot設置中,以及GPT-4在zero-shot設置中,都達到了最先進(SOTA)的表現。這些發現為增強我們對大型模型的性能和它們在知識圖譜領域內的適應性的理解提供了有意義的見解。我們提出了對這種現象的幾種可能解釋:首先,知識圖譜構建任務包括識別和提取實體、關系、事件等,使得它比推理任務更為復雜。相反,推理任務,以鏈接預測為典型,主要依賴于已有的實體和關系進行推斷,使得任務相對直接。其次,我們推測LLMs在推理任務中表現優異可能歸因于它們在預訓練階段接觸到的相關知識。
3 未來機遇:自動化知識圖譜構建和推理
最近,大型語言模型(LLMs)引起了相當大的關注,并在各種復雜任務中展示了精通的能力。然而,像ChatGPT這樣的技術的成功,仍然主要依賴于大量的人力輸入,以引導對話文本的生成。隨著用戶逐步精細化任務描述和要求,并與ChatGPT建立對話環境,模型能夠提供越來越精確、高質量的回應。然而,從模型開發的角度看,這個過程仍然是勞動密集型和耗時的。因此,研究人員已經開始研究使大型模型能夠自主生成指導文本的可能性。例如,AutoGPT可以獨立生成提示,并執行像事件分析、營銷計劃創建、編程和數學操作等任務。同時,Li等人(2023)深入研究了交際代理之間自主合作的可能性,并介紹了一個名為角色扮演的新型合作代理框架。這個框架使用啟示性提示,以確保與人類意圖的一致性。在此研究基礎上,我們進一步詢問:是否可行使用交際代理來完成知識圖譜的構建和推理任務?
在這個實驗中,我們使用了CAMEL(Li等人,2023)中的角色扮演方法。如圖6所示,AI助手被指定為顧問,AI用戶被指定為知識圖譜領域專家。在收到提示和指定的角色分配后,任務指定代理提供詳細的描述以具體化概念。在此之后,AI助手和AI用戶在多方設置中協作完成指定的任務,直到AI用戶確認其完成。實驗示例表明,使用多代理方法,與電影《綠皮書》相關的知識圖譜被更有效、更全面地構建。這個結果也強調了基于LLM的代理在構建和完成知識圖譜方面的優越性。
通過結合人工智能和人類專業知識的努力,AutoKG可以快速定制領域特定的知識圖譜。該系統允許領域專家與機器學習模型進行交互,從而通過交換專家知識和經驗,促進領域特定知識圖譜的構建的協作環境。此外,AutoKG可以有效地利用人類專家的領域知識,生成高質量的知識圖譜。同時,通過這種人機協作,它可以在處理領域特定任務時,提高大型語言模型的事實準確性。反過來,這個目標預計將增加模型的實用價值。 AutoKG不僅可以加快領域特定知識圖譜的定制,而且還可以增強大規模模型的透明度和體現代理的交互。更準確地說,AutoKG有助于深入理解大型語言模型(LLMs)的內部知識結構和運作機制,從而提高模型的透明度。此外,AutoKG可以作為一個合作的人機交互平臺,使人類和模型之間能夠進行有效的交流和互動。這種互動促進了對模型學習和決策過程的更好理解和指導,從而提高了模型在處理復雜任務時的效率和準確性。盡管我們的方法帶來了顯著的進步,但它并非沒有局限性,然而,這些局限性為進一步的探索和改進提供了機會:
API的使用受到最大Token限制的約束。目前,由于GPT-4 API不可用,正在使用的gpt-3.5-turbo受到最大token限制。這個約束影響了知識圖譜的構建,因為如果超過了這個限制,任務可能無法正確執行。現在,AutoKG在促進有效的人機交互方面表現出缺點。在任務完全由機器自主進行的情況下,人類不能及時糾正交流過程中的錯誤發生。相反,在機器通信的每一步中都涉及到人類,可以顯著增加時間和勞動成本。因此,確定人類介入的最佳時機對于知識圖譜的高效和有效的構建至關重要。大型語言模型(LLMs)的訓練數據是時間敏感的。未來的工作可能需要將來自互聯網的檢索特性納入考慮,以彌補當前大型模型在獲取最新或領域特定知識方面的不足。
4. 結論
在這篇論文中,我們初步調研了大型語言模型(LLMs),如GPT系列,在知識圖譜(KG)構建和推理等任務上的表現。盡管這些模型在這些任務上表現優秀,我們提出了這樣一個問題:LLMs在提取任務中的優勢是源于它們龐大的知識庫,還是源于它們強大的上下文學習能力?為了探索這個問題,我們設計了一個虛擬的知識提取任務,并為實驗創建了相應的數據集。結果表明,大型模型確實具有強大的上下文學習能力。此外,我們提出了一種利用多個代理完成KG構建和推理任務的創新方法。這種策略不僅減輕了人工勞動,也彌補了各個領域人類專業知識的匱乏,從而提高了LLMs的表現。盡管這種方法仍有一些局限性,但它為LLMs的未來應用的進步提供了新的視角。
Recommendation systems have witnessed significant advancements and have been widely used over the past decades. However, most traditional recommendation methods are task-specific and therefore lack efficient generalization ability. Recently, the emergence of ChatGPT has significantly advanced NLP tasks by enhancing the capabilities of conversational models. Nonetheless, the application of ChatGPT in the recommendation domain has not been thoroughly investigated. In this paper, we employ ChatGPT as a general-purpose recommendation model to explore its potential for transferring extensive linguistic and world knowledge acquired from large-scale corpora to recommendation scenarios. Specifically, we design a set of prompts and evaluate ChatGPT's performance on five recommendation scenarios. Unlike traditional recommendation methods, we do not fine-tune ChatGPT during the entire evaluation process, relying only on the prompts themselves to convert recommendation tasks into natural language tasks. Further, we explore the use of few-shot prompting to inject interaction information that contains user potential interest to help ChatGPT better understand user needs and interests. Comprehensive experimental results on Amazon Beauty dataset show that ChatGPT has achieved promising results in certain tasks and is capable of reaching the baseline level in others. We conduct human evaluations on two explainability-oriented tasks to more accurately evaluate the quality of contents generated by different models. And the human evaluations show ChatGPT can truly understand the provided information and generate clearer and more reasonable results. We hope that our study can inspire researchers to further explore the potential of language models like ChatGPT to improve recommendation performance and contribute to the advancement of the recommendation systems field.
TLDR: 這篇論文提出了一種新的生成式推薦系統范式GeneRec,它通過結合content generation和instruction guidance來服務用戶的個性化信息需求。此外,作者還強調了多種fidelity checks的重要性,以確保生成內容的可信度。作者探索了在短視頻生成上實現GeneRec的可行性,并在多種任務上展示了不錯的結果,為未來的研究留下了許多有價值的方向。
論文:arxiv.org/abs/2304.03516 代碼:github.com/Linxyhaha/GeneRec
推薦系統通常從item庫中檢索items進行個性化推薦。然而,這種基于檢索的推薦范式面臨兩個限制:1)人工生成的items可能無法滿足用戶多樣化的信息需求,2)用戶通常通過點擊等被動且低效的反饋來調整推薦。如今,人工智能生成內容(AI-Generated Content, AIGC)已經在各個領域取得了顯著的成功,其具有克服這些限制的潛力:1)生成式人工智能可以生成個性化items,以滿足用戶特定的信息需求,2)新興的ChatGPT等大語言模型給用戶提供了另一種通過自然語言指令以更準確地表達信息需求的可能。 在這種情況下,AIGC的興起啟發了下一代推薦范式的兩個新目標:1)通過Generative AI生成個性化內容服務用戶的多樣化需求,2)收集用戶的自然語言指令,以指導content generation。為此,我們提出了一種名為GeneRec的新型生成式推薦范式 (Generative Recommender paradigm), 其采用AI generator來進行個性化content generation,并利用用戶指令獲取用戶的信息需求。具體而言,我們通過instructor對用戶的指令和傳統反饋(例如點擊)進行預處理,并輸出generation guidance。基于generation guidance,我們通過AI editor和AI creator實例化AI generator,分別用于編輯現有items和生成新的items。最終,GeneRec可以融合內容檢索、編輯和生成功能,以滿足用戶的信息需求。此外,為確保生成的items的可信度,我們強調各種fidelity checks的重要性,例如真實性和合法性檢查。最后,我們研究了在短視頻的生成推薦中實現AI editor和AI creator的可行性,并展現了不錯的結果。
推薦系統往往檢索items來滿足用戶的個性化信息需求。傳統的推薦系統主要檢索專家生成的item(例如電影)或用戶生成的item(例如短視頻)。然而,AIGC已經成為各個領域中的展現了強大的能力,如圖1所示,ChatGPT展示出強大的自然語言對話能力,擴散模型(diffusion models)可以生成生動的圖像并修改圖像的指定內容,DualStyleGAN可以根據用戶的要求輕松地轉換圖像風格。在AIGC的興起推動下,推薦系統不應再受限于人工生成的內容,我們需要為推薦系統構想一種生成式推薦范式,自動地編輯現有items或生成新items來滿足用戶多樣化的信息需求。
圖1. AIGC應用示例為了設計生成式推薦范式,我們首先回顧了傳統的基于檢索的推薦范式。如圖2所示,傳統的范式對item庫中的人工生成的items進行打分排序,向用戶推薦排名靠前的items,然后收集用戶反饋(例如點擊)和上下文(例如交互時間)以優化未來的排序。盡管這種傳統范式取得了巨大的成功,但存在兩個限制:1)item庫中人工生成的內容可能不足以滿足用戶的個性化信息需求。例如,用戶可能更喜歡某種特定風格的短視頻,如卡通風格,但人工生成這種短視頻耗時且成本高昂。2)用戶目前主要通過被動反饋(例如點擊)來優化推薦結果,無法明確高效地表達其信息需求。
圖2. 傳統檢索式推薦范式AIGC提供了克服基于檢索的推薦范式固有限制的潛力。具體地,1)生成式人工智能可以實時生成個性化內容,包括編輯現有items和生成新items,以補充用戶多樣化的信息需求。例如,它可以如圖3所示,根據個性化用戶偏好快速將短視頻轉換為任何風格。此外,2)新近發布的類ChatGPT模型為用戶通過自然語言指令更準確地傳達其多樣化信息需求提供了強大的接口(如圖1(a)所示),補充了傳統用戶的隱式反饋。由此,AIGC的興起促使我們推動了下一代推薦系統發展,以實現:1)通過生成式人工智能自動生成個性化內容,以及 2)收集用戶自然語言指令以指導content generation。
圖3. 根據用戶的個性化偏好,通過VToonify進行短視頻轉換的例子為此,我們提出了一種名為GeneRec的生成式推薦范式 (Generative Recommender paradigm),將強大的生成式人工智能集成到個性化content generation中,包括item的編輯和生成。圖2說明了GeneRec如何在AI generator和用戶之間新增一個反饋循環,將用戶指令和反饋作為輸入,AI generator需要理解用戶的信息需求并生成個性化內容。然后,生成的內容可以添加到item庫中進行排名,也可以直接推薦給用戶。其中,用戶指令不僅限于文本對話,還可以包括多模態對話,即將圖像、視頻、音頻和自然語言融合起來表達信息需求。 為了實現GeneRec Paradigm,我們設計了一個模塊來處理用戶指令以及兩個模塊來實現AI generator。具體而言,instructor模塊預處理用戶指令和反饋以確定是否啟動AI generator以更好地滿足用戶需求,并將指令和反饋進行編碼以指導content generation。在給出指導后,AI editor重新利用現有items以滿足用戶的特定偏好,即個性化items編輯,而AI creator直接為用戶生成新的個性化items。 為確保生成的items的可信度和高質量,我們強調從偏見、隱私、安全、真實性和合法性等方面進行各種fidelity checks的重要性。最后,為探索其范式的可行性,我們設計了幾個短視頻生成任務,并在一個高質量短視頻數據集上進行了實驗。實證結果表明,現有的AIGC方法可以完成一些編輯和生成任務,并且有望在未來實現GeneRec的目標。
概括來說,本文的貢獻有以下三點: 1. 我們強調AIGC在推薦系統中的重要作用,并指出下一代推薦系統的新目標:朝著生成式推薦范式前進,通過多模態指令自然地與用戶交互,并靈活地檢索、編輯和生成items內容,以滿足用戶多樣化的信息需求。 1. 我們提出通過設計instructor、AI editor和AI creator三個模塊來實現生成式推薦范式,其中instructor用于處理用戶指令,AI editor用于個性化items編輯,AI creator用于個性化items生成。 1. 我們調查了利用現有AIGC方法實現提出的生成式推薦范式的可行性,并為未來的工作提出了有潛力的研究方向。
受AIGC潮流的推動,我們為下一代推薦系統提出了兩個新目標:1)利用AI自動編輯或生成items,以滿足用戶多樣化的需求,2)利用自然語言交互來指導內容的編輯和生成。為了實現這些目標,我們提出了GeneRec,以補充傳統的基于檢索的推薦范式。
圖4. GeneRec paradigm
Overview:圖4展示了提出的GeneRec范式的概述,其中包含兩個循環。在傳統的檢索-用戶系統循環中,人類,包括領域專家(例如音樂家)和普通用戶(例如短視頻用戶),生成和上傳items到items庫。這些items根據用戶偏好進行排名,其中偏好是從歷史推薦的上下文(例如交互時間)和用戶反饋中學習的。為了補充這種傳統范式,GeneRec在AI generator和用戶之間添加了另一個循環。用戶可以通過用戶指示和反饋來控制由AI generator生成內容,以滿足個性化需求。
User Instruction:ChatGPT類模型的強大對話能力可以豐富用戶和AI generator之間的交互模式。用戶可以通過對話指令靈活地控制content generation,指令既可以是文本對話,也可以是多模態對話。通過指令,用戶可以比基于交互反饋更快速有效地表達他們的信息需求。此外,使用交互式指令,用戶可以隨時自由地啟用AI generator生成他們喜歡的內容。
AI generator:在生成內容之前,AI generator可能需要對用戶指令進行預處理,例如,一些預先訓練的語言模型可能需要設計prompt或instruction tuning;擴散模型可能需要設計自然語言指令作為圖像生成的輸入。除了用戶指令,用戶反饋(例如點擊)也可以指導content generation,因為用戶指令可能會忽略一些用戶偏好,而AI generator可以從用戶的歷史交互中推斷出這些偏好。 隨后,AI generator從用戶指令和反饋中總結用戶的個性化的信息需求,然后相應地生成個性化的items內容,包括生成全新items和編輯現有items。最后,post-processing是確保生成內容質量的關鍵,AI generator可以判斷生成的內容是否能夠滿足用戶的信息需求,并進一步進行精煉處理,例如為短視頻添加標題和字幕。此外,確保生成內容的可信度也非常重要。
Fidelity checks:為了確保生成的內容準確、公平、安全,GeneRec 應通過以下檢查。 1)Bias and fairness:AI generator可能從有偏差的數據中學習,因此應確保生成的內容不會持續存在刻板印象,促進仇恨言論和歧視,對某些人口造成不公平或加強其他有害偏見。 2)Privacy:生成的內容不應傳播任何可能侵犯某人隱私的敏感或個人信息。 3)Safety:AI generator不得對用戶造成任何傷害風險,包括身體和心理傷害的風險。例如,針對青少年的生成短視頻不應包含任何不健康的內容。此外,必須防止GeneRec受到各種攻擊,如假評論攻擊。 4)Authenticity:為防止誤傳信息,我們需要驗證生成內容中所提到的事實、統計數據和聲明是否基于可靠來源準確。 5)Legal compliance:AIGC必須遵守所有相關法律法規。例如,如果生成的短視頻是關于推薦健康食品,它們必須遵守衛生保健的相關法規。在這方面,我們還強調,制定新法規來規范AIGC及其傳播是必要和緊迫的。 6)Identifiability:為協助AIGC監督,我們建議將數字水印添加到AI生成的items內容中,以區分人類生成的和AI生成的items。此外,我們還可以開發AI技術來自動識別AI生成的items。此外,我們可以考慮在用戶瀏覽后刪除AI生成的items,以防止它們被修改于不適當的上下文中,從而減少AIGC的有害傳播。
Evaluation:為了評估生成的內容,我們提出了兩種評估方法:1)基于item的評估,2)基于用戶的評估。基于item的評估強調從item本身進行的測量,包括item質量的測量(例如使用 Fréchet Video Distance(FVD)度量短視頻質量)和各種fidelity checks。基于用戶的評估則基于用戶的滿意度來判斷生成的內容質量。滿意度可以通過顯式反饋或隱式反饋(如傳統基于檢索的推薦系統中所用的方法)來收集。具體而言,1)顯式反饋包括用戶的評分和對話反饋,例如自然語言中的“我喜歡這個item”。此外,我們可以設計多個方面來幫助用戶評估,例如風格、長度和短視頻生成的縮略圖。而2)隱式反饋(例如點擊)也可以進行評估。常用的指標,如點擊率、停留時間和用戶保留率仍然適用于衡量用戶的滿意度。
為了實現GeneRec的提議,我們開發了三個模塊:Instructor、AI editor和AI creator。如圖5所示,Instructor負責預處理用戶指令,而AI editor和AI creator則分別實現了用于個性化items編輯和生成的AI generator。
圖5. A demonstration of GeneRec
Instructor旨在預處理用戶指令和反饋,以指導AI generator的內容生成。 * Input:用戶的多模態對話指令和對歷史推薦items的反饋。 * Processing:給定輸入,Instructor可能仍需要與用戶進行多輪交互,以全面了解用戶的信息需求。然后,Instructor分析多模態指令和用戶反饋,確定是否有必要啟動AI generator以滿足用戶的信息需求。如果用戶通過指令明確請求AIGC或多次拒絕人工生成的items,Instructor可能會啟用AI generator進行內容生成。然后,Instructor根據AI generator的輸入要求,將用戶的指令和反饋作為指導信號進行預處理。例如,一些預先訓練的語言模型可能需要適當設計的提示,而擴散模型可能需要從用戶的指令和歷史喜歡的items特征中提取指導信息。 * Output:1)是否啟動AI generator的決策,2)用于content generation的指導信號。
為了實現AI generator的content generation功能,我們制定了兩個模塊:AI editor和AI creator。 AI editor for personalized item editing: 如圖4所示,AI editor旨在根據個性化用戶指令和反饋,對items庫中現有的items(由人或AI生成)進行細化和重新加工。 * Input:1)由指導者從用戶指令和反饋中提取的指導信號,2)item庫中的現有items,3)來自Web數據的事實和知識。 * Processing:針對輸入數據,AI editor利用神經網絡學習用戶的信息需求和喜好,然后相應地重新加工輸入items。這里的“事實和知識”可以提供一些事實事件、生產技能、常識、法律法規等內容,幫助生成準確、安全、合法的items。例如,基于用戶指令,AI editor可能通過在Web上模仿卡通風格的示例,將短視頻轉換成卡通風格。 * Output:一個經過編輯的items,比原來的items更好地滿足用戶的信息偏好。
AI creator for personalized item creation: 除了AI editor外,我們還開發了一個AI creator,根據個性化用戶指令和反饋來生成新的items。
為了研究實例化GeneRec的可行性,我們采用AIGC方法在短視頻數據集上實現AI editor和AI creator,圖6提供了不同的實現方法。
圖6. 實現編輯和生成任務的說明
本文提出了一個全新的生成式推薦范式,可以通過用戶指令和反饋獲得用戶的信息需求,實現item檢索、編輯和生成,以滿足用戶的多樣化信息需求。為實例化GeneRec,我們設計了三個模塊:用于預處理用戶指令和反饋的Instructor,用于編輯現有物品的AI editor和用于生成新物品的AI creator。此外,我們強調了多種fidelity checks的重要性,以確保生成內容的可信度,并指出了GeneRec的挑戰和未來機遇。我們探索了在短視頻生成上實現GeneRec的可行性,并在多種任務上展現了不錯的結果。 本研究為未來工作留下了許多有價值的研究方向。具體來說,1)從用戶的多模態指令和反饋中學習用戶的信息需求至關重要。詳細來說,GeneRec應該學習如何提出問題以便高效獲得信息,減少模態差距以了解用戶的多模態指令,并利用用戶反饋以補充指令,提供更好的generation guidance。2)對于各種任務(如縮略圖生成和短視頻生成),開發更強大的生成模塊是至關重要的,此外,我們可能通過一個統一模型來實現多個生成任務,這些任務可以相互促進。3)我們應該設計新的度量標準和技術來豐富AIGC的評估和檢查,引入人機協作來評估GeneRec和進行檢查也是一個不錯的方向。
代碼生成(Code Generation), 是指根據自然語言描述生成相關代碼片段的任務. 在軟件開發過程中, 常 常會面臨大量重復且技術含量較低的代碼編寫任務, 代碼生成作為最直接輔助開發人員完成編碼的工作受到學術 界和工業界的廣泛關注. 讓機器理解用戶需求, 自行完成程序編寫也一直是軟件工程領域重點關注的問題之一.**近年來, 隨著深度學習在軟件工程領域任務中的不斷發展, 尤其是預訓練模型的引入使得代碼生成任務取得了十分優異的性能. **本文系統梳理了當前基于深度學習的代碼生成的相關工作, 并將目前的基于深度學習的代碼生成 方法分為三類: 基于代碼特征的方法, 結合檢索的方法以及結合后處理的方法. 第一類是指使用深度學習算法利 用代碼特征進行代碼生成的方法, 第二類和第三類方法依托于第一類方法進行改進. 本文依次對每一類方法的已 有研究成果進行了系統的梳理, 總結與點評. 隨后本文還匯總分析了已有的代碼生成工作中經常使用的語料庫與 主要的評估方法, 以便于后續研究可以完成合理的實驗設計. 最后, 本文對總體內容進行了總結, 并針對未來值 得關注的研究方向進行了展望.
**1 引言 **
從計算機誕生開始, 雖然編程的形式隨著硬件及軟件的不斷進步而不停迭代, 但是從事計算機技術行業 的人員始終與編寫代碼的任務緊密聯系在一起. 因此如何提高軟件開發的效率和質量, 一直是軟件工程領域 的重要問題之一. 這一方面是由于在不同軟件開發過程中存在大量相似代碼復用的情況, 多次編寫重復代碼 會大大降低開發人員的開發效率以及創造熱情; 另一方面, 結構清晰, 功能完備的高質量代碼能夠使得軟件 開發過程明晰, 并能夠在后期有效降低維護成本.
除了互聯網領域的工作人員, 計算思維在當今信息社會對于每一位從業者都必不可少. 政府也在制定相 關專門文件推動和規范編程教育發展, 幫助學生理解并建立計算思維[1] . 但事實上, 對于大多數沒有經過系統 化學習的人而言, 從零開始上手編程并完整完成一段能夠實現具體功能的程序是極具挑戰的. 編程作為一種 手段來完成人們設想的功能, 本質上是一種工具, 但這樣的學習門檻使得想法與實際操作之間存在差異, 在 一定程度上阻礙了許多具有創意性思維程序的誕生.
程序自動生成方法是一項機器根據用戶需求自動生成相應代碼的技術. 智能化代碼生成具有多元形式, 一般地, 根據實際應用場景以及生成過程所需要的信息, 可以將智能化代碼生成分為代碼生成(Code Generation)和代碼補全(Code Completion)兩個任務. 前者是指根據開發人員利用自然語言編寫代碼的需求(部 分會加入輸入輸出樣例), 機器生成特定編程語言的代碼片段(部分方法加入后處理環節以保證代碼的可執行); 后者則是指在開發人員編寫代碼過程中, 代碼補全算法模型根據已編寫代碼上文自動理解開發人員的編寫意 圖并補全代碼. 根據補全的代碼粒度, 又可以將其分為詞元級別(token-level)以及行級別(line-level)[2] . 簡單來 說, 代碼生成接收的輸入是自然語言描述, 輸出是能夠一定程度實現自然語言描述功能的代碼片段; 而代碼 補全任務接收的輸入是當前代碼的上文, 輸出的是當前代碼的下文. 本文研究的智能化代碼生成限定于前者, 即代碼生成(Text-to-Code), 旨在根據自然語言描述生成特定編程語言的代碼片段. 具體來說, 本任務關注軟 件實際開發過程中使用的高級編程語言, 如 C++, Java 和 Python 等. 這里給出代碼生成問題的數學定義, 給定自然語言描述:
, 智能化代碼生成模型, 目的是生成代碼片段:
傳統的代碼生成方法主要依賴于高質量的詞匯表, 手工構建的模板和特定領域的語言特性, 要求程序員 人工編寫邏輯規則, 以便生成程序能夠根據其設定規則生成符合邏輯的代碼片段. Little 等人[3] 提出了一種將 關鍵字(自然語言)轉換為 Java 方法調用表達式的算法. Gvero 等人[4] 為 Java 編程語言和 API 調用構建了一種概 率上下文無關語法, 并提出算法可以將英文輸入映射為聲明, 最終生成有效的 Java 代碼片段. 這樣人工提取 的方法具有很大的局限性, 不能夠適應復雜多變的編程環境, 同時也增加了開發人員編寫邏輯規則的開銷. 因此隨著人工智能和深度學習算法的進步, 自動提取詞匯表及特征來生成可執行代碼片段也得到長足發展.
事實上, 最近十年來, 利用機器學習和深度學習算法解決計算機各個領域相關問題的研究已成為一種趨 勢. Hindle 等人[5] 發現代碼與自然語言在統計學上呈現相似的分布, 代碼同自然語言一樣是重復的, 有規律的 和可預測的. 這樣的研究結果為人工智能領域的相關算法模型應用到代碼領域相關的問題提供了理論基礎, 即 AI(Artificial Intelligence) for SE(Software Engineer). 最近, Chen 等人[6]對代碼的自然性及其應用的研究進展進行了系統的綜述, 有助于研究者更好地利用自然語言領域的思想來解決代碼領域的問題. 對于代碼生成任 務而言, 借助機器學習和深度學習算法, 利用數據驅動構建模型, 完成自動代碼生成已成為程序自動代碼生 成任務的解決范式, 稱為智能化代碼生成. 智能化代碼生成能夠有效應對不同的開發環境, 提高軟件開發的 效率和質量, 減輕開發人員的壓力, 降低代碼編寫的門檻.
然而, 代碼生成問題在研究時也面臨諸多嚴峻挑戰: 首先, 自然語言描述形式多種, 表達多樣, 對于同樣 的函數描述實現可能一百個人就有一百種表達方式. 因此, 能否正確理解自然語言所描述的意圖對于代碼生 成的質量具有決定性作用. 其次, 代碼生成本質是生成類任務, 使用到的模型在解碼過程中往往伴隨著巨大 的解空間, 針對復雜問題所生成的代碼可能存在無法被執行或對于實際問題沒有完全解決的情況, 如何在其 中找到正確的符合用戶需求的代碼仍需要被探索. 因此, 如何更好地利用已有的外部知識庫(例如 Stack Overflow 論壇)來提升代碼生成模型的效果成為了一個可能的解決方案. 上述這些問題雖隨著模型的一步步增 大帶來的性能提升有所緩解, 但仍未解決. 最后, 目前對于代碼生成的質量評估主要采用了自動評估的方式, 評估的指標從機器翻譯領域的指標轉向基于測試樣例的指標, 這一定程度上有助于實際模型性能的評價. 但 對于實際場景中的代碼生成, 缺乏人工評價的板塊, 使得目前代碼生成模型落地后的表現距開發人員的期待 仍存在一定的差距.
2 研究框架
為了對智能化代碼生成相關領域已有的研究工作和取得成果進行系統的梳理, 本文使用 code generation、 generating source code、 generating program、 program synthesis 作為關鍵詞在 ACM Digital Library、 IEEE Xplore Digital Library、 Elsevier ScienceDirect、 Springer Link Digital Library、 Google scholar 和 CNKI 在線 數據庫中進行檢索. 基于上述論文數據庫中檢索出來的相關文獻, 我們在人工篩選方法的基礎上, 通過分析 論文的標題、關鍵詞和摘要去除與代碼生成無關的文獻. 接著我們遞歸地對每篇文獻進行正向和反向滾雪球 搜索[7] , 最終選擇出與主題直接相關的高質量論文共 53 篇(截止到 2022 年 11 月).
如圖 1 所示, 從 2015 年到 2019 年, 智能化代碼生成相關論文的數量呈上升趨勢, 說明智能化代碼生成任 務逐漸被學界關注, 完成了部分研究并取得了一些成果. 隨著 2020 年 CodeBERT[26] 提出, 智能化代碼領域也 掀起了利用大型語言模型在代碼語料進行預訓練, 并在下游相關任務進行微調的熱潮. 因此 2021 年和 2022 年 相關的論文大幅增加. 尤其是 2022 年, 論文數量達到了 19 篇, 相關話題也在學界和工業界之外引起了社會的 廣泛討論. 值得一提的是企業的論文(如 PANGUCoder 與 AlphaCode)常常直接在網上進行模型架構的公開, 為 產品做技術支撐. 雖然這些論文不會在期刊或會議上發表, 但是其背后的思想及解決問題的工程方法具有很強的借鑒意義, 不容忽視. Hu 等人曾在 2019 年對基于深度學習的程序生成與補全技術進行了系統完備的中文綜述[8] , 但是隨著后 續智能化代碼生成任務相關研究成果的急劇增加, 領域內亟需對于此任務進行回顧與總結, 方便后續研究者 在此領域繼續深耕. 本文將主要內容放在生成高級程序語言所編寫的代碼生成任務上, 主要討論基于深度學 習(即神經網絡架構)的相關模型. 根據代碼生成方法的主要思想和核心部件, 本文主要將代碼生成方法分為三 類, 基于代碼特征的代碼生成方法, 結合檢索的代碼生成方法和結合后處理的代碼生成方法, 后兩者可以視 作基于第一類方法進行改進的代碼生成模型, 而第一類又可以根據使用的范式不同分為基于監督學習的代碼 生成方法和基于預訓練的代碼生成方法. 表 1 展示了本文所收集論文分類的概況. 本文主要關注智能化代碼生成任務使用的模型以及算法的創新性, 算法的評估指標(及優劣), 使用數據集 以及適用編程語言(即適用場景)四方面內容. 同時對之前工作中涉及到的數據集及評價指標單獨進行了整理, 并對于不同數據集涉及的編程語言類型, 規模和相關論文使用的情況進行了統計. 除此之外, 本文還針對擁 有檢索增強模塊以及后處理環節相關的論文進行單獨討論. 本文第 1 章為引言, 第 2 章介紹綜述的整體研究框架. 第 3 - 5 章分別介紹基于代碼特征, 結合檢索以及 基于后處理的代碼生成方法的相關研究工作, 并進行討論. 第 6 章匯總常用的代碼生成數據集. 第 7 章介紹代 碼生成評估指標. 第 8 章對全文進行總結并對未來值得研究的領域進行展望.
3 基于代碼特征的代碼生成方法
直觀上, 代碼生成任務可以簡單抽象為機器翻譯的問題, 即將自然語言描述翻譯為代碼表示. 在機器翻 譯問題中最常用的模型是序列到序列模型(Squence2Sequence Model), 其主要思想就是從訓練數據中學習自然 語言特征, 并利用代碼特征進行生成. 在這個過程中需要用到大量的自然語言-代碼對(), 以便模 型能夠從訓練數據中學習到雙模態數據的對應關系, 因此在本文中被稱作基于監督學習的代碼生成方法. 自 2017 年 Transformer 模型[9] 的提出, 大型預訓練模型在自然語言處理領域不斷發展, 對計算機視覺甚至 通用人工智能領域都產生了巨大的影響. 同樣, 代碼生成任務也積極引入大型預訓練模型, 試圖在已有挖掘 代碼特征的基礎上結合預訓練范式進一步提升模型性能. 預訓練模型主要存在兩個特征, 第一個是在預訓練 階段其所需數據往往是無標注的數據, 通過還原掩藏掉的部分詞元或片段來進行訓練[10] , 這樣的訓練過程被 稱為自監督訓練. 第二個是模型的規模以及所需數據量都非常大, 這是因為許多工作[11,12] 都發現隨著模型規 模的增大, 數據量的增多和計算量的提升, 模型的性能就會不斷提高. 直到本文完成的時刻, 尚未有工作發現 預訓練模型性能的瓶頸. 與其他領域任務一樣, 基于預訓練的代碼生成方法顯著提高了代碼生成的下限, 并 逐漸成為最近幾年研究代碼生成問題的主要解決方案. 因此, 本文將基于預訓練模型進行代碼生成任務的代 碼生成方法單獨列出, 作為本章的第二部分.
**3.1 基于監督學習的代碼生成方法 **
**3.1.1 簡述 **
在基于監督學習的代碼生成方法中, 最常用的模型是序列到序列模型[13] , 其對應的是編碼器-解碼器范式, 主要包含編碼器(Encoder)和解碼器(Decoder)兩部分, 被廣泛應用于自然語言處理中的生成類任務, 同樣也被 代碼生成類任務廣泛使用. 對于代碼生成任務而言, 編碼器將輸入自然語言描述轉變為固定長度的向量表示, 解碼器則將編碼器所產生的向量表示轉變為可運行程序輸出. 下面提到的相關模型均基于這樣的模型框架進 行, 由于比起自然語言, 代碼自身具有規律化和模塊化的特點, 因此模型往往對解碼的相關操作以及應用信 息進行改進. 使用到的數據均為的形式, 目的是從數據對中挖掘出文本和代碼之間的對應關系, 從而完成生成任務. **3.1.2 已有工作的分析 **
高級程序設計語言的智能化代碼生成流程首先由 2016 年 Ling 等人[14] 的工作定義. Ling 等人希望在卡牌 游戲萬智牌(Magic the Gathering)和爐石傳說(Hearth Stone)中, 可以通過自然語言描述某一張卡牌的能力或效 果, 讓模型自動地去生成對應的卡牌定義代碼(高級程序語言, 即 Java 和 Python)來減少開發人員編寫卡牌效 果的時間成本. 作者利用序列到序列模型來實現自然語言到代碼片段之間的轉換. 在傳統注意力機制模型中, 輸入的注意力是由 RNN(Recurrent Neural Network, 循環神經網絡)中每一個單元的輸出經過計算加權得來. 作 者將注意力機制模型進行改進, 在計算輸入的注意力時考慮了每一個輸入域并將各個輸入域都用作計算注意 力值. 但是由于每一個輸入域的值域和輸入規模都不一樣, 因此作者利用線性投影層將不同輸入投影到同一 個維度和值域上. 為了統一自然語言和代碼之中的實體(如變量名等)信息, 作者利用選擇預測器(select predictor)來預測自然語言中需要保留的字段, 并且結合序列到序列模型來生成代碼的主體框架, 然后填入自 然語言中的保留字段來實現對應卡牌代碼的生成. 2017 年, Yin 等人[15] 在 Ling 的工作上[14] 做出了進一步改進, 作者利用語法模型顯式地對目標語言的語法 進行建模, 并且作為先驗知識融入模型訓練之中. 模型的編碼器和之前工作一樣利用雙向長短期記憶網絡 (Long Short-Term Memory, LSTM)對自然語言進行編碼, 但是在解碼器端, 模型的目標生成是抽象語法樹 (Abstract Syntax Tree, AST)的構建動作序列而非可執行代碼. 得到構建動作序列之后再生成樹, 并轉化為相應 的可執行代碼. 經過實驗, 模型在多個數據集中達到了最好的結果. Rabinovich 等人[16] 則是引入抽象語法網絡(Abstract Syntax Networks, ASNs)作為標準編碼器-解碼器范式的 擴展. 與常規的序列到序列模型相比, 抽象語法網絡的輸出為抽象語法樹, 核心在于改變解碼器, 使其具有與 輸出樹結構平行的動態確定的模塊化結構. 作者在文中使用了抽象語言描述框架(Abstract Syntax Description Language, ASDL)將代碼片段表示為具有類型化節點的樹. 模塊化解碼器本質為相互遞歸的模塊集合, 其包含 的四個模塊根據給定輸入分別以自頂向下的方式遞歸生成可執行代碼的抽象語法樹. 經過這樣流程所產生樹 的語法結構就反映了生成過程的調用圖, 即完成了代碼生成任務. 2018 年, 在上述模型的基礎上, Iyer 等人[17] 在編碼器端構造了類型矩陣(Type Matrix)來標識方法名和變量 名數據類型, 并將矩陣拼接到編碼器輸入之后, 來一起計算輸入的嵌入向量; 在解碼器端, 作者利用兩步注意 力計算每一個 token 的注意力以及每一種類型和變量名的注意力, 最終利用第二步的注意力結果作為最后生 成代碼的先驗. 除此之外, 由于當下模型生成的類中有可能包含沒有被學習過的域信息, 所以作者利用監督 復制機制來決定哪一個標識符是需要復制到代碼中生成. Iyer 等人[18] 在一年后對此方法進行改進, 提出了一種 迭代方法, 通過反復整理大型源代碼體的最常出現的深度 - 2 子樹, 從大型源代碼語料庫中提取代碼習語的語 法樹, 并訓練語義分析器在解碼過程中應用這些習語. 這里的代碼習語是指代碼片段中最常見的結構(比如嵌 套循環, 條件判斷等), 文中用語法解析樹中經常出現的子樹表示. 相比于利用語法樹解析代碼習語并得到一 顆很深的語法樹, 直接將代碼習語應用到解碼過程中可以提升訓練速度和性能. 作者將所有的代碼習語壓縮 到一顆深度為 2 的簡化語法樹之中, 使得模型可以更精準地輸出對應的代碼. 同樣是在 2018 年, Yin 等人[19] 則是在之前自己工作的基礎上[14] 提出了 TranX, 一個基于 transition 的代碼生成模型. TranX 的核心在于 transition 系統, 其能將輸入的自然語言描述根據一系列樹構造動作映射到抽象語 法樹上. 模型以抽象語法樹作為中間表示, 對目標表示的特定領域結構進行抽象. 最后再利用一個由神經網 絡參數化的概率模型對每一個假定的抽象語法樹進行評分, 從而得到目標代碼的抽象語法樹, 進而完成代碼 生成的目的. 一年后, 作者又在此基礎上加以重排序(Reranking)技術[20] 進行優化, 主要使用了重排序模型對 代碼生成結果進行重排序來提升模型性能. 重排序主要由兩個方面內容完成, 一方面是根據生成的代碼來重 構真實輸入文本的概率進行評估; 二是利用匹配模型直接評估代碼與輸入文本的相關程度. 重排序模型也同 樣分為兩個部分來完成上面兩方面的評估, 一是生成重構模塊(Generative Reconstruction Feature), 使用一個帶 注意力機制的序列到序列模型, 通過生成的代碼極大似然估計出輸入的文本; 二是利用判別匹配模塊 (Discriminative Matching Feature), 將生成代碼與輸入文本的 token 借助注意力機制的神經網絡計算出結果. 2019 年, Sun 等人[21] 發現了程序代碼比起自然語言描述包含有更多有意義的 token, 因此之前工作使用 RNN來捕獲長距離序列可能并不恰當. 作者在文中提出了基于語法的結構化卷積神經網絡(Convolution Neural Network, CNN), 根據抽象語法樹中的語法構造規則來完成代碼生成任務. 詳細來講, 文章主要針對解碼器部 分進行了部分抽象語法樹(即已生成的代碼所構成的抽象語法樹)信息的補充, 并為提取抽象語法樹中不同粒 度的信息分別設計了卷積層, 最終將多種信息聚合達到增強模型的效果. 同年, Wei 等人[22] 提出代碼生成任務和代碼總結任務兩者是對偶任務(dual task), 于是作者利用對偶任務 學習的方法來同時提高兩者的性能, 即代碼生成(Code Generation)模型和代碼摘要(Code Summarization)模型 被同步地訓練, 其思想也被運用到后續的研究當中[23] . 2020 年, Sun 等人[24] 使用 Transformer 架構來解決代碼元素之間存在的長依賴問題, 并對模型進行修改提 出 TreeGen, 使其能夠結合代碼的結構信息. 具體來說, TreeGen 共分為三個部分: NL Reader, AST Reader 和 Decoder. 其中, NL Reader 用于對自然語言描述進行編碼, AST Reader 用于對已生成的部分代碼的語法樹進行 編碼, Decoder 則是用于聚合帶有自然語言描述的生成代碼的信息并預測接下來的語法規則. 本文將基于 AST 的代碼生成任務視作通過語法規則來擴展非終結符節點, 直至所有的葉子結點均為終結符停止的過程.
**3.2 預訓練模型 **
**3.2.1 簡述 **
近些年來, 預訓練模型在自然語言處理領域取得了巨大的成功. 從預訓練模型架構來看, 可以分為編碼 器-解碼器架構(Encoder-Decoder), 僅編碼器架構(Encoder-only)和僅解碼器架構(Decoder-only). 雖然模型總體 架構并無形式創新, 但是其核心思想與之前的基于監督學習的模型不同. 預訓練模型從大規模無標注的數據 中通過自監督的訓練策略獲取知識, 且絕大多基于 Transformer 架構進行. 首先在大規模的無標注的數據集上 對模型進行預訓練, 然后利用預訓練得到的表征在下游的有標注數據集上進行微調. 實驗證明這種方式可以 極大地提高模型的泛化性, 在多項任務上取得了很好的結果. 類似地, 研究人員在代碼領域也提出了對應的 預訓練模型, 并且在代碼生成任務上取得了優異的效果.
**3.2.2 已有工作的分析 **
CuBERT[25] 是首個提出代碼預訓練模型的工作, CuBERT 繼承 BERT[10] 的架構, 利用代碼語料進行訓練, 但和 CodeBERT[26] 相比, 其影響力較小. CodeBERT 是第一個多編程語言的大型雙模態(指自然語言描述 NL 與 編程語言 PL)預訓練模型, 后續在各個下游任務上被廣泛使用, 影響力較大. CodeBERT 的預訓練的任務為掩 蔽語言建模(Mask Language Modeling, MLM)[10] , 通過隨機掩蓋模型中的某些詞并讓模型去預測被掩蓋的詞, 在預訓練階段提高模型的理解能力. 在實際場景當中, CodeBERT 被用來作為編碼器對輸入的文本或代碼進行 編碼, 然后應用到各式各樣的下游任務中, 例如代碼生成, 代碼摘要以及代碼檢索等. 由于 CodeBERT 僅僅包含文本的語義信息, 所以 Guo 等人[27] 在 2021 年提出將代碼的結構信息數據流納 入預訓練的過程之中并提出 GraphCodeBERT, 同樣采用 MLM 對模型進行預訓練. 但不僅僅掩蓋文本信息中 的一些單詞, 而是也會在代碼的數據流圖之中隨機掩蓋某些數據節點然后讓模型去預測. 實驗證明在預訓練 過程中顯式地去考慮代碼的結構信息可以極大地提高代碼對模型的理解能力, 并提高在下游任務當中的性能. 上述預訓練模型僅僅包含編碼器端, 這種架構的預訓練模型在理解任務上的效果較好, 但無法很好地完 成生成式任務. 為了更好地完成根據自然語言描述進行代碼生成(Text-to-Code)的任務, CodeXGLUE[2] 中提出 了 CodeGPT 模型, 這是一個由代碼語料進行訓練, 與 GPT-2[28] 完全同架構的 12 層 Transformer 解碼器模型. 與僅編碼器架構的模型相比, 僅解碼器架構能夠更好地完成生成代碼的任務. 除了單獨使用 Transformer 的編碼器或解碼器結構, 后續也有相關工作同時使用了 Transformer 的兩端. Clement 等人[29] 對于代碼和自然語言描述采用了同一個詞匯表, 基于 T5(text-to-text transfer transformer)[30] 提出了多模態的翻譯模型 PYMT5, 通過單個模型既可以同時學習到代碼/自然語言生成并且理解二者之間的 關系. PYMT5 使用 T5 利用相似子序列掩藏目標(similar span-masking objective)進行預訓練, 其本質是一個基 于編碼器-解碼器架構的 Transformer 模型. 子序列掩藏目標是指隨機采樣一些連續的 3 個 token 的子序列使用 特殊標記(例如[MASK 0])對其進行掩藏, 然后訓練序列到序列模型來補全這些掩藏的 token, 訓練目標包含了 被隱藏 token 及其序號. 作者將 PYMT5 與在同樣數據集上進行預訓練的 GPT-2 相比取得了很大提升. Ahmad 等人[31] 提出的 PLBART 也是一個編碼器-解碼器模型, 在預訓練過程當中, 與 CodeBERT 做法一 樣, 作者隨機掩蓋某些單詞, 但是 PLBART 輸出的是一個完整的文本或單詞, 其中包括了被掩蓋的單詞. 通過 這種訓練方式, 作為一個序列到序列模型的 PLBART 就可以在預訓練階段在編碼器和解碼器端同時學習到很 好的初始化點, 讓預訓練好的模型可以更快更好地應用到下游任務當中. PLBART 提高了模型在生成任務上的 能力, 也提高了模型在代碼生成任務上的表現. 更進一步地, Wang 等人[32] 在 2021 年提出了 CodeT5, CodeT5 在預訓練階段充分考慮到了代碼的特點, 作 者從代碼片段中抽取標識符, 并重點讓模型去預測這些在代碼中具有實際意義的單詞, 實驗證明 CodeT5 在包 括生成任務在內的多項軟件工程領域任務均取得了更好的效果. 同一時間, Phan 等人提出了 CoTexT[33] , 同樣 使用了編碼器-解碼器架構, 模型初始化也使用了 T5. 唯一的區別在于為了縮小預訓練和調優之間的差異, CodeT5 利用了雙模態數據去訓練模型完成一個雙向生成的轉換. 具體來說, CodeT5 將 NL→PL 的生成與 PL→NL 的生成視作對偶任務(dual task), 并同時對模型進行優化. 根據兩篇文章中實驗結果的對比, CodeT5 的效果要好于 CoTexT, 但是如果只是在 T5 的基礎上利用多任務學習來提升代碼生成任務的性能, CodeT5 和 CoTexT 效果相當. 簡單來說, CodeT5 和 CoTexT 兩個模型在完成代碼生成任務的具體實現上最大 的差別在于是否使用代碼生成與代碼摘要作為對偶任務進行訓練. 這樣的實驗結果側面證明了將代碼生成和 代碼摘要任務作為對偶任務能夠提升模型的生成能力. Nijkamp 等人[34] 開源了大型預訓練模型 CodeGEN, 模型參數高達 16.1B, 依次在 THEPILE, BIGQUERY, BIGPYTHON 三個數據集上進行訓練, 數據量超過 800G. 與之前直接將自然語言輸入給預訓練模型不同, 作 者提出利用大型預訓練模型進行對話式程序生成的方法: 作者將編寫規范和程序的過程描述為用戶和系統之 間的多輪對話. 用戶分多次為系統提供自然語言, 同時以合成子程序的形式接收來自系統的響應, 這樣用戶 與系統一起在多輪對話后完成代碼生成. 分步提供自然語言規范的方式可以將較長且復雜的意圖分解為多個 簡單的意圖, 減少每一輪對話中模型的搜索空間. 除此之外, 作者還開發了一個多輪編程基準來衡量模型的 多輪程序綜合能力, 實驗結果表明以多輪方式提供給 CodeGEN 的相同意圖與單輪提供的相比顯著改進了代碼 生成的性能, 驗證了對話式代碼生成范式的有效性. 之前的代碼生成模型都是從左到右生成代碼序列, 然而在實際開發過程中, 代碼很少直接以從左到右的 方式編寫, 而是完成部分代碼編寫后反復編輯和完善. InCoder[35] 打破了先前從左至右的代碼生成預訓練模型 范式. 這是一種統一的生成模型, 可以執行程序合成(通過從左到右生成)以及編輯(通過掩蔽和填充). InCoder 的模型架構繼承自 GPT 架構, 不同點在于其對訓練語料進行順序打亂預測. 該方法隨機選擇一個跨度并將其 替換為掩碼 token, 并將跨度放置在序列之后作為目標. 利用這樣處理后的語料進行訓練, 使得模型具有填充 雙向上下文的能力. 這樣 InCoder 不僅可以從左到右預測 tokens, 而且可以根據兩端的 tokens 預測中間的 tokens, 實現了填充式的代碼生成技術. 這是第一個能夠填充任意代碼區域的大型生成代碼模型, 這種以雙向 上下文為條件的能力大大提高了代碼生成任務的性能.
越來越多基于 Transformer 體系結構的大型預訓練模型被提出并在代碼生成任務上取得最優結果. 因此, 一些企業機構著手于將大型預訓練代碼生成模型落地, 試圖為廣大開發人員提供便利, 并在此過程中為業界 提供了大量優質的代碼生成模型. 2021 年年末, OpenAI 最早發布的 CodeX[36] , 是基于 GPT-3 在公開數據集上預訓練得到的大規模模型, 基 于 CodeX 的 Copolit[37] 插件也已成為代碼生成輔助工具的標桿, 在 CodeX 論文中提出的 HumanEval 數據集也 成為后續代碼生成的常用基準數據集之一. 2022 年年初, DeepMind 公司研發的展現出強大編程能力的 AlphaCode[38] 在新聞上號稱打敗了一半的程序 員, 本質上也是基于公開代碼倉庫進行預訓練的大規模模型. 與 CodeX 不同, AlphaCode 更專注于競賽題目的 編寫, 因此選用了完整的 Transformer 架構的模型, 便于更好地理解較長的由自然語言描述的題目, 同時在調 優時也選擇了 CodeForces[39] 的競賽題目. 國內, 華為推出的 PanGu-Coder[40] 是基于 PanGu-alpha 模型在公開代碼數據集上進行預訓練. 之后基于此開發的 CodeArts 插件也已在實際開發場景中擁有不錯的表現, 對標基于 CodeX 的 Copoilt. 2022 年, aiXcoder[41] 團隊陸續推出了用于 Java 代碼補全的 13 億參數量的 aiXcoder L 和 130 億參數量的 aiXcoder XL 服務. aiXcoder L 基于 GPT-2, 在開源 Java 代碼上訓練得到. aiXcoder XL 基于自研的 masked language model 框架, 能做到單行、多行以及函數級代碼補全和生成. 最近, 清華大學聯合鵬城實驗室共同推出的大規模代碼生成預訓練模型 CodeGeeX[42] , 采用了標準的 Transformer 架構, 在公開代碼倉庫超過 20 多種編程語言上進行預訓練, 能夠支持較其他開源基線更高精度的 代碼生成性能, 能夠支持代碼片段在不同編程語言間進行自動翻譯轉換. 如表 2 所示, 匯總了本節涉及到的代碼生成預訓練模型相關內容. 除以上專門用于進行代碼生成任務的相關模型, ChatGPT[43] 雖作為問答模型, 但也被證實具有代碼編寫 的能力, 自 2022 年 12 月發布以來就引起了學術界和工業界的廣泛討論. ChatGPT 能夠適應不同的問題情境給 出接近甚至超過人類的回答, 并具有一定推理和代碼編寫能力. ChatGPT 與 InstructGPT[44] 使用了相似的訓練 方式. 主要流程分為三個步驟, 第一步是搜集帶標記的數據使用監督學習策略對已有的 GPT 模型進行調優; 第二步是搜集來自人類反饋的比較數據來訓練一個分類器(稱為 reward model)用于比較 GPT 模型生成若干答 案的好壞; 第三步是借助第二步訓練好的 reward model, 利用強化學習策略對模型進行進一步優化. 原有的提 示學習范式是通過調整模型的輸入使得下游任務更好地適配模型, 而通過 InstructGPT 的訓練過程及 ChatGPT 的出色表現可以發現, 模型的性能尚未被充分挖掘, 且可以通過人為標注反饋的方式, 讓模型更好地去理解 用戶的意圖, 達到讓模型適配用戶的目的.
**3.3 小結 **
本章主要對基于代碼特征的代碼生成方法相關工作進行了敘述與梳理, 并按照監督學習與預訓練-調優 范式分為兩節進行概述. 在基于監督學習的代碼生成方法中, 主要依托于編碼器-解碼器架構進行自然語言描述與代碼特征的挖 掘, 試圖從訓練數據中學習到自然語言與代碼之間的對應關系. 除此之外, 一些工作針對解碼器生成代碼的 部分進行了改動, 試圖將更多代碼相關的規則性信息融入其中, 取得了比僅使用 token 進行代碼生成更好地性 能. 在基于預訓練的代碼生成方法中, 主要對引入代碼生成任務的預訓練模型進行了簡單介紹. 這一小節的 方法的骨干模型(backbone)均來自于自然語言處理領域的大型語言預訓練模型. 將其應用于代碼生成任務的 一個大致流程為: 收集大量無標注的代碼語料, 其中包含代碼注釋, 利用試圖還原掩藏掉的部分代碼片段對 模型進行預訓練, 最后再使用對數據對預訓練模型進行調優. 最近, ChatGPT 所具備強大的語言理解能力和一定程度的推理能力引起學術界和工業界的廣泛關注, 其 背后通過反饋調整使模型來匹配用戶的思想, 為進一步挖掘大規模語言預訓練模型提供了新的解決思路.
**4 結合檢索的代碼生成模型 **
**4.1 簡述 **
對于第三章中的代碼生成模型而言, 其代碼生成過程的解空間過大, 這種現象在預訓練模型中的表現愈 發明顯[36] . 互聯網上存在的代碼片段數量非常龐大, 對于用戶的絕大部分要求而言, 其他開發人員可能存在 過類似的需求, 并已經與他人協作或自行完成相關代碼的設計與編寫. 因此, 檢索出類似已存在的代碼模板 這個任務本身就是有利于用戶更深刻理解任務的. 同時, 基于前人相關任務的代碼模板進行的改動也比直接 生成的代碼更具有實用價值. 編寫代碼是一個開放域(open-domain)的問題, 即在編寫代碼過程中不可避免需要參考前人工作與他人的 編程思路, 而在第二章中介紹的大部分工作則是直接將其視作封閉性質的任務(closed-book)[45] , 即只是根據訓 練數據的模式來完成代碼生成的任務. 從這個角度來看, 引入外部知識庫對原有訓練的模型進行補充是有意義有價值的. 事實上, 利用自然語言描述的編碼作為編碼過程中的先驗可能是不足的. 為了讓已有代碼生成 模型與外部代碼知識數據庫相結合, 有相關工作利用檢索操作對代碼生成過程進行增強. 通過檢索相似代碼 幫助解碼器進行代碼生成, 以減小解碼空間, 最終提升生成代碼的質量.
本章主要對結合檢索的代碼生成方法相關工作進行了簡單介紹.本章中提到的方法并沒有設計新的模型 架構, 而是通過結合檢索的方式生成代碼片段. 如圖 3 所示,結合檢索的代碼生成方法大致可以分為兩種形式, 第一種是圖 3 的上半部分(即圖中①部分): 從訓練數據或是外部知識庫檢索出與目標代碼相關或相似的代碼 片段, 將其作為模板進行編輯并返回結果; 第二種是圖 3 的下半部分(即圖中②部分): 將檢索得來的借過作為 原有模型的輸入, 試圖通過為自然語言描述補充代碼信息的方式提升模型的性能. 結合檢索的代碼生成方法 能夠大大降低生成模型解空間的規模, 同時也能在一定程度上利用外部知識庫使模型跳脫出自己訓練的固有 規則, 對于代碼生成任務是有幫助的. 在檢索的過程中, 往往將自然語言描述作為查詢的鍵(key), 并經模型處理后借助向量進行表示, 在訓練 數據或外部數據庫查找與查詢鍵(key)相關的代碼片段進行返回. 在這個過程中, 模型向量表示的能力決定了 檢索結果的質量. 因此, 嘗試多種自然語言表示形式與不同的模型表征方法可能是檢索增強的一條未來之路.
**5 基于后處理的代碼生成方法 **
**5.1 簡述 **
大規模預訓練語言模型往往將代碼視作普通的文本, 因此難以理解代碼更深層次的語法或語義[55] , 也就 不能夠產生具有質量和正確性保證的模型. 針對大規模預訓練語言模型, 一個重要的改進方向是通過測試樣 例對模型生成過程及生成結果進行測試并試圖加以改進[56, 57, 58] , 也有工作直接在模型的訓練過程中利用測試 樣例對其進行強化, 提升模型性能[60] . 通過測試樣例對生成的代碼進行改進可以視作機器執行過程的后處理, 而開發人員對生成代碼進行評估 可以視作人為測試代碼的過程, 因此有工作利用開發人員評估意見對已有代碼生成模型進行改進, 這可以被 視作人工測評過程的后處理[52] . 本章主要對結合后處理的模型生成方法進行了簡單介紹. 程序設計的目的就是解決實際問題, 測試樣例 與開發環境在一定程度上能夠作為實際場景中問題的采樣. 因此, 基于測試樣例與代碼實際運行環境對模型 進行改進一定程度上模擬了實際開發過程中所遇到的情形. 而對于遇到的問題或是錯誤進行修改就被稱為后 處理. 這種方式的處理流程類似于程序員面向 Bug 編程, 直觀而有效. 目前對于測試樣例的生成主要分為兩類, 人工編寫及模型自動生成. 對于生成測試樣例的質量仍未有一 個清晰的度量. 對于其他部署環境的后處理少有工作涉及.
6 代碼生成數據集
代碼生成任務用于訓練, 驗證和測試的數據集通常包含自然語言描述和對應的代碼片段. 一個代碼生成 數據集一般僅包含一種高級編程語言. 目前的代碼生成數據集有 Python 語言的 HearthStone[13] 和 CoNaLa[50] 、 Java 語言的 CONCODE[17] 、 SQL 語句的 Spider[59] 和 Lyra[61] 數據集, 以及基于 Django Web 框架的 Django[62] 數據集等. 目前有如下常見數據集用于訓練, 驗證和測試代碼生成任務: (1) HearthStone[13] : 2016 年首次使用該數據集來解決代碼生成問題. 該數據集是為紙牌游戲 HearthStone 實現的 Python 類集合, 包含 665 張不同的 HearthStone 游戲卡片, 每張卡片帶有一組字段和對應的 Python 代碼片段. 其中字段是卡牌的半結構化描述, 包含卡名, 成本, 攻擊, 描述和其他屬性.(2) Magic the Gathering[13] : 該數據集是為紙牌游戲 Magic the Gathering 實現的 Java 類集合, 包含 13297 張不同的游戲卡片. 和 HearthStone 數據集類似, 每張卡片帶有一組字段和對應的 Java 代碼片段. (3) Django[62] : Django 數據集是 Django Web 框架中的代碼的集合, 該數據集由 Oda 等人提供. 為了制作 該數據集, Oda 等人聘請了一名工程師撰寫代碼, 最終獲得了 18805 對 Python 語句和對應的英語偽代 碼. 該數據集最初創立是為了用于源代碼生成偽代碼的任務, 后續被用于代碼生成任務中. (4) CoNaLa[50] : 為了得到與自然語言具有細粒度對齊的代碼, Yin 等人提出一種新方法. 該方法可以在 Stack Overflow 中挖掘高質量對齊數據. 實驗表明該方法大大擴展了過往挖掘方法的覆蓋范圍和準確 性. Yin 等人使用該方法創建了 CoNaLa 數據集, 其中包含 2879 個手動注釋的問題及其在 Stack Overflow 上的 Python 解決方案示例, 這些示例涵蓋了由具有不同意圖的程序員發出的真實自然語言 查詢. (5) CONCODE[17] : 在 GitHub 上收集了大約 33000 個 Java 項目, 根據存儲庫劃分 10 萬個樣本用于訓練, 4000 個樣本用于驗證和測試. 基于存儲庫的劃分使測試集中的域與訓練集中的域保持分離, 因此提 供了接近零樣本的條件. 每個示例是由自然語言描述, 代碼環境和代碼段組成的元組. 其中代碼環境 為類中的其他成員變量和成員函數. (6) Spider[59] : 該數據集由 11 名大學生注釋完成, 是一個大規模的自然語言到 SQL 的數據集, 它由 10181 個問題和 5693 個獨特的復雜 SQL 查詢組成. (7) Lyra[61] : Liang 等人認為, 在實際開發中, SQL 語句通常以字符串的形式嵌入 Python 中. 為了貼合實 際應用場景, Liang 等人提出了 Turducken-Style 代碼生成:為給定的自然語言注釋生成具有嵌入式語 言的代碼, 同時發布了 Lyra 數據集. 該數據集內含自然語言注釋及其對應的 Python 程序, 且該 Python 程序內含嵌入式 SQL 語句. (8) XLCoST[63] : Zhu 等人從 GeeksForGeeks 收集了一個包含 8 種語言(C++, Java, Python, C#, JavaScript, PHP, C 和英語)的數據集 XLCoST (Cross-Lingual Code SnippeT dataset), 能夠支持 10 種跨語言任務的 評估. 其中, 比起之前的代碼生成數據集主要針對 Python 和 Java, XLCoST 能夠適應更多其他語言代 碼生成任務(例如 C 和 C++)的評估. (9) MCoNaLa[64] : 為了根據英語以外的自然語言生成代碼, Wang 等人提出了一個多語言數據集 McoNaLa, 用西班牙語, 日語和俄語三種語言標注了 896 個對.
**7 代碼生成評估 **
為了使用統一的標準對生成代碼的質量進行快速評估, 研究人員使用多種指標進行評估, 本章節主要使 用以下自動化指標進行測試. 7.1 Exact Match accuracy 代碼生成任務中常使用精確匹配(Exact Match)作為模型評價指標, 該精確度指標表示模型生成代碼與參 考代碼之間完全匹配的百分比. 7.2 BLEU BLEU[70] 是用來評價機器翻譯質量的指標, 在代碼生成技術中可以將生成的代碼看做看作是翻譯產生的 語句 7.3 CodeBLEU Ren 等人[71] 認為, 用于評價自然語言的 BLEU 指標忽略了代碼的語法和語義特征, 并不適合評估代碼. 為 了彌補這一缺陷, 引入了一個新的評價指標 CodeBLEU. 它吸收了 n-gram 匹配中 BLEU 的優點, 并進一步通 過抽象語法樹( AST )注入代碼語法, 通過數據流注入代碼語義. 7.4 pass@k BLEU 指標使用的是模糊匹配, 難以衡量生成代碼的可執行性. 針對這一問題, 2019 年 Kulal[72] 等人提出 pass@k 指標.
**8 總結與展望 **
**8.1 總結 **
本文對高級程序代碼生成任務目前國內外最新進展進行了比較詳盡的闡述與總結. 我們將當前的智能化 代碼生成技術分為了三類, 第一類是基于代碼特征的代碼生成方法, 第二類是結合檢索的代碼生成方法, 第 三類是結合后處理的代碼生成方法. 基于代碼特征的代碼生成方法又可以根據模型訓練的范式分為基于監督學習的代碼生成方法和基于預訓 練的代碼生成方法. 前者使用了傳統的編碼器-解碼器架構以及 RNN 與 CNN 模型, 并通過加入結構化信息, 對解碼器的改進等操作, 在相關數據集上取得了不錯的效果. 后者則是從自然語言處理領域的預訓練大規模 模型得到靈感, 使用軟件工程領域相關代碼數據對大規模模型進行預訓練與調優, 從而大幅提升模型的性能. 結合檢索的代碼生成方法和結合后處理的代碼生成方法可視作對基于第一類方法部分模塊的改進, 試圖 提升代碼生成模型的性能. 對于結合檢索的模型而言, 檢索的方式常常用于對已有的代碼生成模型進行增強, 可視作即插即用的組 件式模塊. 一方面, 檢索到的內容更多作為輸入數據的增強幫助原有模型更好地完成生成任務[44, 51] ; 另一方 面, 檢索能夠作為橋梁以便更加直接利用外部的文本和源碼信息作為原有模型的補充[49] . 結合后處理的模型通過實際運行過程借助測試樣例和開發環境對生成的代碼進行處理, 以提升其實際運 行表現, 一個趨勢是測試樣例的產生由人為編寫[56] 轉變為模型產生[58] . 不同的模型對于不同的測試樣例的用 法不盡相同, 但是核心思想和真實場景下編程相似, 即通過一些可能的錯誤來使得代碼本身更加健壯. 除此之外, 本文還概括介紹了智能化代碼生成任務中常用的數據集與評價指標, 以方便該領域后續研究 能夠進行合理的實驗設計. **8.2 展望 **
雖然目前的代碼生成方法在相關的數據集上已經取得了較好的結果, 但是相關技術仍然擁有許多挑戰值 得關注. **(1) 自然語言描述與代碼的對齊問題 **
自然語言與代碼在描述信息的角度與方法上有著巨大差異, 傳統上直接利用 token 訓練得到的序列到序 列模型很難去理解并提取自然語言中的功能表述并翻譯成對應的代碼. 基于此, 將代碼表示為樹來有效引入 代碼的結構信息成為提升模型性能的重要舉措, 但這并不是一項容易的任務, 因為語法樹中的節點數量通常 大大超過其對應自然語言描述的長度, 這樣的不對稱性會增加代碼生成任務的難度. 因此, 如何將自然語言 描述與代碼進行對齊對于傳統的序列到序列模型是一個極大的挑戰. 另一方面, 模型對于輸入自然語言的理解對于代碼生成任務的效果也格外重要. 自然語言描述多種多樣, 對于同樣的意思可能有多種表達的方式. 對輸入的多種自然語言進行重構, 為生成的代碼提供更加清晰明了 的需求, 可能是一項解決方法. 除此之外, 之前有工作[22, 23, 51, 52] 將代碼生成與代碼摘要兩個任務作為對偶任務對同一模型進行訓練取得 了不錯的效果, 尤其是 CodeT5 添加對偶任務后與 CoTexT 相比在代碼生成任務上的性能有顯著提升. 因此如 何將代碼生成與代碼摘要生成兩個任務更好的結合在一起仍需要被探索.
(2) 大規模預訓練模型的語法正確性問題
基于 AST 和語法的模型能夠產生語法正確的代碼, 但是一定程度上忽略了語義的正確性[27] ; 預訓練模型 大多能保證語義的信息, 但是不能保證語法的正確性[55] . 由于自然語言和代碼之間本身就存在的語義鴻溝, 直接基于語言模型的代碼生成模型在生成過程沒有足 夠的規則約束, 因此生成目標代碼時具有非常龐大的解空間. 這樣的問題在預訓練模型上表現尤為明顯, 雖 然在大量代碼庫上進行預訓練所得的大規模模型可以生成語義相關的代碼片段, 但是很容易導致生成代碼中 有語法錯誤以及生成代碼的可讀性較低. 如何在解空間中找到最優解或較優解成為了難題, 這導致輸出結果 中容易出現具有語法錯誤的, 無法通過編譯的代碼. 如何提取并學習源代碼中有效的結構信息, 填補自然語 言與代碼之間的差異, 從而對解碼過程進行約束仍是一個待探究的問題. 現有的預訓練模型大多都是繼承于自然語言處理領域的相關技術, 代碼領域相關研究一直沿著自然語言 處理領域的道路前進. 因此, 自然語言處理中的語法正確性問題在代碼生成任務中也普遍存在. 但有研究表 明, 自然語言處理中的標記化和嵌入方法可能在代碼領域中不是最優的, 脫離自然語言處理思維模式可能是 一種優化的思路[73] .
**(3) 大規模預訓練模型能力的挖掘 **
雖然近年來應用于代碼生成任務的大規模語言模型層出不窮, 但是已有許多論文[11, 12] 表明隨著訓練的繼 續進行, 模型的性能還能夠提高, 且一些預訓練模型還根據模型的大小將模型分為 small, base 和 large 來適應 不同的硬件條件下模型的應用. Wang 等人[74] 將自然語言處理中的提示學習(prompt learning)應用到代碼相關的 分類任務上, 取得的性能的提升. 2022 年初隨著思維鏈(chain-of-thought)[75] 的提出, 大規模預訓練模型的知識 被進一步挖掘. 鑒于 ChatGPT 強大的性能, 以及人類程序員在代碼編寫過程中的步驟化和模塊化的考量, 將 提示學習引入代碼生成任務, 更深一步挖掘已有大規模預訓練模型的性能在未來可能會成為一個重要的研究 方向. 除此之外, 還有相關研究[76, 77] 發現了將 Stack Overflow 中的問題和代碼答案作為雙模態數據用于模型調 優有助于模型性能的提升以及錯誤代碼生成的抑制, 證明了這樣的外部數據能夠成為挖掘大規模模型性能的 有效工具.
(4) 模型適應多種不同編程語言的能力 目前雖然能夠完成代碼生成任務的模型有很多, 但是對于高級程序語言而言, 大多圍繞 Java 和 Python 展 開. 這一方面是由于數據集的原因, 作為當今最為主流的兩大語言, Java 和 Python 在數據量和數據質量上都擁有得天獨厚的優勢. 另一方面是結構的問題, Java 和 Python 都是面向對象的編程語言, 與其它編程語言(比如 C 語言)相比, 因為完備的庫與 API 接口為相關功能的實現提供支撐, 所以他們可以完成具有更為簡潔直觀的 編寫方式, 在一定程度上與自然語言相匹配. 最近, 有一些工作創建了多種語言的代碼庫[38, 59, 63] , 如何合理利 用這樣的代碼庫讓模型能夠適應多種不同編程語言, 或許是提升模型性能的一種方式.
(5) 大型預訓練模型壓縮的問題 目前對于代碼生成類工具的普遍解決方案是將本地的代碼和軟件開發人員的相關需求傳送給服務器端, 由服務器端完成計算并將結果回傳給本地. 由于服務器端的模型需要實時的代碼和需求說明才能夠進行計算 并反饋結果, 因此代碼泄露成為不可忽視的一個隱藏問題. 為解決代碼泄漏的問題, 如何將高性能模型移植 到本地或其他受限資源的平臺上逐漸成為一項巨大的挑戰. 此外, 代碼生成任務的訓練和推理過程都對服務器端產生了巨大的壓力, 伴隨著模型的不斷增大, 如果 將訓練及推理代價與實際的計算資源進行權衡, 使得模型性能維持相對較高水平的情況下節省資源, 縮短代 碼生成時間, 為用戶帶來更好的體驗成為了第二項重大的挑戰. 以上兩項挑戰的解決可以歸結于大型模型的壓縮, 一方面可以將模型的規模變小, 使其能夠部署在一些 較低資源的平臺上, 節省計算資源; 另一方面可以提升模型的推理速度, 帶來代碼生成工具的體驗的提升.
**(6) 人工評估代碼生成方法性能 **
代碼生成技術的意義在于輔助軟件開發人員在實際開發過程中進行編碼, 要想評估代碼生成技術的實際 價值, 就需要對其進行人工評估, 人為地評判該技術在工程實踐中所發揮的作用. 但目前人工評估存在著評 判標準模糊, 評價指標不統一, 難以大規模快速評估的問題, 同時考慮到人工評估的代價巨大, 因此目前僅有 少量研究進行人工評估[78] , 但如果想要現在的優秀模型能夠落地成為普惠廣大用戶的代碼生成工具, 人工評 估方法的確定, 實際測試和廣泛討論必不可少.
論文概述:對話推薦系統(CRS)旨在通過交互式的對話向用戶推薦高質量的商品,它通常包括推薦和對話兩個模塊。現有工作在兩個模塊之間共享知識和表示,或者設計策略對齊兩者的語義。然而,這些方法仍然依賴于不同的模型來分別實現這兩個模塊,使得他們難以無縫集成。本文基于知識增強的提示學習統一建模對話和推薦這兩個模塊,分別設計了特定的提示來激發預訓練模型完成不同任務。具體而言,我們在提示中加入了語義融合的單詞或實體表示,以提供相關的上下文和背景知識。此外,我們還將生成的回復模板作為推薦任務提示的一部分,從而進一步強化了兩個任務之間的信息交互。在兩個公開數據集上的實驗驗證了本文方法的有效性。
對話推薦算法研究綜述
A Survey of Conversational Recommendation Algorithms
作者:趙夢媛,黃曉雯*,桑基韜,于劍 單位:
北京交通大學計算機與信息技術學院 北京交通大學人工智能研究院 北京交通大學交通數據分析與挖掘北京市重點實驗室 郵箱:{f19120453, xwhuang, jtsang, jianyu}@bjtu.edu.cn **論文:** *通訊作者
01
簡介
推薦系統是一種通過理解用戶的興趣和偏好幫助用戶過濾大量無效信息并獲取感興趣的信息或者物品的信息過濾系統。目前主流的推薦系統主要基于離線的、歷史的用戶數據,不斷訓練和優化線下模型,繼而為在線的用戶推薦物品,這類訓練方式主要存在三個問題:基于稀疏且具有噪聲的歷史數據估計用戶偏好的不可靠估計、對影響用戶行為的在線上下文環境因素的忽略和默認用戶清楚自身偏好的不可靠假設。由于對話系統關注于用戶的實時反饋數據,獲取用戶當前交互的意圖,因此“對話推薦”通過結合對話形式與推薦任務成為解決傳統推薦問題的有效手段。對話推薦將對話系統實時交互的數據獲取方式應用到推薦系統中,采用了與傳統推薦系統不同的推薦思路,通過利用在線交互信息,引導和捕捉用戶當前的偏好興趣,并及時進行反饋和更新。在過去的幾年里,越來越多的研究者開始關注對話推薦系統,這一方面歸功于自然語言處理領域中語音助手以及聊天機器人技術的廣泛使用,另一方面受益于強化學習、知識圖譜等技術在推薦策略中的成熟應用。本文將對話推薦系統的整體框架進行梳理,將對話推薦算法研究所使用的數據集進行分類,同時對評價對話推薦效果的相關指標進行討論,重點關注于對話推薦系統中的后臺對話策略與推薦邏輯,對近年來的對話推薦算法進行綜述,最后對對話推薦領域的未來發展方向進行展望。
2.1
什么是對話推薦系統?
對話推薦系統的交互推薦方式就像是將傳統靜態推薦系統與對話系統結合,在與用戶的交互中通過詢問用戶相關問題動態地更新用戶的興趣偏好。因此對話推薦系統可以有如下兩種定義。
**定義一:**對話推薦系統是以推薦為目標導向的對話系統。系統通過與用戶的在線對話達到捕捉用戶興趣從而推薦物品的目的。
**定義二:**對話推薦系統是具有多輪交互形式的推薦系統。交互的形式狹義上是自然語言形式或語音形式,廣義上還包括推薦系統中用戶的任何行為數據的形式(如:點擊、瀏覽)
2.2
傳統推薦系統vs對話推薦系統
傳統的推薦系統中,用戶在尋找具有特定屬性的物品時,可以通過主動搜索來進行,例如,用戶可以搜索“春季的短款夾克”,其中關鍵短語“春季”和“短款”是“夾克”的屬性。在這個場景中,用戶自己構造查詢,推薦效果不僅依賴于搜索引擎,更依賴用戶在構造查詢方面的專業知識。推薦系統需要用戶根據自己的先驗知識輸入可能的屬性選項限制,從而更準確地定位到合適的推薦候選項集合,推薦系統才能在此基礎上幫助用戶找到目標物品。總之,這種推薦系統中的主動搜索方式需要用戶熟悉自己想要的每一件物品,然而在實際操作中并非如此。當用戶并不熟悉自己想要物品的屬性時,推薦系統就被期望能夠主動向用戶介紹他們可能喜歡的潛在物品,然而,傳統的推薦系統無法做到這一點,它只能使用靜態的歷史記錄作為輸入,這也就導致了傳統單向、靜態的推薦系統中存在三個主要問題:基于稀疏且具有噪聲的歷史數據估計用戶偏好的不可靠估計、對影響用戶行為的在線上下文環境因素的忽略和默認用戶清楚自身偏好的不可靠假設。
2.2.1 **共性:**面向推薦任務,都需要理解用戶興趣偏好,為用戶篩選信息 **區別:**使用數據不同: (1)傳統推薦系統主要依賴用戶的歷史交互數據。 (2)對話推薦系統主要依賴用戶的在線反饋數據。 推薦模型更新方式不同: (1)傳統推薦系統是靜態的,其從用戶的歷史交互信息中來估計用戶偏好,上線后不做更新,更新需定期下線。 (2)對話推薦系統是動態的,其與用戶進行交互,在模型有不確定的地方,可以主動咨詢用戶,實時更新推薦模型參數。
03
對話推薦系統特點:多輪交互、目標導向
04
對話推薦系統的流程
一個標準的CRS框架包含了三大功能模塊:用戶意圖理解模塊、對話策略模塊和推薦模塊。從功能模塊來看,CRS與DS非常相似,這進一步說明CRS的核心思路來源就是DS。
**用戶意圖理解模塊:**用戶與系統交互的“翻譯器”,將用戶的輸入(文本、圖像、評分、瀏覽等交互行為)處理成會話的狀態表示,作為對話策略模塊的輸入,如果是基于自然語言交互的對話推薦,該模塊還需要生成流暢的自然語言反饋。
**對話策略模塊:**是核心模塊,是用戶意圖模塊和推薦模塊的連接橋梁,該模塊處理和記錄用戶偏好,并根據用戶當前的交互歷史數據,決定系統當前輪次反饋給用戶的交互內容,引導用戶決策,最終實現符合用戶偏好的一次成功推薦。
**推薦模塊:**建模用戶與物品的關系,在被對話策略模塊調用時輸出當前輪次下契合該用戶偏好的推薦物品列表。
05
對話推薦系統的用戶意圖理解模塊
用戶與系統交互的“翻譯器”,與用戶直接進行信息交換的模塊,處理用戶的輸入數據(文本、圖像、評分、瀏覽等交互行為)處理成會話的狀態表示,作為對話策略模塊的輸入。
(1)面向自然語言、語音和圖像的用戶意圖:理解處理自然語言、語音和圖像,研究如何像人類一樣溝通交互。
(2)面向用戶行為數據的用戶意圖理解:處理數據為用戶偏好集合,接受用戶二值反饋,輸出系統策略行為(詢問或推薦)
06
對話推薦系統的對話策略模塊
是對話推薦系統的核心模塊,該模塊處理和記錄用戶偏好,并根據用戶當前的交互歷史數據,決定系統當前輪次反饋給用戶的交互內容,引導用戶決策,最終實現符合用戶偏好的一次成功推薦。
對話推薦的交互性使得用戶有機會及時表達自己的意圖,以獲得更好的個性化推薦服務,并且由于具有交互性,對話推薦還可以主動探索用戶看不見的物品空間,從而引導用戶發掘自己的偏好。然而對話推薦的探索過程是有代價的,與利用已經獲得的偏好推薦高置信度的物品相比,暴露不相關的物品空間的信息可能會傷害用戶的偏好,失去做出準確推薦的機會。此外由于用戶與系統互動的時間和精力有限,一次失敗的探索將浪費用戶的時間與精力,可能造成用戶的流失。因此追求探索和收益的平衡(exploration and exploitation,E&E)是對話推薦研究中的一個關鍵問題,對話策略模塊主要解決的問題就是權衡探索與收益,它是CRS核心模塊。
這個模塊的研究工作根據目前研究者使用的核心策略技術,主要分成以下四大類:
(1)基于人工規則
基于人工規則的的方法非常簡單,根據人的先驗領域知識,設置對話規則,例如,設置限制,規定固定輪次交互后都要提供一個推薦物品,或者根據置信度推薦前k個物品。
(2)基于神經網絡
利用神經網絡模型輸出的動作概率分布決定對話策略,例如,通過GRU將當前對話的上下文編碼成隱狀態向量輸入,softmax層輸出概率分布,根據概率分布決定是否推薦以及推薦什么物品。
(3)基于****強化學習
將對話上下文、用戶偏好等編碼為狀態向量,輸入到強化策略網絡中,策略網絡基于獎勵函數進行訓練,學習對話策略,輸出系統動作向量。
(4)基于元學習
核心思想是“學習如何學習一個推薦模型”。將元學習應用到對話推薦算法中是個值得研究的思路。
07
對話推薦系統的推薦模塊
推薦模塊是CRS中實現推薦功能的模塊,根據已經捕捉到的用戶偏好推薦用戶當前最感興趣的目標物品。大部分的研究工作中,推薦模塊都采用簡單的推薦模型,例如矩陣分解(matrix factorization),這是因為簡單的推薦模型就已經可以滿足對話推薦系統的推薦需求,使用過于復雜的推薦模型,反而會使系統整體復雜度上升,使對話推薦模型的訓練變得困難。
(1)基于自編碼器的模型(autoencoder-based models) 自編碼器(autoencoder)本身就常被用于推薦系統中,可以克服冷啟動問題(cold-start problem)
(2)基于圖卷積神經網絡的模型(GCN-based models) 圖卷積神經網絡面向應用場景中的圖結構數據,通過卷積操作,同時考慮節點的屬性以及鄰居節點的屬性,讓模型學習到節點更好的局部表示,從而提高基于圖結構數據的模型性能。
08
對話推薦任務-常用數據集
對話推薦的交互形式既可以是語音、自然語言語句,也可以是更為一般的用戶交互行為數據(如點擊、瀏覽、購買等)。因此在對話推薦的研究工作中,常用的數據集也分為兩類:第一類是研究者將用戶交互語音或語句與推薦數據結合,人工構造的數據集;第二類是更為一般的推薦系統通用數據集。
09
對話推薦任務-評價指標
在兩類不同類型數據集的應用場景下,對話推薦的評價指標也不相同,目前尚沒有統一且成熟的評價指標體系來評價對話推薦系統的功能。如表所示,在對話推薦相關的研究工作中,研究者由于研究的出發點和關注的角度不同,往往在實驗中使用不同的評價指標,從其關注的某幾個方面評價對話推薦的效果。 根據各類指標的評估內容和角度,把目前對話推薦任務的相關評價指標分為三類: (1)評價對話推薦的語言質量的指標; (2)評價對話推薦的推薦性能的指標; (3)評價對話推薦的系統效率的指標。
10
對話推薦任務-評估方式
(1)在線用戶評估
與真實的用戶交互,在真實的環境中驗證系統的效果,評估的結果真實且可信。雖然在線用戶評估的結果很優越,但實際的研究工作大多沒有條件進行線上用戶評估,在線用戶的評估方式很難被廣泛使用。原因有二,一是使用在線用戶進行訓練和評估,不成熟的對話推薦系統會損害用戶體驗,造成實際的損失;二是在線用戶評估數據的收集和整理需要額外的時間和精力,投入的成本加大。
(2)用戶模擬器評估
用戶模擬器(user simulator)通過擬合用戶的歷史數據,提供對話推薦的交互環境,為對話推薦系統每輪交互的輸出動作模擬用戶可能的行為。使用用戶模擬器,使得對話推薦系統的交互訓練更加快捷,也極大降低了評估成本。但該方式也有明顯的缺點,即用戶模擬器無法完全正確地預測在線用戶的真實反饋。
11
對話推薦系統研究中存在的問題
1、評價指標不統一
人類評估和專家分析是必要的,目前沒有完美的指標可以全面評估對話推薦系統的功能。
2、探索與收益的平衡
(1)如何在保證推薦準確率的前提下,減輕用戶的交互負擔; (2)如何將會話數據與用戶歷史數據結合,推斷用戶具有時序性特點的偏好; (3)如何利用用戶歷史興趣引導用戶發掘未來偏好。
3、數據稀疏性
(1)物品冷啟動問題:一定程度上可以解決傳統推薦系統中的用戶冷啟動問題,但在物品冷啟動問題上沒有非常好的解決方式。 (2)用戶反饋數據稀疏問題:對話推薦受制于有限的對話輪次,獲取到的用戶反饋只有有限輪次數量的數據。
4、對話策略模型低效
(1)模型訓練方式問題:對話推薦系統的環境缺少明確的規則,從而導致使用強化模型時沒有明確獎勵函數以及清晰的動作空間。
(2)模型面向任務的設計問題:強化對話推薦算法中的強化模型設計完全依賴于研究者的直覺與經驗,與任務不合適的強化模型會導致對話策略模型的訓練低效,甚至是無效。
12
未來研究方向
協同優化的端到端對話推薦 * 知識增強的對話推薦 * 基于多模態交互數據的對話推薦 * 無偏的對話推薦 * 用戶反饋的改進 * 更智能的對話推薦策略設計
13
總結
作為解決目前傳統推薦系統中存在問題的有效手段,對話推薦的研究具有重大意義。近兩年大量的對話推薦相關工作在推薦領域和數據挖掘領域的頂級會議與期刊中被發表,對話推薦的研究進入新的發展階段。本文詳細討論了對話推薦的研究內容與特點,重點關注對話推薦中的算法設計,對目前的對話推薦算法進行了歸類和總結,并介紹了對話推薦的評價指標及當前研究的挑戰與未來的研究方向。本文有助于人們理解對話推薦的研究內容、研究難點與研究思路,引發人們對未來對話推薦研究的思考。
導讀:本文將參考上述綜述論文,從預訓練語言模型應用于文本生成任務的三個挑戰出發:
如何對輸入數據進行編碼并保持語義,使其與預訓練語言模型進行融合; 如何設計通用且合適的預訓練語言模型架構,使其作為生成函數; 如何優化生成函數,并保證生成文本滿足特殊屬性。 并詳細列舉目前每個挑戰下的研究進展。
文本生成是目前自然語言處理領域一項非常重要但具有挑戰性的任務,它的目的是希望生成可讀的自然語言文本,比較有代表性的應用,例如對話系統、文本摘要和機器翻譯等。
目前,深度神經模型在文本生成研究中已取得重大進展,其優勢在于深度神經網絡可以端到端地學習輸入數據到輸出文本的語義映射,而不需要人工參與進行特征工程。但是,深度神經模型往往具有大量的參數,而大部分文本生成任務數據集都非常小,因此深度神經網絡非常容易在這些數據集上過擬合,導致其無法在實際應用中進行泛化。
隨著預訓練語言模型(Pretrained Language Models, PLMs)范式的蓬勃發展,越來越多的研究將其運用到各種自然語言處理任務中以取得SOTA效果,例如BERT解決語言理解和GPT解決語言生成。通過在大規模語料集上進行預訓練,預訓練語言模型可以準確地理解自然語言并以自然語言的形式流暢表達,這兩項都是完成文本生成任務的重要能力。
騰訊健康,騰訊醫典有多個個性化推薦場景,為了提高推薦效果,使用預訓練機制學習更完整的用戶表示。
用戶表示的學習是推薦系統模型中的重要一環。早期的方法根據用戶和項目之間的交互矩陣來學習用戶表達,但這些交互矩陣非常稀疏且矩陣中的值通常是粗粒度的,導致系統很難學習到準確的用戶表達。近期一些工作利用信息更加豐富的評論文本來增強用戶的表示學習,但對于冷門的領域或場景,評論文本的數量也不足以幫助其學習到完整準確的用戶表示。用戶的一些偏好(如評論習慣等)是在不同的領域或場景間共享的,我們可以利用數據豐富的場景下的評論幫助數據不豐富的場景的推薦。同時,受到近期自然語言處理領域中預訓練技術的啟發,本論文提出了一種基于預訓練和微調的兩階段推薦模型。如圖(a)所示,U-BERT包含兩個主要模塊能夠建模評論文本并將其語義信息和用戶的嵌入表達進行融合。在預訓練階段,我們設計了兩種新的預訓練任務能夠充分地利用不同場景下積累的評論文本來學習通用的用戶表達。如圖(b)所示,在微調階段,我們會根據特定場景下的評論數據對預訓練的用戶表示進行微調以適應當前場景下的特點。此外,在進行評分預測時,我們還設計了一個co-matching模塊以捕捉細粒度的語義匹配信息來更好地預測用戶對項目的打分。實驗結果表明,本文提出的推薦模型在多個開放數據集上取得了性能提升。
//34.94.61.102/paper_AAAI-2116.html