美團搜尋中查詢改寫技術的探索與實踐

美團技術團隊發表於2022-03-01
查詢改寫是對使用者Query擴充改寫詞,用更好的表述,幫使用者召回更多符合需求的結果。查詢改寫對於文字布林檢索系統是非常重要的擴召回手段,通過優化該演算法模組能夠直接且顯著地提升搜尋體驗。本文主要講述在美團的搜尋場景下查詢改寫專案的迭代方向和實現思路,希望能對從事搜尋、廣告、推薦中召回相關工作的同學有所啟發或者幫助。

1. 引言

在搜尋場景中,由於使用者搜尋詞Query和檢索文字Document之間存在大量表述不一的情況,在文字檢索框架下,此類文字不匹配導致的漏召回問題嚴重影響著使用者的體驗。對這類問題業界一般有兩種方案:使用者端擴充使用者的查詢詞——即查詢改寫,或Document端擴充文件關鍵詞——即Document標籤。本文主要介紹前一種解決漏召回的方案:查詢改寫(Query Rewriting,或稱為查詢擴充套件Query Expansion)。查詢改寫的應用方式是對原始Query擴充出與使用者需求關聯度高的改寫詞,多個改寫詞與使用者搜尋詞一起做檢索,從而用更好的表述,幫使用者搜到更多符合需求的商戶、商品和服務。

在美團搜尋的技術架構下,查詢改寫控制召回語法中的文字,命名實體識別(Named Entity Recognition,簡稱NER)[1]控制召回語法中的檢索域,意圖識別控制召回的相關性以及各業務的分流和產品形態,這是最為核心的三個查詢理解訊號。查詢改寫策略在美團搜尋的全部流量上生效,除擴充套件使用者搜尋詞外,在整個美團搜尋技術架構中作為基礎語義理解訊號,從索引擴充套件、排序特徵、前端高亮等多方面影響著使用者體驗。對搜尋召回結果中的無結果率、召回結果數以及搜尋點選率等指標,也有著直接且顯著的影響。

圖1 查詢改寫訊號在美團搜尋上的使用

本文會介紹美團搜尋場景下查詢改寫這一任務上的迭代經驗,內容主要分為三個部分。第一部分會對查詢改寫任務在美團搜尋場景下的挑戰進行簡單的介紹;第二部分會介紹查詢改寫任務上整體技術棧建設的實踐經驗第三部分是總結與展望。目前,業界在文字召回策略方面公開的分享較少,希望本文能對從事搜尋、廣告、推薦中召回相關工作的同學有所啟發或者幫助。

2. 背景與挑戰

2.1 美團搜尋場景下查詢改寫訊號的使用方式

在美團的搜尋場景下,查詢改寫主要用於解決以下四類語義鴻溝導致的漏召回問題:

  • 語義擴充:主要是同義詞、下位詞以及常見的大小寫數字和繁簡轉化等,例如“理髮”、“剪髮”、“造型”、“發藝”、“美髮”、“剪頭”等等。
  • 使用者表達和商家表達上的Gap:非語言上的同義。如使用者表述口語化“學吉他”,商戶描述書面化“吉他培訓”;使用者輸入不完全匹配商戶名:“希爾頓大酒店”(商家更常見的描述為“希爾頓酒店”)。
  • 場景擴充:例如“摘草莓”在美團的搜尋場景下,使用者基於對平臺的認知對應需求是“草莓園”。
  • 其他漏召回問題:部分的多字少字、糾錯等問題,如“房屋掃”對應“家政保潔”的需求;理論上查詢改寫可以通過增加改寫詞解決所有漏召回問題,諸如“冬日四件套”包括“冰糖葫蘆、烤地瓜、炒栗子、熱奶茶”這類有時效性的網紅概念,也可以通過改寫進行解決。

圖2 查詢改寫在美團App搜尋上應用的例子

2.2 美團搜尋場景下查詢改寫訊號的難點和挑戰

搜尋是在使用者搜尋詞以及供給兩方面約束下儘可能提高使用者觸達效率以及商業化指標,而美團的搜尋場景增加了“地域”第三個約束。具體的行業對比如下圖所示:

圖3 美團搜尋場景在與其他搜尋場景的異同點

通過對比行業內搜尋場景可以發現,美團的搜尋場景下使用者需求和服務商家大多是面向本地,而生活服務領域業務非常細碎,相對使用者對生活服務某個領域的需求而言,本地化供給相對較少。

與此同時,美團搜尋還聚合了多種履約形式的結果,搜尋結果中會有團購、外賣、買菜、優選等業務的自然結果聚塊,以及在本地相關業務均無結果時的推薦結果聚塊。在有限的曝光位置下,每個自然結果聚塊的不相關的結果會擠佔其他聚塊的收益,因此不能依賴排序解決相關性問題。這就要求美團搜尋場景的查詢改寫在多個業務場景下要強相關且高效率,演算法層面需要解決覆蓋問題、準確率問題以及多業務問題。以該要求為出發點,在具體演算法迭代時查詢改寫還面臨以下兩方面挑戰:

對使用者的查詢面臨著複雜的需求場景

  • 語言歧義情況多:短Query增加了歧義的可能性,例如在美團場景下“剪個頭髮”是一個商戶名,不能改寫為“理髮”;相同Query在不同城市含義不同,如“工大”在不同城市指代的學校不同。
  • 認知關聯性:使用者的搜尋天然有對美團平臺“找店”的認知,需要類似“配眼鏡”等同於“眼睛店”的場景關聯知識。
  • 場景多:隨業務的發展,客觀需求增多,查詢改寫承接的場景越來越多、越來越精細,目前,已經接入餐飲、到綜、酒店旅遊、外賣、商品、廣告等多個業務場景。

對平臺的供給需要兼顧供給建設特點和發展階段

  • 美團商戶大部分不會做關鍵詞SEO(Search Engine Optimization):文字不匹配導致的漏召回問題更為嚴重,對改寫的需求很大。
  • 商戶的外露形式導致真實互動意圖不明確:大部分商戶同時提供多種菜品、商品、團單服務,例如,一個音樂培訓機構往往提供多種樂器的培訓課程。
  • 與業務特點和發展階段強關聯:美團是一個聚合生活服務方方面面的平臺,並且各業務對改寫的需求不同,對於一些重交易的業務來說弱相關的改寫可以接受,而對一些重體驗的業務來說,對改寫的要求更嚴格,需要一定的區分度。

