FastPath 是一种无需训练的轻量算法,用随机签名网格把带时间戳的事件历史嵌入向量空间。它通过时间平滑和近期衰减,让模型不仅知道发生了什么,还知道何时发生。文章详解原理,并给出配置要点。
时间戳里藏着信息。同样是“吃了阿司匹林”,三天前吃和一年前吃,含义完全不同。传统嵌入方法往往只关注事件内容,把时间维度丢掉。FastPath 算法试图解决这个问题:它把带时间戳的事件序列变成向量,让“什么时候发生”成为向量的一部分。
FastPath 来自 Neo4j 的 Aura Graph Analytics 团队,无需训练,轻量高效。名字里的“Fast”名副其实——它不学习任何参数,只做几次确定的矩阵运算。
FastPath 的设计思路很直接。想象一个参考网格:每一列代表一个时间段,每一行代表一种事件类型(比如“服用阿司匹林”)。网格的每个交叉点放一个随机向量,叫做“锚签名”。同一类型、同一时间段的事件共享同一个签名;不同类型、或时间差距很大的事件,签名几乎独立。
这个网格只生成一次,所有节点复用,所以效率极高。


真实事件不会恰好落在网格点上。所以每个事件的向量,是它附近几个网格点签名的加权平均。平滑窗口决定取几个邻居,平滑速率决定权重集中度。这样,时间戳稍微一动,向量也跟着微调,不会跳变。
平滑速率调高,事件落进硬性时间段;调低,几秒和几天前的事件在向量空间里也可以很接近。

每个基础节点(如一个用户、一位病人)的最终向量,是所有事件向量的时间衰减加总。越靠近输出时间的事件权重越高,越久远衰减越厉害。衰减因子控制速度:大则只重近期,零则所有事件同等对待。
平滑和衰减作用在不同轴上:平滑决定单个事件在空间中的位置,衰减决定它对整体的贡献。


为了验证算法,作者给了一个能手工计算的小例子。病人 Joe,输出时间为 10。他有四个事件:第 3、9、10 天吃阿司匹林,第 0 天做了检查。经过过滤,第 10 天的事件因发生在输出时间点本身被排除,第 0 天的事件因太旧被排除。最后留下两次阿司匹林:一次 7 天前,一次 1 天前。
两次事件类型相同,差异完全来自时间。在四维空间里,老事件向量约 (−0.09, 1.00, 0.76, −0.76),新事件约 (1.00, −0.24, 0.24, 1.00)。同样的事件,仅仅因为时间不同,向量完全不同。






回到例子,接着进行近期衰减:老事件权重 0.5,新事件 0.9,加总得到 Joe 的最终向量。下游模型就吃这个向量。


如果把所有时间戳和输出时间一起平移 100 天,每个相对时间差不变,最终向量一模一样。模型只关心“多久之前”,不关心墙上的日历。这意味着用去年数据训练的模型,可以直接用于今年,无需重新训练。
FastPath 没有消息传递,每个旅程独立嵌入,不学习任何东西,输出是单一路径的确定性函数。按图神经网络的标准,它几乎算不上图方法。
但这恰恰是优点。独立性带来天然并行,结果稳定可复现;确定性带来时间等变性。输入仍然是天然的图结构:一个基础节点,拖着一条穿过时间的事件节点路径。图数据库用 Cypher 的量化路径模式可以高效表达和验证。上游可以用 FastRP 从事件上下文学习更丰富的特征,下游可以用 KNN 把“相似”关系写回图里。FastPath 虽然核心是随机投影,但能很好地嵌入图分析工作流。
参数有具体的几何效果。从无衰减、无平滑的配置开始,加入衰减时旧事件缩小,加入平滑时相邻时间混合、轨迹旋转。同一旅程在四种参数设置下会落到四个不同位置。配置不是脚注,而是建模的一部分。





FastPath 容易跑,也容易配错。四个坑最常见。
衰减和平滑作用在原始时间差上。如果你把日期转换成 epoch 毫秒,时间间隔会变成巨大的整数,指数权重坍缩到零,所有嵌入看起来都差不多。要么把时间线归一化到 0–1,要么相应缩放速率参数。
恰好在输出时间点的事件不会被包含。如果想用“在关键事件发生时”的状态,输出时间要设在事件之后一小段,否则它就被排除在自己的嵌入之外了。
随机基向量如果开始同向,结果会变吵。维度应该随“事件×时间”类别数增长。粗略经验:几十类用 64–128 维,几百类用 128–256 维,几千类用 256–512 维,上万类用 512–1024 维。注意不是线性增长,类别上千也用不着上千维。
因为事件向量按时间衰减加总,向量的幅度反映事件的速度和频率,而余弦相似度忽略幅度。一小时前的一条投诉,和同时段的快速三条投诉,余弦上看可能几乎一样。稳妥的做法是两段式检索:先用余弦相似度匹配旅程类型,再用欧氏距离排序强度。
想看看 FastPath 端到端效果?作者团队用 Guitar Hero 音符谱当事件序列,用 FastPath 找相似歌曲。每首歌是一个基础节点,音符是沿时间排列的事件节点,颜色代表琴键。生成的嵌入可以让你检索最像给定歌曲的歌曲。代码在 GitHub。

这个数据集玩心很重,但问题形态跟你真正关心的客户旅程、点击流、病历历史一模一样:实体有带时间顺序的序列,顺序和时机决定意义。下次当时间改变你的数据含义时,你不需要在保留序列和得到可用特征向量之间二选一。FastPath 两者都给。
免费获取企业 AI 成熟度诊断报告,发现转型机会
关注公众号

扫码关注,获取最新 AI 资讯
3 步完成企业诊断,获取专属转型建议
已有 200+ 企业完成诊断