为什么我们构建了自己的排名算法

社交媒体内容策展是最重要却无人谈论的算法。以下是 Lotusia 为何拒绝接受现状,以及我们构建了什么。 Read this Lotusia blog update about 为什么我们构建了自己的排名算法 and stay current with ecosystem progress and releases.

·

为什么我们构建了自己的排名算法 hero image

每个社交媒体平台都在决定你看到什么。算法为互动量优化,而互动量最可靠地与愤怒和情绪反应相关。结果就是一个反映什么能让你持续滚动的动态消息流,而非社区真正重视的内容。

Lotusia 采取了不同的方法。内容通过燃烧加权情绪来策展——你燃烧 Lotus 来投票,汇总的燃烧量决定什么上升、什么下降。链上排名公式是透明的:正面燃烧减去负面燃烧。任何人都可以审计。没有人拥有它。

但仅有透明度是不够的。一个富有的参与者可以压倒有机信号。一场协调的攻势可以劫持动态消息流。在一个任何人都可以创建无限钱包的无许可系统中,大多数传统的反操纵技术都会失效。因此,我们在链上数据和你所看到的内容之间构建了一个动态消息流排名层——五个互补的算法,在使操纵成本逐步增加的同时保护诚实的策展。

基础约束

Lotusia 运行在无许可的环境中。任何人都可以创建钱包。没有身份验证,没有人类证明,没有可信的社交图谱。这对排名算法施加了一个不可妥协的约束:

排名算法必须仅基于汇总燃烧量。钱包数量不得直接影响内容排名。

这排除了整类反巨鲸机制。像二次方投票这样的按投票者亚线性变换会激励钱包分裂——一个巨鲸将100,000聪分散到100个钱包中进行燃烧,获得的影响力是从一个钱包燃烧的十倍。投票者多样性奖励直接激励了 Sybil 创建。按内容的集中度惩罚可以通过分裂钱包轻松规避。

解决方案是克制。每个排名函数都只操作汇总的燃烧总量:正面燃烧的总 Lotus 量和负面燃烧的总量。将相同的总燃烧量分散到任意数量的钱包中会产生相同的分数。这就是 Sybil 中性原则。权衡是诚实的——算法无法区分一千个真实投票者和一个拥有一千个钱包的巨鲸——但它也无法被钱包创建所博弈。在一个对 Sybil 开放的系统中,这是正确的权衡。

链上基线

链上排名公式刻意简单:

ranking = satsPositive - satsNegative

它是线性的、透明的,展示了核心价值主张。但它也是巨鲸主导的、引导期脆弱的、时间维度平坦的、容易被议程利用的。动态消息流排名层在不修改链上公式的前提下解决了这些局限。所有五个算法都在链下运行,基于汇总数据,并且在设计上保持 Sybil 中性。

R62:汇总对数衰减

线性排名最明显的漏洞是花费和影响力完全成正比。一个巨鲸燃烧100,000聪的影响力恰好是燃烧1,000聪者的100倍。

R62 对正面和负面的汇总燃烧分别应用对数衰减:

feedScore = log₂(1 + B_pos / BASE) - log₂(1 + B_neg / BASE)

其中 B_posB_neg 是内容项的正面和负面总燃烧量,BASE 是设定为1,000聪的可调常数。对数创造了花费的递减回报:

Total Burn Linear Score Dampened Score Marginal Gain per 1K
1,000 sats 1,000 1.00 1.00
10,000 sats 10,000 3.46 0.27
100,000 sats 100,000 6.66 0.036
1,000,000 sats 1,000,000 10.0 0.0037

一个巨鲸燃烧100,000聪获得6.66的动态消息流得分——有意义,但不是1,000聪燃烧影响力的100倍。要将影响力从6.66翻倍到13.32,他们需要燃烧超过1000万聪。对数不会阻止巨鲸影响力;它使每额外一个单位的影响力呈指数级增长的成本。

对正面和负面燃烧分别应用衰减,防止了在对数层面上较大的正面燃烧被比例上较小的负面燃烧完全抵消。净得分反映的是真实的社区情绪,而不仅仅是谁花得更多。

这是第一个也是最基础的衰减层。所有后续算法都建立在这个压缩后的分数之上。

R63:跨内容 Z 分数封顶

即使有了对数衰减,一个足够坚定的巨鲸仍然可以产生一个主导动态消息流的异常值分数。R63 通过将分数相对于所有内容的分布进行标准化来解决这个问题。

该算法计算所有动态消息流分数的均值和标准差,然后将每个分数转换为 z 分数

μ = mean(scores)
σ = sqrt(variance(scores))
zScore = (score - μ) / σ
cappedScore = min(zScore, Z_MAX)

z 分数上限默认为 Z_MAX = 3.0。这意味着无论绝对燃烧量多少,任何内容项的分数都不能超过均值三个标准差以上。

考虑一个有100项内容的动态消息流,分数在1.0到5.0之间(均值3.0,标准差1.0)。一个巨鲸主导的内容项得分15.0。不封顶的话,它以5倍于均值的分数主导动态消息流。使用 z 分数封顶:

zScore = (15.0 - 3.0) / 1.0 = 12.0 → capped at 3.0

巨鲸的内容仍然排名最高,但它相对于排名第一的有机内容(z 分数2.0)的优势从3倍压缩到1.5倍。没有任何单条内容可以垄断动态消息流。

标准化仅在有至少十条已评分的内容项时才激活,确保在动态消息流稀疏的引导阶段不会产生伪影。

R64:时间信念累积

链上排名公式对待三十天前的燃烧与三十秒前的燃烧完全相同。R64 基于投票活动的时间引入了指数衰减,借鉴了 Commons Stack 开发并由 1Hive Gardens 部署的信念投票机制。

燃烧按小时分组。每个时间段的净衰减分数(来自 R62)按基于其时间的衰减因子加权:

decay = (1/2)^(ageHours / halfLife)
convictionScore = Σ [periodScore_t × decay(age_t)]

默认半衰期为72小时,与社交媒体内容相关性的自然生命周期相匹配:

Age Decay Factor Contribution
Today 1.00 100%
3 days ago 0.50 50%
6 days ago 0.25 25%
9 days ago 0.125 12.5%

这提供了有意义的闪电攻击抵抗力。一个巨鲸在单个区块中倾倒100,000聪会获得即时的分数提升,但该提升每三天衰减一半。与此同时,每小时添加较小金额的有机燃烧会积累持久的信念。

在一个详细示例中:一个巨鲸在 t=0 时燃烧100,000聪,同时有机燃烧每小时添加1,000聪。在72小时半衰期和 BASE=1,000 的条件下:

Time Whale (decayed) Organic (accumulated) Whale %
t=0 6.66 0 100%
t=24h 5.30 3.28 62%
t=48h 4.22 5.37 44%
t=72h 3.36 6.72 33%
t=96h 2.67 7.59 26%

有机信号在48小时内超越巨鲸。到第五天,巨鲸的影响力降至总量的21%。

衰减锚点由调用方决定。对于策展动态消息流,使用首次投票时间戳——这防止了通过简单的重新燃烧来复活旧内容。对于趋势和最新动态消息流,使用最后投票时间戳,以便具有真实新活动的重新出现的内容能正确地浮出水面。

R65:双向信号整合

RANK 支持正面和负面燃烧。这两个汇总信号之间的关系提供了纯粹的量级无法捕捉的内容质量信息。R65 从这些双向数据中提取三个指标。

情绪比率衡量正面燃烧占总燃烧的比例:

sentimentRatio = B_pos / (B_pos + B_neg)

比率为1.0表示一致正面。比率为0.5表示势均力敌。比率为0.0表示一致负面。

争议得分衡量燃烧的正反双方有多势均力敌:

controversyScore = min(B_pos, B_neg) / max(B_pos, B_neg)

接近1.0的得分表示正面和负面燃烧几乎相等。接近0.0的得分表示某一方向占主导。当争议得分超过可配置阈值0.4时,内容会被标记为有争议的,以便在界面上进行特殊处理。

总互动量对所有燃烧之和应用对数衰减:

totalEngagement = log₂(1 + (B_pos + B_neg) / BASE)

这作为平局决胜指标:在主要分数相似的内容中,吸引了更多社区总关注的内容排名更高。

这三个指标为内容创建了二维理解。高互动量配合正面情绪表示真正受欢迎的内容。高互动量配合争议性情绪表示值得审视的有争议内容。低互动量配合正面情绪表示小众但受赞赏的内容。低互动量配合负面情绪表示社区认为不值得关注的内容。

争议得分还驱动了争议排序动态消息流,该动态消息流使用了受 Reddit 的量级乘以平衡度方法启发的复合公式:

controversySortScore = controversyScore × totalEngagement

这奖励了在双方都吸引了大量代价高昂信号的帖子,与燃烧正反双方的均衡程度成正比。低于最低互动量阈值的帖子被排除为无关紧要的。

R66:燃烧速度峰值衰减

最后一个算法专门针对闪电攻击。它分析燃烧在内容项上的累积速率,而不仅仅是总量。一个巨鲸在单个区块中倾倒100,000聪会产生急剧的速度峰值。有机互动则产生渐进、持续的速度。

R66 在滑动检测窗口上计算燃烧速度,并将其与所有内容的滚动中位速度进行比较。当速度比超过可配置阈值时,Sigmoid 衰减函数开始生效:

velocityRatio = currentWindowBurns / rollingMedianBurns
dampening = 1 / (1 + e^(k × (velocityRatio - threshold)))

默认参数是中位速度10倍的速度阈值和0.5的 sigmoid 陡度。以正常速率接收燃烧的内容不受影响(衰减 ≈ 1.0)。以中位速率100倍接收燃烧的内容获得约0.011的惩罚因子——几乎完全衰减。