3. 技術選型

下圖4總結了目前查詢改寫迭代的技術框架以及對應解決的問題。我們在各個子核心模組如離線候選挖掘演算法探索、語義關係判別模型、向量化召回、線上生成改寫詞有較為深入的探索。除訊號本身迭代,在訊號的使用上也通過改寫分級訊號加入排序、召回相關性等做聯動取得了不錯的線上收益。

圖4 查詢改寫技術迭代框架

下面,我們將從離線到線上全面的介紹查詢改寫任務下的各模組技術的迭代。

3.1 原始語料挖掘

高質量的資料可以顯著改善頭部流量的改寫效果,並且決定了後續模型效能的天花板。在候選集生成方面,基於搜尋日誌的挖掘、基於翻譯思想、基於圖計算、基於Embedding都是工業界和學術界常用的方法;在候選集過濾判別方面則有句間關係分類、Embedding相似度計算等方法。我們結合美團搜尋場景總結了各個方法的優缺點,並在每個挖掘演算法元件都結合了使用者行為和語義兩方面資訊,下文將對離線語料挖掘做具體介紹。

3.1.1 搜尋日誌挖掘候選語料

搜尋日誌挖掘是工業界常用的同義詞獲取手段,挖掘的主要方向有:

  • 使用者搜尋後點選共同商戶: 利用兩個點選相同Document的Query構建相關關係。這種相關關係可以挖掘到大量詞對,但這種簡單的假設缺點也很明顯,點選共現的Query可能有不同程度的漂移。在美團場景下提供綜合服務的店鋪很多,會有兩種型別團單大量出現在相同商戶下的情況,挖掘到“拔牙”→“補牙”這種有語義漂移噪聲的可能性更大。此外,這個方法依賴現有搜尋的效果,無法挖掘到無結果Query的改寫詞。
  • 從搜尋Session中挖掘: Session是指使用者在一段時間內“開啟App→多個頁面的瀏覽,多個功能的點選、支付等行為→離開App”的一次互動過程。該方法是利用使用者在整次App訪問過程中連續輸入的Query來構建相關關係。Session挖掘依賴搜尋結果程度低,因此泛化能力更強。但相應的缺點是,Session時間切割不好確定,並且序列中每個搜尋詞之間的關聯方式比較隱蔽,甚至可能沒有相關關係。需要結合業務特點設計時長、引入點選(例如一次Session在有點選前的搜尋詞都無點選,可能是有具體需求未被滿足)等條件做挖掘。
  • 詞對齊: 詞對齊借鑑了翻譯的思想,具體方法是將Query召回的商戶標題去除了商戶名部分後剩餘的部分做為平行語料,設計一些對齊策略如字對齊(包含相同的字)、拼音對齊(相同拼音)、結構對齊(分詞後詞位置相同)。該方法的缺點是強依賴於現有搜尋的效果。

圖5 查詢改寫詞對齊挖掘方法示意圖

  • 商戶/商品內SEO: 商品場景下,部分商家上架時會做SEO,如:“加長 狗狗牽引繩 狗繩 狗項圈 遛狗泰迪金毛寵物大型中型小型犬 狗鏈子”。這一類挖掘來源的缺點是有比較大的噪聲,並且噪音關聯性較大比較難分辨(存在上下位型別、同位詞型別、作弊等噪音型別)。

以上簡單方法均可以挖掘到大量相關詞對,但基於的假設和設計的規則都很簡單,優缺點都非常明顯。下面介紹幾種優化的挖掘方法。

3.1.2 基於圖方法挖掘

圖方法如經典的協同過濾以及Graph Embedding等,在推薦場景中通過利用使用者和Document的關係構建圖結構來推薦更相似的Document。在搜尋場景下使用者的搜尋Query以及平臺的Document通過點選、下單等方式同樣也可以建模成圖結構。在美團搜尋的使用場景下,我們對構圖方式做了如下兩個改進:① Query和Document之間的邊權重使用Query點選Document的點選次數和點選率進行Wilson平滑的結果,而不只是Query點選Document的次數,從而提高相關性;② 在二部圖中,將使用者在Session中自行改寫的Query也視為Document節點,與點選的Document標題一起進行構圖,從而提高挖掘的資料量。

我們早期用SimRank++演算法[2]驗證了構圖方式兩個優化點的可行性,SimRank++演算法是一種同構資訊網路中的相似度量演算法,它的思想是:如果兩個使用者相似,則與這兩個使用者相關聯的物品也類似;如果兩個物品類似,則與這兩個物品相關聯的使用者也類似。該演算法的優點是可以使用Spark進行大規模全域性優化,並且邊權重可以根據需要調整。優化構圖後人工評測SimRank++優化前後查詢改寫資料量提升了約30%,同時準確率從72%提升到83%。

圖6 改進構圖方法的圖方法挖掘

後續,我們用相同的思路嘗試了其他圖神經網路模型(GNN)。DeepWalk[3]在構造Sentence上下文采用隨機遊走的方法。 隨機遊走一般是將Query之間的關係建立成圖,通過從一個點隨機遊走,建立起多條路徑,每條路徑上的Query組成一個句子,再使用上下文相關原理訓練Query的Embedding。隨機遊走的優點就是關係具有傳遞性,和Query共現不同,可以將間接關係的Query建立聯絡。少量的資料經過遊走能夠產生夠多的訓練資料。例如在Session1中使用者先搜尋Query1後改為Query2再查詢,在Session2中使用者先搜尋Query2後改為Query3再查詢,共現的方法無法直接建立Query1和Query3的關聯關係,而隨機遊走能夠很好地解決。在改寫詞挖掘任務中,基於圖的方法相較於直接從搜尋日誌挖掘詞對的方法,挖掘的效率和準確率均有所提升。

3.1.3 基於語義向量挖掘

在word2vec[4]後,Embedding的思想迅速從NLP領域擴散到幾乎所有機器學習的領域,號稱“萬物皆可Embedding”,只要是一個序列問題均可以從上下文的角度表示其中的節點。此外,Embedding在資料稀疏性表示上的優勢也有利於後續深度學習的探索。將Query Embedding到低維語義空間,通過計算Embedding間的相似度查詢相關詞,在挖掘相似詞的任務中是常見且易於實踐的挖掘方法。除了簡單的在使用者評論等語料上訓練大規模詞向量外(即圖7a),在實踐中還嘗試了以下兩種構建上下文的方法:

  1. 通過Query召回商戶構建Doc2Vec[5]:通過Query召回或點選的商戶作為上下文訓練Embedding表徵Query(即圖7b)。由於美團場景下同一商戶提供的服務、商品繁多,該方法在沒有考慮Query本身類目意圖的情況下,噪聲比較大。
  2. 通過使用者Session構建改寫序列[6]:通過一個Session序列作為上下文訓練Embedding表徵Query(即圖7c)。該方法的優點是有效的利用了使用者自行換詞的限制條件,挖掘覆蓋率和準確率都相對更高。

