天天看點

從預訓練到微調:Nextdoor 實作有效嵌入應用程式的途徑-譯文

作者:閃念基因

背景

Nextdoor 的大多數 ML 模型通常由大量特征驅動,這些特征主要是連續或離散的。個性化特征通常源自曆史聚合或互動特征的實時彙總,通常通過記錄的跟蹤事件捕獲。然而,通過對其背後的資訊(文本/圖像)進行深入了解來表示内容對于模組化細微的使用者信号和更好地個性化我們許多産品的複雜使用者行為至關重要。在快速發展的 NLP 領域,利用 Transformer 模型有效高效地進行表示學習對于了解使用者和改善他們的産品體驗變得越來越重要。

為此,我們建構了許多實體嵌入模型,涵蓋文章、評論、使用者、搜尋查詢和分類資訊等實體。我們首先利用對内容的深入了解,并根據使用者過去互動的内容,為元實體(如使用者)派生嵌入。這些強大的表示對于提取 Nextdoor 中一些最大的 ML 排名系統(如通知評分和 feed 排名)的有意義的特征至關重要。通過使它們随時可用并按比例建構,我們可以可靠地推動采用最先進的技術,并将它們交到 ML 工程師手中,以便在整個公司快速建構高性能模型。

本部落客要關注我們如何疊代嵌入模型的開發,如何将它們特征化并大規模應用于各種産品應用程式,以及在此過程中遇到的一些挑戰。我們總結了三個部分的工作進展。在第 1 部分中,重點是利用最先進的預訓練模型來快速評估嵌入模型作為特征提取器的價值。第 2 節描述了如何使用未标記資料針對某些産品微調嵌入,而第 3 節示範了如何使用标記資料微調嵌入以實作更好的任務預測。這項工作由 Nextdoor 的知識圖譜團隊推動,這是一個橫向團隊,與産品 ML 團隊以及擁有 ML 訓練和服務平台的 ML 平台團隊以及為 Nextdoor 的 ML 模型提供支援的 FeatureStore 服務密切合作。

1. 利用預先訓練的模型