sigmoid 曲线是关键。它避免了可以通过恰好保持在阈值以下来博弈的硬切断。相反,它提供了从无衰减到重度衰减的平滑过渡。

这在设计上是 Sybil 中性的。速度按每时间窗口的汇总燃烧计算,而非按钱包计算。在同一时间窗口将100,000聪的燃烧分散到100个钱包中会产生相同的速度峰值和相同的衰减。

复合得分

这五个算法组合成一个单一的复合动态消息流得分。流程依次为:

  1. R62 从汇总燃烧计算基础的对数衰减分数
  2. R64 基于投票活动的时间应用时间衰减
  3. R66 如果燃烧累积速度可疑地快,则应用速度衰减
  4. R65 计算双向信号用于次要排序和争议标记
  5. R63 在动态消息流展示层面应用 z 分数封顶

结果为:

feedScore = [log₂(1 + B_pos/BASE) - log₂(1 + B_neg/BASE)]
            × decay(ageHours / 72h)
            × velocityDampening(velocityRatio)

最终分布应用 z 分数封顶。巨鲸必须为每个边际排名影响力单位呈指数级增加燃烧量、在时间上持续该花费、与所有内容的整体分布竞争,并且避免速度峰值。经济学从燃烧十倍获得十倍影响力,转变为接近于燃烧100倍获得三倍影响力且在三天内衰减。

为什么这是必要的

这些算法解决的问题是每个主要内容平台都有据可查的故障模式。

回音室通过社会从众信息级联形成。Asch 从众实验证明了大约37%的人会顺从一个明显错误的多数答案。可见的投票计数在社交媒体上产生同样的压力。Lotusia 通过投票后揭示来解决这个问题:在用户自己投票之前,投票计数对其隐藏。你必须先投出自己的票才能看到其他人的投票。这是永久性的、按用户的,而不是一个会过期的基于时间的盲投期。Muchnik 等人的研究测量了单个可见赞产生的25%的正面羊群效应。投票后揭示完全消除了这一向量。

协调操纵是议程驱动的攻击者问题。政治操作者、企业公关团队和意识形态团体愿意花钱来引导情绪——燃烧是武器,而扼杀经济刷量的10:1损失比率对他们来说无关紧要。动态消息流排名算法使这变得昂贵,并辅以协调操纵检测,监控时间投票聚集、行为相似性网络和投票者人口统计异常。当检测到协调行为时,受影响内容的算法动态消息流推广会被降低。链上数据保持永久且可访问。只有放大效果受到影响。

巨鲸主导是引导阶段的问题。在早期网络增长期间,一次大额燃烧可以决定整个动态消息流。对数衰减和时间衰减通过压缩影响力比率并确保闪电攻击衰减而持续的有机信号累积来解决这个问题。

Steemit 故障模式是当你将参与量与质量判断混为一谈时会发生的情况。Steemit 使用单一指标——Steem Power——来决定投票影响力、内容奖励和治理权力。结果是投票交易、巨鲸主导、质量崩溃和活跃用户下降90%。Lotusia 将互动积分RANK 声誉分开。一个用户可以高度活跃但低质量,或选择性活跃但高质量。两个维度都是可见的。两者都不与另一者混淆。

哲学基础

这些算法是 Lotus 精神的表达。Lotus 的创立原则是广义互惠——给予 Lotus 作为感谢的象征,相信互惠会随之而来,让代币流动而非积累。最初的 givelotus.org 将 Lotus 描述为"无价的——一种感谢的象征——具有感情价值。"

动态消息流排名算法保护这种流动免受劫持。它们确保社区的集体判断,通过持续的燃烧加权情绪表达,始终是主导信号。它们不需要识别攻击者或验证身份。它们只是使操纵的经济学变得不利。

这是对 Sybil 问题的诚实回答:你无法在无许可系统中消除巨鲸影响力。一个足够富有的参与者总能主导。但你可以使其成本逐步增加,直到成本效益比变得不利。即使如此,时间衰减确保他们的影响力会消退。

接下来是什么

动态消息流排名算法已在 rank-backend-ts 服务中实现并运行。它们为统一动态消息流中的每篇帖子计算复合分数,与投票后揭示、争议标记和协调操纵检测集成。

互补系统继续发展。推荐系统通过社交信任而非工作量证明提供抗 Sybil 的入门引导。互动积分系统在多个维度上奖励持续参与——投票、推荐、评论、燃烧、连续参与天数和账户年龄。投票者集中度监控追踪 Herfindahl-Hirschman 指数以检测投票权力何时变得危险地集中。

Lotusia 乌龟走得慢,但每一步都深思熟虑。我们构建了使操纵变得昂贵、使诚实策展获得回报的动态消息流排名算法。不是因为我们能消除一切形式的操纵,而是因为我们能使其成本逐步增加到不值得的程度。数学承担了重任。社区提供信号。动态消息流反映的是人们真正重视的内容,而非某人有能力推广的内容。

Lotusia 社交档案上探索排名档案。了解更多关于谁构建了 Lotusia