圖7 詞向量相似詞挖掘中上下文的構造方法

設計不同的上下文結構得到Embedding後,為了進一步提高準確率後續的基本的步驟是:① 訓練語料通過分詞後,利用fastText訓練Query的詞向量,fastText訓練時考慮了字級別的Ngram特徵,可以將未登入Query的字、詞Embedding進行簡單求和或求平均,解決OOV(Out-Of-Vocabulary)的問題;② 在目標詞表中,用詞向量表示該詞;③ 利用LSH,查詢向量cosine相似度高於一定閾值候選詞,或使用DSSM雙塔模型[7],通過有監督訓練提高精度;④ XGBoost結合特徵工程進一步過濾。

BERT[8]自提出以來深刻改變了自然語言處理領域的研究應用生態,我們嘗試了一些使用BERT Embedding的方法,其中比較有效的是通過Fine-Tuning的Sentence-BERT[9]或SimCSE[10]模型獲取詞向量。

BERT計算語義相似度是通過句間關係下游任務完成的,方法是用特殊字元將兩個句子連線成一個整體做分類,帶來的問題是使用時需要兩兩組合造成大量冗餘計算,因此不適合做語義相似度搜尋或無監督聚類任務。Sentence-BERT借鑑了孿生網路模型的框架,將不同的句子輸入到兩個引數共享的BERT模型中,獲取到每個句子的表徵向量,該向量可以用於語義相似度計算,也可以用於無監督的聚類任務。

我們實踐的方法基本與Sentence-BERT思想大致相同,使用下圖中左圖的方法構造有監督的改寫對訓練資料,用右圖的方法在不同意圖型別的歷史搜尋Query進行向量計算。

圖8 Sentence-BERT訓練和預測結構示意圖

相比於前面的方法,雙塔結構BERT的方法捕捉語義的能力更強,並且有監督訓練的方式結合一些模型結構上的調整,能夠減少各類漂移嚴重的Case。此外Sentence-BERT不依賴統計特徵和平行語料,在任何業務上均可以比較方便的遷移和Fine-Tuning,對一些冷啟動的業務場景非常友好。在此基礎上利用Faiss[11]向量檢索方法構建離線檢索流程,能夠支援在億級別候選池中高效檢索,通過該方法構建的改寫候選能達到千萬甚至億級別資料量,且實測準確率較高。近幾年的對比學習等方法在文字表示領域不斷重新整理榜單,從向量構建和向量互動方式等方面均可做持續的探索。

3.2 語義判別模型

3.2.1 BERT語義判別模型

從以上多個途徑的挖掘方法中可以得到千萬級別的相似詞對,但仍然有大量語義漂移的Case,其中近義詞漂移問題最為嚴重。原因是Embedding基於相同上下文的假設太強,而近義詞的上下文很相似,包括在商戶和商戶類目的上下文(一個商家通常會提供多種服務)以及使用者Session換詞的上下文相似(使用者在某一類意圖下多次瀏覽意圖下的概念),因此很容易挖掘出“大提琴”→“小提琴”這種同位詞Case,並且加大了從使用者點選行為或意圖分類等其他維度過濾惡劣Case的難度。

而圖方法由於側重於關聯性而忽略了語義漂移問題,在一些搜尋量小的Query節點上邊關係較少,導致比較如“電動車上牌”→“電動車專賣”等Case,並且相似度分數沒有絕對意義。為了從語義維度過濾類似的疑難Case,我們通過引入BERT的語義資訊來解決這類問題。BERT使用預訓練+微調的思路來解決自然語言處理問題,模型特點除網路更深外,雙向語言模型的設計思路可以更好的利用上下文資訊避免同位詞漂移問題。下面介紹查詢改寫任務中對BERT句間關係任務做的一些探索。

在BERT提出之初,我們用挖掘資料和少量人工標註資料在美團場景語料預訓練的MT-BERT[12]做句間關係任務的兩階段Tuning。而在實踐中發現在現有挖掘資料上訓練得到的模型在某些Case區分度不高,如我們之前提到的“大提琴”→“小提琴”以及“葡萄酒”→“葡萄”這類字面編輯距離不大的Case。因此如何構建高質量的正負例資料是逼近BERT在查詢改寫任務效能上限的關鍵。

我們首先嚐試的是一種協同訓練的方法,協同訓練是一種半監督的方法,它關注的問題是如何在有標記資料較少時利用大量的未標記資料來改善模型效能。考慮到離線挖掘資料噪音較大,我們探索了NMT(Nature Machine Translation)和MT-BERT協同訓練的方法,達到同時提高資料質量和模型質量的效果,整體系統的框架圖如下:

圖9 NMT-BERT協同訓練流程圖

整個協同訓練的流程是:

  • Step1 BERT判別模型產出NMT訓練資料: 將經過離線挖掘平行語料Fine-Tuning後的MT-BERT模型在全量待預測資料上預測,設定一定閾值後返回高質量正例交給NMT。
  • Step2 NMT Fine-Tuning: 在BERT返回的高質量正例中加入部分人工標註資料,作為NMT模型訓練資料進行訓練,獲得NMT模型和指標。
  • Step3 NMT產出判別模型訓練資料: 隨機抽選一定數量的Query用NMT模型生成TopN個改寫詞對,產出下一階段BERT判別模型Fine-Tuning資料。
  • Step4 BERT判別模型Fine-Tuning: 用Step3生成的資料取頭部K個詞對作為正例,尾部X個詞做負例,對BERT判別模型做Fine-Tuning。
  • 迴圈以上步驟直至收斂:迴圈迭代上述步驟,直到雙方模型在評測集上收斂。

在實際實驗中,協同訓練在迭代3輪後收斂,在人工構建的Benchmark集合上前兩輪BERT和NMT效果提升明顯,最終的效果明顯好於直接使用訓練樣本+人工標註資料Tuning。

