splink
Splink 是一个用于概率记录链接和实体解析的 Python 工具,能够快速、准确地对没有唯一标识符的数据集进行去重和记录匹配。它解决了在处理大规模数据时,如何高效识别和合并重复记录的难题,特别适合需要清理和整合多源数据的场景。
这款工具非常适合数据科学家、研究人员以及数据工程师使用,尤其是那些处理人口普查、客户数据整合或学术研究中实体匹配问题的专业人士。Splink 的设计兼顾了易用性和性能,即使是没有深厚编程背景的用户也能通过其交互式可视化功能轻松理解和优化匹配结果。
Splink 的技术亮点包括支持多种 SQL 后端(如 DuckDB、AWS Athena 和 Spark),能够在笔记本电脑上一分钟内完成百万级记录的匹配,同时也可扩展到处理亿级数据。它基于 Fellegi-Sunter 模型,并引入了词频调整和自定义模糊匹配逻辑,从而提升了匹配精度。此外,Splink 不需要训练数据即可完成无监督学习,降低了使用门槛。
如果你的数据包含多个不高度相关的列(如姓名、出生日期、城市等),Splink 将表现尤为出色。不过,它并不适合仅基于单列“词袋”数据(如公司名称)进行匹配的场景。无论是政府机构、学术界还是私营企业,Splink 都能为复杂的数据链接任务提供强大支持。
使用场景
一家电商公司正在整合来自不同渠道的客户数据,希望通过合并重复记录来构建统一的客户画像。
没有 splink 时
- 数据团队需要手动编写复杂的 SQL 查询来比对不同表中的客户信息,效率极低且容易出错
- 面对数百万条客户记录,传统方法在笔记本电脑上运行可能需要数小时甚至数天才能完成
- 无法灵活处理模糊匹配问题,例如姓名的拼写错误或地址的部分缺失,导致匹配准确率较低
- 缺乏直观的分析工具,难以评估匹配结果的质量和发现潜在问题
- 当数据规模扩大到千万级别时,现有方案完全无法应对,必须依赖昂贵的大数据平台
使用 splink 后
- 数据团队只需几行 Python 代码即可快速配置和执行记录链接任务,大幅降低开发成本
- 借助 DuckDB 或 Spark 等后端支持,splink 能在一分钟内处理百万级数据,轻松应对大规模场景
- 内置的模糊匹配逻辑和词频调整功能显著提升了匹配准确性,即使是不完美的数据也能高效处理
- 提供交互式可视化界面,帮助团队直观理解模型表现并快速定位问题
- 支持多种 SQL 后端,既能在本地运行小规模任务,也能无缝扩展到云端处理超大规模数据
通过 splink,电商公司不仅节省了大量时间和资源,还显著提升了客户数据整合的效率和质量。
运行环境要求
- 未说明
未说明
未说明

快速开始
快速、准确且可扩展的数据链接与去重
Splink 是一个用于概率记录链接(实体解析,Entity Resolution)的 Python 包,它允许您对缺乏唯一标识符的数据集进行去重和记录链接。
它被广泛应用于政府、学术界和私营部门——更多用例请参阅用例。
主要特性
⚡ 速度: 能够在笔记本电脑上在一分钟左右完成百万条记录的链接。
🎯 准确性: 支持词频调整和用户定义的模糊匹配逻辑。
🌐 可扩展性: 可以在 Python 中执行链接(使用 DuckDB),也可以在 AWS Athena 或 Spark 等大数据后端处理超过一亿条记录。
🎓 无监督学习: 模型训练不需要训练数据。
📊 交互式输出: 提供一系列交互式可视化工具,帮助用户理解模型并诊断问题。
Splink 的链接算法基于 Fellegi-Sunter 的记录链接模型,并进行了各种定制以提高准确性。
Splink 能做什么?
考虑以下缺乏唯一人员标识符的记录:

Splink 预测哪些行会链接在一起:

并将这些链接聚类生成估计的人员 ID:

