本文引用地址:
1 复习:上游行业性KG
在前一期《如何善用通用性行业KG》文章里,曾举例说明了基于FlavorGraph 通用性上游KG,来建立下游任务型KG。其中,通用性行业KG(如Flavor Graph)蕴含丰富的行业共享性知识,而企业则针对小领域的特殊需求(如拉面的烹饪过程、食材搭配、口味调配等)。这种模式是一种知识驱动的AI 迁移学习,其建立的企业KG(如FoodKG)更具针对性,能加速AI针对企业目标的应用。其架構如下图1所示。
图1 行业KG支持下游任务其中的核心任务是:将行业FlavorGraph的节点嵌入(node embedding)作为企业FoodKG + GCN的初始特征(initial features),让外部的行业性知识来增强本地图谱的表现。初始特征来自于成熟的知识图谱,代表了节点间的隐含语义与结构关系。这种初始化能显着提升模型在各行业的学习能力和性能。
2 三层KG架构設計
从上图-1里,可以看到其为两层KG架构。其中,下游任务KG直接使用上游任务KG,两者常常会出现过度相依,降低了灵活性。此时,可以考虑建立三层KG架构,其添加了中间层KG,带来上游与下游KG之间的松耦合(loose coupling)关系,创造了整体架构的灵活性。兹说明各层KG 架构设计要点,如下:
第一层:上游通用性行业大KG
设计要点:利用开源的FlavorGraph行业大KG+GNN。建立「食材↔分子成分↔味觉特性」的三重组关系,表达食材与其主要香气化学物的对应关系。
第二层:中游特定领域KG
设计要点:建构以特定领域的「共现」关系,例如在同一份发酵菜单中出现的食材群。自定义发酵食谱共现图,使用共现关联矩阵或DGL异质图作为模型训练素材。使用GraphSAGE/GAT/GCN训练contextual食材嵌入,让语意更贴近文化与地方搭配习惯。
第三层:下游任务型应用KG
设计要点:聚焦在人与物的关系:顾客↔食材,建立异质图。加入偏好分数、食用纪录、健康因子等个人化属性。融合GNN score(语意内积)与群体差异(CF_ link)做出创新食谱、食材推荐。
3 承先启后:设计中游领域性KG
A.认识上游KG的既有架构
首先观察通用性FlavorGraph 知识图里,内含两种节点(Node):食材(Ingredient)和风味化合物(Flavor compound)。也含有两种边(Edge):ingr-ingr共现边和ingr-fcomp成分边。如下图2 所示:
图2 上游KG的架构这两种边协助FlavorGraph架构起跨食材与化合物的知识网络。其涵意如下:
● ingr-ingr共现边:即 食材- 食材 之共现关系
● 含义:这条边代表两种食材之间的风味分子相似性(Flavor Compound Similarity)。
● 使用场景:当两种食材具有类似的化学风味分子(Flavor compounds),这FlavorGraph就会建立一条ingr-i表示它们可能能够很好地搭配(互补)。
● 应用例子:洋葱与大蒜可能具有共同的硫化物化合物,因此在许多料理中常一起使用。
● ingr-fcomp成分边:即 食材- 风味化合物 之包含关系
● 含义:这条边表示某个食材中实际包含某个特定的风味化合物(或称:风味分子)。
● 使用场景:建立从食材节点(Ingredient node)指向风味化合物节点(Flavor compound node)的连结,描绘食材的化学组成。
● 应用例子:香菜(Cilantro)会连结到decanal 或linalool这类风味化合物。
以表格说明如下:
以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})
这种通用性行业KG蕴含了丰富的行业共享性知识。
B.中游KG的架構設計
一旦充分熟悉了上游大KG 的架构了,就能承先启后、继往开来,设计出一个中游领域性KG了。例如,基于FlavorGraph 的预训练嵌入(Embedding)来建立发酵食品的领域性(中游) 食谱↔食材KG ,它将具备语意丰富的风味知识结构。从上图-2里,可以观察到,FlavorGraph的核心节点是:食材,而其 食材↔食材 边是分子层级风味成分的相似性之关联,又称为:下层(分子)的共现性。
接着,仍以食材为中心,添加上层视角的观察,会发现到:上层(食谱)的共现性。亦即,两种食材出现于同一食谱的共现性。这就构成一个中游KG的基础架构了。如下图3所示。
图3 中游KG的架构兹以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)
现在已经在Python 代码里定义好了一个异构图(Heterograph)。接着,就能拿它(异构图)来训练GNN模型。例如,其完整代码执行时,训练GIN模型100回合,输出如下:
于是,训练好了中游KG模型,并且生成各节点的嵌入表示,储存于mid_ingredient_embeddings.csv档案里。
4 下游任务KG 应用开发
这是最贴近消费者的下游应用层,可以将顾客数据(如偏好、点餐行为等)建成下游KG,结合中游KG模型学得的食材嵌入(Embedding),透过GNN预测出每位顾客对食材的潜在偏好。我们更导入传统策略如K-means分群、和反事实连结(Counterfactual link)推荐,成为一个商业性的AI推荐引擎。例如,可以建立一个下游KG,如下图4所示:
兹以Python代码( 片段) 表示如下:
# === 建构下游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()}
# 食材節點嵌入來自中游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
例如,其完整代码执行时,输出如下:
这先读取中游KG 的节点嵌入,作为下游KG 的初期节点特征。接着,对全部客人(customer)节点特征,进行K-means分群(Clustering),然后探索出反事实连结,而输出推荐内容。
5 结语
上游大KG设计思维是,选择具可信度的领域知识来源(如FlavorGraph、专业食材文献),着重于「可转为语意向量」的属性建构,例如分子、味觉分类、功能卷标。其设计时应尽量通用与可重复使用,让其他任务也能延伸引用。亦即,整合了化学组成、风味关联,建立食材之间的语意知识网络。
中游领域KG设计思维是,以「任务情境」为驱动(例如:发酵菜单、饮食场景),其图结构可简单(如共现)但要具有代表性与数据源依据,可以从同一菜单中出现的食材建立双边共现关系。亦即,捕捉到「能共煮」、「风味类似」等潜在语意,为后续推荐提供基础。下游应用任务KG设计思维是,聚焦在人与物的关系:顾客↔食材,建立异质图。加入偏好分数、食用纪录、健康因子等个人化属性。并融合GNN score(语意内积)、K-Means(分群)与群体差异(CF_link)做出推荐。例如,在 食谱↔食材 的包含边,添加一个边属性(attribute):烹煮顺序。如下图5 所示:
图5 更多下游应用KG在这下游KG 模型里,将客人、食材与食谱建构成异质图,导入GNN与 KMeans推荐模型,一旦找到CF_links,就能推荐创新食谱给客人,也能提供创新制程(SOP)给厨师(可能是机器人),不亦美哉。
0 条