原标题:《OpenRank: Powering Apps with Contextual and Personalized Graph Feeds》
作者:Andrew Hong
编译:Ladyfinger,BlockBeats
编者按:
在本文中,作者深入探讨了 OpenRank 的 Eigentrust 算法,这是目前被 Metamask Snaps、Degen tips 和 Supercast 使用的一种新技术。OpenRank 作为一个计算层,能够运行多种声誉图算法,首先介绍的是 eigentrust 算法。作者分享了为何需要社区构建的图、算法的关键概念、如何工作,以及如何创建自己的图。此外,作者还预告了即将举行的 Bytexplorers 任务,鼓励读者订阅以获取最新动态。
当今的加密货币前端大多包含简单的排行榜,按交易量、流动性、铸造、积分、投票等排序的顶级代币。如果我们想要进入能够超越当今 Web2 巨头的消费级加密货币体验,我们的应用程序中需要的不仅仅是排行榜。
OpenRank 是帮助我们实现这一目标的基石之一,已经被 Metamask Snaps、Degen Tips 和 Supercast 使用。OpenRank 是一个计算层,可以运行许多声誉图算法,其中第一个是eigentrust 算法。
在这篇文章中,我将向你介绍 OpenRank 的 eigentrust 算法,并讨论以下内容:
社区构建图的重要性,以及为什么你需要它们
该算法的关键概念及其工作原理
如何创建你自己的图,参考我在 Python 笔记本中制作的一个图
让我们开始吧!
为什么要与社区一起构建推荐图,而不是仅仅依靠你自己的机器学习团队?
在加密货币中构建算法和推荐流时,你很快会面临一些数据问题:
· 交易包含许多层次的操作
· 地址之间的关系可以通过多次交易变得无限复杂
· 地址本身包含部分身份,每个身份在不同的上下文中都是相关的
以上所有三点都在以指数级的速度不断发展,让我们称这些不断增长的元素为「context」。
你的小型 ML 团队无法跟上这些永无止境的创意
你也不希望你的后端或数据工程团队来处理这些问题,毕竟他们有产品要构建。应用程序拥有用户和用户数据结构的时代已经结束,你不再仅仅拥有一个简单的链接、用户 ID、点赞/回复/分享和帖子 ID,而是可以有兑换、拆分、掉落、交换、质押、委托、投票、铸造等等。几乎每天都有新的「操作」出现,还有新的链、新类型的钱包、新类型的身份等等。
我相信在接下来的一年里,加密货币行业将发展出一个以 OpenRank 协议和产品为基础的图数据科学社区
我已经在 Dune 的 wizard 社区中待了多年,见证了社区力量的强大,超过了小型团队的能力。我也看到几乎每个小型加密团队从「是的,我们可以用一个节点和 RDS 数据库独立完成这件事」到「我们需要利用像 The Graph 和 Dune 这样的社区构建的数据工具」。对我来说,创建针对特定类型的推荐流和社区调整的查询和图表组合是一个类似的问题。我们需要开始收集和测试能够在每个应用程序上提供推荐流的图表,从 Farcaster 客户端到区块浏览器。
一个推荐流的概念是拟态的,将被淘汰。用户则成为内容的策展者
在加密货币领域,用户不仅希望将他们的社交图带到不同的应用程序中,还希望将隐藏在这些图中的上下文也一起带走。如果我在 Farcaster 上积极关注/degen 社区,我希望在 Zora、Roam.xyz 或 OnceUpon 上能被推荐该社群的活动,而且我希望能够将该推荐切换到我参与的另一个社区的上下文,例如 artblocks 收藏者。未来将是用户发现和选择他们自己的 feed 的时代,而不是局限于单一平台上的某个群组或频道功能。
OpenRank 的 Eigentrust 算法是如何工作的?
Eigentrust 算法类似于 PageRank,它在图网络中对节点进行排名。不同之处在于它侧重于捕捉复杂的点对点关系,作为信任的分布。它最初是为文件共享网络中分配信任分数而构建的。在加密货币领域,你可以想象用它来代理高质量的治理委托人或识别值得信赖的智能合约。
以下是 Eigentrust 的公式:
上面有两个关键输入:预信任节点和本地信任图。「P」是你的预信任,「S」是你的本地信任。
· 本地信任(localtrust):这是你对两个节点之间互动的测量,当节点「i」向节点「j」传递某种价值时。这可能是代币转移、证明、投票回复/点赞等。
· 预信任(pretrust):这是你选择的网络中应该更值得信任的节点的「种子」选择。
· 「c」:这个常数(在 0 到 1 之间)是整体本地信任图和预信任种子之间的信任值的权重。互动图通常具有幂律分布,因此较高的预信任权重有助于规范最终排名值的分布。
如果这些数学公式不太好理解,可以将其类比为像 Twitter 这样的社交图,如关注者、点赞、回复等影响力通常集中在少数人身上,导致幂律动态。通过设置一组具有影响力的个人并选择常数「c」值为 0.5 或更高,实际上,这些受信任的个人所互动的人将继承该影响力的一半价值。这就是在网络中更均匀地平衡和分布信任分数的方法。
这与选择任何上下文和创建任何推荐流有什么关系?
假设你想在一个推荐流中对 10000 个资助提案进行排序。基于一组投票互动(本地信任)和你自己选择的一组受信任的投票者(预信任),你可以对所有投票者和提案者进行价值排名。你可以通过选择你在多个 DAO 中委托投票的前 10 名投票者来选择你的预信任投票者。Eigentrust 将基于这两个输入运行,并给你一个更大的投票者名单,根据从预信任节点继承的信任在图中排名。
这样,你现在可以使用这个排名的价值列表来权衡实时治理提案,以获得更个性化的推荐流!
这可能仍然过于抽象,所以我将在下一节中通过具体的代码示例进行讲解。请记住,OpenRank 处理这些 Eigentrust 图的计算和存储,并推荐你可以使用输出的推荐流。你所需要做的只是决定预信任和本地信任输入。
如何使用 OpenRank 构建 Eigentrust 图?
最终目标
在这个示例中,我想根据Farcaster/base的用户钱包提供推荐合约的订阅流(Farcaster 是类似 Twitter 的应用)。输出只是一个包含 id 和值的列表,在我的图中,每个 id 都与一个 Farcaster 用户 id(fid)相关联。
数据来源
创建了排名图后,我们根据他们上周的主要合约互动生成了这个推荐流:
数据来源
你可以查看仪表板,看看从该图创建的其他推荐流,例如 NFT 铸造、DEX 代币交易和 Farcaster 频道活动。
代码实现
现在你已经看到了目标,我们来谈谈我是如何创建这个排名图的。
这个示例的所有代码都可以在hex.tech notebook中找到,如果你倾向于在本地运行,也可以使用jupyter notebook。
首先,我分别为我们的预信任和本地信任创建了两个查询:
第一个查询是我们的「预信任节点」。这个查询根据收到的互动(点赞、转发、回复)输出/base 频道中的顶级用户,我的公式是 (点赞 + 3 转发 + 10 回复)。我们将从这个查询中取前 100 个 id 作为我们的信任节点。
数据来源
第二个查询是用于跟踪节点之间的链上互动,使用/base 频道中用户的链接地址。因为订阅流将推荐链上操作,所以我想确保选择一个基于链上互动量的互动图。使用节点之间转移的美元价值是一个很好的通用代理——我跟踪了在 Optimism、Base 和以太坊主网上的稳定币和 ETH 转移。
数据来源
分析输入图,并测试输出的 Eigentrust 图
现在我们有了预信任节点和本地信任图,来看一些总结统计数据。/base 频道中有 65,755 名用户将代币转移给了该频道中的其他人,从我们的预信任节点可以遍历 19% 的图(即连接的节点)。这个百分比可能会根据图的本地信任数据的 Sybil 程度高低而有所不同。代币转移可能是高信号,但也可能是刷单,因此图的大部分是未连接的也不令人惊讶。
在确认输入数据的大小和连接是合理的之后,我们可以运行并保存我们的 Eigentrust 图。我将我的图保存为 id「base_transfer_50」——你可以看到下面只需 10 行代码即可训练图。可以将 OpenRank SDK 视为加密图模型的 scikit-learn。
还记得前面公式中的常数「c」吗?让我们对不同的 c 值(我称之为 alpha)和不同的预信任种子大小进行网格搜索,看看哪个能给我们最对数正态的信任分数和最高的覆盖率:
这里有很多权衡,没有一个最佳值可供选择。如果你希望推荐有很强的多样性,高正则化和覆盖率是一个不错的选择,但对于高风险的治理投票,你可能实际上希望信任的集中度更高。这里可以用你的直觉。
从这里,我们可以将值插入到在 Dune 的仪表板开始时链接的订阅查询中,以获得/base 频道中受信用户的合约互动流。这种主观的推荐输出帮助我们更好地将之前的通用指标与我们对推荐输出质量的预期直觉联系起来。
搞定了!你可以立即使用这个 Dune API 为你的任何应用提供动力。
学习构建自己的 OpenRank Eigentrust 图
你准备好自己动手了吗?你可以 fork 我的笔记本并自己尝试,所有需要的链接如下:
·OpenRank Docs
·Python SDK repo
·Python Notebook
·Dune feed dashboard
我将在下个月内开展一次 Bytexplorers 任务,我们将竞赛创建适用于顶级加密应用的最佳订阅流图表。