協同訓練可以有效解決“葡萄酒”→“葡萄”等字面文字相似度較高的Case,但噪聲資料頻率較高的“馬琴”→“二胡”這類字面匹配不明顯,上下文比較相似的同位詞Case仍然存在。這裡使用了關係抽取的方法針對性的挖掘了這類疑難Case。例如針對同位詞負例的挖掘使用了一些Pattern的方法,挖掘UGC中提到“如A、B、C等”類似的句式,經過過濾後構造高質量的同位詞負例資料。經過負例資料的優化,模型準確率得到進一步提升。

最終,BERT語義判別模型的訓練過程分為四個階段:① 無監督:使用美團場景的語料在BERT模型基礎上進行Continue Train;② 半監督:使用演算法挖掘的資料進行Co-training Tuning;③ 樣本增強監督:使用人工挖掘的高質量負例Tuning;④ 使用人工標註的資料做最終的Tuning。最終模型的準確率達到了94%以上,解決了大量語義漂移Case。

3.2.2 針對商品的BERT語義判別模型

隨著美團業務場景的豐富,電商型別的搜尋和供給流量佔比開始變高,商品領域的誤改寫問題開始增多。通過分析使用者Query和改寫的Case發現上述模型不能很好的遷移到商品領域中,主要的原因除了訓練資料的覆蓋外,商品搜尋場景下使用者搜尋商品對應改寫的要求是同一事物,對改寫的準確率要求更高,而是商戶場景使用者表達的是需求,對應改寫的要求是表述需求相同即可。此外從Document角度看,商品召回欄位較單一,不存在商戶搜尋時一個商戶對應多種服務的問題,場景簡化後演算法空間是比較大的。因此單獨對商品領域的改寫判別模型做了優化:

  • 訓練資料構建:商品改寫模型首先要解決的是沒有訓練樣本的問題。使用SPU共現、向量召回等規則方法,持續跟進質檢標註資料等人工方法,通過類目組合、點選、UGC構建困難負例等挖掘方法,最終構建了數百萬高質量訓練資料。
  • 資料增強:在模型訓練的取樣過程中使用Random Negatives、Batch Negatives、Hard Sample Negatives等方法,增強模型對誤改寫的識別能力和魯棒性。
  • 模型結構優化:對Baseline的句間關係BERT做了模型結構上的探索,嘗試了R-Drop[13]和Child-tuning[14]提升模型表達能力。總體F1提升了2.5PP。
  • 圖向量融合:嘗試基於搜尋結果構造圖模型的方法,結合線上實際搜尋結果增強判別能力。通過對線上召回商品標題做實體識別,並將各個實體作為節點與Query一同構圖,以預測Query到召回實體的邊型別為目標,使用GCN[15]和GAT[16]方法產出的Graph Embedding通過向量Pooling的方法融入BERT句間關係判別模型中,最終F1提升1.6PP,解決了“寶寶”改寫為“娃娃”誤召回“玩具娃娃”這類歧義性問題。

3.3 線上服務

通過以上幾種挖掘手段,結合判別模型進一步提高準確率後能夠得到資料量約千萬級別的高質量改寫對。但線上詞典的應用方式泛化效率低下,下文會闡述如何通過線上模型進一步提高查詢改寫的整體效果。

美團查詢改寫線上有以下幾種方案:(1)高精度的詞典改寫;(2)較高精度的模型改寫(統計翻譯模型+XGBoost排序模型);(3)覆蓋長尾Query的語義NMT(神經網路翻譯模型)端到端生成改寫;(4)覆蓋商戶名搜尋流量的線上向量化檢索。

詞典改寫是業界通用的方法,需要注意的是同義詞替換需要結合上下文資訊,比如“百姓”和“平民”單獨看是可以同義的,但在“百姓大藥房”和“平民大藥房”中則是一個嚴重漂移的改寫,在對詞典改寫型別分類後結合實體識別資訊設計策略可以解決大部分此類問題。下面的篇幅將對美團搜尋查詢改寫的後三種線上模組分別做介紹。

3.3.1 SMT(統計翻譯模型)

通過離線挖掘改寫Query的方式存在的問題是覆蓋不足,但是一個Query裡包含的短Term可以進行改寫,例如生活服務領域常見的例子:“XX壞了”=“維修XX”。從這個角度思考可以將查詢改寫任務抽象為一個典型的機器翻譯任務。可設定$f$為使用者搜尋詞,$e$為目標改寫詞,SMT整體可以抽象為一個噪聲通道模型,根據貝葉斯公式求解SMT公式推導:

$$ \tilde{e} = arg \underset{e \in e^*}{\,max\,}p(e|f) = arg \underset{e \in e^*}{\,max\,}p(e|f) \frac{p(f|e)p(e)}{p(f)} = arg \underset{e \in e^*}{\,max\,}p(f|e)p(e)$$

其中得到的兩個概率$p(f∣e)$即為概率轉移模型,$p(e)$為語言模型。由此將改寫模型拆分為兩部分,結合已有的千萬級別平行語料得到詞對齊候選,分別訓練Decode模型(概率轉移模型)和語言模型。在實際的構建過程中針對遇到的Case,對模型的細節做了一些定製優化:

圖10 SMT改寫流程示意圖

  • 對齊字典過濾: 由於平行語料的噪音,以及對齊產生的錯誤資料,我們使用離線訓練的BERT語義判別模型結合規則(例如兩個Term分佈的類目交叉熵,是否互相包含等維度的特徵)對生成後的對齊詞表做了過濾優化。
  • 結構化Decode模型: SMT的Decode採用的是BeamSearch演算法,BeamSearch的引數主要分為兩部分:(1)對映概率的引數,在對齊詞表的score基礎上單獨新增了一些衡量兩個Term之間的相似度特徵;(2)轉移概率的引數,在語言模型基礎上新增了Term結合度的資訊。
  • 排序模型: 改寫的最終目的是召回更多相關且優質的商戶、商品和服務,因此在得到大量的SMT生成的改寫結果後,仍然要考慮兩方面的問題,一方面是語義相關性,另一方面是有效性。解決的方案是引入XGBoost排序模型,使用的特徵同時考慮語義相關性和改寫詞召回結果維度的業務統計效果。在語義相關性方面使用的特徵包括原詞改寫詞各自的點選特徵、文字特徵;候選對的文字編輯距離、文字語義相似度分數、Session轉移次數以及時間間隔等。在有效性方面引入了地域和流行性兩方面資訊,包括在Document和Document類目兩個維度的曝光、點選、下單等共現特徵。排序模型取Top3的優質改寫,減少了搜尋檢索索引壓力的同時能有效保證改寫詞召回當地優質相關結果。

