導讀:在電商企業採購和運營過程中,如果要想掌握商品的實時價格等行情資訊,就需要對齊各個電商網站的商品。由於各個電商網站的運營體系不同,網站的類目體系、商品屬性等等往往存在很大差異,需要將這些實體資訊進行統一的對齊和匹配。此外,還需要考慮在數以億級的商品體量下,商品資訊有各種錯誤的情況下如何提升演算法效果。本文將介紹商品圖譜構建與表示、實體對齊等技術在電商領域的一些具體實踐和應用。
主要內容包括:
- 背景介紹
- 技術進展
- 商品圖譜中的實體對齊
- 總結與展望
01
背景介紹
我們團隊的主要研究方向包括語音識別、自然語言處理、人機對話、知識圖譜,負責將這些AI相關的研究落地於京東科技內外部的各種產品中,提高京東科技的機構品牌影響力。
在知識圖譜方向上,我們圍繞金融圖譜、商品圖譜、藥品圖譜都有一些具體工作以及落地的應用。我們依託平臺內部的一些能力,像大規模圖譜處理庫、機器學習平臺等,為上層的各種應用提供知識圖譜底座以及相關演算法能力。
今天分享的內容是商品圖譜當中的一個具體應用。商品圖譜是以京東海量的商品為中心,全面沉澱相關的商品知識。構建圖譜時區分概念層和例項層:概念層主要是沉澱一些抽象概念,比如品類與屬性之間的關係;具體的例項,如屬性值或者是商品SKU都會放在例項層。此外,我們還在持續推進商品圖譜和通用百科圖譜打通的工作,進而更好地為上層的應用提供相關的知識。
在商品圖譜中,實體對齊包含商品對齊、屬性對齊、屬性值對齊,我們的應用中最關心的是商品之間的對齊,尤其是跨電商平臺商品之間的對齊。有了這些商品對齊的結果,採銷團隊可以對京東商品的價格競爭力等等有一個全面的瞭解。跨電商渠道的商品對齊面臨的最大問題是,因為各個電商渠道的運營體系完全不一樣,會導致同一商品的具體描述有較大差異。同時,因為執行的運營標準也不一致,像京東自營商品的屬性資訊要更全一些,但是很多第三方商家的商品屬性就有很多缺失,會把關鍵的資訊直接放到標題中。此外,因為電商平臺的商品都是海量資料,大資料下也會對演算法的選型產生影響。
02
技術進展
1. 實體對齊任務介紹
我們這裡的實體對齊任務是知識圖譜中的實體對齊。在很多論文中具體把任務定義為:兩個不同的圖譜KG1、KG2,當中的實體有一定的對應關係,在已知一些對齊樣本的情況下,去預測圖譜中其它實體的對齊關係。圖譜一般以(E,R,T)表示。E為實體,R為關係,T為圖譜中的三元組。
相關論文中常見的資料集有兩個,都是百科圖譜對齊的資料集。其中DBP15K是一個跨語言的百科圖譜對齊資料集,DWY100K是三個不同來源的百科網站圖譜對齊的資料集。
很多圖譜對齊演算法都以圖譜表示學習為基礎來實現,先對知識圖譜當中的所有實體進行編碼,從而提取實體的圖譜特徵。之前的研究一般採用分散式圖表示學習,像TransE及其各種改進演算法。目前更多的論文使用了圖神經網路GNN。計算得到實體的圖譜特徵後,會將特徵傳入對齊模組。對齊模組常用的做法有兩種,一種是拉近已知對齊實體特徵向量在高維空間中的距離;另一種是使用一些複雜匹配模型,去學習預測實體間的對齊關係。目前主要工作都圍繞著圖譜編碼和對齊模型兩個部分展開。具體到評價指標,會把實體對齊看成是一個排序任務,使用搜索排序的相關指標進行評價,如TopK命中率,即統計前K個得分最高的預測結果中,是否包含有正確的對齊實體。
2. 實體對齊演算法技術趨勢
近幾年圖譜對齊的論文有很多,這裡可能只列舉到一小部分。圖譜編碼的演算法從19年開始,幾乎都用到了GNN圖神經網路,之前更多的是TransE的各種改進。一方面是圖神經網路表達能力比較強,另一方面是因為TransE模型是基於連結預測等任務設計的,而圖神經網路可以針對實體對齊任務設計相應的特徵。
在對齊演算法部分,現在採用的對齊演算法越來越複雜。除了最開始簡單的向量對齊之外,更多的實體特徵可以被引入,比如:圖譜中的關係表示、鄰接節點的匹配關係等等。同時也可以引入匹配模組,專門學習實體對之間的互動特徵。
我們還發現越來越多的論文融合了圖譜以外的語義資訊,如實體的屬性、文字描述等,這和實際應用場景是非常契合的。因為實際應用中圖譜裡面的實體一般也有一些對應的一些文字描述,甚至是多模態的資訊比如影象等等,這些資訊都可以加以利用。
03
商品圖譜中的實體對齊
1. 商品圖譜對齊需要考慮的問題
商品圖譜實體對齊需要解決的問題,包含以下三個方面:
- 大資料下商品知識圖譜如何進行訓練和線上預測。
- 商品屬性多,屬於關係稠密型圖譜,需要自動學習關鍵商品屬性並減少噪音資訊影響。
- 文字語義資訊在商品描述中作用很大,需要融合結構化和非結構化的資訊。
2. 線上預測流程
這是我們目前線上採用的預測流程。我們的任務是將商城A的商品資料和商城B的商品資料進行對齊。如果我們把這個任務看成搜尋或者匹配過程的話,我們實際上是以商城A的商品資訊作為查詢條件,在商城B的所有商品中查詢要匹配的商品,同時對查詢的候選結果進行排序。當然這個過程也可以反過來,把商城B的商品資訊作為查詢條件。在我們具體應用中,一般是京東商品和別的渠道商品進行對齊。我們能獲取到的京東商品數量遠遠大於其他渠道的商品數量,所以一般把其他渠道的商品作為查詢條件,京東商品作為搜尋的候選集,這樣可以加速查詢匹配的過程。
對齊可以分成四步:召回、精排、粗排、重排。重排實際上是結果的後處理,主要是根據一些校驗規則過濾一些bad case。在匹配之前,我們會預先做一些圖譜schema的對齊工作,包括商品類目的對齊、屬性的對齊等等。粗排和精排都使用了有監督模型,確保排序結果的準確率,對於屬性值缺失的情況,會應用屬性抽取模型補齊商品屬性,強化商品自身的結構化資訊。
3. 資料集構建和業務評價方法
前面提到粗排和精排都使用了有監督模型,模型訓練需要一些正負例的資料。正例資料是互相匹配的商品pair,正例資料的獲取是先透過簡單的無監督商品相似度模型得到初步的候選集,再結合一些規則過濾後,透過眾包標註確認是否匹配而得到的。
負例資料是不匹配的商品pair。理論上我們可以透過隨機取樣輕易地獲得,但這樣得到負例樣本非常容易區分,不利於提高我們模型的魯棒性。我們希望能夠儘可能得到一些比較對抗性比較強負例,也就是很相似但又不匹配的樣本。我們可以利用電商網站中SPU和SKU的概念去構建大量對抗性的負例。比如我們開啟京東app要購買一個手機,通常在一個手機商品的頁面上,有很多不同配置的手機,比如記憶體大小顏色不同。SPU就是同一款商品的概念,SKU就是配置具體到不能再區分的單品。一般情況下同一款SPU下,不同SKU的商品之間僅在個別屬性上有區別,這樣的商品作為負例的話,對於模型區分的難度是很大的。
在具體業務中,我們可以離線評價模型的演算法效能指標,比如使用之前提到的TOPK命中率,但在線上業務中,TOPK命中率作為指標就不適合了。這是因為TOPK命中率只是把測試集中的商品樣本作為候選,但在線上檢測時,面對的是全量的商品庫,數量要大得多,同時還存在很多難以區分的商品。所以,我們線上是透過商品檢出率和檢出商品的準確率兩個指標評價模型的效果。我們以京東商品作為查詢條件為例,如果能在其他渠道的網站中能找到對應商品,那麼我們統計有對應商品的京東商品數量,然後計算這部分京東商品在全部京東商品當中的比例,這個比例就是商品檢出率。理論上兩個商品庫都可以以此方式分別計算檢出率,我們的實驗結果顯示,兩個商品庫的檢出率指標往往是正相關的,我們計算一個就可以了。
檢出商品的準確率,是將檢出的商品匹配結果進行抽樣後,然後標註計算正確結果的比例得到的。隨著線上商品上架下架,以及隨機取樣的差異,檢出準確率會有一定範圍的波動,我們會調整模型檢出閾值等,將準確率穩定在一定範圍內。在準確率穩定的情況下,就可以透過比較模型的檢出率來評估模型的效果了。
4. 召回與粗排部分
我們用到的精排模型是深度圖譜對齊模型,模型的運算量比較大,為提高運算效率,候選的商品數量應控制在一定範圍內,比如100以內。而召回是透過簡單的規則如判斷是否為同一品牌的商品等等實現的,召回商品的數量還是很多。因此,需要在中間加入粗排模型,我們使用了一個文字匹配的模型作為粗排模型。該模型訓練時,把商品的標題作為輸入,然後透過Bert編碼得到編碼結果後計算兩個商品向量的餘弦距離來進行匹配的。為了加速,我們將模型進行了蒸餾,提升模型的編碼速度。另外,我們還使用了向量索引進一步加速粗排的過程。
5. 精排演算法
最開始使用的精排演算法也是基於文字匹配來實現的。粗排用到的匹配模型只考慮了標題。人工對比商品時,我們會去比較商品的關鍵屬性,比如膝上型電腦,我們會去看CPU型號是否匹配,記憶體大小、螢幕大小等等是否一致。除了將標題進行編碼外,屬性值也要進行編碼,然後分別在兩個商品之間進行特徵匹配。因為商品的屬性很多,需要提取關鍵屬性,我們採用attention機制去自動學習各個屬性的權重。因為關鍵屬性可能不止一個,我們會保留屬性匹配特徵的多個加權結果,類似於Transformer裡面的Multi-Head機制。對於空值屬性,我們使用Mask將其權重直接設定為0。最後再基於關鍵屬性和標題的互動匹配特徵計算兩個商品之間的相似度。
以上模型的缺點有兩個:一是需要預先將屬性進行對齊;二是訓練集當中商品樣本在商品庫當中只佔據很小的比例,很多商品屬性值在訓練階段都沒有見過。因此我們希望引入圖譜表示學習對整體的商品庫進行建模,從而增強模型的效果。
這是現在線上使用的圖譜匹配模型的框架。我們會預先將商品SKU和對應的屬性值組織為圖結構,SKU與屬性值之間的關係為對應屬性類別。另外,已知的一些屬性值的對齊關係、品類的對齊關係也放在圖譜當中。因此圖譜當中主要是兩個型別的節點,商品SKU節點和屬性值節點,其中SKU節點將商品標題作為該節點的文字描述內容。
除了圖譜本身的結構化資訊外,模型會融合非結構化的資訊如文字等。很多論文將文字編碼結果直接作為GNN的輸入特徵,我們曾經嘗試將文字編碼器直接放在GNN前面去進行訓練,但這樣做模型的訓練速度非常慢,效果也不及預期。目前的做法分為兩步:先預訓練一個文字編碼器,然後將編碼結果作為GNN模組和匹配模組的輸入特徵。另外,這個文字編碼器同時還作為粗排模型。
圖譜模型與前面的文字匹配模型相比,有以下優勢:首先,該模型可以建模更復雜的商品關係。將商品和屬性構建為圖譜後,商品和商品之間的關係、屬性和屬性之間的關係都可以被建模;其次,可以透過圖譜的結構化表示,引入商品在商品庫中的全域性資訊。最後,圖譜對齊模型並沒有假定兩個圖譜各自的關係需要事先對齊,在本應用中,也無需預先進行屬性的對齊操作,在訓練過程中可以自動實現對齊。
6. 處理大規模圖譜
商品圖譜的數量一般比較大,我們考慮使用Inductive模型進行訓練。傳統的GCN等模型都是Transductive模型,需要全部節點參與訓練才能得到embedding表示。當節點數量很多時,會因為視訊記憶體或是記憶體的限制而無法進行訓練。此外,在網路結構發生改變時,模型會直接失效,新加入的節點都需要重新訓練才能得到對應的圖譜表示。這在實際業務場景中是不可接受的,因為商品會經常有上架下架的操作。
我們採用了Inductive模型,該模型會不斷聚合鄰接節點的資訊去更新目標節點的圖譜表示。具體是基於圖譜取樣來實現的,比如:先查詢得到圖中紅色節點的所有鄰接節點,當節點的鄰接節點非常多時,要對鄰接節點進行取樣,控制運算量。圖神經網路一般會訓練多層的表示特徵,每一層節點的表示由上一層的鄰接節點的表示聚合而來。經過多層的表示之後,也就集成了多跳的鄰接節點資訊。
7. 圖譜表示學習
在介紹我們的模型前,我們簡單回顧一下圖神經網路模型。主流的圖神經網路模型,都可以用Message Passing框架來進行描述,具體分為以下幾步:
- 第一步:鄰接節點決定向目標節點發送什麼樣的特徵,也就是圖中的Message函式,這個過程在圖譜當中的每條邊上單獨執行。
- 第二步:目標節點聚合收到的鄰接節點的Message特徵,也就是圖中的Aggregate函式,這個過程在圖譜當中的每個節點上單獨執行。
- 第三步:目標節點根據鄰接節點訊息聚合結果,以及節點自身的特徵,更新節點在網路下一層中的特徵表示。也就是圖中的Update函式,也是圖譜中每個節點都執行一遍。
這也是很多圖深度學習框架如DGL等設計其API的基礎。
在商品圖譜中,圖譜表示學習必須要考慮到實體之間的關係,我們構建的圖中,大部分實體關係都是商品屬性類別。前面的模型也提到,並不是所有的屬性都對商品匹配有幫助,需要提取關鍵屬性。我們採用的做法是設計特定的Aggregate聚合函式,使得聚合鄰接節點的Message的時候,各個鄰接節點的重要性權重由每條邊上的Relation來決定。Message函式和Update函式我們直接使用線性變換來實現。
在公式中,mj是目標節點i收到鄰接節點j的訊息,聚合訊息時,會有兩個權重:第一個權重αij是根據鄰接節點j和目標節點i的訊息向量mj和mi拼接後計算得到的。在具體圖譜中,這個權重代表了標題和屬性值的匹配相關度,通常在標題中出現的屬性值重要程度越高。第二個權重βij是根據節點連線邊上的關係型別計算得到的,每個關係型別也用一個向量進行表示,然後基於這個關係向量去計算得分。兩個權重相乘後,最終得到每個鄰接節點在Aggregate函式中的權重。
8. 圖譜匹配演算法
我們在一開始採用了向量對齊的方式實現圖譜對齊,我們使用L1距離作為兩個向量距離的度量。在Embedding Loss的影響之下,正樣本之間的距離會越來越近,而負樣本之間會保持一定的距離γ。與前面的文字匹配模型相比,本模型的檢出率相對提升了150%以上。但是該模型有一個缺點,強行拉進兩個圖譜某些樣本之間的距離,會破壞原始圖譜表示。另外,這個模型利用到的文字資訊、鄰近節點資訊都要少一些。
這是我們後來使用的匹配模型,除了將候選實體直接進行匹配外,還要利用鄰接節點的匹配資訊。這其實是基於一個假設,如果兩個圖譜當中的實體互相匹配的話,它們的鄰接節點往往也有很多節點也存在匹配關係。
具體實現的時候,我們除了用到每個節點的GNN表示外,還要利用鄰接節點的GNN表示進行匹配。提取兩個向量的匹配特徵時,主要是計算向量之間的餘弦距離,得到兩個向量的相似度得分。因為每個節點的鄰接節點有很多個,兩個節點的鄰接節點兩兩計算會形成一個矩陣。我們需要對矩陣的關鍵資訊進行提取,對於每個鄰接節點來說,與之對應匹配的鄰接節點一般也只有一個。這樣的話,我們透過Max Pooling就可以提取出最匹配的鄰接節點的相似度得分,這個Max Pooling在行、列方向都會進行。另外,不是所有的鄰接節點都對最終是否對齊的判定有幫助,在Aggregate過程中得到的鄰接節點的權重,可以在這個地方用於確定鄰接節點的權重,這個權重與前一步鄰接節點的相似度得分Max Pooling結果進行相乘。最後,為了進一步提取鄰接節點相似度得分的關鍵資訊,我們使用Kernel pooling,它既保留了關鍵資訊,又沒有引入過多噪聲。最終預測得分要同時融合Kernel Pooling提取的鄰接節點匹配特徵、兩個節點的GNN表示的餘弦相似度特徵、兩個節點文字表示的餘弦相似度特徵計算得到。與向量對齊模型相比,本模型的檢出率又有進一步提升。
9. 商品屬性抽取
很多第三方賣家的商品屬性填值沒有那麼規範,會存在很多商品屬性的缺失或者錯誤。如右側圖片所示:CPU型號等關鍵資訊都集中放在一些選項卡或者標題當中,沒有放在具體屬性裡面。因此我們要預先對商品進行屬性值抽取。商品屬性的補全可以大大提升模型的檢出率,重點品類的檢出率能提升3到5倍。我們使用序列標註模型實現在商品標題當中的屬性值提取。
商品屬性抽取是一個典型的NER任務,因為商品的屬性通常比較多,為了加快計算我們把整個屬性抽取分為兩步:第一步是預測商品標題中有哪些潛在的屬性值;第二步,再去預測這些潛在屬性值的類別。在商品屬性提取時,使用商品的品類資訊對於效果提升有一定幫助,品類的embedding特徵會幫助我們在標題中要關注哪些欄位。另外,我們根據已知的屬性值,透過匹配的方式能在標題中找到一些候選的片段,利用這些候選片段可以提升屬性抽取的召回率。商品屬性預測也是一個比較大的話題,具體細節就不展開了。
04
總結與展望
1. 總結
本次分享介紹了透過融合了文字表示和圖譜結構化表示的實體對齊模型,在電商領域中實現了商品之間的對齊任務,並利用商品屬性抽取進一步提升了圖譜對齊的檢出率。
2. 展望
接下來的工作會考慮以下幾個方面:
- 在商品圖譜中引入更多的商品關係以及通用知識,進一步提升實體對齊的演算法效能;
- 引入商品影象等特徵,實現多模態圖譜對齊;
- 將屬性抽取的特徵更好地應用於圖譜對齊過程中;
- 更好的融合結構化和非結構化資訊;
- 提升小樣本類別的效果。
05
精彩問答
Q:資料schema對齊過程中,schema資料是人工對齊的嗎?
A:schema對齊目前是採用無監督的方式。因為商品數量比較大,透過簡單的無監督模型,效果已經比較好了。也可以結合人工稽核去提升schema對齊的準確率。
Q:標註過程是需要人工的嗎?
A:匹配結果標註是需要人工參與的。
Q:正負樣本的選取過程中,它的比例是如何確定的?負樣本的生成,有什麼策略?
A:負樣本的生成主要利用SPU下的不同的SKU來生成,每個正樣本都會針對性的生成負樣本,正樣本商品所在SPU中,其它的SKU商品都可以作為負例,這類負例樣本的對抗性更強。也有隨機抽取、batch內計算相似度取樣等方式。現在正負樣本比例是1比10,這個比例是根據實驗確定的。
Q:表示學習和對齊的模型中,屬性是怎麼學習的?
A:商品屬性會有對應的embedding向量表示,這個embedding在訓練過程中是參與最佳化的。在初始化的時候,我們會透過BERT編碼計算所有對應屬性值embedding向量,然後平均後作為屬性初始化的embedding值。
Q:實體對齊的效率和效能會不會受到實體節點數量的影響?超大規模的節點對整個效能會有多大的影響呢?
A:目前處理速度要慢一些,我們做了幾百個品類的對齊,對齊過程需要幾個小時,運算量還是很大的,接下來會進一步最佳化處理效率。
Q:數值型的資料是如何在知識圖譜中使用的呢?
A:目前沒有單獨處理數值型資料,會統一把這類資料當作文字資料來處理。
Q:商品實體對齊過程中結構資訊佔比有多大?它對實驗效果有多大影響?
A:這個可以對比圖譜對齊和文字匹配模型的實驗效果:與未使用結構化資訊的文字匹配模型相比,使用結構化資訊的向量對齊模型檢出率相對提升150%以上。
Q:不同品類的對齊用哪些屬性有啥策略,這些是人工定義的還是自動生成的?
A:目前沒有對類別進行特殊的處理,所有商品類別都在一個模型中進行訓練。
Q:圖注意力網路如何融入邊的資訊,透過邊的資訊來影響鄰近節點的權重?
A:如前文介紹,我們有α和β兩個係數,α可以看成標題和屬性的匹配程度,β是根據屬性類別,也就是邊的型別來判斷屬性相似度。這個權重一方面會在聚合鄰近節點時用到,另一方面在最後鄰近節點匹配時也會用到。
Q:模型上線部署時,模型推理效率的問題是怎麼解決的呢?
A:透過粗排模型減少候選的數量。此外,在文字編碼時,可以預先去快取一些高頻屬性值編碼,這樣在第二步訓練時這部分內容可以直接作為輸入,就不再單獨計算了。
Q:請問老師schema構建的過程中,有用propagate這種本體構建工具嗎?
A:沒有用到。因為大部分資料是商品和屬性之間關係,這個關係是商城中天然的結構化的資料。
Q:正負樣本的比例不均衡的話,如何消除樣本對結果的影響?
A:目前正負樣本的比例是經過實驗得到的。如果負樣本很多的話,確實會對召回率、檢出率會產生影響,需要在業務上和效果上需要一個平衡。
Q:在使用圖結構融合時,有沒有試過把兩個實體的多個屬性拼接成文字,轉化成文字相似匹配的方式去做?
A:嘗試過類似的模型,因為這種模型可以提前互動文字匹配特徵,效果也不錯,但是商品屬性太多,有時候會影響計算效率。另外圖神經網路的優勢是可以融入結構化的資訊。
Q:商品關係裡面會有除了屬性以外的其他關係嗎?
A:我們還用到了屬性對齊關係,品類歸屬關係等等。另外SPU關係也用到了。
Q:在RGCN模型訓練中,如果圖資料比較小,會影響embedding的效果嗎?多大規模的資料訓練會比較好呢?
A:我們沒有使用RGCN模型。
Q:在訓練過程中,如果圖資料會比較小的話,該怎麼處理?因為TransE等模型對於大規模資料效果比較好,但是小樣本資料訓練的話,該怎麼去處理呢?
A:小樣本的情況下,僅透過圖的結構化資訊是很難保證效果的,可以把最佳化的重點放到額外資訊利用上,比如文字資訊等等,這時候可以利用BERT等預訓練的模型。對於圖譜本身而言,樣本數量少的話,很難達到預期效果。在小樣本的情況下,文字資訊可能要更重要一些。
Q:在這個訓練過程中,如果結構資訊不強的長尾實體,即:3元組比較小、比較少。這類長尾實體的匹配,您有什麼好的解決辦法嗎?
A:對於結構資訊不強的長尾實體,要設法對其進行資訊補全,比如我們做的商品屬性抽取的工作就是補全結構化資訊。另外還是儘可能利用到額外的資訊提升效果。
Q:在實體匹配的過程中,會提前去看文字的匹配效果嗎?
A:會提前看。我們使用的粗排模型就是文字匹配模型,同時還作為圖神經網路模型的初始化輸入,直接影響最終效果。為了在粗排階段不損失效能,我們訓練粗排模型,使得Top100命中率達到一個比較高的效果,比如99%以上,也就是粗排的前100結果中基本都能包含正確結果。
今天的分享就到這裡,謝謝大家。
在文末分享、點贊、在看,給個3連擊唄~
分享嘉賓:
分享嘉賓:趙學敏博士 京東科技
編輯整理:蔡麗萍 TRS
出品平臺:DataFunTalk