第一代嵌入是使用 Sentence-BERT 範式 ( https://www.sbert.net/ )從預訓練語言模型建構的。衆所周知,與原始 BERT 模型 [1] 相比,SBERT 可以産生更好的嵌入表示。這裡的主要目标是快速試驗嵌入作為特征,并盡快在産品中實作它們的價值。内容實體(即 Nextdoor 文章和評論)的文本分别從文章的主題和正文以及評論文本中提取,然後輸入到多語言文本嵌入模型中,以得出 Nextdoor 營運的所有國家/地區的相應實體嵌入。對于給定使用者,他們的曆史互動文章的嵌入會根據互動類型進行權重聚合,以告知使用者(互動)嵌入。例如:與印象等更被動的互動相比,文章建立/評論/點選等主動互動具有更高的權重。這些信号線上上(feed)和離線(電子郵件)産品表面進行聚合,以整體表示使用者嵌入,并為平台上的所有使用者每天更新。

這些功能被發現是多個排名模型中最重要的功能之一,并在 2022 年初釋出時顯著提升了通知和資訊流中關鍵産品 OKR 名額的性能。預訓練模型還充當了良好的概念驗證,可以建構可靠的功能提取管道和監控系統,識别任何潛在的功能漂移和中斷。這有助于形成一個強大的劇本,用于部署幾個下一代嵌入功能。

從預訓練到微調:Nextdoor 實作有效嵌入應用程式的途徑-譯文

2. 從無标記資料中微調嵌入

下一代嵌入描述了訓練自定義模型,這些模型通過利用微調技術對預訓練版本進行了改進。之前用于生成嵌入的信号直接或間接地來自使用者與通知和首頁動态産品的互動。相比之下,本節詳細介紹了一個使用未标記資料進行表示學習以改善使用者搜尋體驗的用例。

我們的鄰居使用 Nextdoor 搜尋通過明确表達意圖來查找有用的本地資訊。我們試圖捕捉長期和短期意圖,以确定并滿足使用者的長期需求(例如:房屋維護)以及短暫需求(例如:失物招領)。搜尋查詢——雖然本質上意圖強烈,但本質上很短而且嘈雜。搜尋者可能會連續嘗試查詢的多種變體,以盡可能滿足他們的意圖。此外,由于本地搜尋的性質,依賴搜尋結果中的标記回報可能無法完全捕捉使用者意圖,因為流動性有限。

為了全面捕捉使用者意圖信号,我們依靠自監督訓練政策來學習任何給定查詢的微調表示。具體來說,我們首先建構了一個 SBERT 支援的查詢嵌入模型,該模型學習在低維空間中嵌入搜尋查詢。然後,我們彙總來自不同時間視窗(每周/每月/每季度)的使用者查詢的嵌入,以生成多個使用者(意圖)嵌入。同一模型還提取文章的意圖以生成相應的文章嵌入。生成的使用者、文章和查詢嵌入将按照後面的部分所述進行轉換和特征化,以提高排名模型的性能。

查詢嵌入模型最初是為了在 Nextdoor 搜尋管道 [2] 中驅動上下文查詢擴充而建構的。該句子轉換器模型基于曆史搜尋查詢進行訓練,以便最好地學習查詢表示。我們首先收集了一段時間内所有搜尋者在會話中搜尋查詢序列組成的搜尋日志。然後, 使用詞形還原、拼寫檢查、重複資料删除等傳統 NLP 方法對它們進行預處理,以形成一個幹淨的标記語料庫,該語料庫由 n-gram(n=1,2,3)和整個查詢組成。為了生成訓練資料集,我們建立了在使用者搜尋會話中出現的正标記對和在會話中随機出現的負标記對。使用餘弦相似度損失的對比學習來訓練底層模型。

對于查詢擴充用例,此模型通過識别相關候選詞來提高召回率,進而獲得了更好的上下文搜尋結果。這不僅有助于改善 For Sale & Free 中的内容搜尋和産品搜尋的關鍵搜尋名額,而且與之前的詞嵌入模型相比,還顯著降低了空查詢率。我們還利用近似最近鄰庫HSNWlib [3]來實作這種基于深度學習的查詢擴充,進一步将擴充延遲提高了 10 倍以上。對于通知和提要用例,從文章和使用者嵌入轉換生成的意圖特征有助于對我們的頂線參與度名額産生顯着的積極影響。盡管隻能為搜尋者計算特征并且總體覆寫率較低,但發現這種明确的信号對于改善整體搜尋體驗非常有用。

從預訓練到微調:Nextdoor 實作有效嵌入應用程式的途徑-譯文

3. 通過标記回報對嵌入進行微調

在嵌入的下一次演進中,我們還将利用使用者回報來進一步微調模型。預訓練的實體嵌入已經為我們服務了一年多,但它們是使用公共基準資料集訓練的現成模型。是以,它們的語義在本質上與 Nextdoor 域完全不同。此外,它們的高但固定的模型次元會導緻大量的存儲和服務成本,尤其是當每天為所有 Nextdoor 鄰居更新使用者嵌入時。為了解決這些問題,我們建構了一個雙塔架構,使用在 Nextdoor 表面上收集的使用者回報來微調嵌入,同時降低 次元、根據我們的域進行定制并提高成本效益。

經過微調的模型是分階段開發和訓練的,複雜性逐漸增加。在第一階段,文章和使用者塔的輸入是預先訓練的嵌入,然後使用多個 FC 層對其進行轉換,進而在每一步中降低次元。标準交叉熵用作損失函數,以預測給定使用者和文章的通知點選任務。為了生成訓練資料集,我們從随機探索日志中抽樣以減少選擇偏差,這與下遊排名模型的過程相同。一旦模型完全訓練完畢,最後一層就會生成經過微調的使用者和文章表示。

這些 pytorch 模型使用具有不同超參數的 SageMaker GPU 執行個體在數百萬條記錄上進行訓練,并選擇具有最佳離線性能的模型來生成微調後的嵌入并将其存儲到 FeatureStore 中。遵循前面描述的劇本來建構和監控離線和線上功能管道。将這些緩存的功能提供給下遊模型已顯示出所有參與度名額(CTR/會話/貢獻/DAU/WAU)的可喜提升,同時保持衡量整個平台上有害/有害内容分布的護欄名額保持中立。

在下一階段,我們直接将從文章實體中提取的文本輸入文章塔,以便我們微調 SBERT 模型的參數。測試 AUC 分數被用作基準,以确定需要解凍多少層和變壓器塊來嘗試不同的訓練方案以及優化典型 DNN 模型的超參數。與相應的預訓練版本相比,最佳模型還将微調嵌入的使用者文章餘弦相似度提高了 16%——這是表征改進内在品質的另一個評估标準。同樣值得注意的是,這種品質改進是在将次元降低 10 倍以上的情況下實作的!

在最近的階段,我們擴充到多任務學習 (MTL) 設定模組化,包括通知點選和 feed 操作,以聯合優化微調嵌入的學習。同樣,這些目标精确模仿下遊排名器,以確定學習到的嵌入直接優化下遊任務。MTL 模型的另一個優勢是可以在多個産品界面上學習單一模型,進而減輕營運負擔和維護成本,同時利用跨共享任務的知識轉移來獲得更好的表示。feed 和通知界面高度相關,因為點選電子郵件通知會直接進入新聞源中文章的固定視圖。此外,首頁 feed 上的大多數操作都用作通知排名器中的功能,使得這些任務非常相關。

從預訓練到微調:Nextdoor 實作有效嵌入應用程式的途徑-譯文

在 ML 模型中使用嵌入

由于我們的大多數下遊生産模型都是基于樹的模型,是以它們不會直接與向量特征(如深度神經網絡的嵌入)內建。是以,我們主要使用嵌入模型的輸出作為下遊模型的特征提取器。具體來說,我們依靠這些實體嵌入之間的餘弦相似度和點積等轉換來生成有意義的親和力特征。雖然目前正在過渡到神經網絡系統 - 但這些向量轉換提供了一種巧妙的方法,可以将基于嵌入的特征內建到現有模型中,并可以快速進行實驗以評估新深度特征的性能提升。

我們首先建立架構并聲明與每個嵌入相對應的特征組,以托管在我們的内部 FeatureStore 中。然後,在建立/更新基于内容的嵌入特征時,使用任務工作者作業将其近乎實時地提取到我們的 Featurestore 中。對于使用者,Airflow 中的每日計劃作業根據預先指定的回顧視窗計算嵌入聚合,對各種互動類型進行權重,并批量提取到 Featurestore 中。一旦系統設定為提取具有适當 TTL 的所有相關嵌入,我們就會編寫日志代碼來計算和記錄派生的特征,例如使用者與文章、使用者與使用者之間的餘弦相似度和點積。具體來說,在 feed 中,這些特征将表示文章與檢視者、檢視者與作者之間的親和力,以及通知世界中文章與收件人、發件人與收件人之間的親和力。同樣,我們還計算評論實體之間的親和力,以告知新聞提要中的基于活動的排名。從特征日志中獲得的資料用于訓練下遊 ML 排名模型,以避免線上和離線偏差,并且使用新特征提升離線性能的最佳模型将被提升以進行線上 AB 測試評估,并進一步提升大多數會員體驗。

挑戰與未來

多個實體嵌入(即使用者、文章、評論、查詢等)已成功大規模內建到 Nextdoor 的各種産品界面中。過去,基于評論嵌入的模型有助于促進和培養更友好的對話,進而提高平台活力名額 [4]。最近,還使用 ​BERTopic [5] 開發了上下文主題嵌入,以實作對鄰居的更粗略的内容個性化,同時告知我們平台上内容類别和類型的流行程度。我們還在嘗試使用 CLIP [6] 進行圖像嵌入,以利用内容背後的圖像/視訊資訊。

此外,作為标記微調的擴充,我們計劃在兩個次元上進一步改進表示。一種是通過将表示與圖像嵌入和現有互動特征等附加特征連接配接起來,以利用多模态和密集信号。另一種是将任務擴充到其他層面,例如廣告、待售和免費(市場)等,以使表示在産品之間更加全面。一旦下遊模型完全現代化為基于 DNN 的方法,嵌入就可以直接內建到模型中,而不會丢失任何來自轉換計算的資訊。

随着我們建構越來越多的嵌入來捕獲不同的信号,我們還需要注意新功能帶來的額外成本。通過在 FeatureStore 中直接執行嵌入轉換,而不是在微服務之間傳遞嵌入,可以減輕在推理過程中提供高維向量的一些初始挑戰,進而最大限度地降低網絡帶寬和擴充成本。這在基于樹的模型中效果很好,但是在未來,直接使用 DNN 模型提供嵌入可能會增加成本。緩存和提供經過微調的嵌入可以幫助控制次元,同時結合特定領域的知識。這使我們能夠快速試驗并在較小規模上快速評估 ROI,進而證明總體成本是合理的。從基礎設施的角度來看,我們發現優化嵌入特征的有效負載格式以及對調用進行排序以有效地從 FeatureStore 讀取/寫入可以大大降低全面總體成本。

緻謝

如果沒有與各種 ML 産品合作夥伴(通知/Feed/搜尋/Vitality)的密切合作和協作,以及 ML 平台團隊對 ML 平台和 FeatureStore 服務的大力支援,這項工作是不可能實作的。我想借此機會向這些團隊中所有緻力于這項工作的 Nextdoor 員工緻以誠摯的謝意。

Nextdoor 正在建構世界上最大的本地知識圖譜 (LKG)。我們社群繼承的本地知識圖譜是 Nextdoor 獨有的專有資料,可用于實作個性化的社群和鄰居體驗。知識圖譜團隊專注于通過使用最先進的機器學習方法建立标準化的鄰居/内容資料來了解鄰居和内容。

第三方大型語言模型 (LLM)(例如 GPT)以及基于這些語言模型建構的相應對話應用程式(例如 ChatGPT)無法通路 Nextdoor 的特定本地知識。是以,它們無法按照我們的意願為使用者提供基于位置的服務。對于我們來說,開發内部定制的 LLM 以利用我們獨特的本地知識圖譜至關重要。我們正在建構自己的大型語言模型 (LLM),這些模型基于 Nextdoor 的原始内容和結構化知識圖譜,為多種産品提供支援。

如果您有興趣了解更多資訊,請聯系我們——我們正在招聘!

參考

Sentence-BERT:使用 Siamese BERT 網絡進行句子嵌入

https://engblog.nextdoor.com/modernizing-our-search-stack-6a56ab87db4e

https://github.com/nmslib/hnswlib

https://engblog.nextdoor.com/using-predictive-technology-to-foster-constructive-conversations-4af437942bd4

https://maartengr.github.io/BERTopic/api/bertopic.html

https://openai.com/research/clip

作者:卡提克·賈亞蘇裡亞

來源-微信公衆号:https://engblog.nextdoor.com/from-pre-trained-to-fine-tuned-nextdoors-path-to-effective-embedding-applications-3a13b56d91aa

出處:

繼續閱讀