最終,線上的整體框架類似業界經典的的Learning to Rewriting框架[17-18],模型上線後對線上的有改寫流量覆蓋佔比有近12%的提升,在QV_CTR等指標上獲得了非常可觀的收益。

3.3.2 NMT(神經網路翻譯模型)

線上上引入同義詞替換、SMT統計翻譯改寫後,線上有改寫的流量覆蓋率接近70%。但在中長尾Query中仍然有覆蓋不足的情況,主要由以下兩類問題導致:

  1. 分詞粒度引入的挖掘效率問題:無論是同義詞替換或是基於更短Term的SMT翻譯改寫,都對分詞結果和候選有一定依賴。而中文同義的粒度往往只是某一個字的變換,例如“學XX”→“培訓XX”,且在單字維度的改寫容易造成Case,同時不可能將所有的“學XX”挖掘出來達到提升覆蓋的目的。
  2. 語義相近不能對齊的複雜Query改寫問題:使用者在輸入一些自然語言的Query時,如:“哪裡有便宜的手機賣”在商家側則是“手機優惠”,基於詞片段候選的方法泛化能力較弱,不能解決類似的問題。

從以上問題出發,需要一個不依賴候選的生成式改寫模型,我們考慮使用深度語義翻譯模型NMT來解決這類問題。

2016年年底Google公佈的神經網路機器翻譯(GNMT)[19]宣告了神經網路機器翻譯效能超過1989年的IBM機器翻譯模型(SMT,基於短語的機器翻譯模型)。推動這一巨大發展就是引入Attention機制[20]的Sequence to Sequence(Seq2Seq)的端到端模型。 但在實際的使用中發現,NMT生成的改寫詞存在不符合語義(生僻或不通順)以及改寫有語義漂移兩個問題,導致線上上新增改寫的有效比例低,甚至會導致嚴重的漂移Case。因此要引入NMT做改寫必須結合搜尋的使用場景對以上兩個問題做優化,目標是生成無意圖漂移、能夠產生實際召回影響的改寫詞。基於以上問題分析和思考,通過引入環境因素引導NMT生成更高質量的改寫是大方向目標,從這個角度出發我們調研了強化學習的方法。

強化學習的過程是一個智慧體(Agent)採取行動(Action)從而改變自己的狀態(State)獲得獎勵(Reward)與環境(Environment)發生互動的迴圈過程。我們希望藉助強化學習的思想,將預訓練的NMT改寫模型作為Agent,在強化學習迭代的過程中其生成的改寫(Action)通過搜尋系統(Environment)產生最終的曝光和點選(Reward)來指導NMT優化模型引數(State)。

經過進一步調研,我們參考了Google QA系統[21]以及知乎的工作[22],即通過強化學習的方法,把搜尋系統當做一個Environment,改寫模型當做Agent,從而將大搜的結果質量考慮進來。但由於美團場景下的排序與位置、使用者等排序因素強相關,將整個大搜作為Environment將改寫詞召回向前排序的反饋機制不可借鑑,並且請求線上排序會導致訓練速度慢等一系列工程問題。結合NMT實際的表現,考慮優先保障生成改寫的語義相似度,使用大搜召回日誌結合BERT語義判別模型做Environment,目標為原詞改寫詞在搜尋系統互動中的商戶集合的交叉度和自然語義相似度。最終整體的框架圖如下所示:

圖11 強化學習NMT訓練流程和NMT模型結構圖

下面詳細介紹演算法模組設計和流程:

Step 0 預訓練NMT生成器

  • 模型:生成器使用預訓練的NMT,模型結構是經典Seq2Seq模型。考慮到實際搜尋場景下使用者搜尋詞較短,使用了基於字切分的初始化Embedding,並且在Encoder-Decoder之間引入Attention,Attention機制可以很好地替代在SMT裡面的對齊機制,非常符合查詢改寫的任務背景。此外,我們還使用了通過美團語料Fine-Tuning的BERT初始化Encoder,這樣做的好處是引入更多的語義資訊且模型收斂較快。
  • 預訓練資料:預訓練在整個系統中是非常重要的,由於使用離線歷史日誌模擬搜尋系統,在強化學習過程中若生成器產生的改寫詞都非常生僻會導致Reward稀疏,最終系統不能收斂或效果沒有優化。因此,我們在資料方面做了以下優化,考慮到NMT做改寫的優勢是語義泛化,我們從上述離線挖掘得到的資料去除了商戶名地址等專有名詞別名;在整體的訓練中強化學習會對改寫詞和原詞一樣的結果做“懲罰”,帶來的後果是部分專有名詞如一些固定叫法的商品名等改寫為有漂移的其他商品,因此在訓練資料中加入了少量商品名的原詞改寫對,限制模型在這一類Query的泛化能力。
  • 模型優化:查詢改寫中的短Query翻譯在實踐中發現容易出現過翻(不斷重複翻譯某一些詞語)和漏翻(翻譯過程中會漏掉一些詞語)問題。過翻的原因有兩種,一是由於訓練語料噪音或訓練不充分,二是翻譯過程中出現OOV的情況下,由於NMT是序列問題,後面的翻譯過程會損失資訊,從而導致過翻。解決過翻問題的方法除了豐富和優化訓練資料外,還引入了Coverage(覆蓋率)機制。即為每個源端詞維護一個Coverage Vector來表示這個詞語被翻譯的程度,在解碼過程中該覆蓋率資訊會傳入Attention Model,從而使它能夠更加關注未被翻譯的源端詞。漏翻的問題則是由於訓練語料中有大量一對多的改寫對,導致NMT無法學習到準確的對齊資訊,通過在強化學習中引入編輯距離來解決這類問題。

Step 1 原詞改寫詞輸入環境計算反饋

