如何建立中游領(lǐng)域性KG(知識圖)
1 復(fù)習(xí):上游行業(yè)性KG
在前一期《如何善用通用性行業(yè)KG》文章里,曾舉例說明了基于FlavorGraph 通用性上游KG,來建立下游任務(wù)型KG。其中,通用性行業(yè)KG(如Flavor Graph)蘊含豐富的行業(yè)共享性知識,而企業(yè)則針對小領(lǐng)域的特殊需求(如拉面的烹飪過程、食材搭配、口味調(diào)配等)。這種模式是一種知識驅(qū)動的AI 遷移學(xué)習(xí),其建立的企業(yè)KG(如FoodKG)更具針對性,能加速AI針對企業(yè)目標的應(yīng)用。其架構(gòu)如下圖1所示。
圖1 行業(yè)KG支持下游任務(wù)
其中的核心任務(wù)是:將行業(yè)FlavorGraph的節(jié)點嵌入(node embedding)作為企業(yè)FoodKG + GCN的初始特征(initial features),讓外部的行業(yè)性知識來增強本地圖譜的表現(xiàn)。初始特征來自于成熟的知識圖譜,代表了節(jié)點間的隱含語義與結(jié)構(gòu)關(guān)系。這種初始化能顯著提升模型在各行業(yè)的學(xué)習(xí)能力和性能。
2 三層KG架構(gòu)設(shè)計
從上圖-1里,可以看到其為兩層KG架構(gòu)。其中,下游任務(wù)KG直接使用上游任務(wù)KG,兩者常常會出現(xiàn)過度相依,降低了靈活性。此時,可以考慮建立三層KG架構(gòu),其添加了中間層KG,帶來上游與下游KG之間的松耦合(loose coupling)關(guān)系,創(chuàng)造了整體架構(gòu)的靈活性。茲說明各層KG 架構(gòu)設(shè)計要點,如下:
第一層:上游通用性行業(yè)大KG
設(shè)計要點:利用開源的FlavorGraph行業(yè)大KG+GNN。建立「食材?分子成分?味覺特性」的三重組關(guān)系,表達食材與其主要香氣化學(xué)物的對應(yīng)關(guān)系。
第二層:中游特定領(lǐng)域KG
設(shè)計要點:建構(gòu)以特定領(lǐng)域的「共現(xiàn)」關(guān)系,例如在同一份發(fā)酵菜單中出現(xiàn)的食材群。自定義發(fā)酵食譜共現(xiàn)圖,使用共現(xiàn)關(guān)聯(lián)矩陣或DGL異質(zhì)圖作為模型訓(xùn)練素材。使用GraphSAGE/GAT/GCN訓(xùn)練contextual食材嵌入,讓語意更貼近文化與地方搭配習(xí)慣。
第三層:下游任務(wù)型應(yīng)用KG
設(shè)計要點:聚焦在人與物的關(guān)系:顧客?食材,建立異質(zhì)圖。加入偏好分數(shù)、食用紀錄、健康因子等個人化屬性。融合GNN score(語意內(nèi)積)與群體差異(CF_ link)做出創(chuàng)新食譜、食材推薦。
3 承先啟后:設(shè)計中游領(lǐng)域性KG
A.認識上游KG的既有架構(gòu)
首先觀察通用性FlavorGraph 知識圖里,內(nèi)含兩種節(jié)點(Node):食材(Ingredient)和風味化合物(Flavor compound)。也含有兩種邊(Edge):ingr-ingr共現(xiàn)邊和ingr-fcomp成分邊。如下圖2 所示:
圖2 上游KG的架構(gòu)
這兩種邊協(xié)助FlavorGraph架構(gòu)起跨食材與化合物的知識網(wǎng)絡(luò)。其涵意如下:
● ingr-ingr共現(xiàn)邊:即< 食材- 食材> 之共現(xiàn)關(guān)系
● 含義:這條邊代表兩種食材之間的風味分子相似性(Flavor Compound Similarity)。
● 使用場景:當兩種食材具有類似的化學(xué)風味分子(Flavor compounds),這FlavorGraph就會建立一條ingr-i表示它們可能能夠很好地搭配(互補)。
● 應(yīng)用例子:洋蔥與大蒜可能具有共同的硫化物化合物,因此在許多料理中常一起使用。
● ingr-fcomp成分邊:即< 食材- 風味化合物> 之包含關(guān)系
● 含義:這條邊表示某個食材中實際包含某個特定的風味化合物(或稱:風味分子)。
● 使用場景:建立從食材節(jié)點(Ingredient node)指向風味化合物節(jié)點(Flavor compound node)的連結(jié),描繪食材的化學(xué)組成。
● 應(yīng)用例子:香菜(Cilantro)會連結(jié)到decanal 或linalool這類風味化合物。
以表格說明如下:
邊類型 | 節(jié)點→節(jié)點類型 | 關(guān)系意義 |
ingr-ingr | Ingredient?Ingredient | 風味分子上的相似性或共現(xiàn)性 |
ingr-fcomp | Ingredient→FlavorCompound | 食材中實際含有的風味化合物成分 |
以Python 代碼(片段)表示如下:
data_dict = {( 'ingredient', 'cooccur', 'ingredient'): (torch.
tensor(src_cooccur), torch.tensor(dst_cooccur)),( 'ingredient', 'chem_sim', 'ingredient'): (torch.
tensor(src_chem), torch.tensor(dst_chem)),}
g = dgl.heterograph(data_dict, num_nodes_dict={'ingredient': num_nodes})
這種通用性行業(yè)KG蘊含了豐富的行業(yè)共享性知識。
B.中游KG的架構(gòu)設(shè)計
一旦充分熟悉了上游大KG 的架構(gòu)了,就能承先啟后、繼往開來,設(shè)計出一個中游領(lǐng)域性KG了。例如,基于FlavorGraph 的預(yù)訓(xùn)練嵌入(Embedding)來建立發(fā)酵食品的領(lǐng)域性(中游)<食譜?食材KG>,它將具備語意豐富的風味知識結(jié)構(gòu)。從上圖-2里,可以觀察到,F(xiàn)lavorGraph的核心節(jié)點是:食材,而其< 食材?食材>邊是分子層級風味成分的相似性之關(guān)聯(lián),又稱為:下層(分子)的共現(xiàn)性。
接著,仍以食材為中心,添加上層視角的觀察,會發(fā)現(xiàn)到:上層(食譜)的共現(xiàn)性。亦即,兩種食材出現(xiàn)于同一食譜的共現(xiàn)性。這就構(gòu)成一個中游KG的基礎(chǔ)架構(gòu)了。如下圖3所示。
圖3 中游KG的架構(gòu)
茲以Python 代碼( 片段) 表示如下:
# Prepare graph data
graph_data = {
('ingredient', 'cooccur', 'ingredient'): (torch.
tensor(co_src), torch.tensor(co_dst)),( 'ingredient', 'chem_similar', 'ingredient'):
(torch.tensor(chem_src), torch.tensor(chem_dst)),}
# Build heterograph
g = dgl.heterograph(graph_data)
現(xiàn)在已經(jīng)在Python 代碼里定義好了一個異構(gòu)圖(Heterograph)。接著,就能拿它(異構(gòu)圖)來訓(xùn)練GNN模型。例如,其完整代碼執(zhí)行時,訓(xùn)練GIN模型100回合,輸出如下:
于是,訓(xùn)練好了中游KG模型,并且生成各節(jié)點的嵌入表示,儲存于mid_ingredient_embeddings.csv檔案里。
4 下游任務(wù)KG &應(yīng)用開發(fā)
這是最貼近消費者的下游應(yīng)用層,可以將顧客數(shù)據(jù)(如偏好、點餐行為等)建成下游KG,結(jié)合中游KG模型學(xué)得的食材嵌入(Embedding),透過GNN預(yù)測出每位顧客對食材的潛在偏好。我們更導(dǎo)入傳統(tǒng)策略如K-means分群、和反事實連結(jié)(Counterfactual link)推薦,成為一個商業(yè)性的AI推薦引擎。例如,可以建立一個下游KG,如下圖4所示:
茲以Python代碼( 片段) 表示如下:
# === 建構(gòu)下游KG ===g = dgl.heterograph({
('customer', 'prefers', 'ingredient'): (torch.tensor(pref_src), torch.tensor(pref_dst)),})
# === 載入中游食材嵌入 ===
emb_df = pd.read_csv("mid_ingredient_embeddings.csv", index_col=0)name_to_emb = { name: torch.tensor(row.values, dtype=torch.float32) for name, row in emb_df.iterrows()}
# 食材節(jié)點嵌入來自中游KG
torch.manual_seed(10)
ingredient_feats = torch.stack([name_to_emb[name] if name in name_to_emb else torch.randn(16) for name in ingredients])
g.nodes['ingredient'].data['feat'] = ingredient_feats
例如,其完整代碼執(zhí)行時,輸出如下:
這先讀取中游KG 的節(jié)點嵌入,作為下游KG 的初期節(jié)點特征。接著,對全部客人(customer)節(jié)點特征,進行K-means分群(Clustering),然后探索出反事實連結(jié),而輸出推薦內(nèi)容。
5 結(jié)語
上游大KG設(shè)計思維是,選擇具可信度的領(lǐng)域知識來源(如FlavorGraph、專業(yè)食材文獻),著重于「可轉(zhuǎn)為語意向量」的屬性建構(gòu),例如分子、味覺分類、功能卷標。其設(shè)計時應(yīng)盡量通用與可重復(fù)使用,讓其他任務(wù)也能延伸引用。亦即,整合了化學(xué)組成、風味關(guān)聯(lián),建立食材之間的語意知識網(wǎng)絡(luò)。
中游領(lǐng)域KG設(shè)計思維是,以「任務(wù)情境」為驅(qū)動(例如:發(fā)酵菜單、飲食場景),其圖結(jié)構(gòu)可簡單(如共現(xiàn))但要具有代表性與數(shù)據(jù)源依據(jù),可以從同一菜單中出現(xiàn)的食材建立雙邊共現(xiàn)關(guān)系。亦即,捕捉到「能共煮」、「風味類似」等潛在語意,為后續(xù)推薦提供基礎(chǔ)。下游應(yīng)用任務(wù)KG設(shè)計思維是,聚焦在人與物的關(guān)系:顧客?食材,建立異質(zhì)圖。加入偏好分數(shù)、食用紀錄、健康因子等個人化屬性。并融合GNN score(語意內(nèi)積)、K-Means(分群)與群體差異(CF_link)做出推薦。例如,在<食譜?食材> 的包含邊,添加一個邊屬性(attribute):烹煮順序。如下圖5 所示:
圖5 更多下游應(yīng)用KG
在這下游KG 模型里,將客人、食材與食譜建構(gòu)成異質(zhì)圖,導(dǎo)入GNN與 KMeans推薦模型,一旦找到CF_links,就能推薦創(chuàng)新食譜給客人,也能提供創(chuàng)新制程(SOP)給廚師(可能是機器人),不亦美哉。
(本文來源于《EEPW》202504)
評論