前言
最近在做AI+社交媒体分析相关的研究,因为GPU性能问题,只能找找避免使用GPU的论文。在这个条件下寻找,然后发现一篇 NeurIPS 2025 的论文:
Opinion Maximization in Social Networks by Modifying Internal Opinions
这篇论文是25年10月25投递的,研究后发现不需要使用GPU,纯使用CPU就能复现。
简单讲一下,这个论文主要研究的是:在一个社交网络里,如果你只能说服 k 个人改变态度,选哪 k 个人能让整个网络的总支持度提升最大?对比传统算法下,关于如何高效这一寻找公众影响力大的节点的三种算法的优势创新与性能比对。
你可能会说:“欸,这还不简单,找大 V 嘛,不就是哪些公众人物嘛!” 但实际上要考虑三个因素:
- 这个人本身的态度 — 本来就很支持的人,说服他没用(已经是满分了)
- 这个人的影响力 — 大 V 说句话能影响几万人,普通人只能影响几个朋友
- 这个人的固执程度 — 有些人你说破嘴也没用(阻力大),有些人很容易被影响
基于上述因素,加上传统的矩阵求逆方法在处理大规模网络时存在计算上的局限性,这篇论文提出了两种基于抽样的算法。并且在随机游走模型的基础上,还开发了一种精确的异步更新算法。下面是我复现的过程与踩过的坑。
本次复现选取 k=10 和 ε=0.1(原论文主要实验使用 k=64、ε=0.01),且额外测试了论文未涉及的 Power Law 分布。详细差异见文末对比说明。
环境搭建
安装 Julia
论文代码是用 Julia 写的——一种号称性能接近 C 但写起来像 Python 的语言。我也是第一次认真了解这门语言,下面贴一点 Julia 的介绍:
Julia 是一种面向科学计算的高性能动态高级编程语言,具有以下几个显著特点:
高性能:性能接近于静态编译型语言,如 C 和 Fortran,在科学计算领域非常有优势。
动态性:类似于 Python 和 Ruby 的灵活性和易用性。
并行计算和分布式计算:为并行计算和分布式计算提供了良好的支持,能充分利用多核处理器和集群计算资源。
丰富的类型系统:支持用户自定义类型,类型转换和提升机制非常优雅。
开源和跨平台:采用 MIT 许可证,支持 macOS、Windows、Linux 等。
对 Julia 不熟悉的话,这里推荐安装 Julia 1.10.7 版本。
安装指引
从 Julia 官网 下载 Windows x64 Installer,安装时记得勾选 “Add Julia to PATH”。
验证安装:
1 2julia --version # 输出:julia version 1.10.7
PowerShell 的打开方式:Win+R 输入 powershell 回车,或者 Win+X 打开 PowerShell。
安装依赖
Julia 的包管理比 Python 更加方便一些——按 ] 键进入包管理模式即可:
| |
克隆代码
| |
遇到的坑与修复
坑 1:缺少输出目录
第一次运行,兴冲冲地敲下命令:
| |
然后迎面一个报错:
ERROR: SystemError: opening file “ground_truth/hamster_uni_f.txt”: No such file or directory
原因: 代码要把结果写到 ground_truth/ 文件夹,但这个文件夹压根不存在。
修复:
| |
这种"文件夹不存在"的报错在开源项目里其实很常见,因为作者通常假设你会手动建好目录结构。
坑 2:Julia 版本兼容性
跑 pow(幂律分布)时又炸了:
ERROR: MethodError: Cannot
convertan object of type Float64 to an object of type Vector{Float64}
原因: 代码里的自定义分布类型继承了 Distributions.jl 库的类型系统,新版 Julia 和 Distributions 之间出现了接口不兼容。
修复过程分为两步:
第一步,把类型定义中的继承关系去掉:
| |
第二步,重写整个 distribution.jl——因为 generate_samples 函数内部也用了 Distributions.jl 的采样器,干脆完全去掉对这个库的依赖,改用 Julia 内置的随机数生成器。最终文件从 70 行变成了 160 行,但胜在稳定。
遇到版本兼容性问题时,“去掉外部依赖、自己实现"虽然工作量大了点,但一劳永逸。
坑 3:重复包含警告
每次运行都看到一行黄字:
WARNING: redefinition of constant Main.RNG
原因: metrics.jl 又 include 了一次 graph.jl,导致 distribution.jl 被加载两次,里面的 const RNG 被重复定义。
修复: 去掉 metrics.jl 里的 include("graph.jl")。
| |
数据集
官方代码内置了 3 个网络数据集:
| 数据集 | 节点数 | 边数 | 打个比方 |
|---|---|---|---|
| Hamsterster | 2,426 | 16,630 | 一个小公司全员群 |
| DBLP | 317,080 | 1,049,866 | 一个中型城市的居民 |
| 875,713 | 5,105,039 | 一个大型社区 |
每个节点(人)会被随机分配两个属性:
| 属性 | 符号 | 含义 | 范围 |
|---|---|---|---|
| 内部意见 | s_i | 对某个话题的支持程度 | [0, 1] |
| 阻力系数 | f_i | 抵抗外部影响的程度 | [0, 1] |
这两个属性有三种分布模式,分别模拟不同的社会场景:
| 分布 | 参数名 | 含义 |
|---|---|---|
| Uniform | uni | 人群态度均匀分布,不极端也不温和 |
| Exponential | exp | 大多数人温和,少数极端 —— “沉默的大多数” |
| Power Law | pow | 极少数人非常固执或非常开放 —— “极端派” |
这里论文实际上参考了观点动态模型,采用了 DeGroot 以及 Friedkin 和 Johnsen 所提出的观点形成模型。
DeGroot 模型:这是一个简单的观点动态模型,假设每个人在每次更新观点时,会根据其他人的观点和自己的阻抗系数,将自己的观点更新为一个加权平均值。只要社会网络是连通的,所有人的观点最终都会收敛到一个相同的共识值。这个最终共识是所有人初始观点的加权平均值。简单来说就是每个人在形成观点时,会完全参考朋友们的意见,不会有任何的个人偏见。
FJ 模型是对 DeGroot 模型的直接推广和修正。它最大的特点是引入了"固执"或"偏见"的概念。与 DeGroot 模型不同,FJ 模型中的每个人在每次更新观点时,不会完全抛弃自己的初始观点,而是会将自己的初始观点和朋友们观点的加权平均结合起来。
模型通过一个参数(0 到 1 之间)来控制每个人对自己初始观点的坚持程度。如果参数为 0,模型就退化为标准的 DeGroot 模型;如果参数为 1,则这个人完全固执,观点永远不会改变。
最终结果:由于每个人都保留了一部分初始观点,整个群体的观点通常不会达成完全的一致(共识)。最终,社会会呈现出多样化的观点分布,可能出现多峰(multimodal)或两极分化(polarized)的状态。简单来说就是每个人在形成观点时,会参考朋友们的意见,但是也会保留一部分自己的初始观点。
DeGroot 模型下描绘了一个理想化的"舆论场”,所有人终将达成共识;而 Friedkin-Johnson 模型则更贴近现实,承认了人的"固执己见",因此观点可能永远无法统一,社会将保持多元或对立。如果按数学严谨性排序:DeGroot ⊆ FJ(FJ 包含 DeGroot)。
三种算法
MIS — 最大影响选择(Maximal Influence Selection)
基于消息传递的精确算法。先算一遍全局影响力,筛选出候选人,再对边界候选人反复精算。
| 维度 | 说明 |
|---|---|
| 优点 | 精度最高,理论上能找到最优解 |
| 缺点 | 网络越大计算开销越大 |
| 类比 | 像高考阅卷,先快速扫描一遍,对分数边界的学生反复核查 |
RWB — 随机游走采样(Random Walk Based)
派出一批"小兵"在网络里随机溜达,统计谁被路过最多,谁就是关键人物。使用别名表(Alias Table)实现 O(1) 的采样效率。
| 维度 | 说明 |
|---|---|
| 优点 | 实现简单,思路直观 |
| 缺点 | 采样数公式 ceil(n*log(n)/epsilon^2) 在大网络上会算出超大量采样 |
| 类比 | 像搞民意调查,随机抽一批人问"你信任谁",被提到最多的就是意见领袖 |
Forest — 森林采样(Forest Fire Sampling)
在每个节点"点火",让火沿着网络蔓延。火被"熄灭"的地方就是影响力终点。使用路径压缩加速。
| 维度 | 说明 |
|---|---|
| 优点 | 实现最简单 |
| 缺点 | 在不均匀分布的人群里精度下降 |
| 类比 | 像森林火灾模拟,火从哪里起不重要,关键是火灭在哪 |
实验结果
Hamster 小网络(2,426 人)
这个网络规模很小,适合做功能验证。
均匀分布(uni)— 人群态度随机均匀
| 算法 | 耗时 | Precision | NDCG | 总效果分 |
|---|---|---|---|---|
| MIS | 0.49s | 1.0000 | 1.0000 | 1224.36 |
| RWB | 0.11s | 1.0000 | 0.9998 | 1224.36 |
| Forest | 0.45s | 1.0000 | 0.9997 | 1224.36 |
三种算法都能满分找到关键人物。RWB 以 0.11 秒拿下速度冠军。
Precision 指的是:你选的 k 个人里,有多少个是真正最优的?1.0 = 全部正确。 NDCG 考虑的是排序质量——最优的人排在第 1 位了吗?
指数分布(exp)— 大多数人温和,少数极端
| 算法 | 耗时 | Precision | NDCG | 总效果分 |
|---|---|---|---|---|
| MIS | 0.47s | 1.0000 | 1.0000 | 1298.75 |
| RWB | 0.25s | 1.0000 | 0.9999 | 1298.75 |
| Forest | 0.49s | 0.9000 | 0.9943 | 1298.14 |
Forest 的 Precision 掉到了 0.9——10 个里选错了一个。
幂律分布(pow)— 极少数人特别固执或特别开放
| 算法 | 耗时 | Precision | NDCG | 总效果分 |
|---|---|---|---|---|
| MIS | 0.51s | 1.0000 | 1.0000 | 1396.34 |
| RWB | 2.24s | 1.0000 | 1.0000 | 1396.34 |
| Forest | 1.33s | 0.9000 | 0.9962 | 1394.38 |
一个有趣的现象:RWB 在幂律分布下耗时暴涨到 2.24 秒(均匀分布只要 0.11 秒,差了 20 倍)。可能是因为幂律分布下少数节点连接极多,别名表的采样策略需要更多时间来收敛。
另一个值得注意的点:人群分布越极端,总效果分越高(从 1224 到 1299 再到 1396)。幂律分布下有些人特别容易被说服(固执度极低),找到这些人后收益更大。
DBLP 中网络(317,080 人)
均匀分布(uni)
| 算法 | 耗时 | Precision | NDCG | 总效果分 |
|---|---|---|---|---|
| MIS | 0.77s | 1.0000 | 1.0000 | 158,375 |
| Forest | 71.64s | 1.0000 | 1.0000 | 158,376 |
| RWB | 72.03s | 1.0000 | 0.9996 | 158,375 |
这里出现了一个反直觉的结果——MIS 在 31 万人的网络上只用了 0.77 秒,反而比 RWB 和 Forest 快了将近 100 倍。
原因在于 RWB 的采样数公式 n * log(n) / epsilon^2 在 31 万人的网络上算出了 4 亿次随机游走采样,自然慢;而 Forest 也需要生成 31 万个随机生成树,每棵树都要遍历整张图。
所以"近似算法比精确算法快"这个直觉并不总是对的——得看具体算法和网络规模。
指数分布(exp)
| 算法 | 耗时 | Precision | NDCG | 总效果分 |
|---|---|---|---|---|
| MIS | 2.89s | 1.0000 | 1.0000 | 158,674 |
| Forest | 103.70s | 0.9000 | 0.9979 | 158,673 |
| RWB | 377.16s | 1.0000 | 1.0000 | 158,674 |
RWB 在指数分布下耗时暴涨到了 377 秒(6 分多钟),因为采样数计算依赖 epsilon^2,同样的 epsilon=0.1 在不同分布下生成的随机游走数量不同。不过精度非常完美。
Forest 在指数分布下同样出现了 Precision 0.9 的精度损失,与 Hamster 小网络上的表现一致——说明 Forest 在不均匀分布下精度下降是一个系统性问题,跟网络规模无关。
幂律分布(pow)
| 算法 | 耗时 | Precision | NDCG | 总效果分 |
|---|---|---|---|---|
| MIS | 25.09s | 1.0000 | 1.0000 | 158,949 |
| RWB | 2062.38s | 0.9000 | 0.9999 | 158,949 |
| Forest | 145.69s | 0.6000 | 0.8587 | 158,908 |
幂律分布下的结果是最具洞察力的:
- MIS 保持在 1.0 精度,但耗时从均匀分布的 0.77 秒暴涨到 25 秒。原因是幂律分布中少数节点连接数极高(类似社交平台的大 V),MIS 的 push-based 算法在超级节点上需要处理更多的传播路径。
- RWB 耗时 2062 秒(34 分钟),是整组实验中最慢的,精度还掉到了 0.9。幂律分布的极端结构让随机游走难以收敛。
- Forest 直接崩溃——精度只有 0.6。在极度不均衡的人群中,Forest Fire 采样策略严重失效,10 个关键人物只正确识别了 6 个。
这个结果传达了一个清晰的信号:如果社交网络中节点属性服从幂律分布(这是真实世界最常见的情况),MIS 是唯一可靠的选择。
后续可能会补充 Google 网络(875,713 节点)的全部实验结果,因为时间问题,这里还没有进行实验。
初步分析
算法选择策略
| 网络规模 | 推荐排序 | 说明 |
|---|---|---|
| 小网络(< 1 万人) | RWB >= MIS > Forest | RWB 速度最快,精度足够,是最优选择 |
| 大网络(> 10 万人) | MIS »> Forest > RWB | MIS 在所有分布下都保持最高精度,速度也最快 |
在大网络上,Forest 和 RWB 在非均匀分布下精度和速度都会显著下降。
三个有趣的发现
人群分布对算法影响极大 — Forest 在幂律分布下 Precision 掉到 0.6(几乎随机猜测),MIS 则在所有分布下都保持 1.0。人群分布越不均衡,MIS 的优势越大。
MIS 在大规模网络上反而快 — 在 DBLP(31 万人)上 MIS 仅用 0.77-25 秒,比 RWB 和 Forest 快数个数量级。MIS 的 push-based 算法具有优秀的扩展性,但幂律分布下耗时增加 30 倍值得注意。
RWB 的采样策略存在严重瓶颈 — 在幂律分布下 RWB 耗时 2062 秒(34 分钟),精度还掉到 0.9。采样数公式 ceil(n * log(n) / epsilon^2) 在大规模非均匀网络上会算出天量采样,实际可行性存疑。
本实验与原论文实验差异说明
参数差异
| 项目 | 本实验 | 原论文 |
|---|---|---|
| k 值 | k=10 | k in {1,2,4,8,16,32,64,128,…,1024} |
| 分布类型 | Uniform / Exponential / Power Law | Uniform / Normal / Exponential |
| 数据集 | 3 个(含 Hamster 小网络) | 8 个(不含 Hamster) |
| RWB 精度 epsilon | 0.1 | 0.01 |
| Forest 采样数 | 4,000 | 4,000(一致) |
| 硬件 | ****** | Intel Xeon Gold 6330(28核服务器, 1TB RAM) |
关于 k 值:原论文测试 k 以 2 的幂递增(1,2,4,…,1024),本复现使用 k=10 以降低大规模网络实验时间。
关于分布类型:原论文使用 Normal 分布而非 Power Law,这是最大的差异之一。代码仓库内置的
pow是我额外添加的分布,不在论文实验范围内。关于 RWB 精度:原论文使用 epsilon=0.01(更严格),我们使用 epsilon=0.1(更宽松)。epsilon 越小采样数越多(与 1/epsilon^2 成正比),意味着论文的 RWB 采样量是本文的 100 倍。
运行时间对比(DBLP 网络)
论文 Table 2 提供了 k=64 时的运行时间,与我们的 k=10 实验结果对比如下:
| 分布 | 算法 | 论文时间 (k=64) | 本实验 (k=10) | 分析 |
|---|---|---|---|---|
| Uniform | MIS | 0.28s | 0.77s | 论文服务器更强,且 k 值对 MIS 影响小 |
| Uniform | Forest | 66.02s | 71.64s | 几乎一致,Forest 耗时与 k 无关 |
| Uniform | RWB | 120.61s | 72.03s | 论文 epsilon=0.01,采样量是本文 100 倍 |
| Exponential | MIS | 1.81s | 2.89s | 量级一致,差异来自硬件 |
| Exponential | Forest | 104.41s | 103.70s | 几乎完全一致 |
| Exponential | RWB | 703.31s | 377.16s | 论文 epsilon=0.01 导致采样量更大 |
这里我们可以发现:
- Forest 耗时与 k 值无关,论文 k=64 和本文 k=10 的结果几乎完全一致
- MIS 在论文服务器上更快(0.28s vs 0.77s),符合服务器与笔记本的性能差距
- RWB 的时间差异主要来自 epsilon 参数(0.01 vs 0.1),而非 k 值
精度对比说明
论文的 Precision/NDCG 结果以折线图形式呈现(Figure 1 & 2),而非数值表格,因此无法提取每个 k 值的精确数值。但从图中可以确认:
- MIS 算法在所有数据集和分布上 Precision 和 NDCG 均为 1.0(与本文完全一致)
- Forest 算法精度接近但略低于 MIS(与本文趋势一致)
- RWB 算法精度同样接近 1.0(与本文一致)
- 三种算法的相对排名完全一致:MIS > RWB > Forest
与论文数据偏差总结
| 评估维度 | 结论 |
|---|---|
| MIS 精度 | 完全一致(均为 1.0) |
| 算法排名趋势 | 完全一致(MIS > RWB > Forest) |
| Forest 运行时间 | 高度一致(DBLP 上误差 < 10%) |
| MIS 运行时间 | 本实验较慢(硬件差异 + k 值差异) |
| RWB 运行时间 | 因 epsilon 参数不同导致差异 |
| Power Law 分布 | 论文未测试,属于本文额外测试的实验 |
总结:本复现在核心结论上与论文高度一致,MIS 在所有场景下保持最优精度和速度。差异主要来自硬件配置、k 值选择和 RWB 精度参数。Power Law 分布的实验是本文的额外贡献,论文并未测试该分布。
总结
这次复现踩了几个坑——文件夹缺失、版本兼容、重复包含——但整体来说论文代码的质量很不错:结构清晰,注释完整,跑通后能稳定复现论文的核心结论。建议去看看原论文,了解更多的实验细节和理论基础,总体来说会学到很多新东西。
我个人认为,这篇论文主要讲了如何在资源有限的情况下,找到社交网络中影响观点传播的关键节点的三种算法。
目前已完成全部 Hamster 实验和全部 DBLP 实验(uni、exp、pow),剩余 Google 网络(87 万人,9 组实验)将在后续完成。
谢谢观看喵,关注猫猫谢谢喵 有问题都欢迎评论区留言,我会尽快回复。 或者发邮箱给我,我会尽快回复。邮箱:neutrino843@qq.com 原论文链接: Opinion Maximization in Social Networks by Modifying Internal Opinions (arXiv:2510.17226)