背景
Mozilla在2025年初推出了标签分组功能,允许用户对标签页进行排列分组并添加持久性标签。这是Mozilla Connect历史上最受期待的功能。虽然标签分组提供了管理标签页和减少标签过载的好方法,但当用户打开大量标签页时,定位需要分组的标签页可能成为挑战。
我们通过提供AI标签分组功能来改进工作流程,该功能具备两个关键能力:
- 在用户创建标签组时建议组标题
- 从当前窗口建议应添加到标签组的标签页
当然,我们希望这个功能无需用户向Mozilla发送任何数据,因此我们使用了本地Firefox AI运行时,并构建了一个完全在用户设备上运行的高效模型。该功能是可选加入的,在用户首次点击运行时下载两个小型ML模型。
组标题建议
理解问题
为分组标签建议标题具有挑战性,因为在首次分组标签时很难理解用户意图。根据项目启动时的访谈,我们发现虽然标签组有时使用通用术语如"购物"或"旅行",但超过一半情况下用户标签页使用特定术语,如视频游戏名称、朋友姓名或城镇名称。我们还发现标签名称非常短——通常只有1-2个词。
生成组摘要
为解决这些挑战,我们采用了结合改进的TF-IDF文本分析和关键词提取的混合方法。我们识别在标签组内页面标题中统计上区别于组外标题的术语。三个最突出的关键词,加上三个随机选择页面的完整标题,被组合起来生成代表该组的简明摘要,用作后续语言模型处理阶段的输入。
生成标签
摘要字符串用作生成模型的输入,返回最终标签。我们使用了基于T5的编码器-解码器模型(flan-t5-base),该模型在10,000多个示例场景和标签上进行了微调。
开发模型的关键挑战之一是在没有任何用户数据的情况下生成训练数据样本来微调模型。为此,我们定义了一组用户原型,并使用LLM API(OpenAI GPT-4)为执行各种任务的用户创建示例页面。这通过来自公开可用的common crawl数据集的真实页面标题进行了增强。然后我们使用LLM为这些用例建议简短标题。这个过程首先在数百个组名称的小规模上进行。这些名称经过手动校正和整理,调整简洁性和一致性。随着过程扩展,最初的300个组名称被用作传递给LLM的示例,以便创建的其他示例符合这些标准。
缩小模型规模
我们需要将模型缩小到足以在大多数计算机上运行。初始模型训练完成后,我们使用知识蒸馏过程将其采样为更小的模型。对于蒸馏,我们根据教师flan-t5-base模型的令牌概率输出调整了t5-efficient-tiny模型。在蒸馏过程中,我们还移除了两个编码器转换层和两个解码器层,以进一步减少参数数量。
最后,模型参数从浮点数(每个参数4字节)量化为8位整数。最终,这整个缩减过程将模型从1GB减小到57MB,准确率仅有适度降低。
建议标签页
理解问题
对于标签建议,我们确定了人们偏好分组标签页的几种方法。有些人偏好按域名分组,例如轻松访问所有工作文档。其他人可能偏好在他们计划旅行时将所有的标签页分组。还有人可能偏好将"工作"和"个人"标签页分开。
我们最初的标签建议方法基于语义相似度。主题相似的标签页会被建议分组。
识别主题相似的标签页
我们首先使用MiniLM嵌入模型在本地将标签标题转换为特征向量。嵌入模型的训练使得相似内容在嵌入空间中产生接近的向量。使用余弦相似度等相似性度量,我们能够分配一个标签标题或URL与另一个的相似程度。
用户选择的锚点标签页与另一个标签页之间的相似度得分是候选标签页与锚点标签页的组标题(如果存在)、锚点标签页标题和锚点URL的线性组合。使用这些值,我们生成相似度概率,具有高概率阈值的标签页被建议加入该组。
$$相似度 = σ(w_g·sim(t_i,g_a) + w_t·sim(t_i,t_a) + w_u·sim(u_i,u_a))$$
其中,w是权重,t_i是候选标签页,t_a是锚点标签页,g_a是锚点组标题,u_i是候选URL,u_a是锚点URL,σ是sigmoid函数。
优化权重
为了找到权重,我们将问题构建为分类任务,根据给定锚点标签页时正确分类的标签页计算精确率和召回率。我们使用了基于上述用户原型由OpenAI生成的合成数据。
我们最初使用聚类方法建立基线,当我们意识到以不同重要性处理组、标题和URL特征可以改进指标时,转向了逻辑回归。
使用逻辑回归,相比基线有18%的改进。
性能
虽然使用此功能的用户标签页数量中位数相对较小(~25个),但有些"高级"用户的标签页数量达到数千个。这会导致标签分组功能运行时间过长。
这是我们从基于聚类的方法转向线性模型的部分原因。
使用我们的性能框架,我们发现运行逻辑回归的p99分位数相比基于聚类的方法(如KMeans)提高了33%。
未来的工作将涉及改进F1分数。这可能通过在推理中添加时间相关组件(我们更可能将同时打开的标签页分组在一起)或为我们的用例使用微调的嵌入模型来实现。
感谢阅读
我们的所有工作都是开源的。如果您是开发人员,请随时在我们的模型训练源代码中浏览,或在Huggingface上查看我们的主题模型。
请随时尝试此功能并告诉我们您的想法!