新聞中心

EEPW首頁 > 設(shè)計應(yīng)用 > 如何建立中游領(lǐng)域性KG(知識圖)

如何建立中游領(lǐng)域性KG(知識圖)

作者:高煥堂 時間:2025-04-19 來源:EEPW 收藏


本文引用地址:http://2s4d.com/article/202504/469577.htm

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所示。

1745023064750313.png

圖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 所示:

1745023227296056.png

圖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所示。

1745027229277449.png

圖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回合,輸出如下:

image.png

于是,訓(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所示:

1745027321476441.png

茲以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í)行時,輸出如下:

image.png

這先讀取中游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 所示:

1745027556317639.png

圖5 更多下游應(yīng)用KG

在這下游KG 模型里,將客人、食材與食譜建構(gòu)成異質(zhì)圖,導(dǎo)入GNN與 KMeans推薦模型,一旦找到CF_links,就能推薦創(chuàng)新食譜給客人,也能提供創(chuàng)新制程(SOP)給廚師(可能是機器人),不亦美哉。

(本文來源于《EEPW》



關(guān)鍵詞: 202504

評論


技術(shù)專區(qū)

關(guān)閉