Kumo的使用方式在这边有一个简单的例子:https://colab.research.google.com/drive/1WOyMm8gdT1lwrmgRjJUSwb940sn6jUM4#scrollTo=z6FzaBV6jZAY
基本流程是:
* 用户导入数据表,Kumo会把关系型数据转化成图数据:
* 每一行是一个实体
* 行与行的外键约束就是边。就是表示Join
* 用户通过PQL提交查询,比如:
* PREDICT LIST_DISTINCT(transaction.StockCode, 0, 7, days) RANK TOP 12 FOR EACH customer.CustomerID
* Construct a query to predict which products (StockCode) the user is most likely to interact with in the next 7 days, for all customers in the customer table
* 主要提供三种类型的任务:
* link prediction
* regression
* classification
* 生成给Relational GraphTransformer的输入,利用的是in-context learning
* 包括一些(subgraph, label) pair,表示的是根据这些subgraph,预期预测这样的label
* sample针对本次prediction的subgraph
* 这里sample的内容可以根据时间做过滤,比如通过过去一个月/七天的数据做prediction,这些条件是可以通过PQL来定义的
* 把上一步的输入丢给KumoRFM,生成Label。这里涉及到三点:
* row embedding,Kumo会针对每一列数据不同的类型生成对应的embedding,比如text类型,timestamp类型,enum类型等。然后会过一个transformer把不同列的embedding合并,得到这一行的embedding。
* table-wise interaction,这里是把子图放到Relational Graph Transformer中,从而获取子图级别的embedding
* In-context learning,把sample得到的training subgraph和context subgraph生成子图embedding,加上training subgraph对应的label。一起放到一个transformer架构的模型中,生成最终的答案
- 这里的online context generation中还有一个优化点:
- 他们会把节点历史的label也作为一个表保存下来,这里我理解就也通过边把一个节点和他的历史的label连起来了。
- 这样在sample的时候,就可以结合节点历史的信息,以及节点邻居的label,来预测新的label。
和GraphGPT那种先GNN再LLM的架构基本是一样的,主要区别是加上了in-context learning,并且限制了任务的类型。
能够感觉到是比较大的功能,并且这个工作个人感觉很有意义,利用了模型的in-context learning的能力,来支持泛化。
* 并不属于知识图谱那种推理问答类,而是更偏向推荐一些。
* benchmark中好像并没有和一些前沿推荐模型的对比。这里主要concern的点是:
* KumoRFM有比较好的易用性,同时提供了不错的性能。对于一些中小型公司应该比较有吸引力
* 但是这里的效果如果不够好的话,可能在大厂里落地的可能性就比较小?
* 对sample/数据更新的链路要求比较高
可能还有一点想到的是,这里主要面向的是子图,也就是entity-level的任务。如果利用GraphTransformer的全局数据处理能力,或者一些其他的能够利用全局图结构的模型。是不是可以泛化到,去做全局性的任务,比如分析购买趋势等?
* 以及泛化到与数据对话,比如xxx时间段的购买趋势,描述xxx好友在做什么,分析两个点的关系等
* 如果只是单纯的泛化到对话,是不是又回到了GraphGPT的那种?那这里能做的点还有什么吗?
* 或者是放弃泛化直接对话,或者是针对一些常见任务搞特化的方案?
* 比如prediction类的任务,可能直接通过embedding这种会比较好
* 分析关系,溯源推理类,可能利用知识图谱相关能力会更好,比如路径查找+解释
* 是否还有其他类任务?
文章评论