從使用者角度出發,好的改寫詞應該是語義相同、改寫詞新增召回的商戶與原詞召回商戶很相似,並且使用者在點選的商戶分佈上應該是比較一致的。此外,從改寫的有效性出發,改寫詞需要是通順的、有較豐富召回結果的熱門搜尋詞。從上面的分析中得出,滿足相似度高的改寫應返回正反饋,不相似、不通順改寫詞應返回負反饋。因為將環境分為兩個部分,離線搜尋日誌模擬搜尋系統以及BERT語義判別系統,分別從搜尋系統和使用者的互動以及語義判別兩個角度對產生的Action做出反饋。

  • 離線搜尋日誌模擬搜尋系統:離線搜尋日誌中包含一次搜尋中,搜尋系統最終曝光的商戶列表以及使用者在列表上的點選行為,通過收集較長一段時間的搜尋日誌,我們假設歷史Query足夠豐富,儲存歷史Query的召回商戶ID列表和使用者點選商戶ID列表兩張寬表,在強化學習過程中通過在這兩個寬表上檢索出原詞和NMT生成改寫詞的歷史召回商戶ID列表和歷史點選商戶ID列表,可以將這個過程比作檢索召回和點選兩個維度的One-Hot向量表徵檢索詞,通過計算這兩個向量的重合度得到召回相似度和使用者意向相似度的數學表徵。通過這種方法我們看似得到一個較合理的環境輸出,但仍存在幾個問題,一是原詞不在歷史Query中的特徵缺失情況,我們對NMT改寫到原詞設計了較小的固定正反饋解決該問題;二是改寫詞不在歷史Query中的情況,我們認為改寫詞不同於原詞不應該是生僻的,因此對查詢不到改寫詞的情況給與了一個固定的負反饋。此外還對相似度的計算做了Sigmod平滑,捕捉更大的變化梯度。
  • BERT模擬語義判別系統:有了模擬搜尋系統為什麼還需要語義判別?原因是使用者在商戶列表頁的點選不一定完全代表其意圖。一方面是前面提到的,一個商戶可能具有多個語義並列的服務。如大部分口腔醫院都提供“拔牙”和“補牙”的服務,在這兩個搜尋詞的商戶召回和點選交叉是很大的;另一方面在現有的搜尋系統中可能存在錯誤的改寫,尤其是改寫詞是熱門搜尋詞或原詞的子串時,使用者的點選可能因為圖片或商戶比較熱門產生點選,這樣的點選並不代表使用者的原始意圖。因此在強化學習系統引入語義判別的資訊,從而避免這類搜尋系統和使用者行為遺漏的問題,並且也可以在一定程度上解決Reward稀疏問題。

Step 2 打分器對環境產生的反饋做權重加和

根據環境給的反饋分數基於權重疊加後生成歸一化的Reward,這裡根據業務場景和實際問題做了多輪迭代,設計了加權的反饋打分器,分別給搜尋、使用者行為、語義判別、字面匹配度幾個方面不同的權重,最終歸一化到0-1之間作為最終的反饋。

Step 3 迭代打分器結果到生成器繼續訓練的loss中

根據打分器的分數將Reward疊加在NMT Fine-Tuning的模型Loss中,這裡對比了幾種方法,其中Google用Batch的平均句子長度對加和平均的Loss做歸一化疊加方式效果最好。

  • 在強化學習的Query語料上重複1~3步驟,直到模型收斂。

通過上線後的效果分析,引入強化學習的NMT可以解決語義型別改寫(挑筋→撥筋,勞動爭議→勞動糾紛,柴火燒→柴火灶),生僻的簡寫(法甜店→法式甜點,足指→足部指甲),輸入錯誤導致的簡寫(瑜教練→瑜伽教練,桑洗浴→桑拿洗浴),自然語言型別Query去詞(染髮劑哪裡買→染髮劑,祛斑哪家醫院好→祛斑醫院)。

總體來說,強化學習能夠在生成改寫詞的質量上有一定的提升,尤其在相關性方面引入了搜尋系統和使用者的反饋後改寫的精度和效率有較大提升,離線評估準確率由69%提升至87%,線上上提高複雜長尾Query改寫覆蓋的同時不會引入影響使用者體驗的惡劣BadCase,在整體美團搜尋長尾Query的QV_CTR等指標上取得了較好的收益。

3.3.3 線上向量化召回

向量化召回隨著Sentence-BERT,SimCSE等向量表示方法近期在學術界的刷榜,逐漸有越來越多的公司開始嘗試大規模應用起來,如Facebook[23]、淘寶搜尋[24]、京東[25]等。得益於預訓練模型表達能力強等特點,對比傳統的DSSM等方法有更好的泛化能力和準確度。

在改寫場景使用向量召回還有兩個優點:一方面Query和改寫詞較短且長度相近,並且語義和型別較一致,引數一致的雙塔即可保證一定的準確率;另一方面改寫詞從候選池中檢索出來而不是生成,可以控制改寫詞的有效性以及限制語義型別。通過分析美團搜尋的漏召回問題發現商戶名精搜漏召回問題較大,此外考慮到美團場景下,商戶提供的服務豐富、Document端文字較長意圖較分散的問題,我們先在商戶意圖下文字不匹配導致的少無結果問題中嘗試了向量化召回(下文稱為“模糊改寫”)並取得了非常好的效果,下面將進行詳細介紹。

首先對這類Case做歸納總結,認為模糊改寫要解決的問題是:使用者有明確商戶意圖時,因文字不匹配,或NER切分錯誤導致無結果、漏召回問題,這類Case使用者意圖明確但Query表述模糊。例如:搜尋“九匠和牛燒肉”未召回POI“九匠精釀烤肉”、搜尋“寧波萊斯小火車”未召回POI“寧波火車來斯主題公園”。這類問題混合了多種文字變體,難以在現有結構化召回框架內解決。確定問題的邊界後,總結這類Case有以下特點:(1)Query是多變的,但商戶名召回池是有限且確定的;(2)Query和商戶名文字長度較短,非常適合向量化召回演算法;(3)可以擺脫現有布林檢索召回框架的限制,避免簡單文字匹配導致漏召回。因此我們制定了以向量召回為基礎的模糊改寫流程:

圖12 向量召回技術架構示意圖

下面會著重介紹模糊改寫的核心模型以及線上服務處理流程兩部分。

模型結構: 模型結構採用雙塔Query Tower $Q$和POI Tower $P$,對於給定的Query和POI,公式中使用 $q$表示輸入Query文字,$p$表示輸入POI標題文字,模型計算過程為:

$$f(q,p)=G(Q(q),P(p))$$

其中$Q(q)$表示產出Query Embedding的BERT塔,$P(p)$表示產出POI標題文字Embedding的BERT塔,$G$表示打分計算函式,比如Inner Product、L2 distance等。

向量Pooling: 根據BERT模型各層越遠離下游任務泛化能力越強的特性,經過多次實驗驗證使用倒數第二層向量做Avg Pooling後輸出的結果有更高的準確率和召回率。