Splink 最适合处理什么样的数据?
Splink 在输入数据包含多个****非高度相关的列时表现最佳。例如,如果实体类型是人,您可以有全名、出生日期和城市等列。如果实体类型是公司,则可以有名称、营业额、行业和电话号码等列。
当某一列可以从另一列高度预测时,就会发生高相关性——例如,城市可以从邮政编码预测出来。如果所有输入列都高度相关,那么相关性将特别成问题。
Splink 不适用于链接包含“词袋”的单列数据。例如,只有一个“公司名称”列而没有其他详细信息的表。
文档
Splink 文档的主页可以在这里找到:文档链接,其中包括可以在浏览器中运行的教程和示例。
Splink 背后的 Fellegi Sunter 统计模型规范类似于 R 语言中的 fastLink 包所使用的模型。伴随 fastLink 包的是一篇学术论文,描述了该模型。Splink 文档站点 和一系列交互式文章也探讨了 Splink 背后的理论。
英国国家统计局撰写了一篇关于使用 Splink 的案例研究,用于将 2021 年人口普查数据与其自身进行链接。
安装
Splink 支持 Python 3.9+。要获取最新发布的 Splink 版本,您可以使用 pip 从 PyPI 安装:
pip install splink
或者,如果您愿意,也可以使用 conda 安装 Splink:
conda install -c conda-forge splink
为特定后端安装 Splink
对于需要特定后端的项目,Splink 提供了针对 Spark、Athena 和 PostgreSQL 的可选安装。这些可以通过在 pip 安装命令中添加后端名称来安装:
pip install 'splink[{backend}]'
点击此处查看后端特定的安装命令
Spark
pip install 'splink[spark]'
Athena
pip install 'splink[athena]'
PostgreSQL
pip install 'splink[postgres]'
快速入门
以下代码演示了如何估算去重模型的参数,使用该模型识别重复记录,并通过聚类生成估计的唯一人员 ID。
如需更详细的教程,请参见此处。
import splink.comparison_library as cl
from splink import DuckDBAPI, Linker, SettingsCreator, block_on, splink_datasets
db_api = DuckDBAPI()
df = splink_datasets.fake_1000
settings = SettingsCreator(
link_type="dedupe_only",
comparisons=[
cl.JaroWinklerAtThresholds("first_name", [0.9, 0.7]),
cl.JaroAtThresholds("surname", [0.9, 0.7]),
cl.DateOfBirthComparison(
"dob",
input_is_string=True,
datetime_metrics=["year", "month"],
datetime_thresholds=[1, 1],
),
cl.ExactMatch("city").configure(term_frequency_adjustments=True),
cl.EmailComparison("email"),
],
blocking_rules_to_generate_predictions=[
block_on("first_name"),
block_on("surname"),
]
)
linker = Linker(df, settings, db_api)
linker.training.estimate_probability_two_random_records_match(
[block_on("first_name", "surname")],
recall=0.7,
)
linker.training.estimate_u_using_random_sampling(max_pairs=1e6)
linker.training.estimate_parameters_using_expectation_maximisation(
block_on("first_name", "surname")
)
linker.training.estimate_parameters_using_expectation_maximisation(block_on("dob"))
pairwise_predictions = linker.inference.predict(threshold_match_weight=-10)
clusters = linker.clustering.cluster_pairwise_predictions_at_threshold(
pairwise_predictions, 0.95
)
df_clusters = clusters.as_pandas_dataframe(limit=5)
视频
支持
要找到提问、报告错误或获取一般建议的最佳位置,请参阅我们的指南。
奖项
🥇 2025 年公务员奖:创新类别 - 获奖者
🥇 2025 年公务员奖:卓越交付奖 - 由 Splink 驱动的仪表板获奖
🥇 2025 年 OpenUK 奖:开放数据类别 - 获奖者
🥈 2023 年公务员奖:最佳数据、科学和技术应用 - 亚军
🥇 2022 年政府分析奖:人民选择奖 - 获奖者
🥈 2022 年政府分析奖:创新方法 - 亚军
🥇 2020 年政府分析奖:创新方法 - 获奖者
🥇 2020 年司法部数据与分析服务局 (DASD) 奖:创新与影响 - 获奖者
引用
如果您在研究中使用了 Splink,请按如下方式引用:
@article{Linacre_Lindsay_Manassis_Slade_Hepworth_2022,
title = {Splink: Free software for probabilistic record linkage at scale.},
author = {Linacre, Robin and Lindsay, Sam and Manassis, Theodore and Slade, Zoe and Hepworth, Tom and Kennedy, Ross and Bond, Andrew},
year = 2022,
month = {Aug.},
journal = {International Journal of Population Data Science},
volume = 7,
number = 3,
doi = {10.23889/ijpds.v7i3.1794},
url = {https://ijpds.org/article/view/1794},
}
致谢
我们非常感谢 ADR UK(英国行政数据分析研究中心)作为 Data First 项目的一部分为这项工作提供了初始资金。
我们对 Katie Harron 教授、James Doidge 教授和 Peter Christen 教授在 Splink 开发过程中提供的专家建议和指导表示衷心感谢。我们也非常感谢英国国家统计局的同事们对这项工作的专家建议和同行评审。任何错误均由我们自行负责。
相关仓库
尽管 Splink 是一个独立的软件包,但在 Splink 生态系统中还有一些其他仓库:
- splink_scalaudfs 包含用于生成 用户定义函数 的 Scala 代码,这些函数随后可以在 Spark 中调用。
- splink_datasets 包含可以通过 内置数据集 功能自动安装为 Splink 一部分的数据集。
- splink_synthetic_data 包含生成合成数据的代码。
版本历史
v5.0.0.dev22026/03/13v4.0.162026/03/11v4.0.152026/02/17v4.0.132026/02/12v4.0.122025/12/22v5.0.0.dev12025/12/17v4.0.12.dev12025/12/17v4.0.112025/11/12v4.0.102025/11/03v4.0.92025/09/24v4.0.82025/06/04v4.0.72025/03/05v4.0.62024/12/05v4.0.52024/11/06v4.0.42024/10/13v4.0.32024/09/30v4.0.22024/09/22v4.0.12024/09/05v4.0.02024/07/24v4.0.0.dev92024/07/24常见问题
相似工具推荐
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
PaddleOCR
PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。
awesome-machine-learning
awesome-machine-learning 是一份精心整理的机器学习资源清单,汇集了全球优秀的机器学习框架、库和软件工具。面对机器学习领域技术迭代快、资源分散且难以甄选的痛点,这份清单按编程语言(如 Python、C++、Go 等)和应用场景(如计算机视觉、自然语言处理、深度学习等)进行了系统化分类,帮助使用者快速定位高质量项目。 它特别适合开发者、数据科学家及研究人员使用。无论是初学者寻找入门库,还是资深工程师对比不同语言的技术选型,都能从中获得极具价值的参考。此外,清单还延伸提供了免费书籍、在线课程、行业会议、技术博客及线下聚会等丰富资源,构建了从学习到实践的全链路支持体系。 其独特亮点在于严格的维护标准:明确标记已停止维护或长期未更新的项目,确保推荐内容的时效性与可靠性。作为机器学习领域的“导航图”,awesome-machine-learning 以开源协作的方式持续更新,旨在降低技术探索门槛,让每一位从业者都能高效地站在巨人的肩膀上创新。
scikit-learn
scikit-learn 是一个基于 Python 构建的开源机器学习库,依托于 SciPy、NumPy 等科学计算生态,旨在让机器学习变得简单高效。它提供了一套统一且简洁的接口,涵盖了从数据预处理、特征工程到模型训练、评估及选择的全流程工具,内置了包括线性回归、支持向量机、随机森林、聚类等在内的丰富经典算法。 对于希望快速验证想法或构建原型的数据科学家、研究人员以及 Python 开发者而言,scikit-learn 是不可或缺的基础设施。它有效解决了机器学习入门门槛高、算法实现复杂以及不同模型间调用方式不统一的痛点,让用户无需重复造轮子,只需几行代码即可调用成熟的算法解决分类、回归、聚类等实际问题。 其核心技术亮点在于高度一致的 API 设计风格,所有估算器(Estimator)均遵循相同的调用逻辑,极大地降低了学习成本并提升了代码的可读性与可维护性。此外,它还提供了强大的模型选择与评估工具,如交叉验证和网格搜索,帮助用户系统地优化模型性能。作为一个由全球志愿者共同维护的成熟项目,scikit-learn 以其稳定性、详尽的文档和活跃的社区支持,成为连接理论学习与工业级应用的最
keras
Keras 是一个专为人类设计的深度学习框架,旨在让构建和训练神经网络变得简单直观。它解决了开发者在不同深度学习后端之间切换困难、模型开发效率低以及难以兼顾调试便捷性与运行性能的痛点。 无论是刚入门的学生、专注算法的研究人员,还是需要快速落地产品的工程师,都能通过 Keras 轻松上手。它支持计算机视觉、自然语言处理、音频分析及时间序列预测等多种任务。 Keras 3 的核心亮点在于其独特的“多后端”架构。用户只需编写一套代码,即可灵活选择 TensorFlow、JAX、PyTorch 或 OpenVINO 作为底层运行引擎。这一特性不仅保留了 Keras 一贯的高层易用性,还允许开发者根据需求自由选择:利用 JAX 或 PyTorch 的即时执行模式进行高效调试,或切换至速度最快的后端以获得最高 350% 的性能提升。此外,Keras 具备强大的扩展能力,能无缝从本地笔记本电脑扩展至大规模 GPU 或 TPU 集群,是连接原型开发与生产部署的理想桥梁。
