Doramagic 项目包 · 项目说明书

goldenmatch 项目

生成时间:2026-05-30 23:32:32 UTC

首页 - Golden Suite 简介

Golden Suite(黄金套件)是一个多语言数据质量与实体解析工具包,专为 AI 原生应用设计。该套件采用模块化架构,将数据质量检测(GoldenCheck)、数据标准化(GoldenFlow)、实体匹配去重(GoldenMatch)和流程编排(GoldenPipe)整合为一个统一的生态系统。

章节 相关页面

继续阅读本节完整说明和来源证据。

概述

Golden Suite(黄金套件)是一个多语言数据质量与实体解析工具包,专为 AI 原生应用设计。该套件采用模块化架构,将数据质量检测(GoldenCheck)、数据标准化(GoldenFlow)、实体匹配去重(GoldenMatch)和流程编排(GoldenPipe)整合为一个统一的生态系统。

核心价值主张:

  • 零配置开箱即用:支持 pip install goldenmatch && goldenmatch dedupe customers.csv 三行命令完成去重
  • 多语言支持:提供 Python、TypeScript/Node.js、Rust 原生扩展
  • AI 原生集成:内置 MCP(Model Context Protocol)服务器,支持 Claude 等 AI Agent 调用
  • 企业级性能:v1.24.0 版本在 10M QIS 真实数据集上实现 81% 耗时 reduction(F1=0.9886 不变)

资料来源:README.md:1-30

资料来源:README.md:1-30

快速开始

Goldenmatch 是 Golden Suite 数据质量工具套件的核心组件,提供零配置到高级定制的实体解析(Entity Resolution)能力。本页面将帮助你在 5 分钟内完成首次去重任务。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 Python 环境

继续阅读本节完整说明和来源证据。

章节 TypeScript / Node.js 环境

继续阅读本节完整说明和来源证据。

章节 Python 快速上手

继续阅读本节完整说明和来源证据。

安装

Python 环境

pip install goldenmatch

可选依赖:

# Web UI 可视化界面
pip install "goldenmatch[web]"

# 原生加速运行时(Rust/PyO3)
pip install "goldenmatch[native]"

# LLM 增强功能
pip install "goldenmatch[anthropic]"

TypeScript / Node.js 环境

npm install goldenmatch

环境要求:

  • Python: 3.11+
  • Node.js: >=20

核心概念

graph TD
    A[输入数据] --> B[分块 Blocking]
    B --> C[候选对生成]
    C --> D[相似度评分]
    D --> E[聚类 Clustering]
    E --> F[黄金记录构建]
    F --> G[去重结果输出]
    
    H[配置调优] -.->|自动推荐| C
    H -.->|自动推荐| D
    H -.->|自动推荐| E
概念说明
Blocking将数据分块以减少比较次数,避免 O(n²) 全量比较
Scoring对候选对进行相似度评分,支持模糊匹配、精确匹配、概率模型
Clustering将相似记录聚类为同一实体组
Golden Record从多个重复记录中选出最佳值作为最终输出

方法一:零配置快速去重(推荐新手)

Python 快速上手

from goldenmatch import Goldenmatch

# 一行代码完成去重
gm = Goldenmatch()
result = gm.dedupe("customers.csv")
result.write_csv("deduplicated.csv")

资料来源:packages/python/goldenmatch/examples/zero_config_quickstart.py:1-10

TypeScript 快速上手

import { Goldenmatch } from "goldenmatch";

const gm = new Goldenmatch();
const result = await gm.dedupe("customers.csv");
await result.writeCSV("deduplicated.csv");

资料来源:packages/typescript/goldenmatch/examples/01-basic-dedupe.ts:1-20

命令行快速上手

# 最简命令
goldenmatch dedupe customers.csv

# 指定输出
goldenmatch dedupe customers.csv --output deduplicated.csv

方法二:基础配置去重

Python 示例

from goldenmatch import Goldenmatch, Config

config = Config()
config.match.name_fields = ["first_name", "last_name"]
config.match.email_field = "email"
config.blocking.name_blocker = True

gm = Goldenmatch(config)
result = gm.dedupe("customers.csv")
result.write_csv("deduplicated.csv")

资料来源:packages/python/goldenmatch/examples/basic_dedupe.py:1-30

基础配置参数

参数类型默认值说明
name_fieldslist[str][]姓名字段列表
email_fieldstrNone邮箱字段
phone_fieldstrNone电话字段
address_fieldslist[str][]地址字段
name_blockerboolFalse启用姓名分块
email_blockerboolFalse启用邮箱分块

方法三:高级配置去重

自定义匹配键

from goldenmatch import Goldenmatch, Config, MatchKey

config = Config()
config.match.keys = [
    MatchKey(fields=["email"], weight=0.5),
    MatchKey(fields=["phone"], weight=0.3),
    MatchKey(fields=["first_name", "last_name"], weight=0.2),
]

多轮分块策略

config.blocking.passes = [
    {"type": "email"},
    {"type": "name_soundex"},
    {"type": "phone_last4"},
    {"type": "fuzzy_name"},
]

权重调优

config.match.field_weights = {
    "email": 0.5,
    "phone": 0.3,
    "first_name": 0.1,
    "last_name": 0.1,
}

工作流程图

graph LR
    A[原始数据] --> B[数据加载]
    B --> C{配置方式}
    C -->|零配置| D[自动推断配置]
    C -->|自定义| E[用户指定配置]
    D --> F[去重执行]
    E --> F
    F --> G[结果评估]
    G --> H{评估结果}
    H -->|不满意| I[调整配置]
    I --> F
    H -->|满意| J[输出结果]

输出结果格式

返回对象结构

属性类型说明
clustersDataFrame聚类结果,包含 cluster_idmember_idis_golden
golden_recordsDataFrame黄金记录数据
statisticsdict匹配统计信息

输出字段说明

字段说明
__row_id__原始行号
__cluster_id__所属聚类 ID
__is_golden__是否为黄金记录
__match_score__匹配得分
__source_row_id__字段来源行号(启用 provenance 时)

性能基准

数据规模推荐配置预期耗时内存峰值
10K 记录零配置<10 秒<500 MB
100K 记录bucket 分块<2 分钟<2 GB
1M 记录bucket 分块 + native<10 分钟<5 GB
5M 记录bucket 分块 + native~10 分钟~6.4 GB
10M 记录QIS-bucket-realistic~8 分钟优化中
v1.24.0 性能数据:10M QIS-bucket-realistic 场景下耗时从 2604s 降至 502s(-81%),内存降低 18%。

常见问题

Q: 零配置模式是否总是最优选择?

不是。零配置适合快速原型验证。对于生产环境,建议:

Q: 如何处理隐私敏感数据(PPRL)?

使用 pprl_healthcare.py 示例,通过隐私保护记录链接技术实现跨机构匹配,无需共享原始数据。

Q: 支持哪些数据源?

  • CSV 文件
  • Parquet 文件
  • 数据库表(Postgres、DuckDB)
  • Python DataFrame / TypeScript Record[]

下一步

资料来源:packages/python/goldenmatch/examples/zero_config_quickstart.py:1-10

系统架构

Goldenmatch 是一个多语言数据质量和实体解析(Entity Resolution)工具包,提供从数据清洗、质量检查到记录去重的完整解决方案。系统采用模块化架构设计,核心用 Python 实现,辅以 TypeScript/Node.js 实现和 Rust 原生加速运行时。 资料来源:README.md

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 核心处理管道(Pipeline)

继续阅读本节完整说明和来源证据。

章节 自动配置控制器(AutoConfig Controller)

继续阅读本节完整说明和来源证据。

章节 学习记忆系统(Learning Memory)

继续阅读本节完整说明和来源证据。

概述

Goldenmatch 是一个多语言数据质量和实体解析(Entity Resolution)工具包,提供从数据清洗、质量检查到记录去重的完整解决方案。系统采用模块化架构设计,核心用 Python 实现,辅以 TypeScript/Node.js 实现和 Rust 原生加速运行时。 资料来源:README.md

┌─────────────────────────────────────────────────────────────────────────────┐
│                            Golden Suite 架构全景                              │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  ┌──────────────┐   ┌──────────────┐   ┌──────────────┐   ┌──────────────┐ │
│  │ GoldenCheck  │ → │ GoldenFlow   │ → │ GoldenMatch  │ → │ GoldenPipe   │ │
│  │ 数据质量扫描  │   │ 数据标准化    │   │ 实体解析/去重 │   │ 流程编排     │ │
│  └──────────────┘   └──────────────┘   └──────────────┘   └──────────────┘ │
│          ↑                                                        ↑        │
│          └──────────────── InferMap ──────────────────────────────┘        │
│                           (Schema 映射)                                     │
└─────────────────────────────────────────────────────────────────────────────┘

核心模块

核心处理管道(Pipeline)

Pipeline 是 Goldenmatch 的主处理引擎,负责协调整个实体解析流程。 资料来源:core/pipeline.py:1-50

graph TD
    A[输入数据] --> B[数据加载]
    B --> C[配置加载]
    C --> D[数据预处理]
    D --> E[Blocking 分块]
    E --> F[候选对生成]
    F --> G[相似度评分]
    G --> H[聚类]
    H --> I[Golden Record 构建]
    I --> J[结果输出]
    
    K[Learning Memory] -.-> E
    K -.-> G
    K -.-> H
    L[AutoConfig] -.-> C
    L -.-> I