Negative Sampling: Facebook在論文《Embedding-based Retrieval in Facebook Search》[23]中強調了負樣本分佈的問題。我們在負取樣上有三部分:Random Negatives、Batch Negatives、Hard Sample Negatives,並增加了一組超參來調整三者的比例。Random Negatives 越多,召回商戶質量較高但相關性會有所下降;Batch Negatives參考了SimCSE的做法,增加後相關性有所提升;Hard Sample Negatives是通過規則篩選了一批商戶名文字上很相似的不同商戶,以及加入錯誤的改寫、糾錯對,以較低的比例加入每一輪的訓練中,進一步提升相關性表達。

圖13 向量召回雙塔模型訓練資料構造示意圖

Loss函式: Loss選用了Binary Cross-Entropy的Pointwise Loss函式,原因是對於有標準商戶名Label的情況下,模型預測改寫商戶名“絕對正確”的效能好於Pairwise預測“相對正確”的改寫商戶名。在實際的對比實驗結果中也體現了這一點。

線上服務搭建: 如圖12所示,線上分為前置流量劃分模組、Query端的線上文字向量化、ANN向量檢索以及後置規則四部分。

  • 前置流量劃分模組:前置流量劃分模組控制模糊改寫服務呼叫邏輯,僅在商戶名搜尋意圖下傳統文字召回無結果時呼叫。一方面保證效果,另一方面減少對下游TFServing向量預測服務和向量檢索服務的流量壓力。
  • Query端的線上文字向量化:預訓練模型的線上效能一直是困擾大型NLP模型在搜尋系統落地的困難之一。模型上嘗試了Faster-Transformer,並將模型轉為FP16精度進行加速。工程上除整體服務的快取外,考慮到Query向量與城市無關,在這一模組也設計了一層快取,進一步減少實時呼叫。
  • ANN檢索:向量檢索使用了美團搜尋團隊自研的Antler向量檢索引擎,該服務基於Faiss庫封裝,實現了IVFFlat、HNSW等向量檢索演算法,並支援分散式向量檢索、實時索引、多欄位分片、向量子空間、標量過濾等檢索能力,對模糊改寫在不同城市檢索不同的POI庫提供了高效能的多欄位檢索支援。ANN的引數調整同樣對整體效果有上下2PP的影響。
  • 後置規則:通過設計編輯距離等簡單文字過濾規則和簡單的詞權重策略,優先保證商戶名的核心部分的相關度,進一步提高模糊改寫的效果。

模糊改寫專案上線後,對“九匠和牛燒肉”未召回POI“九匠精釀烤肉”這類目標Case解決很好,在使用者搜尋商戶名時出現換字、多字、少字的情況泛化能力很強,並且訓練資料中加入同義詞替換後也解決部分同義字、同義詞替換的漏召回問題。從線上效果看,QV_CTR、無結果率以及長尾BadCase等指標上均有較大收益,有效改善了這部分流量的使用者搜尋體驗。

除積累了向量檢索的演算法工程經驗外,我們總結這個專案的成功之處在於通過一系列問題發現和問題分類的手段界定了清晰的問題邊界,並做了合適的技術選型,使用意圖訊號限制應用範圍對向量召回揚長避短,最終收益超出預期。向量檢索近幾年在業界各大公司均有嘗試,我們認為在非商戶名搜尋流量以及商品搜尋流量上還有巨大的挖掘空間,結合美團場景中商戶多欄位、多服務、多業務的難點,模型的變體有非常多可嘗試的點,我們會在後續的文章介紹線上向量化檢索方向的探索,敬請期待。

3.4 查詢改寫服務能力平臺化

查詢改寫專案經過上述介紹的迭代,在美團搜尋不同發展時期均貢獻了不錯的業務收益。並且隨著技術影響力的擴大,逐步與大眾點評App搜尋、外賣App搜尋、搜尋廣告等業務方建立了合作,在美團搜尋的商品、外賣、酒店旅遊等業務沉澱了相應的資料和技術能力。與此同時,各業務也根據自身的發展階段和業務特點對查詢改寫提出了一些獨有的需求,對此我們把查詢改寫的核心功能做了抽象,整個技術框架的發展方向為:

  • 資料精細化:資料層面區分幾個核心業務,提供的詞關係包括同義、上下位、同位、不相關等語義維度,搜尋召回使用同義詞下位詞,推薦廣告等還可以考慮使用同位詞,不相關詞則提供給相關性或排序模型做訓練負例。在持續的挖掘過程中通過模型和人工校驗分出不同精度的資料,用於排序特徵也獲得了超出預期的收益。
  • 演算法工具化:在資料量覆蓋率方面提供全面的演算法挖掘工具,在語義判別方面不斷迭代模型精度,並結合應用場景解決短文字的歧義性問題,跟蹤和探索業界前沿方法。
  • 線上服務可運維:線上服務方面支援快速的業務接入、線上AB實驗和干預等。

圖14 查詢改寫平臺技術框架圖

4. 總結與展望

本文介紹了美團場景下查詢改寫任務上的探索和實踐經驗,在垂直領域搜尋召回這一課題上結合實際業務場景和使用者需求探索了語義判別模型、語義檢索模型、圖模型等前沿演算法技術,積累了生活服務領域短語關聯認知資料。其中在離線資料部分介紹了策略、統計翻譯、圖方法和Embedding等多種技術角度的挖掘方法,並對總結了各個方法在實踐過程中的出發點、效果和優缺點。線上模型方面結合垂直領域搜尋的結構化檢索特點,設計了高精度的詞典改寫、較高精度的模型改寫(基於SMT統計翻譯模型和XGBoost排序模型)、覆蓋長尾Query的基於強化學習方法優化的NMT模型、針對商戶搜尋的向量化召回四種線上方案。

目前,在美團App搜尋中有改寫流量佔比約73%,在大眾點評App搜尋有改寫流量佔比約67%。構建的查詢改寫能力和服務平臺支援各個業務頻道內搜尋以及搜尋廣告平臺等,並取得了不錯的收益。現在查詢改寫服務高峰期叢集QPS(Query Per Second)已經達到了6萬次/秒,我們會進一步投入研發,提升公司內乃至業界內的技術影響力。

