图谱实战 | 京东商品图谱构建与实体对齐
轉載公眾號 | ?DataFunTalk?
分享嘉賓:趙學敏博士?京東科技
編輯整理:蔡麗萍?TRS
出品平臺:DataFunTalk
導讀:在電商企業采購和運營過程中,如果要想掌握商品的實時價格等行情信息,就需要對齊各個電商網站的商品。由于各個電商網站的運營體系不同,網站的類目體系、商品屬性等等往往存在很大差異,需要將這些實體信息進行統一的對齊和匹配。此外,還需要考慮在數以億級的商品體量下,商品信息有各種錯誤的情況下如何提升算法效果。本文將介紹商品圖譜構建與表示、實體對齊等技術在電商領域的一些具體實踐和應用。
主要內容包括:
背景介紹
技術進展
商品圖譜中的實體對齊
總結與展望
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結果中基本都能包含正確結果。
今天的分享就到這里,謝謝大家。
分享嘉賓:
OpenKG
OpenKG(中文開放知識圖譜)旨在推動以中文為核心的知識圖譜數據的開放、互聯及眾包,并促進知識圖譜算法、工具及平臺的開源開放。
點擊閱讀原文,進入 OpenKG 網站。
總結
以上是生活随笔為你收集整理的图谱实战 | 京东商品图谱构建与实体对齐的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文浅尝 | 基于复杂查询图编码的知识库
- 下一篇: 阿里P8架构师谈:Quartz调度框架详