构建你自己的时间线算法:一个蓝图

时间线算法应该对人有用,而不是对公司有用。它们的质量不应该以人们在平台上花费的时间来衡量,而应该以它们服务用户目的的程度来衡量。
这只是BYOTA描述的开端,它在FOSDEM 2025的社交网络轨道上进行了演示。这个最初的个人项目现在已成为Mozilla.ai 蓝图,它引入了一种个人化、本地化时间线算法的方法,人们可以直接使用或进行自定义。该方法依赖于一个技术栈,其中包括使用Mastodon.py获取近期时间线数据,使用llamafile在本地计算文本嵌入,以及使用marimo提供一个在用户浏览器中运行的UI。通过使用这个技术栈,你将学习如何在不将任何内容离开你的计算机的情况下,对Fediverse上的帖子执行搜索、分组和推荐。
为什么?
商业平台的时间线算法(即定义哪些帖子出现在你的社交媒体时间线中以及以何种顺序出现的算法)都受到以下一个或多个问题的影响:偏见;缺乏隐私、透明度和用户控制;以及对机器学习算法的依赖,这些算法复杂、计算量大且需要集中运行。
然而,实际上,只有当你的目标是留住用户时,你才需要与这些问题周旋。如果目标改变(例如,服务于人们的不同目的),人们会立即意识到这些问题都有解决方案,这些解决方案依赖于开放、小型、可解释的模型,它们可以在本地运行以执行临时任务,而无需太多的机器学习知识。
以上回答了“人们为什么要构建/运行自己的时间线算法?”这个问题。现在你可能会问自己:“为什么是蓝图?”BYOTA不是一个最终用户应用程序,而是一个让人们了解时间线算法的游乐场,一个号召开发者试验并为开放、联合的社交网络创建新工具的行动呼吁。蓝图为此提供了便利,因为它们不仅提供代码和结构化文档,还作为社区协作的工件,以情境化学习的方式进行。
工作原理
BYOTA 基于这样一个假设:在保护用户隐私和控制的同时,使用开放模型和本地优先技术做一些有用的事情。虽然这个概念听起来很简单,但开发一个易于使用和定制、同时计算轻量级且有用的东西并非易事。幸运的是,有一些很棒的工具可以帮助我们实现这一点。
- Mastodon.py (MIT 许可证) 是一个用于 Mastodon 的 Python 客户端库。你将使用它从你的实例时间线下载新帖子。
- Llamafile (Apache 2.0 License) 是 Mozilla 的一个工具,它将语言模型打包成一个可在大多数平台上运行的单一可执行文件。它是 100% 本地的,并且已经过优化,可以在较慢的硬件上运行。我们使用它来运行 all-minilm,一个微小的(50MB)句子转换器模型,专门用于从文本计算嵌入。
- Marimo (Apache 2.0 许可证) 是一个用于 Python 的响应式笔记本,也可以作为应用程序共享。例如,你可以从 BYOTA 的代码库下载其 marimo 笔记本,安装其 Python 依赖项,并像任何 Python 笔记本一样在本地运行它;你也可以将其部署为 WASM 应用程序,人们将能够在他们的浏览器中运行它,而无需安装任何其他东西。
这些工具协同工作的方式如下:marimo 笔记本使用 Mastodon.py 从时间线下载帖子,然后请求 llamafile 从每个帖子的内容生成语义嵌入,最后使用这些嵌入来可视化、搜索或重新排序时间线中的所有帖子。
试试看
有几种不同的方式可以运行 BYOTA
选项-1:如果你只想尝试并看看它能做什么,那么点击这里在 HuggingFace Spaces 上体验它的演示。你会被要求输入密码,密码不出所料是
byota
。选项-2: 如果你想在本地运行 BYOTA 并且已经安装了 Docker,你可以使用以下命令运行一个容器:
docker run -it -p 8080:8080 -p 2718:2718 mzdotai/byota:latest demo.py
...并访问它:https://:2718 — 密码:byota
- 选项-3:为了避免从我们的开放演示中访问任何 Mastodon 服务器,在选项1和2中,我们包含了一些合成数据供您玩。如果您想在自己的数据上运行代码,请按照蓝图文档中描述的步骤注册您自己的 Mastodon 应用程序,并启动一个 marimo 笔记本,该笔记本将使用该应用程序的凭据访问您的帐户。请注意,除了与您的 Mastodon 实例的 API 连接外,其余代码将在本地运行。
- 选项-4:如果你想自定义代码或任何组件(例如,选择不同的嵌入模型或服务器),你可以按照这些说明在你的系统上部署所有内容。
BYOTA 能做什么?
嵌入可视化:在此部分,你可以看到来自不同时间线的帖子,它们以平面上的点表示:你可以点击右上角的时间线标签,只突出显示该时间线中的帖子。如果你选择一个或多个点,你将在图表下方的表格中看到它们。通过点击列名(例如,标签、文本),你可以对它们进行排序、自动换行文本(查看完整的帖子内容),或者搜索其内容。
2. 时间线搜索
时间线搜索:在这里你可以搜索与给定帖子最相似的帖子。你可以提供一个行 ID(前一个表格中最左边的列)来引用一个现有帖子,或者自由输入文本来查找与你所写内容相似的帖子。
3. 时间线重新排序
时间线重新排序:时间线中的每个帖子都被赋予一个分数,与一组其他帖子(在演示的特定情况下,是我从我的个人 Mastodon 账户分享的状态)相似度越高的帖子得分越高。然后,这个分数被用来重新排序你选择的时间线,以优先显示那些在参考集中更常见的主题。
4. 重新排序你自己的帖子
重新排序你自己的帖子:根据你正在考虑的时间线,理解重新排序的效果可能或多或少地困难。为了让你更好地了解重新排序的效果,本节根据某些知名标签确定的主题,对个人的一组帖子进行重新排序。
自定义
BYOTA 的任何组件基本上都可以互换
- 想要使用不同的嵌入模型吗?llamafile 嵌入服务器接受模型文件作为输入参数,所以你可以尝试你自己的模型。
- 你更喜欢不同的嵌入服务器吗?代码已经支持 ollama,更普遍地,也支持其他与 OpenAI API 兼容的工具。
- 你想要在另一个社交媒体平台上运行这个工具吗?除了下载帖子的代码外,BYOTA 是平台无关的,所以你只需插入一个不同的客户端,就能为你最喜欢的平台获取推荐。
- 你想运行不同的算法吗?我们喜欢你的热情 😃 你可以克隆仓库并开始编辑 Python 代码,只需简单操作(查看我们的自定义指南)。任何想法,从我们已实现的简单点积重排序器的替代方案,到在嵌入之上训练的简单分类器,听起来都是有趣的主意,特别是如果它可以在浏览器中通过 WASM 本地运行。
结论
BYOTA 最初是一个充满激情的项目,旨在寻找一种更以用户为中心的时间线算法版本。真正使其成为可能的是,能够即使在普通硬件上也能运行强大模型的工具的出现,以及允许开发者轻松共享其代码,使其直接在人们的浏览器中本地运行的应用程序的出现。现在技术已经成熟,我们相信现在是时候共同构建一些东西了(我们已经说过,这是一个行动号召……)。
如果您对 BYOTA 感兴趣,欢迎任何贡献,不仅仅是技术上的。
- 尝试一下演示,并在蓝图 Discord 频道上告诉我们你的想法。
- 查看项目在 GitHub 上的问题页面,对现有想法发表评论或提出新想法。
- 如果你想亲自动手,可以领取一些“需要帮助”或“第一个好问题”的任务!