核心组件包括:

模块文件路径功能描述
Pipelinecore/pipeline.py主处理引擎,协调整个流程
AutoConfigcore/autoconfig_controller.py自动配置调优
Memory Learnercore/memory/learner.py学习记忆系统
Backendsbackends/*.py多后端支持(Polars/DuckDB)

自动配置控制器(AutoConfig Controller)

AutoConfig 是 Goldenmatch 的智能配置系统,能够根据数据特征自动调整匹配参数。该系统从 v1.20.0 开始引入聚类决策调谐器(cluster-decision tuner),是 Learning Memory 系列的第三个调谐器。 资料来源:core/autoconfig_controller.py:1-100

# 核心自动配置流程伪代码
class AutoConfigController:
    def __init__(self, config, dataset_profile):
        self.recall_tuner = RecallTuner()
        self.precision_tuner = PrecisionTuner()
        self.cluster_threshold_tuner = ClusterThresholdTuner()
        
    def tune(self, feedback: FeedbackData) -> TunedConfig:
        # 基于反馈调整配置
        pass

配置调谐器类型:

调谐器级别功能
MemoryLearnerPair 级基于配对级别的 approve/reject 决策
FieldStrategyTunerField 级字段级策略优化
ClusterThresholdTunerCluster 级聚类级决策阈值自动配置

从 v1.23.0 起,系统默认使用零标签置信度(zero-label confidence)进行自动配置提交,控制器优先选择具有更高 -overall_confidence 的候选方案。 资料来源:core/autoconfig_controller.py:100-150

学习记忆系统(Learning Memory)

Learning Memory 是 Goldenmatch 的自适应学习机制,能够从用户反馈中学习并优化匹配策略。 资料来源:core/memory/learner.py:1-80

graph LR
    A[用户决策] --> B[记忆存储]
    B --> C[模式学习]
    C --> D[策略更新]
    D --> E[下次匹配]
    E --> A

记忆系统支持三种学习模式:

模式输入输出
配对学习approve/reject 决策Pair-level 规则
字段学习字段匹配反馈FieldStrategy
聚类学习Cluster-level 决策决策阈值建议

v1.22.0 引入了 Field-level golden-record provenance 功能,每个字段字典都包含 source_row_id,追踪值的来源记录。 资料来源:core/memory/learner.py:80-150

后端架构

多后端支持

Goldenmatch 支持多种数据处理后端,可根据数据规模选择最优方案。 资料来源:backends/duckdb_backend.py:1-60

后端适用场景特点
Polars中小规模数据纯 Python,零依赖
DuckDB大规模数据列式存储,高性能
Native (Rust)超大规模数据PyO3 abi3,编译加速
# 后端选择逻辑
def get_backend(data_size: int, config: Config) -> Backend:
    if config.use_native and has_native_runtime():
        return NativeBackend()
    elif data_size > 5_000_000:
        return DuckDBBackend()
    else:
        return PolarsBackend()

原生加速运行时

从 v1.21.0 起,Goldenmatch 支持可选的原生加速运行时(goldenmatch-native),这是一个用 Rust/PyO3 abi3 编写的编译加速引擎。 资料来源:README.md

# 安装原生加速
pip install "goldenmatch[native]"

安装后系统会自动发现并使用原生内核,无需额外配置。v1.24.0 的性能数据显示,在 10M QIS-bucket-realistic 数据集上,使用原生加速后处理时间从 2604 秒降至 502 秒(-81%),同时 RSS 内存减少 18%。 资料来源:CHANGELOG.md

扩展生态系统

Rust 扩展

Goldenmatch 提供 Postgres 扩展(goldenmatch_pg)和 DuckDB UDFs,支持在数据库内直接进行 SQL 原生模糊匹配。 资料来源:packages/rust/extensions/README.md

函数功能
goldenmatch_suggest_threshold()Otsu 阈值建议
goldenmatch_detect_domain()领域检测
goldenmatch_evaluate()精确率/召回率评估
goldenmatch_train_em()EM 概率训练

TypeScript/Node.js 实现

Goldenmatch 提供完整的 TypeScript 实现,支持在 Node.js、Edge Runtime 和 Next.js Server Components 中使用。 资料来源:packages/typescript/goldenmatch/README.md

// TypeScript 使用示例
import { GoldenMatch } from 'goldenmatch';

const matcher = new GoldenMatch();
const results = await matcher.dedupe(records);

MCP 服务器集成

Goldenmatch 支持 Model Context Protocol,可与 Claude Desktop 等 AI 工具无缝集成。

pip install "goldenmatch[mcp]"

数据流架构

graph TD
    subgraph 输入层
        A[CSV/Parquet] 
        B[DataFrame]
        C[SQL Table]
        D[API/Streaming]
    end
    
    subgraph 处理层
        E[GoldenCheck 扫描]
        F[GoldenFlow 标准化]
        G[InferMap Schema映射]
        H[GoldenMatch 去重]
    end
    
    subgraph 输出层
        I[Golden Records]
        J[Cluster 映射]
        K[Provenance 追踪]
        L[MCP Tools]
    end
    
    A --> E
    B --> E
    C --> G
    D --> F
    E --> F
    F --> G
    G --> H
    H --> I
    H --> J
    J --> K
    H --> L

性能优化

阻塞策略(Blocking)

Goldenmatch 使用多轮阻塞策略减少比较次数:

策略适用场景性能提升
QIS Bucket大规模数据~100x
LSH近似匹配~50x
Sorted Neighborhood有序数据~20x

v1.24.0 引入的 QIS-bucket-realistic 阻塞策略,结合 Chao1 基数估计和启发式规则扩展,在 10M 记录规模下实现了 81% 的耗时减少。 资料来源:CHANGELOG.md

内存管理

系统采用多种内存优化策略:

  1. 流式处理:支持增量处理大规模数据
  2. 向量化操作:单 group-by-per-column 模式减少中间结果
  3. Provenance 追踪:可选的字段级溯源,不影响核心性能

配置体系

# 典型配置结构
config = {
    "match": {
        "fields": ["name", "address", "phone"],
        "thresholds": {"fuzzy": 0.85, "exact": 0.95}
    },
    "blocking": {
        "strategy": "qis_bucket",
        "passes": 3
    },
    "memory": {
        "enabled": True,
        "learn_from_feedback": True
    },
    "output": {
        "lineage_provenance": False
    }
}

相关文档

来源:https://github.com/benseverndev-oss/goldenmatch / 项目说明书

处理管道

Goldenmatch 的处理管道是将脏乱数据转化为干净、去重、合并的黄金记录(Golden Records)的完整工作流。该管道通过阻塞(Blocking)、评分(Scoring)、聚类(Clustering)三个核心阶段,结合可插拔的标准化和匹配策略,实现高效实体解析。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 管道核心阶段

继续阅读本节完整说明和来源证据。

章节 阻塞策略

继续阅读本节完整说明和来源证据。

章节 QIS-Bucket 优化

继续阅读本节完整说明和来源证据。

管道架构概览

graph TD
    A[原始数据输入] --> B[数据标准化]
    B --> C[阻塞分块]
    C --> D[候选对生成]
    D --> E[记录评分]
    E --> F[聚类分组]
    F --> G[黄金记录构建]
    G --> H[输出结果]
    
    C -->|QIS-bucket 优化| C
    E -->|概率模型| E
    F -->|图遍历| F
    G -->|溯源追踪| G

管道核心阶段

阶段功能关键文件
标准化 (Standardization)规范化字段格式(电话、日期、地址)goldenflow
阻塞 (Blocking)减少候选对数量,避免 O(n²) 全比较blocker.py
评分 (Scoring)计算记录对相似度分数scorer.py
聚类 (Clustering)将相似记录分组为实体簇cluster.py
黄金记录 (Golden Records)从簇中选择代表性记录golden.py

阻塞机制 (Blocking)

阻塞是性能优化的关键步骤,通过将数据划分为"块"来限制需要比较的记录对数量。

阻塞策略

# 典型阻塞配置
blocking_keys = [
    "soundex(last_name)",      # 姓氏语音编码
    "first_two(postal_code)",  # 邮编前两位
    "first_five(phone)",       # 电话前五位
]

QIS-Bucket 优化

v1.24.0 版本引入 QIS-bucket(Quality-Invariant Scaling)优化,实现 10M 记录从 2604 秒降至 502 秒(-81% wall time),同时保持 F1=0.9886 不变。资料来源:packages/python/goldenmatch/CHANGELOG.md

graph LR
    A[原始数据] --> B[启发式规则扩展]
    B --> C[Chao1 基数估计]
    C --> D[规模感知分块]
    D --> E[候选对集合]

阻塞类型

类型描述适用场景
精确阻塞块键完全匹配高质量标准化的数据
模糊阻塞块键相似(如 soundex)名称变体、拼写错误
锚定阻塞多块键交集极高数据量(10M+)
自适应阻塞根据数据特征自动选择异构数据源

评分系统 (Scoring)

评分阶段计算每对候选记录的相似度分数,支持多种评分模型。

评分器类型

评分器描述适用字段
StringScorer编辑距离、Jaro-Winkler姓名、地址
NumericScorer绝对差、比率差年龄、价格
DateScorer日期差、格式差异日期字段
ProbabilisticScorerFellegi-Sunter EM 模型混合字段

字段级评分配置

field_config = {
    "name": {"strategy": "fuzzy", "weight": 0.4},
    "address": {"strategy": "tokenized", "weight": 0.3},
    "phone": {"strategy": "normalized", "weight": 0.2},
    "email": {"strategy": "exact", "weight": 0.1},
}

LLM 增强评分

可选的 LLM 评分器使用大语言模型进行语义匹配,适用于产品名称等复杂文本字段:

# 需要 OPENAI_API_KEY 或 ANTHROPIC_API_KEY
scorer = LLMScorer(provider="openai", model="gpt-4")

聚类算法 (Clustering)

聚类阶段将评分高于阈值的记录对合并为连通分量,形成实体簇。

聚类策略

策略描述阈值调优
单一阈值分数 > 阈值则合并tune_decision_threshold()
簇级决策考虑簇内整体质量v1.20.0 引入
概率决策基于 EM 后验概率需要训练数据

决策阈值调优

from goldenmatch.core.autoconfig_cluster_threshold_tune import tune_decision_threshold

# 消费簇级 approve/reject 决策
threshold = tune_decision_threshold(feedback_data, clusters)

v1.20.0 引入了簇级决策调优器,是 Learning Memory 系列的第三个调优器。资料来源:v1.20.0 Release

黄金记录构建 (Golden Records)

黄金记录是从实体簇中选择或合并的最优代表记录。

存活策略 (Survivorship)

策略描述
most_complete选择非空字段最多的记录
most_recent选择最新修改的记录
highest_confidence选择来源可信度最高的记录
merged字段级合并,取各记录最优值

溯源追踪 (Provenance)

v1.22.0 引入了字段级黄金记录溯源功能:

golden_records = build_golden_records_batch(
    clusters,
    provenance=True  # 启用溯源
)
# 每个字段包含 source_row_id,标识该字段值来自哪条原始记录

配置选项:

  • config.output.lineage_provenance(默认 False)资料来源:v1.22.0 Release

性能优化

后端选择

后端适用规模性能特征
backend="chunked"< 1M内存友好,稳定性优先
backend="bucket"1M - 10M5x wall 减少,2x RSS 减少
backend="native"> 5MRust/PyO3 编译加速

原生加速运行时

v1.21.0 引入了可选的原生加速运行时:

pip install "goldenmatch[native]"

goldenmatch-native 是用 Rust/PyO3 abi3 编译的运行时,包含聚类和块评分内核,goldenmatch 自动发现并使用。资料来源:v1.21.0 Release

推荐配置

数据规模推荐配置
< 100K默认配置,无需调优
100K - 1Mbackend="chunked"
1M - 5Mbackend="bucket"
5M - 10Mbackend="bucket" + backend="native"
> 10M分区处理 + backend="native"

配置参考

完整配置示例

from goldenmatch import GoldenMatch

config = {
    "blocking": {
        "keys": ["soundex(last_name)", "first_two(zip)"],
        "method": "qis_bucket",  # v1.24.0 优化
    },
    "scoring": {
        "fields": {
            "name": {"strategy": "fuzzy", "weight": 0.5},
            "address": {"strategy": "tokenized", "weight": 0.3},
            "phone": {"strategy": "normalized", "weight": 0.2},
        },
        "method": "probabilistic",  # 或 "rule_based"
    },
    "clustering": {
        "decision_threshold": "auto",  # 自动调优
    },
    "output": {
        "golden_records": True,
        "lineage_provenance": False,
    },
}

matcher = GoldenMatch(config)
result = matcher.dedupe("customers.csv")

自动配置

管道支持零配置自动推断:

# 自动配置召回率和零标签提交
matcher = GoldenMatch(auto_config=True)

# v1.23.0 改进:零标签置信度提交
# pick_committed 优先选择更高 -overall_confidence 的候选

v1.23.0 默认启用零标签置信度自动配置,在精度塌陷风险较高时自动回退。资料来源:v1.23.0 Release

与 GoldenPipe 的关系

GoldenPipe 是更上层的编排层,将 Check → Flow → Match 串联为声明式管道:

graph LR
    A[GoldenCheck] --> B[GoldenFlow]
    B --> C[GoldenMatch]
    C --> D[输出]
    
    E[GoldenPipe] -->|编排| A
    E -->|编排| B
    E -->|编排| C

GoldenPipe 使用示例

from goldenpipe import GoldenPipe

pipeline = GoldenPipe.from_config("pipeline.yml")
pipeline.run(
    source="data/customers.csv",
    output="data/deduplicated.csv"
)

GoldenPipe 支持 Airflow DAGs,提供 12 个开箱即用的 DAG 示例。资料来源:examples/airflow/README.md

常见问题

内存溢出 (OOM)

对于超大数据集,使用分区处理或启用原生加速:

matcher = GoldenMatch(backend="native")

精度下降

检查阻塞键是否过于宽松导致假阳性,或使用 LLM 增强评分。

阈值调优

使用 evaluate_and_tune.py 示例脚本,根据已知真值调整阈值。

来源:https://github.com/benseverndev-oss/goldenmatch / 项目说明书

自动配置系统

自动配置系统(Auto-config)是GoldenMatch中的智能配置引擎,旨在消除实体解析任务中的手动调参工作。该系统通过分析数据特征、观察匹配行为、收集正负证据,自动推断最优的匹配阈值、阻塞策略和字段权重配置。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 核心模块职责

继续阅读本节完整说明和来源证据。

章节 决策流程

继续阅读本节完整说明和来源证据。

章节 pickcommitted 决策逻辑

继续阅读本节完整说明和来源证据。

概述

自动配置系统(Auto-config)是GoldenMatch中的智能配置引擎,旨在消除实体解析任务中的手动调参工作。该系统通过分析数据特征、观察匹配行为、收集正负证据,自动推断最优的匹配阈值、阻塞策略和字段权重配置。

自动配置系统的核心价值在于:

  • 零配置启动:用户无需深入理解匹配算法细节即可获得高质量结果
  • 自适应优化:根据数据规模、字段分布动态调整参数
  • 持续学习:通过历史决策记录不断改进配置建议
  • 可解释性:提供配置决策的置信度和推理依据

资料来源:packages/python/goldenmatch/goldenmatch/core/autoconfig.py:1-50

系统架构

自动配置系统由多个协同工作的模块组成,形成完整的配置发现→评估→优化闭环。

graph TD
    A[输入数据] --> B[autoconfig.py<br/>特征提取]
    B --> C[autoconfig_negative_evidence.py<br/>负样本收集]
    B --> D[autoconfig_history.py<br/>历史经验]
    C --> E[autoconfig_controller.py<br/>控制器]
    D --> E
    E --> F[autoconfig_cluster_threshold_tuner.py<br/>阈值调优]
    F --> G[优化后的配置]
    G --> H[实体解析引擎]
    H --> I[结果反馈]
    I --> D

核心模块职责

模块职责关键功能
autoconfig.py特征提取与配置生成分析数据分布,生成初始候选配置
autoconfig_controller.py配置调度与决策管理配置生命周期,选择最优配置
autoconfig_cluster_threshold_tuner.py阈值优化根据聚类决策调整决策边界
autoconfig_negative_evidence.py负证据收集识别并记录明确的非匹配对
autoconfig_history.py经验存储持久化配置决策,支持增量学习

资料来源:packages/python/goldenmatch/goldenmatch/core/autoconfig_controller.py:1-80

控制器模块

控制器是自动配置系统的核心调度器,负责协调各子模块并做出最终配置决策。

决策流程

graph LR
    A[接收候选配置] --> B{健康度排名}
    B --> C{零标签配置?}
    C -->|是| D[优先置信度]
    C -->|否| E[优先质量分离]
    D --> F[pick_committed]
    E --> F
    F --> G[输出最终配置]

pick_committed 决策逻辑

控制器采用多级排序策略选择最终提交的配置:

  1. 第一排序键:健康度排名(health_rank)—— 优先选择数据质量更优的配置
  2. 第二排序键:零标签特征—— 携带 zero_label 配置文件的特殊处理
  3. 第三排序键(零标签场景):-overall_confidence —— 选择整体置信度更高的候选
  4. 第四排序键(非零标签场景):-mass_separation —— 选择质量分离度更高的候选

资料来源:packages/python/goldenmatch/goldenmatch/core/autoconfig_controller.py:80-150

关键参数

class AutoconfigController:
    def pick_committed(
        candidates: list[ConfigCandidate],
        zero_label_confidence_threshold: float = 0.5,
        health_rank_weight: float = 1.0
    ) -> ConfigCandidate:
参数类型默认值说明
candidateslist[ConfigCandidate]必需待评估的配置候选列表
zero_label_confidence_thresholdfloat0.5零标签置信度阈值
health_rank_weightfloat1.0健康度权重系数

资料来源:packages/python/goldenmatch/goldenmatch/core/autoconfig_controller.py:100-120

阈值调优器

聚类决策阈值调优器(autoconfig_cluster_threshold_tuner)是v1.20.0引入的第三代学习记忆组件,与配对级MemoryLearner和字段级字段策略调优器并列。

调优流程

graph TD
    A[聚类决策<br/>approve/reject] --> B[收集决策反馈]
    B --> C[计算精度-召回平衡]
    C --> D[Otsu方法<br/>自动阈值选择]
    D --> E[tune_decision_threshold]
    E --> F[生成per-dataset阈值建议]

核心函数

def tune_decision_threshold(
    decisions: list[ClusterDecision],
    sensitivity: str = "auto"
) -> float:
敏感度行为适用场景
auto自动选择最优阈值通用场景
high_precision提高阈值,减少误匹配数据质量差
high_recall降低阈值,减少漏匹配召回优先

资料来源:packages/python/goldenmatch/goldenmatch/core/autoconfig_cluster_threshold_tuner.py:1-100

负证据收集

负证据收集模块负责识别并利用明确的非匹配对来改进配置质量。

核心机制

当系统遇到高质量的负样本(确定不匹配的对)时,可以:

  1. 更新阻塞策略:将已知负样本的共同特征加入排除规则
  2. 调整相似度阈值:基于负样本的距离分布调整下界
  3. 改进字段权重:降低被负样本高相似度误导的字段权重
class NegativeEvidenceCollector:
    def register(
        self,
        pair: RecordPair,
        reason: str  # 证据来源:manual_review, ground_truth, heuristic
    ) -> None:
证据类型说明置信度
manual_review人工确认的非匹配对
ground_truth标准答案中的非匹配对最高
heuristic启发式规则识别的非匹配对

资料来源:packages/python/goldenmatch/goldenmatch/core/autoconfig_negative_evidence.py:1-80

历史记录系统

历史记录模块持久化配置决策,支持增量学习和配置回溯。

数据模型

@dataclass
class AutoconfigHistoryEntry:
    dataset_id: str
    timestamp: datetime
    config_snapshot: dict
    metrics: PerformanceMetrics
    decision_reason: str
    feedback: Optional[DecisionFeedback]
字段类型说明
dataset_idstr数据集标识符
timestampdatetime决策时间戳
config_snapshotdict配置快照
metricsPerformanceMetrics性能指标
decision_reasonstr决策依据
feedbackOptional[DecisionFeedback]用户反馈

查询接口

def query_similar(
    dataset_features: DatasetFeatures,
    limit: int = 5
) -> list[AutoconfigHistoryEntry]:

基于数据特征相似度检索历史配置,实现配置迁移。

资料来源:packages/python/goldenmatch/goldenmatch/core/autoconfig_history.py:1-100

配置选项参考

全局开关

配置项默认值说明
autoconfig.enabledtrue启用自动配置
autoconfig.recall_target0.95目标召回率
autoconfig.precision_floor0.90精度下界

零标签提交策略(v1.23.0+)

autoconfig:
  zero_label_commit: true  # 启用零标签置信度提交
  zero_label_confidence_threshold: 0.5

v1.23.0变更说明:控制器的pick_committed方法现在默认优先选择具有更高-overall_confidence的零标签配置候选,而非更高-mass_separation的候选,以避免精度崩塌问题。

资料来源:packages/python/goldenmatch/goldenmatch/core/autoconfig.py:150-200

使用示例

Python API

from goldenmatch import GoldenMatch

# 零配置自动匹配
gm = GoldenMatch()
result = gm.dedupe("customers.csv")

# 查看自动配置决策
print(result.autoconfig_summary)
# Output:
# {
#     "threshold": 0.87,
#     "blocking_strategy": "qis_buckets",
#     "field_weights": {"name": 0.4, "address": 0.3, ...},
#     "confidence": 0.92
# }

配置调优回调

from goldenmatch.core.autoconfig_cluster_threshold_tuner import tune_decision_threshold

# 手动触发阈值优化
decisions = gm.get_cluster_decisions()
optimal_threshold = tune_decision_threshold(decisions, sensitivity="auto")
gm.update_config({"decision_threshold": optimal_threshold})

版本历史

版本更新内容
v1.24.0Chao1规模感知基数估计,启发式规则扩展,诊断工具
v1.23.0零标签置信度提交优化,默认优先选择高置信度配置
v1.20.0聚类决策阈值调优器(tune_decision_threshold)
v1.19.0原生加速支持,自动配置与概率模型改进

常见问题

Q: 自动配置的阈值是如何确定的?

A: 系统综合使用Otsu自动阈值选择方法、历史配置迁移和负证据反馈三重机制。对于未见过的数据集类型,优先参考相似历史配置的经验阈值。

Q: 如何禁用自动配置并手动设置参数?

gm = GoldenMatch(config={"autoconfig.enabled": False})
gm.set_thresholds(precision=0.95, recall=0.90)

Q: 零标签配置是什么?

A: 指数据集中缺乏明确正样本(已确认匹配对)的场景。系统采用特殊的置信度评估策略,通过字段级一致性推断匹配可能性。

资料来源:packages/python/goldenmatch/goldenmatch/core/autoconfig.py:200-250 packages/python/goldenmatch/goldenmatch/core/autoconfig_controller.py:150-200

资料来源:packages/python/goldenmatch/goldenmatch/core/autoconfig.py:1-50

学习记忆系统

学习记忆系统(Learning Memory System)是 GoldenMatch 中的一套自适应机制,旨在通过用户反馈和自动分析持续优化实体解析的准确率。该系统从配对级别(pair-level)、字段级别(field-level)和聚类级别(cluster-level)三个维度收集决策信号,逐步构建和维护一个知识库,用于指导未来的匹配决策。

章节 相关页面

继续阅读本节完整说明和来源证据。

概述

学习记忆系统(Learning Memory System)是 GoldenMatch 中的一套自适应机制,旨在通过用户反馈和自动分析持续优化实体解析的准确率。该系统从配对级别(pair-level)、字段级别(field-level)和聚类级别(cluster-level)三个维度收集决策信号,逐步构建和维护一个知识库,用于指导未来的匹配决策。

学习记忆系统的核心价值在于:

  • 持续学习:从人工审核和自动决策中提取模式,无需手动配置阈值
  • 多层次优化:覆盖从原始配对评分到最终聚类决策的全链路
  • 零配置适应:通过 autoconfig 系列调优器自动推断最佳参数

资料来源:v1.20.0 Release Notes

资料来源:v1.20.0 Release Notes

Blocking 策略

Blocking 是实体解析(Entity Resolution)流程中的关键性能优化步骤。其核心目标是通过将可能匹配的记录分到同一"块"(block)中,大幅减少需要两两比较的记录对数量。在 GoldenMatch 中,未使用 blocking 时需要进行 O(n²) 的全量比较,而引入 blocking 后只需对同一 block 内的记录进行两两比较,从而将比较次数降低...

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 前端类型定义

继续阅读本节完整说明和来源证据。

章节 配置参数说明

继续阅读本节完整说明和来源证据。

章节 工作原理

继续阅读本节完整说明和来源证据。

概述

Blocking 是实体解析(Entity Resolution)流程中的关键性能优化步骤。其核心目标是通过将可能匹配的记录分到同一"块"(block)中,大幅减少需要两两比较的记录对数量。在 GoldenMatch 中,未使用 blocking 时需要进行 O(n²) 的全量比较,而引入 blocking 后只需对同一 block 内的记录进行两两比较,从而将比较次数降低到可管理的规模。

GoldenMatch 支持多种 blocking 策略,包括标准 blocking、基于近似最近邻(ANN)的 blocking、以及学习型 blocking。用户可以根据数据规模、字段特征和性能需求选择合适的策略组合。

Blocking 策略架构

graph TD
    A[输入数据集] --> B[Blocking 策略选择]
    B --> C[标准 Blocking]
    B --> D[ANN Blocking]
    B --> E[Learned Blocking]
    C --> F[生成候选对]
    D --> F
    E --> F
    F --> G[两两比较 & 评分]
    G --> H[聚类 & 决策]
    H --> I[Golden Records]

Blocking 配置结构

前端类型定义

// 已知 Blocking 配置字段
const BLOCKING_KNOWN_KEYS = new Set([
  "block_size",
  "skip_oversized",
  "auto_suggest",
  "auto_select",
  "extras",
]);

export type BlockingPayload = {
  block_size?: number;
  skip_oversized?: boolean;
  auto_suggest?: boolean;
  auto_select?: boolean;
  extras?: Record<string, unknown>;
};

资料来源:packages/python/goldenmatch/web/frontend/src/lib/types.ts:1-28

配置参数说明

参数类型默认值说明
block_sizeint-每个 block 的最大记录数
skip_oversizedbool-当 block 超过阈值时是否跳过
auto_suggestbool-是否自动建议 blocking 策略
auto_selectbool-是否自动选择最优策略
extrasdict-高级策略的额外配置参数

标准 Blocking

工作原理

标准 Blocking 通过一个或多个"blocking key"字段将记录分组。所有在相同 blocking key 上具有相同值的记录会被放入同一个 block,然后只在该 block 内进行两两比较。

配置示例

blocking:
  block_size: 5000
  skip_oversized: true
  strategy:
    - field: last_name
      standardizer: name_upper
    - field: zip5

适用场景

  • 数据具有明确的分类字段(如邮编、姓氏首字母、行业代码)
  • 数据量在百万级别以下
  • 需要精确匹配结果的场景

ANN Blocking(近似最近邻)

工作原理

ANN Blocking 利用向量嵌入(embeddings)将每条记录转换为高维向量,然后使用近似最近邻算法找到与目标记录最相似的记录对。这种方法特别适合处理模糊匹配和语义相似的情况。

性能特征

指标标准 BlockingANN Blocking
召回率依赖精确 key可调整召回率
精度可调整
计算成本中等
内存占用较高

配置示例

blocking:
  strategy:
    ann:
      embedder: local
      min_hash_size: 128
      n_jobs: -1

资料来源:packages/python/goldenmatch/goldenmatch/core/ann_blocker.py

Learned Blocking(学习型 Blocking)

工作原理

Learned Blocking 使用机器学习模型自动学习哪些记录对最可能匹配。通过分析历史标注数据或使用主动学习策略,系统能够智能地发现最优的 blocking 策略组合。

核心特性

  1. 自动特征选择:从多个候选字段中选择最有效的 blocking key
  2. 自适应阈值:根据数据分布动态调整 blocking 范围
  3. 多策略组合:支持同时使用多种 blocking 策略

配置示例

blocking:
  strategy:
    learned:
      min_training_pairs: 1000
      candidate_generation: aggressive
      recall_target: 0.95

资料来源:packages/python/goldenmatch/goldenmatch/core/learned_blocking.py

Blocking 候选对生成

核心逻辑

# blocking_candidates.py 中的核心流程
def generate_candidates(records, blocking_config):
    # 1. 应用 standardization 到 blocking key 字段
    # 2. 按 blocking key 分组
    # 3. 生成组内所有两两组合
    # 4. 应用过滤规则(如 skip_oversized)
    # 5. 返回候选对列表

生成流程

graph LR
    A[原始记录] --> B[标准化 Blocking Key]
    B --> C[分组]
    C --> D{Block 大小检查}
    D -->|≤ 阈值| E[生成候选对]
    D -->|> 阈值| F{skip_oversized?}
    F -->|是| G[跳过或子采样]
    F -->|否| E
    E --> H[候选对输出]

性能优化

  1. Block 大小限制:防止过大的 block 导致内存溢出
  2. 子采样策略:对超大 block 采用智能采样
  3. 并行处理:支持多核并行生成候选对

资料来源:packages/python/goldenmatch/goldenmatch/core/blocking_candidates.py

多策略组合

Canopy Clustering

Canopy Clustering 是一种快速的粗聚类方法,常用于 ANN Blocking 的预处理阶段:

blocking:
  strategy:
    canopy:
      t1: 0.8  # 宽松阈值
      t2: 0.6  # 严格阈值

多 Pass Blocking

对于复杂数据集,可以组合多个 blocking 策略以提高召回率:

blocking:
  multi_pass:
    - field: email
      standardizer: email
    - field: phone
      standardizer: phone
    - field: name
      standardizer: name_proper
      min_length: 3

性能调优

v1.24.0 性能改进

最新版本(v1.24.0)在 blocking 性能上实现了显著提升:

指标改进前改进后提升
10M 数据处理时间2604s502s-81%
内存占用 (RSS)--18%18%

关键改进包括:

  • Chao1 scale-aware cardinality 估算
  • Heuristic rule expansion
  • 诊断工具(diagnostic harness)

配置建议

数据规模推荐策略block_size
< 100K标准 Blocking5000
100K - 1M标准 + ANN3000
1M - 10MANN + Canopy2000
> 10M学习型 + 多 Pass1000

常见问题

Q: 如何选择 blocking key?

A: 优先选择具有以下特征的字段:

  • 高基数(unique 值多)
  • 低噪音(错误少)
  • 与实体身份强相关

Q: block 过大导致内存不足怎么办?

A: 设置 skip_oversized: true,系统会自动跳过超大型 block 或进行智能子采样。

Q: 如何平衡召回率和性能?

A: 使用 multi_pass 配置多轮 blocking,每轮使用不同的策略组合,逐轮提高召回率。

相关文档

资料来源:packages/python/goldenmatch/web/frontend/src/lib/types.ts:1-28

评分系统

GoldenMatch 的评分系统是实体解析引擎的核心组件,负责量化两条记录之间的相似程度。该系统支持多种评分策略,包括模糊匹配、概率模型、LLM 增强评分和语义嵌入评分,并通过零标签置信度机制实现自动配置优化。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 主要职责

继续阅读本节完整说明和来源证据。

章节 评分方法映射

继续阅读本节完整说明和来源证据。

章节 评分配置示例

继续阅读本节完整说明和来源证据。

系统架构概述

评分系统在实体解析流程中扮演关键角色,接收候选记录对并输出相似度分数,驱动后续的聚类和决策过程。

graph TD
    A[候选记录对] --> B[字段级评分]
    B --> C[聚合评分]
    C --> D{评分策略选择}
    D -->|概率模型| E[Fellegi-Sunter]
    D -->|LLM增强| F[LLM Scorer]
    D -->|语义相似| G[Embedder]
    D -->|零标签| H[Zero Label Confidence]
    E --> I[综合分数]
    F --> I
    G --> I
    H --> I
    I --> J[决策阈值]
    J --> K[匹配/非匹配]

核心评分器 (Scorer)

scorer.py 是评分系统的基础模块,实现了字段级别和记录级别的评分逻辑。

主要职责

职责说明
字段相似度计算支持字符串编辑距离、Jaccard、精确匹配等多种算法
权重分配根据字段重要性进行加权聚合
Matchkey 评分针对特定匹配键的评分策略
配置驱动通过 FieldStrategy 配置灵活选择评分方法

评分方法映射

配置字段评分方法适用场景
jaro_winklerJaro-Winkler 相似度字符串相似度,容忍轻微拼写错误
levenshtein编辑距离归一化精确衡量字符差异
jaccardJaccard 集合相似度分词后的词汇匹配
exact精确相等唯一标识符或结构化字段

资料来源:scorer.py

评分配置示例

from goldenmatch import GoldenMatchConfig, FieldStrategy

config = GoldenMatchConfig(
    match_fields=[
        {"name": "email", "strategy": "jaro_winkler", "weight": 0.4},
        {"name": "name", "strategy": "jaccard", "weight": 0.3},
        {"name": "phone", "strategy": "exact", "weight": 0.3}
    ]
)

交叉编码器评分 (Cross Encoder)

cross_encoder.py 提供了基于预训练语言模型的细粒度评分能力,能够理解语义上下文。

工作原理

交叉编码器将两条记录拼接后一次性输入模型,直接预测匹配概率,而非像双塔模型那样分别编码。

graph LR
    A[Record A] -->|拼接| C[Cross Encoder]
    B[Record B] -->|拼接| C
    C -->|端到端推理| D[匹配概率]

支持的模型后端

后端模型示例特点
transformerscross-encoder/ms-marco高精度,GPU 推荐
sentence-transformerscross-encoder/quora-roberta-base语义理解强
onnx量化后的交叉编码器CPU 高效推理

配置参数

参数类型默认值说明
model_namestrcross-encoder/ms-marco-MiniLM-L-6-v2交叉编码器模型
batch_sizeint32批处理大小
devicestrauto计算设备选择
max_lengthint512输入最大长度

资料来源:cross_encoder.py

概率评分模型 (Probabilistic)

probabilistic.py 实现了 Fellegi-Sunter 概率框架,这是实体解析领域的经典方法。

Fellegi-Sunter 模型

该模型基于贝叶斯概率论,将匹配过程形式化为:

$$P(\text{match} | \gamma) = \frac{m_\gamma \cdot \lambda}{m_\gamma \cdot \lambda + u_\gamma \cdot (1-\lambda)}$$

其中:

  • $m_\gamma$:在 match 条件下观察到字段比较向量 $\gamma$ 的概率
  • $u_\gamma$:在 non-match 条件下观察到 $\gamma$ 的概率
  • $\lambda$:先验匹配概率

EM 参数估计

from goldenmatch.core.probabilistic import train_em, score_probabilistic

# 训练 m/u 概率
em_result = train_em(
    labeled_pairs=labeled_data,
    matchkeys=["name_jw", "phone_exact"],
    max_iterations=100,
    convergence_threshold=1e-5
)

# 对候选对评分
scores = score_probabilistic(
    candidate_pairs=candidates,
    matchkeys=["name_jw", "phone_exact"],
    em_result=em_result
)

训练参数

参数类型默认值说明
max_iterationsint100EM 算法最大迭代次数
convergence_thresholdfloat1e-6收敛阈值
initial_mdictNonem 概率初始值
initial_udictNoneu 概率初始值

资料来源:probabilistic.py

LLM 评分 (LLM Scorer)

llm_scorer.py 利用大型语言模型进行零样本评分,特别适用于结构化数据和复杂语义场景。

支持的 LLM 提供商

提供商模型认证方式
OpenAIgpt-4, gpt-3.5-turboOPENAI_API_KEY
Anthropicclaude-3-opus, claude-3-sonnetANTHROPIC_API_KEY
本地模型Ollama 支持的模型OLLAMA_BASE_URL

评分提示词模板

from goldenmatch.core.llm_scorer import LLMScorer

scorer = LLMScorer(
    provider="openai",
    model="gpt-4",
    prompt_template="""判断以下两条记录是否匹配:
记录A: {record_a}
记录B: {record_b}

返回 JSON: {"match": true/false, "confidence": 0.0-1.0, "reason": "..."}"""
)

result = scorer.score(record_a, record_b)

与传统评分融合

graph TD
    A[候选对] --> B[传统评分]
    A --> C[LLM 评分]
    B --> D[加权融合]
    C --> D
    D --> E[最终分数]

资料来源:llm_scorer.py

语义嵌入评分 (Embedder)

embedder.py 提供了语义向量表示能力,适用于需要理解文本含义的场景。

嵌入策略

策略说明适用场景
average字段 token 平均短文本
cls_token使用 [CLS] 向量BERT 系列模型
max_pooling最大池化强调关键特征
weighted加权聚合多字段组合

本地嵌入器栈

v1.19.0 引入了本地/自托管嵌入器支持:

from goldenmatch.core.embedder import LocalEmbedder

embedder = LocalEmbedder(
    model="sentence-transformers/all-MiniLM-L6-v2",
    device="cuda",
    batch_size=128
)

vectors = embedder.encode(records, field="description")
similarity = embedder.cosine_similarity(vectors_a, vectors_b)

资料来源:embedder.py

零标签置信度 (Zero Label Confidence)

zero_label_confidence.py 实现了无标注数据下的自动置信度校准机制,是 v1.23.0 的核心特性。

核心概念

零标签置信度通过分析匹配分布的统计特性,自动推断最优决策阈值,无需人工标注数据。

graph TD
    A[候选对分数分布] --> B[双峰检测]
    B --> C{是否为双峰?}
    C -->|是| D[质量分离度量]
    C -->|否| E[单峰分析]
    D --> F[Otsu 阈值估计]
    E --> G[保守阈值]
    F --> H[置信度分数]
    G --> H

质量分离度量 (Mass Separation)

from goldenmatch.core.zero_label_confidence import compute_zero_label_confidence

confidence = compute_zero_label_confidence(
    pair_scores=all_scores,
    health_rank_by_group=group_health,
    pick_by="overall_confidence"  # v1.23.0 默认
)

控制器集成

v1.23.0 更新了 pick_committed 逻辑:当多个候选具有相同健康等级时,优先选择 overall_confidence 更高的候选,而非 mass_separation 更高的候选。这有效避免了精度塌陷问题。

配置选项说明
zero_label_confidence_enabled启用零标签置信度
zero_label_pick_by候选选择策略
precision_collapse_threshold精度塌陷警戒线

资料来源:zero_label_confidence.py

评分融合策略

GoldenMatch 支持多种评分融合方式,以适应不同数据特征。

融合方法

方法公式特点
加权平均$\sum w_i \cdot s_i$简单直观
几何平均$(\prod s_i)^{1/n}$惩罚极端低分
最小值$\min(s_i)$保守策略
最大值$\max(s_i)$激进策略

配置示例

config = GoldenMatchConfig(
    fusion_method="weighted",
    fusion_weights={
        "fuzzy": 0.4,
        "probabilistic": 0.3,
        "llm": 0.2,
        "embedding": 0.1
    },
    decision_threshold=0.85  # 自动调优或手动设置
)

性能优化

v1.24.0 性能改进

最新版本在评分系统层面进行了多项优化:

  • QIS-bucket-realistic 基准:10M 记录处理时间从 2604s 降至 502s(-81%)
  • 内存优化:RSS 减少 18%,得益于 Chao1 基数估计
  • 启发式规则扩展:减少不必要的评分计算

加速策略

策略适用场景加速比
预过滤 (Blocking)大规模数据10x-100x
批处理评分GPU 利用5x-20x
量化模型CPU 部署2x-4x
近似最近邻嵌入搜索100x+

最佳实践

评分策略选择指南

graph TD
    A[数据特点] --> B{是否有标注数据?}
    B -->|是| C{数据量?}
    B -->|否| D{精度要求?}
    C -->|大规模| E[Probabilistic + Fuzzy]
    C -->|小规模| F[LLM + Fuzzy]
    D -->|高| G[Probabilistic + LLM]
    D -->|一般| H[Zero Label + Fuzzy]

常见问题

Q:如何选择评分阈值?

A:GoldenMatch 提供三种方式:

  1. 手动设置 decision_threshold
  2. 使用 tune_decision_threshold() 基于标注数据调优
  3. 启用零标签置信度自动推断(v1.23.0+)

Q:LLM 评分成本过高怎么办?

A:建议采用分层策略:

  1. 用快速评分(fuzzy/embedding)过滤掉明显不匹配的对
  2. 仅对边界案例调用 LLM 评分

Q:如何处理高精度场景?

A:参考 v1.23.0 的精度塌陷防护机制,优先使用 overall_confidence 而非 mass_separation 作为零标签场景的最终排序依据。

资料来源:scorer.py

数据库集成

GoldenMatch 提供全面的数据库集成支持,允许用户直接对存储在企业数据库中的数据进行实体解析和去重处理。数据库集成模块使 GoldenMatch 能够从多种数据源读取数据,并将匹配结果写回数据库或生成可直接导入数据库的输出文件。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 连接器架构

继续阅读本节完整说明和来源证据。

章节 连接器基类接口

继续阅读本节完整说明和来源证据。

章节 PostgreSQL

继续阅读本节完整说明和来源证据。

概述

GoldenMatch 提供全面的数据库集成支持,允许用户直接对存储在企业数据库中的数据进行实体解析和去重处理。数据库集成模块使 GoldenMatch 能够从多种数据源读取数据,并将匹配结果写回数据库或生成可直接导入数据库的输出文件。

该集成层支持 PostgreSQL、MongoDB、Snowflake 等主流数据库,并提供 Rust 扩展(goldenmatch_pg)实现 SQL 原生模糊匹配。通过统一的连接器架构,用户可以使用相同的配置模式对接不同的数据库,无需编写定制化代码。资料来源:packages/python/goldenmatch/goldenmatch/db/connector.py:1-50

架构设计

连接器架构

GoldenMatch 的数据库集成采用插件式连接器架构,核心组件包括:

组件职责文件位置
DBConnector基类定义统一的连接器接口goldenmatch/db/connector.py
PostgresConnectorPostgreSQL 数据库连接与查询goldenmatch/connectors/postgres.py
MongoConnectorMongoDB 文档数据库连接goldenmatch/connectors/mongo.py
SnowflakeConnectorSnowflake 云数据仓库连接goldenmatch/connectors/snowflake.py
DBSync数据库同步与批处理写入goldenmatch/db/sync.py
graph TD
    A[用户配置] --> B[DBConnector 基类]
    B --> C[PostgresConnector]
    B --> D[MongoConnector]
    B --> E[SnowflakeConnector]
    F[goldenmatch_pg 扩展] --> G[PostgreSQL 原生 UDF]
    H[DuckDB UDF] --> I[Rust 内核]
    C --> G
    E --> I

连接器基类接口

所有数据库连接器继承自 DBConnector 基类,实现以下核心方法:

class DBConnector(Protocol):
    def connect(self, config: dict) -> Connection: ...
    def read_table(self, table: str, columns: list[str], filters: dict) -> DataFrame: ...
    def write_results(self, results: DataFrame, target: str, mode: str) -> int: ...
    def health_check(self) -> bool: ...

资料来源:packages/python/goldenmatch/goldenmatch/db/connector.py:15-45

支持的数据库

PostgreSQL

PostgreSQL 是 GoldenMatch 数据库集成的核心支持目标,提供两种集成方式:

#### Python 连接器

标准 Python 连接器支持:

  • 连接池管理
  • 增量读取(支持游标分页)
  • 批量写入
  • 事务支持
from goldenmatch.connectors.postgres import PostgresConnector

connector = PostgresConnector(
    host="db.example.com",
    port=5432,
    database="customers",
    user="readonly_user",
    password="${DB_PASSWORD}",  # 支持环境变量
    ssl_mode="require"
)

# 读取客户表
df = connector.read_table(
    table="customers",
    columns=["customer_id", "name", "email", "phone"],
    filters={"status": "active"}
)

# 执行匹配
results = goldenmatch.dedupe(df, config="match_config.yml")

# 写回匹配结果
connector.write_results(results, "match_results", mode="overwrite")

资料来源:packages/python/goldenmatch/goldenmatch/connectors/postgres.py:1-80

#### Rust 扩展 (goldenmatch_pg)

goldenmatch_pg 是 goldenmatch 的 PostgreSQL 扩展(pgrx),提供 13 个原生 SQL 函数:

函数名功能用法示例
gm_dedupe基础去重SELECT gm_dedupe('customers', 'id')
gm_match_pairs配对匹配SELECT gm_match_pairs('table1', 'table2')
gm_block分块过滤SELECT gm_block USING (soundex(name))
gm_score相似度评分SELECT gm_score(name1, name2)
gm_goldenflow_*数据标准化SELECT gm_goldenflow_normalize_phone(phone)
memory_learn学习记忆存储CRUD 操作
memory_stats统计信息存储查询历史匹配统计

v0.5.0 版本特性:

  • 核心 API 完全兼容
  • goldenflow_* 数据转换函数
  • memory_learn / memory_stats CRUD 操作
  • SQL 原生调用,无需数据迁移

安装方式:

# 编译安装(需要 Rust 工具链)
cargo install --git https://github.com/benseverndev-oss/goldenmatch --package goldenmatch_pg

# 或使用预编译版本
pip install goldenmatch[native]

资料来源:packages/rust/extensions/README.md

MongoDB

MongoDB 连接器支持文档型数据库的实体解析:

from goldenmatch.connectors.mongo import MongoConnector

connector = MongoConnector(
    uri="mongodb://mongo.example.com:27017",
    database="customer_db",
    collection="customers",
    read_preference="secondaryPreferred"  # 从副本集从节点读取
)

# 读取文档,支持聚合管道过滤
df = connector.read_collection(
    pipeline=[
        {"$match": {"status": "active"}},
        {"$project": {"_id": 1, "name": 1, "email": 1}}
    ]
)

关键特性:

  • 支持 MongoDB 聚合管道作为过滤器
  • 副本集读取偏好配置
  • 文档 ID 到关系型 ID 的映射
  • 嵌套字段访问支持

资料来源:packages/python/goldenmatch/goldenmatch/connectors/mongo.py:1-60

Snowflake

Snowflake 连接器支持云数据仓库场景:

from goldenmatch.connectors.snowflake import SnowflakeConnector

connector = SnowflakeConnector(
    account="xy12345.us-east-1",
    user="etl_user",
    password="${SNOWFLAKE_PASSWORD}",
    warehouse="COMPUTE_WH",
    database="CUSTOMER_DB",
    schema="PUBLIC"
)

# 读取大型表(自动分块)
df = connector.read_table(
    table="CUSTOMER_RECORDS",
    columns=["C_ID", "NAME", "EMAIL", "PHONE"],
    chunk_size=100000  # 分块读取,避免内存溢出
)

性能优化:

  • 分块读取支持(chunk_size 参数)
  • 仓库自动缩放配合
  • 半结构化数据(VARIANT 列)处理
  • 跨区域查询支持

资料来源:packages/python/goldenmatch/goldenmatch/connectors/snowflake.py:1-70

配置指南

配置文件格式

数据库连接配置支持 YAML 格式:

database:
  type: postgres  # postgres | mongodb | snowflake | duckdb
  
  # PostgreSQL 配置
  postgres:
    host: localhost
    port: 5432
    database: customers
    user: goldenmatch
    password_env: DB_PASSWORD  # 从环境变量读取
    ssl_mode: prefer
    pool_size: 5
    
  # MongoDB 配置
  mongodb:
    uri: mongodb://localhost:27017
    database: customers
    collection: records
    read_preference: secondaryPreferred
    
  # Snowflake 配置
  snowflake:
    account: xy12345.us-east-1
    user: user
    password_env: SNOWFLAKE_PASSWORD
    warehouse: COMPUTE_WH
    database: DB
    schema: PUBLIC

output:
  type: postgres
  target_table: match_results
  write_mode: append  # append | overwrite | upsert
  upsert_key: match_id

环境变量

敏感信息通过环境变量管理:

环境变量用途示例
DB_PASSWORD数据库密码export DB_PASSWORD=secret123
SNOWFLAKE_PASSWORDSnowflake 密码export SNOWFLAKE_PASSWORD=...
MONGO_PASSWORDMongoDB 密码export MONGO_PASSWORD=...
AWS_ACCESS_KEY_IDAWS 访问密钥S3 阶段表使用
AWS_SECRET_ACCESS_KEYAWS 密钥S3 阶段表使用

数据库同步

DBSync 模块

DBSync 模块负责将匹配结果高效写入数据库:

from goldenmatch.db.sync import DBSync

sync = DBSync(
    connector=connector,
    batch_size=5000,
    retry_attempts=3,
    on_conflict="ignore"  # ignore | overwrite | fail
)

# 批量写入匹配结果
written = sync.write_matches(
    results=match_results,
    target_table="golden_records",
    conflict_key="record_id"
)

同步策略:

策略描述适用场景
append追加写入结果表为空或需保留历史
overwrite覆盖写入全量重新计算时使用
upsert存在则更新增量匹配结果写入

资料来源:packages/python/goldenmatch/goldenmatch/db/sync.py:1-100

性能优化

大规模数据处理

处理大规模数据时的最佳实践:

# 分块读取避免内存溢出
connector = PostgresConnector(config)
for chunk in connector.read_table_chunked(
    table="large_table",
    chunk_size=100000
):
    results = goldenmatch.dedupe(chunk)
    sync.write_matches(results)

# 使用数据库端过滤减少传输
df = connector.read_table(
    table="customers",
    filters={"updated_at": {"gt": last_sync_time}}
)

并行处理

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(max_workers=4) as executor:
    futures = [
        executor.submit(process_chunk, chunk)
        for chunk in connector.read_table_chunked("customers")
    ]
    results = pd.concat([f.result() for f in futures])

故障排除

常见问题

问题可能原因解决方案
连接超时网络隔离、防火墙检查 connect_timeout 配置
内存溢出读取数据过大使用分块读取 chunk_size
写入冲突主键重复使用 upsert 模式
SSL 错误证书验证失败设置 ssl_mode: prefer 或提供证书

连接诊断

from goldenmatch.connectors.postgres import PostgresConnector

connector = PostgresConnector(config)

# 健康检查
if not connector.health_check():
    print("连接失败,检查配置")
    
# 测试查询
test_df = connector.read_table(
    table="pg_catalog.pg_tables",
    limit=5
)

相关资源

资料来源:packages/python/goldenmatch/goldenmatch/db/connector.py:15-45

SQL 扩展

Golden Suite 提供了一套完整的 SQL 原生扩展,使实体解析、数据质量检查和数据转换功能可以直接在数据库引擎内部执行,无需数据迁移到外部工具处理。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 安装方式

继续阅读本节完整说明和来源证据。

章节 核心API函数

继续阅读本节完整说明和来源证据。

章节 管道函数

继续阅读本节完整说明和来源证据。

概览

Golden Suite 的 SQL 扩展包括两个核心实现:

数据库扩展包实现方式状态
PostgreSQLgoldenmatch_pgpgrx (Rust)v0.5.0 - 13个SQL函数
DuckDBgoldenmatch-duckdbPython UDF完整支持
Snowflakegoldenmatch + Snowflake CortexSQL函数完整支持

资料来源:packages/rust/extensions/README.md

架构设计

graph TD
    subgraph "客户端层"
        CLI[CLI工具]
        Python[Python SDK]
        dbt[dbt 模型]
    end
    
    subgraph "SQL扩展层"
        PG[PostgreSQL Extension<br/>goldenmatch_pg]
        DK[DuckDB UDF<br/>goldenmatch-duckdb]
        SF[Snowflake Cortex<br/>Snowpark UDFs]
    end
    
    subgraph "核心引擎"
        CM[Core Matching]
        CF[Core Functions]
    end
    
    CLI --> PG
    CLI --> DK
    Python --> PG
    Python --> DK
    dbt --> PG
    dbt --> DK
    dbt --> SF
    
    PG --> CM
    DK --> CM
    SF --> CM
    
    PG --> CF
    DK --> CF

PostgreSQL 扩展 (goldenmatch_pg)

安装方式

# 从源码构建
cd packages/rust/extensions/postgres
cargo pgrx install --release

核心API函数

PostgreSQL 扩展通过 pgrx 框架暴露了 13 个核心 SQL 函数:

函数名对应Python API功能描述
goldenmatch_dedupe(table, config_json)dedupe主去重函数
goldenmatch_score_pairs(pairs_json, config_json)score_pairs批量评分
goldenmatch_build_golden_records(clusters_json)build_golden_records构建黄金记录
goldenmatch_preflight(table, config_json)preflight预检配置
goldenmatch_postflight(table, config_json)postflight后置信号报告
goldenmatch_train_em(rows_json, matchkey_json, params_json)train_em训练EM模型
goldenmatch_score_probabilistic(rows_json, matchkey_json, em_result_json)score_probabilistic概率评分
goldenmatch_suggest_threshold(scores_json)suggest_threshold阈值建议
goldenmatch_detect_domain(columns_json)detect_domain领域检测
goldenmatch_validate_table(table, rules_json)validate_dataframe数据验证
goldenmatch_autofix_table(table)auto_fix_dataframe自动修复
goldenmatch_detect_anomalies(table, sensitivity)detect_anomalies异常检测
goldenmatch_evaluate(pairs_json, ground_truth_json)evaluate_pairs/evaluate_clusters评估精度

资料来源:packages/rust/extensions/postgres/src/core_apis.rs

管道函数

除了核心API,还提供了一组管道函数用于端到端处理:

-- 执行完整去重管道
SELECT * FROM goldenmatch_dedupe('my_table', '{"blocking": {"type": "qgram", "fields": ["name", "address"]}}');

-- 预检数据质量
SELECT * FROM goldenmatch_preflight('customers', '{"checks": ["encoding", "unicode"]}');

身份图谱函数

goldenmatch_pg 还包含身份图谱管理函数,支持图的构建和查询:

-- 构建身份图
SELECT goldenmatch_build_graph('my_table', 'id_column');

-- 查询关联记录
SELECT * FROM goldenmatch_find_connected('graph_name', seed_record_id);

DuckDB 扩展 (goldenmatch-duckdb)

安装方式

pip install goldenmatch-duckdb

DuckDB UDF 函数

函数名参数返回值
goldenmatch_suggest_threshold(scores_list)FLOAT[]建议阈值
goldenmatch_detect_domain(columns_list)VARCHAR[]检测到的领域类型
goldenmatch_score_pairs(pairs_json, config_json)JSON配对评分结果
goldenmatch_build_golden_records(clusters_json)JSON黄金记录
goldenmatch_evaluate(pairs_json, ground_truth_json)JSON评估指标
goldenmatch_compare_clusters(a_json, b_json)JSON聚类比较
goldenmatch_validate_table(table, rules_json)JSON验证报告
goldenmatch_autofix_table(table)JSON修复结果
goldenmatch_detect_anomalies(table, sensitivity)JSON异常列表
goldenmatch_preflight(table, config_json)JSON预检发现
goldenmatch_postflight(table, config_json)JSON后置信号
goldenmatch_train_em(rows_json, matchkey_json, params_json)JSONEM训练结果
goldenmatch_score_probabilistic(rows_json, matchkey_json, em_result_json)JSON概率分数

资料来源:packages/rust/extensions/duckdb/goldenmatch_duckdb/core_apis.py

使用示例

import duckdb

con = duckdb.connect()
con.sql("LOAD goldenmatch_duckdb")

# Otsu阈值建议
result = con.sql("SELECT goldenmatch_suggest_threshold('[0.1,0.12,0.9,0.92]')").fetchone()

# 异常检测
anomalies = con.sql("SELECT goldenmatch_detect_anomalies('customers', 'medium')").fetchone()

Snowflake 集成

Snowflake Cortex 函数

Golden Suite 与 Snowflake Cortex 深度集成,提供以下 SQL 函数:

函数名功能描述
cortex_embed_768768维嵌入向量生成
cortex_embed_10241024维嵌入向量生成
cortex_embed(dim)维度分派的嵌入生成
cortex_cosine_similarity余弦相似度计算
cortex_l2_distanceL2距离计算
cortex_inner_product内积计算
cortex_completeLLM完整补全

资料来源:packages/python/goldenmatch/dbt-goldensuite/README.md

与dbt的集成

在 Snowflake 环境下,goldenmatch_dedupe 支持所有三种输出模式:

-- 输出黄金记录
SELECT * FROM goldenmatch_dedupe('customers', 'golden');

-- 输出聚类
SELECT * FROM goldenmatch_dedupe('customers', 'clusters');

-- 输出配对
SELECT * FROM goldenmatch_dedupe('customers', 'pairs');

dbt-goldensuite 适配器支持

适配器覆盖矩阵

适配器状态配置要求
PostgreSQL完整支持 - 11个SQL函数 + 5个管道函数安装 goldenmatch_pg
DuckDB完整支持 - 7个UDF + 5个身份图函数pip install goldenmatch-duckdb
Snowflake完整支持 - 与Python API表面一致需要 Snowflake Cortex

资料来源:packages/python/goldenmatch/dbt-goldensuite/README.md

dbt宏封装

dbt-goldensuite 为每个 SQL 函数提供了便捷的宏封装:

{# 运行实体解析 #}
{{ goldenmatch_dedupe('customers', config_dict) }}

{# 评估结果 #}
{{ goldenmatch_evaluate(pairs, ground_truth) }}

{# 黄金记录构建 #}
{{ goldenmatch_build_golden_records(clusters) }}

核心配置参数

阻塞配置 (Blocking)

{
  "blocking": {
    "type": "qgram",
    "fields": ["name", "address"],
    "ngram_size": 3,
    "min_ngram_hits": 1
  }
}

评分配置 (Scoring)

{
  "scoring": {
    "fields": [
      {"name": "name", "weight": 0.4, "strategy": "jaro_winkler"},
      {"name": "address", "weight": 0.3, "strategy": "token_set"},
      {"name": "phone", "weight": 0.3, "strategy": "numeric"}
    ]
  }
}

EM概率模型配置

{
  "probabilistic": {
    "m_probabilities": {
      "name": [0.1, 0.9],
      "address": [0.15, 0.85]
    },
    "u_probabilities": {
      "name": [0.95, 0.05],
      "address": [0.9, 0.1]
    }
  }
}

资料来源:packages/python/goldenmatch/docs/sql-postgres.md

性能优化

向量化执行

所有 SQL 扩展均采用向量化执行模式,在 PostgreSQL 和 DuckDB 中利用列式存储特性实现高吞吐处理:

graph LR
    A[输入数据] --> B{批量处理}
    B --> C[列式向量化]
    C --> D[SIMD加速]
    D --> E[结果输出]

内存管理

数据规模推荐配置预期性能
< 100K 记录默认配置< 10秒
100K - 1M增加 work_mem< 1分钟
1M - 10M使用 bucket 后端< 10分钟
> 10M分区处理视分区数而定

版本历史

版本发布内容
v0.5.0核心API完全对齐 - 13个pgrx函数,goldenflow_*转换,memory_learn/memory_stats CRUD
v0.4.0添加身份图谱函数支持
v0.3.0Snowflake Cortex集成
v0.2.0DuckDB UDF完整支持
v0.1.0初始版本 - PostgreSQL扩展

与Python SDK的对比

特性Python SDKSQL扩展
部署复杂度中等
数据移动需要ETL无数据移动
性能依赖数据导出原生执行
灵活性中等
与dbt集成需要外部调用原生支持
调试体验完善需查看数据库日志

资料来源:packages/python/goldenmatch/docs/sql-duckdb.md

常见问题

Q: 如何选择 PostgreSQL 还是 DuckDB?

PostgreSQL 适合生产环境和持久化数据存储场景;DuckDB 适合分析场景和本地快速原型开发。

Q: SQL扩展是否支持所有Python SDK的功能?

核心功能完全对齐,但部分高级配置选项可能需要通过JSON配置参数传递。

Q: 如何调试SQL扩展的执行?

可以通过 goldenmatch_preflight 函数预检配置,通过 goldenmatch_postflight 查看执行信号。

资料来源:packages/rust/extensions/README.md

失败模式与踩坑日记

保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。

medium 能力判断依赖假设

假设不成立时,用户拿不到承诺的能力。

medium 维护活跃度未知

新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。

medium 下游验证发现风险项

下游已经要求复核,不能在页面中弱化。

medium 存在评分风险

风险会影响是否适合普通用户安装。

Pitfall Log / 踩坑日志

项目:benseverndev-oss/goldenmatch

摘要:发现 6 个潜在踩坑项,其中 0 个为 high/blocking;最高优先级:能力坑 - 能力判断依赖假设。

1. 能力坑 · 能力判断依赖假设

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:README/documentation is current enough for a first validation pass.
  • 对用户的影响:假设不成立时,用户拿不到承诺的能力。
  • 建议检查:将假设转成下游验证清单。
  • 防护动作:假设必须转成验证项;没有验证结果前不能写成事实。
  • 证据:capability.assumptions | github_repo:1183640892 | https://github.com/benseverndev-oss/goldenmatch | README/documentation is current enough for a first validation pass.

2. 维护坑 · 维护活跃度未知

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:未记录 last_activity_observed。
  • 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
  • 建议检查:补 GitHub 最近 commit、release、issue/PR 响应信号。
  • 防护动作:维护活跃度未知时,推荐强度不能标为高信任。
  • 证据:evidence.maintainer_signals | github_repo:1183640892 | https://github.com/benseverndev-oss/goldenmatch | last_activity_observed missing

3. 安全/权限坑 · 下游验证发现风险项

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 对用户的影响:下游已经要求复核,不能在页面中弱化。
  • 建议检查:进入安全/权限治理复核队列。
  • 防护动作:下游风险存在时必须保持 review/recommendation 降级。
  • 证据:downstream_validation.risk_items | github_repo:1183640892 | https://github.com/benseverndev-oss/goldenmatch | no_demo; severity=medium

4. 安全/权限坑 · 存在评分风险

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 对用户的影响:风险会影响是否适合普通用户安装。
  • 建议检查:把风险写入边界卡,并确认是否需要人工复核。
  • 防护动作:评分风险必须进入边界卡,不能只作为内部分数。
  • 证据:risks.scoring_risks | github_repo:1183640892 | https://github.com/benseverndev-oss/goldenmatch | no_demo; severity=medium

5. 维护坑 · issue/PR 响应质量未知

  • 严重度:low
  • 证据强度:source_linked
  • 发现:issue_or_pr_quality=unknown。
  • 对用户的影响:用户无法判断遇到问题后是否有人维护。
  • 建议检查:抽样最近 issue/PR,判断是否长期无人处理。
  • 防护动作:issue/PR 响应未知时,必须提示维护风险。
  • 证据:evidence.maintainer_signals | github_repo:1183640892 | https://github.com/benseverndev-oss/goldenmatch | issue_or_pr_quality=unknown

6. 维护坑 · 发布节奏不明确

  • 严重度:low
  • 证据强度:source_linked
  • 发现:release_recency=unknown。
  • 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
  • 建议检查:确认最近 release/tag 和 README 安装命令是否一致。
  • 防护动作:发布节奏未知或过期时,安装说明必须标注可能漂移。
  • 证据:evidence.maintainer_signals | github_repo:1183640892 | https://github.com/benseverndev-oss/goldenmatch | release_recency=unknown

来源:Doramagic 发现、验证与编译记录