如何更好地連線使用者和平臺上的服務、商家、商品是一個需要長期和多方面投入解決的問題。我們未來可能會進行以下幾個方向的迭代:

  1. 進一步探索向量檢索:在生活服務的場景下,使用者的需求和平臺上提供的服務都是龐大的,且會越來越細緻和多樣。而近幾年的對比學習等方法在文字表示領域不斷重新整理榜單,業界也已經在探索和佈局線上向量召回。我們認為這方面的成長空間巨大,會持續投入。
  2. 語義判別模型探索:語義理解離不開上下文,對於搜尋來說使用者的短文字搜尋詞的理解更是如此。類似前文介紹在Graph Embedding做的嘗試,後續可以考慮多模態等方法,更好的解決搜尋上下文下的語義判別問題。
  3. 生成式改寫探索:強化學習還可以向SeqGAN[26]等方向嘗試,以及用更好的生成器來解決長尾搜尋詞改寫問題。
  4. 進一步細化詞關係能力建設:在與各個業務合作的過程中發現各類的詞關係均有用途,可以根據相關性的強弱作用於召回、相關性、排序等其他各模組。這方面目前定義比較完備的是阿里巴巴在商品領域構建的AliCoCo[27]。在生活服務領域詞關係是更為豐富的,我們希望能建立起生活服務領域最大、最精細、最豐富的詞關係結構化資料,更好的服務於使用方。

5. 作者簡介

楊儉、宗宇、謝睿、武威,均來自美團平臺/搜尋與NLP部NLP部。

6. 參考文獻

  • [1] 溫麗紅、羅星馳等. 美團搜尋中NER技術的探索與實踐.
  • [2] Antonellis, Ioannis, Hector Garcia-Molina, and Chi-Chao Chang. "Simrank++ query rewriting through link analysis of the clickgraph (poster)." Proceedings of the 17th international conference on World Wide Web. 2008.
  • [3] Perozzi, Bryan, Rami Al-Rfou, and Steven Skiena. "Deepwalk: Online learning of social representations." Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining. 2014.
  • [4] Mikolov, Tomas, et al. "Efficient estimation of word representations in vector space." arXiv preprint arXiv:1301.3781 (2013).
  • [5] Grbovic, Mihajlo, et al. "Context-and content-aware embeddings for query rewriting in sponsored search." Proceedings of the 38th international ACM SIGIR conference on research and development in information retrieval. 2015.
  • [6] Djuric, Nemanja, et al. "Hierarchical neural language models for joint representation of streaming documents and their content." Proceedings of the 24th international conference on world wide web. 2015.
  • [7] Shen, Yelong, et al. "Learning semantic representations using convolutional neural networks for web search." Proceedings of the 23rd international conference on world wide web. 2014.
  • [8] Devlin, Jacob, et al. "Bert: Pre-training of deep bidirectional transformers for language understanding." arXiv preprint arXiv:1810.04805 (2018).
  • [9] Reimers, Nils, and Iryna Gurevych. "Sentence-bert: Sentence embeddings using siamese bert-networks." arXiv preprint arXiv:1908.10084 (2019).
  • [10] Gao, Tianyu, Xingcheng Yao, and Danqi Chen. "SimCSE: Simple Contrastive Learning of Sentence Embeddings." arXiv preprint arXiv:2104.08821 (2021).
  • [11] Johnson, Jeff, Matthijs Douze, and Hervé Jégou. "Billion-scale similarity search with gpus." IEEE Transactions on Big Data (2019).
  • [12] 楊揚、佳昊等. 美團BERT的探索和實踐.
  • [13] Liang X, Wu L, Li J, et al. R-Drop: Regularized Dropout for Neural Networks[J]. arXiv preprint arXiv:2106.14448, 2021.
  • [14] Xu, Runxin, et al. "Raise a Child in Large Language Model: Towards Effective and Generalizable Fine-tuning." arXiv preprint arXiv:2109.05687 (2021).
  • [15] Kipf, Thomas N., and Max Welling. "Semi-supervised classification with graph convolutional networks." arXiv preprint arXiv:1609.02907 (2016).
  • [16] Veličković, Petar, et al. "Graph attention networks." arXiv preprint arXiv:1710.10903 (2017).
  • [17] Yin, Dawei, et al. "Ranking relevance in yahoo search." Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. 2016.
  • [18] He, Yunlong, et al. "Learning to rewrite queries." Proceedings of the 25th ACM International on Conference on Information and Knowledge Ma.
  • [19] Wu, Yonghui, et al. "Google's neural machine translation system: Bridging the gap between human and machine translation." arXiv preprint arXiv:1609.08144 (2016).
  • [20] Vaswani, Ashish, et al. "Attention is all you need." Advances in neural information processing systems 30 (2017): 5998-6008.
  • [21] Buck, Christian, et al. "Ask the right questions: Active question reformulation with reinforcement learning." arXiv preprint arXiv:1705.07830 (2017).
  • [22] 方寬. Query理解和語義召回在知乎搜尋中的應用.
  • [23] Huang, Jui-Ting, et al. "Embedding-based retrieval in facebook search." Proceedings of the 26th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2020.
  • [24] Li, Sen, et al. "Embedding-based Product Retrieval in Taobao Search." arXiv preprint arXiv:2106.09297 (2021).
  • [25] Zhang, Han, et al. "Towards personalized and semantic retrieval: An end-to-end solution for e-commerce search via embedding learning." Proceedings of the 43rd International ACM SIGIR Conference on Research and Development in Information Retrieval. 2020.
  • [26] Yu, Lantao, et al. "Seqgan: Sequence generative adversarial nets with policy gradient." Proceedings of the AAAI conference on artificial intelligence. Vol. 31. No. 1. 2017.
  • [27] Luo, Xusheng, et al. "AliCoCo: Alibaba e-commerce cognitive concept net." Proceedings of the 2020 ACM SIGMOD International Conference on Management of Data. 2020.

閱讀美團技術團隊更多技術文章合集

前端 | 演算法 | 後端 | 資料 | 安全 | 運維 | iOS | Android | 測試

| 在公眾號選單欄對話方塊回覆【2020年貨】、【2019年貨】、【2018年貨】、【2017年貨】等關鍵詞,可檢視美團技術團隊歷年技術文章合集。

| 本文系美團技術團隊出品,著作權歸屬美團。歡迎出於分享和交流等非商業目的轉載或使用本文內容,敬請註明“內容轉載自美團技術團隊”。本文未經許可,不得進行商業性轉載或者使用。任何商用行為,請傳送郵件至tech@meituan.com申請授權。

相關文章