推广 热搜: 采购方式  滤芯  带式称重给煤机  甲带  气动隔膜泵  减速机型号  无级变速机  链式给煤机  履带  减速机 

安全研究 | 实验报告:SQL-SAG 在威胁情报目录研判中的能力边界

   日期:2026-08-22 00:01:16     来源:网络整理    作者:本站编辑    评论:0    
安全研究 | 实验报告:SQL-SAG 在威胁情报目录研判中的能力边界
系列前篇安全研究 | 当SQL-SAG 用于威胁情报,它能做到哪一步
摘要

本文在两个自建威胁情报目录研判数据集上,对 SQL-SAG(SQL-Retrieval Augmented Generation with Query-Time Dynamic Hyperedges)执行了六组预注册式实验(E1–E6,其中 E5 为 post-hoc 补充)。数据集 A 含 6,221,695 条目录记录、13,952 个待研判实体,数据集 B 含 1,031,928 条记录、20 类数据源。全部实验围绕同一个核心问题展开:SQL-SAG 的 JOIN 结果,在何种条件下可以直接作为“关联”采信。

从结果看,一跳 JOIN 在 14 个确证实体上的有效样本膨胀倍数中位数为 ×9.99,但实验中同时观察到 3 个召回缺口和 2 个泛仓库失效实体,说明单一形态假设并不成立。名称共现 JOIN 从数据集 B 产出 24 个跨平台实体,独立过滤器可以将 TP 口径精确率提升到 62.5%,但同一批样本的标注自一致性只有 66.7%,意味着原始报告中的“33% 假阳性”应当视为区间而非精确比例。三级信号字典给出的 L₁ 与 L₂ 确证率分别为 13/15(87%)和 7/78(9%),Fisher 双侧 p = 2.6×10⁻⁹,OR = 65.9,95% CI 12.3–353.4,方向性结论稳固但效应量估计并不精确。实体清单法覆盖了关键词法的全部 7 个确证实体,另行确证 8 个实体,其中 6 个与旧词典的品牌词空间零交集。附件文件名锚点在 14 × 7 证据覆盖矩阵中独占 6 个同类实体的唯一证据来源。性能基准上,14k 实体规模的聚合型超边 JOIN 耗时 12.82 ± 1.07 ms,配对型为 56.0 ± 5.7 ms。

综合来看,SQL-SAG 更适合承担候选生成和调查优先级排序的职能。它在多租户仓库粒度、名称消歧和小样本置信度上都存在不能由 JOIN 自身弥补的边界,未经独立过滤和人工复核的 JOIN 结果不应直接作为最终归因证据。

关键词:SQL-SAG,预注册实验,威胁情报,目录研判,动态超边,JOIN,能力边界

1 研究背景与问题

数据泄露事件的取证工作通常从目录研判开始。分析师面对数百万行路径记录,需要从中识别出与受害机构关联的外部实体,并据此评估暴露面、确定通报对象。这个场景既要处理规模,也要承担归因错误的成本——一次错误的实体关联可能直接影响对错误主体的通报或处置。

前置文献提出的 SAG 架构用“事件—实体索引 + 查询时动态超边”组织多跳关联,在 QA 检索场景下取得了较好的性能表现。该架构与情报目录研判的数据形态存在几个契合点:告警和情报记录可以天然按事件组织,多跳关联是常见需求,append-only 索引适合流式写入,全链路可审计也便于交付可解释结论。然而,同一份文献也指出了三个已知的短板:SAG 并不做实体消歧,字符串归一化的错误代价依赖事件层的完整语义对冲;低频桥接实体容易被前沿修剪预算截断;any-hit 类指标度量的是单步可达而非完整链覆盖,会系统性地高估表现。这三个短板在 QA 场景下或许可以承受,一旦搬到情报归因场景中就未必如此。

本研究因此提出一个精确的研究问题:SQL-SAG 的 JOIN 结果,在多大程度上可以直接作为“关联”采信?为把它转化为可验证的实验命题,我们把问题拆解为六个子问题,分别构成 E1–E6 六组实验。E1 检验一跳 JOIN 是否普遍引入间接关联、是否存在召回缺口;E2 度量名称共现 JOIN 的假阳性比例以及独立过滤器的修复能力;E3 检验三级信号字典是否携带足够的置信度信息;E4 对照关键词法与实体清单法,判断两者是否零冲突以及增量来自何处;E5 描述确证实体的证据分布锚点及独占关系;E6 度量查询时 JOIN 的成本随规模的变化。

2 实验设计

2.1 预注册与方法学原则

本研究的方法实现者同时承担金标准标注。为了避免事后选择偏差以及结果导向的设计漂移,我们采用了预注册式设计,把六组实验的假设、操作定义、抽样规则和统计方案全部写入存档,执行过程中不因结果修改设计,无论结果是否与预期相符都如实报告。E5 是初版失败之后重做的实验,其 post-hoc 属性在文档中明确标注,不冒充预注册结果。

围绕这套流程,我们坚持了几条基本原则。凡涉及“挑选”的操作,例如 top-1 仓库、样本抽取、词典构造,都由机械规则决定,不留人工干预空间。过滤器所用的停用词表、长度阈值等条件全部来自与测试集完全无关的第三方词表,不允许从测试集反推筛选依据。L₀ 通配命中天然带有子串污染,我们把污染样本按设计纳入并单独标注,而不是把它剔除,因为这类污染就是目录研判必须直面的命名噪音。三级信号字典是序数量表,不是连续评分,因此 PR 曲线只报告真实截断点,不做层内插值,也不计算 AP。凡是执行过程中发现的不利结果,包括自一致性不足、断言错误、失败的初版设计,都与正面结果一并写入正文。

2.2 假设与统计方案

六组实验的预注册假设与检验方案汇总于表 1。小样本一律使用 Fisher 精确检验,效应量置信区间用 Woolf 对数法给出;特征检验(Mann–Whitney U)按探索性结果标注;性能基准每个规模重复 100 次,报告均值和标准差。

编号
假设
检验手法
关键统计量
H1
一跳 JOIN 普遍引入间接关联;部分实体存在召回缺口
全样本 + 机械规则
中位数、IQR、双向计数
H2
名称实体性与真伪相关;独立过滤器可提升精确率
消融 + 特征分析
FP 移除数、TP 误伤数、Mann–Whitney U
H3
信号分级携带置信度信息
Fisher 精确检验
OR、95% CI、双侧 p
H4
实体清单法与关键词法零冲突且增量来自词典外
交叉验证 + 程序化匹配
列联表、子串重叠计数
H5
确证实体的证据分布可用锚点矩阵刻画
程序化聚合 + 逐格 ES 复核
二值矩阵、独占实体数
H6
JOIN 成本随实体规模可控增长
性能基准
均值 ± 标准差

表 1 六组实验的预注册假设与检验方案

2.3 操作定义

给定检索词后,L₀ 记为该词在 full_path.raw 上的通配命中数,三个大小写变体(原始形式、首字母大写、全大写)取并集。L₁ 是 L₀ 命中文件中命中数最多的仓库的全部文件数,这里的“最多”由 Elasticsearch 聚合桶的头部结果机械选定,禁止任何人工挑选。L₂、L₃ 分别是 top-1 仓库所属组织和整个平台的文件总数。膨胀倍数按 ratio = L₁ / L₀ 计算,大于 1 记为膨胀,小于 1 记为召回缺口。当 L₁ 超过 10⁵ 且该仓库对所有命中它的实体都是 top-1 时,实体的 L₁ 记为泛仓库失效,膨胀倍数不再解释。三级信号字典中,L₁ 为强信号(种子词典命中),L₂ 为弱信号(模糊匹配、后缀匹配、地理词),L₃ 为排除字典。图 B 使用的分层精确率把 L₀ 命中数作为真值代理,分母为该层的文件总数,因此得到的是一个近似口径,而不是独立人工金标准精确率。

2.4 局限性预先声明

有几项局限适合在设计阶段就交代清楚,而不留到讨论章节。金标准的 23 项研判结论由方法实现者本人按四级准则单标注构建,没有做双标注和 Cohen κ 检验,因此本文全部精确率数字都存在向上偏差的风险。E2 的自一致性检验是对这项风险的量化,而不是对它的消除。数据集只有两个,实验规模停留在 10⁷ 记录量级,未覆盖真实生产的大规模场景,外部效度受限。预注册的执行前文档化只在内部完成,并非第三方注册,因此无法完全排除无意识的设计偏好。

3 实验材料

3.1 数据集

实验使用两个自建威胁情报目录研判数据集(表 2)。数据集 A 用于 E1、E3、E4、E5、E6;数据集 B 具有多平台数据源,用于 E2 的名称共现 JOIN。全部实体对外以编号呈现,内部保留原始检索词。

数据集
记录数
数据源类别
分析实体数
A
6,221,695
4
13,952
B
1,031,928
20
4,166

表 2 自建威胁情报目录研判数据集

3.2 索引与查询环境

底层索引部署在 Elasticsearch 上,索引名为 threat-intel-filetree,可用字段包括 full_path.rawrepo_or_projectfilename.rawfilename.lowercategory 等。结构化事实表由 SQLite 承担并实现查询时 JOIN。E6 的性能基准跑在 SQLite in-memory 环境下,操作系统为 Windows 10,Python 版本 3.10,合成数据随机种子固定为 7。

3.3 抽样框、检索词与污染预标注

抽样框覆盖全部 14 个确证实体,全查而非抽样。四个实体在设计阶段就预先标注了污染风险:实体 10 与实体 12 是三字母缩写,其字符串存在通用含义;实体 11 是品牌词,字符串在全库高频出现;实体 14 的检索词是地理常用词,属于已知的高危污染样本。其余 10 个实体的检索词是品牌名或多词素组合,未做污染预标注。

3.4 金标准与信号字典

金标准包含 23 项研判结论,按四级准则构建:确证要求存在以客户身份命名的专属仓库、配置或文档,并与业务直接相关;疑似指存在指向性证据但数量不足或存在歧义;技术集成仅指该字符串以开源组件或工具库形式出现;排除用于命名巧合已被排除性证据链闭合的情形。每项判定的证据路径都随内部记录存档,便于复核。三级信号字典最终产出 L₁ 强信号 15 个候选、L₂ 弱信号 78 个候选、L₃ 排除字典 51 个候选,合计 144 个候选。

3.5 关键词法对照词典

E4 的关键词法对照使用一部 130 余词的实体词典,其中品牌词 61 个、地理变体 6 个,其余为组合形式。程序化验证限定在其中的 67 词可程序化子集上,逐一做子串匹配。

4 实验预期

H1 预期一跳膨胀倍数的中位数显著大于 1,证据分散型实体会出现召回缺口。设计时并没有预见到第三种失效模式。H2 预期名称长度与实体性存在正向相关,独立过滤器可以移除多数假阳性而不显著误伤真实实体,同时预期过滤强度与召回率之间存在权衡。H3 预期 L₁ 精确率显著高于 L₂、Fisher 检验 p 值小于 0.05,但因样本量小,效应量的置信区间可能较宽。H4 预期实体清单法确证集与关键词法确证集零冲突,增量实体全部落在旧词典之外。H5 预期不同锚点在候选生成和证据定位上会呈现结构性差异,但对具体的独占分布不做预期。H6 预期 JOIN 耗时随实体数近线性增长,14k 实体规模下单次查询耗时应控制在数十毫秒量级。

5 实验过程

5.1 E1 一跳 JOIN 膨胀与召回

E1 的执行分四步。对每个实体先用 ES count 查询获取 L₀,再用 ES 聚合选出命中数最多的仓库作为 top-1,随后对该仓库执行一次 term 查询得到 L₁,最后计算 ratio 并按机械规则判定属于膨胀、召回缺口还是泛仓库失效。图 B 的单实体纵深选取实体 2 作为代表:其所属组织的文件总数为 4,872,783,平台整体文件总数为 5,099,810;分层精确率取 L₀ 命中数为分子、各层文件总数为分母,得到 L₀ = 100%、L₁ = 5.75%、L₂ = 0.0048%、L₃ = 0.0046%。

5.2 E2 名称共现假阳性与过滤器消融

从数据集 B 出发的名称共现 JOIN 按 entity 字段字符串相等做跨平台关联,共产出 24 个跨平台实体。按四级准则复核后,10 个被判定为真实实体(TP),6 个为存疑(UNC),另有 8 个为明确假阳性(FP)。

自一致性盲标是这组实验的第一步。我们将 24 个样本用固定随机种子 42 打乱顺序,按独立盲标准则重新标注一次:若样本在独立常用词表中命中,标为 FP;若包含分隔符(-_.)或长度不小于 8,标为 TP;其余标为 UNC。将盲标结果与原人工标注比对,得到原始一致率。之所以要先做这一步再谈过滤器,是因为标注本身的可靠性直接决定后续所有精确率数字的可解释范围。

过滤器消融使用独立来源过滤器逐层叠加:独立停用词表、长度阈值不小于 5、词素阈值不小于 2,以及“停用词 + 长度”、“停用词 + 长度 + 词素”两个组合。每一档记录保留数、FP 移除数、TP 误伤数以及 TP 口径精确率。特征分析则对 FP 与 TP 两组的名称长度做 Mann–Whitney U 双侧检验,同时给出秩双列相关近似值 r;n = 24 决定该结果只能作探索性解释。

5.3 E3 信号分级置信度

按信号字典将候选分为 L₁ 与 L₂ 两级,结合金标准得到 2 × 2 列联表,行是 L₁ 与 L₂,列是确证与未确证。执行 Fisher 精确检验(双侧),并以 Woolf 对数法给出 OR 的 95% CI。Precision@k 在 k ∈ {15, 93, 144} 三个真实截断点上分别报告,不做层内插值,也不计算 AP。

5.4 E4 与关键词法的正交性验证

E4 分两步:先做集合运算的列联对账,再做增量机制的程序化验证。前者把实体清单法确证的 15 个实体与关键词法确证的 7 个实体做集合运算,统计一致、冲突和增量数量。后者把 8 个增量实体的名称逐一与关键词词典的可程序化子集做大小写不敏感的子串匹配,记录重叠情况。

程序化验证的第一次跑出来的结果和初版断言不一致:两个含地理词的增量实体本应零重叠却出现了重叠。追查后发现问题不在增量实体归类,而是词典子集在构造时遗漏了旧流程实际使用的 china 词条。重新纳入该词条并重跑之后,结果修正为“6 个真正零重叠 + 2 个与地理词重叠”的二分结构,修正过程写入了设计文档的修正记录。为了解释后两个实体为什么在旧流程中没有被确证,我们又对 china 做了全库 count,得到 22,250 条命中——旧流程的逐条人工核验没有穷举到附件层,只在这一层缺席。

5.5 E5 锚点证据覆盖矩阵(post-hoc)

E5 的初版走过一段弯路。当时我们试图从研判结论的自由文本 evidence 字段中解析出每个实体的“锚点贡献”。但这个字段是叙述性文本,一个实体的证据天然横跨多个锚点,机械化解析根本走不通,初版硬编码的锚点归因口径甚至算出过超过 100% 的值。判定初版无法产出可解释结果之后,我们把整个口径放弃,不再从文本反推数字。

重做版本改变了范式:不解析文本,而是回到锚点的预注册定义本身,对 14 个确证实体在 7 类锚点上逐一验证是否存在直接证据,一共 98 格。7 类锚点各自对应一条确定性的 ES 查询。锚点 a 是仓库命名,做 repo_or_project 通配匹配;锚点 b 是部署环境,要求 full_path.raw 同时包含 client-onboard 和实体检索词;锚点 c 是品牌资产,filename.raw 前缀为 EYETFV 且包含实体检索词;锚点 d 是报表前缀,full_path 含短语 ClientReports 且 filename.lower 含实体检索词;锚点 e 是数据映射,full_path 含短语 Custom Mapping 且含实体检索词;锚点 f 是产品目录,full_path 含短语 SRE-Product-info 且含实体检索词;锚点 g 是工单附件,category = atlassian 且 full_path.raw 含实体检索词。每格执行一次 count 查询,结果大于 0 视为存在直接证据。整个过程没有人工判断。

矩阵构建期间发生了一段意外:ES 服务失联。为不阻塞实验,我们改用本地全量仓库名表处理锚点 a,用执行期的全量聚合枚举处理锚点 b–g。这两条替代路径在理论上与逐格确定性查询等价,但在服务恢复之前,这份等价性只是论证。服务恢复之后,我们对 98 格逐格补跑确定性查询作为验证。15 个真证据格与本地版完全一致;3 个短缩写碰撞格得到确认,涉及的三个缩写在仓库表中命中的均为无关仓库,ES 侧文档级计数分别为 189、47、392,与本地版记录的仓库数并存但口径不同——一个数文档,一个数仓库,两个数字没有冲突;1 个污染格维持原判定,实体 14 在锚点 g 上的 24 条命中经证据子串核验后确认全部为泛词污染。复核首跑时这 3 个碰撞格曾出现不匹配,追查发现问题出在复核查询本身没有覆盖全大写的检索词变体,补齐变体后逐格吻合。

5.6 E6 JOIN 耗时基准

E6 构造合成实体表 entity(entity, anchor, platform, doc_count, file_count),规模取 n ∈ {1000, 4000, 9000, 14000}。每个规模上执行两类查询各 100 次,用 time.perf_counter 记录耗时。聚合型超边 JOIN 的语句是按 anchor 分组聚合命中实体数与文档数之和;配对型超边 JOIN 则是在同一锚点上做实体两两配对,LIMIT 50000。最终报告每个规模的均值与标准差。

6 实验结果

6.1 E1:一跳之后同时出现三种形态

14 个实体的一跳 JOIN 结果不是单峰分布。剔除 2 个泛仓库失效实体之后,有效样本 n = 12 的膨胀倍数中位数为 ×9.99,IQR 为 [1.0, 129.0],其中 8 个实体的 ratio 大于 1,3 个实体的 ratio 小于 1 出现召回缺口,另有 1 个实体恰好落在 ratio = 1 的边界上。4 个在设计阶段就已经预标注污染风险的样本仍照常纳入。全样本(含泛仓库)的中位数为 ×17.91,IQR 为 [1.0, 891.79]。

图A 一跳膨胀倍数分布(n = 14 全查;箱线为有效样本,×为泛仓库失效,△为污染风险)

真正超出设计预期的是泛仓库失效模式。实体 8 与实体 9 的 top-1 仓库指向同一个包含 378,336 个文件的多租户附件库,而这个仓库对所有命中它的实体都是 top-1——L₁ 因此对不同实体同值,膨胀倍数不再具有区分能力。这个模式对应过一次真实误判:一枚平台级 API 令牌因为处于该库的一跳可达范围内,曾被写入报告初版并归为某实体的专属凭证,直到复核配置文件后才确认它只是平台通用字段,与任何客户身份都不相关。

单实体纵深的观察结果同样清楚。实体 2 在 L₁ 层的分层精确率为 5.75%,L₂ 层降至 0.0048%,L₃ 层为 0.0046%。从 L₁ 到 L₂ 相当于跨越了约三个数量级,L₂ 到 L₃ 已无实质差异。这里需要重申,图 B 的数字是以 L₀ 命中为真值代理的近似口径,不能被读作独立人工金标准下的精确率;即便如此,跳数扩张后关联结果快速失去筛选价值这一点已经足够明显。

图B 精确率随跳数衰减(单实体纵深,L₀ 命中为真值代理)

6.2 E2:自一致性 66.7%,独立过滤器 62.5%

24 个跨平台实体的三级标注分布是 10 TP、6 UNC、8 FP。自一致性盲标与原人工标注的原始一致率为 66.7%,即 16 格一致、8 格不一致。分歧主要集中在 FP 与 UNC 的边界上——8 个 FP 中有 4 个被盲标为 UNC,UNC 中有 3 个被盲标为 TP。也就是说,即便由同一位标注者按独立规则重新盲标,同一批样本的三级分类也无法完全稳定复现,原始报告中的“33% 假阳性”只能视为一个近似区间。

过滤器消融的结果汇总在表 3 中。独立停用词表加长度阈值这一组合能移除全部 8 个假阳性、零误伤真实实体,TP 口径精确率达到 62.5%,是综合最优组合。若继续加入词素阈值,虽然可以把精确率推到 100%,代价却是丢掉一半真实实体,这个权衡并不划算。

表 3 过滤器消融(n = 24)

过滤器
保留
FP 移除
TP 误伤
TP 口径精确率
TP 召回率
独立停用词表
20
4/8
0/10
50.0%
100%
长度 ≥ 5
17
7/8
0/10
58.8%
100%
词素 ≥ 2
5
8/8
5/10
100%
50%
停用词 + 长度168/80/1062.5%100%
停用词 + 长度 + 词素
5
8/8
5/10
100%
50%

特征分析给出的解释是长度差异。假阳性名称平均长度为 4.12 字符,观测值集中在 3–4 字符范围内,多为通用词或短缩写;真实实体平均长度为 11.4 字符,观测值范围 7–19 字符,多为多词素组合。Mann–Whitney U = 3.0,双侧 p = 0.00105,秩双列相关近似值 r ≈ 0.34。因为 n = 24,这个差异只能作探索性解释,不能直接推广到更大的样本。

图C (a) 独立过滤器消融;(b) 名称长度特征

6.3 E3:显著性成立,效应量置信区间宽

L₁ 候选的确证率为 13/15,即 87%,L₂ 候选的确证率为 7/78,即 9%。Fisher 精确检验的双侧 p 值为 2.6×10⁻⁹,OR 为 65.9,95% CI 为 12.3–353.4。Precision@k 在真实截断点上的值分别是 P@15 = 86.7%(L₁ 全量)、P@93 = 21.5%(L₁ + L₂)、P@144 = 13.9%(全部候选),Recall@L₁ = 65.0%。因为信号级本身是序数,我们没有对层内做插值,也没有计算 AP。

这组数字支持“信号分级确实携带置信度信息”这一方向性结论。但效应量的置信区间跨越了约一个半数量级,说明小样本条件下点估计并不精确。加上金标准由单标注者构建这一底色,87% 和 9% 只能作为优先级的量级参考,而不是可以迁移到其他场景的固定精确率。

图D Precision@k 与 L₁/L₂ 差异检验(序数信号,真实截断点,无插值)

6.4 E4:正交方向成立,但表述边界与初版不同

关键词法确证的 7 个实体全部被实体清单法覆盖,没有出现推翻;实体清单法另行确证 8 个实体,两种方法在确证集上零冲突。

增量机制程序化验证给出的结果则修正了初版的一条断言。8 个增量实体中,6 个与关键词词典的品牌词子集零交集,剩下 2 个的名称含地理词 ,与词典存在重叠。

后 2 个未被关键词法确证的原因不是“查不到”,而是“查得到、没力气查完”。在全库有 22,250 条命中,关键词法的逐条人工核验无法穷举到更深层级。因此,本实验对“正交”这一说法的准确表述应当是:两种方法在品牌词空间上零交集,在地理词空间上则因穷举度差异而并非完全重叠,不能被简化为整个实体空间完全不重叠。

从执行过程看,这里也留下了一次程序化验证捕获错误的实例。程序化验证脚本首次运行时输出的重叠结果与初版断言不符,追查后发现是词典子集构造遗漏了 china 词条。补齐词条重跑之后得到最终的二分结构,修正过程写进了设计文档的修正记录。

6.5 E5:附件文件名锚点独占六个同类实体

14 × 7 证据覆盖矩阵的确证覆盖结果如表 4 所示。仓库命名锚点 a 贡献了信号字典 144 个候选中的 124 个,是字典召回的绝对主力,然而它的确证覆盖只有 3 个实体,并额外产生了 3 例短缩写碰撞。附件文件名锚点 g 的产量远低于 a,但确证覆盖达到 7 个实体(其中包含 1 例污染),并且独占其中 6 个同类实体——若把这一锚点从矩阵中裁掉,6 个确证会直接消失,其他任何锚点都无法补上。

表 4 锚点证据覆盖计数(≥ 1 记为存在证据;实体 14 在 g 的 24 条为泛词污染,单列)

锚点
a 仓库命名
b 部署环境
c 品牌资产
d 报表前缀
e 数据映射
f 产品目录
g 附件文件名
确证实体覆盖数
3
3
1
1
1
0
7(含污染 1)
字典候选贡献数
124
3
独占实体数
2
2
0
1
1
0
6

更值得注意的是候选生成和证据定位这两条链路之间的关系。锚点 g 独占的 6 个同类实体在三级信号字典的候选记录中数量为零,它们的发现路径是“L₂ 弱信号地理词线索触发附件层枚举”,完全绕开了字典。换句话说,字典决定的是“哪些实体进入复核队列”,锚点决定的是“证据在哪个层面”,两者是各自独立的轴。本次实践中价值最高的发现,恰好出现在这两条轴共同覆盖之外的位置。

图F 锚点证据覆盖矩阵(●真证据 ○碰撞/污染;post-hoc 补充实验)

对 98 格逐格补跑的确定性查询确认了本地版矩阵的结论。3 个碰撞格的 ES 文档级计数分别为 189、47、392,与本地版记录的仓库数并存但计数单位不同;1 个污染格维持污染级判定。矩阵是二值的,只反映证据存在性的下界,附件层的证据密度可以作为后续调查线索但不改变本实验的存在性结论。复核过程中还观察到一条附赠信息:实体 12 与实体 13 在锚点 g 的证据密度分别为 510 与 438 条,远高于研判采纳量的 1–2 条,包含同系更多业务类文件(TPG 系两支产品、Oaktree 系多支产品与 K-1/K-3 套件)以及一个定制化工单项目,这部分未纳入本文的定性结论,仅作为后续研判的补充线索。

6.6 E6:14k 实体规模下 12.82 ms

四个规模上的耗时汇总在表 5。聚合型 JOIN 在实验规模内近似线性,从 1k 实体的 0.44 ms 增长到 14k 实体的 12.82 ms;配对型 JOIN 增速较缓,但基线较高,从 25.6 ms 增长到 56.0 ms。

表 5 超边 JOIN 耗时基准(每规模重复 100 次,均值 ± SD)

实体规模 n
聚合型 JOIN (ms)
配对型 JOIN, LIMIT 50k (ms)
1,000
0.44 ± 0.05
25.6 ± 1.1
4,000
1.75 ± 0.15
27.9 ± 1.2
9,000
5.82 ± 1.91
40.2 ± 12.6
14,000
12.82 ± 1.0756.0 ± 5.7

需要指出的是,本实验是单机 SQLite in-memory 环境下的合成数据基准,随机种子固定为 7,规模上限为 14,000 实体。这个结果能支持“查询时构建、成本可控”的主张,但不能外推至任意生产规模;真实上线前仍需以生产数据规模执行压力测试。

图E 超边 JOIN 耗时基准(100 次重复,均值 ± SD)

7 综合讨论

六项主假设的检验结论汇总于表 6。H1 只部分成立,因为膨胀普遍性与召回缺口的双向假设成立的同时,还识别出预注册未预见的第三种失效模式。H2 与 H5 成立,H6 在实验规模内成立。H3 的方向性结论稳固,但效应量估计不精确。H4 中零冲突这一部分完全成立,增量来自词典外的部分只在品牌词空间成立、在地理词空间体现为穷举度差异。

表 6 六项主假设的检验结论

假设
结论
备注
H1 一跳普遍膨胀 + 存在召回缺口
部分成立
有效样本中位数 ×9.99;同时识别出预期外的泛仓库失效模式
H2 独立过滤器提升精确率
成立
停用词 + 长度将 TP 口径精确率提升至 62.5%,零 TP 误伤
H3 信号分级携带置信度
方向成立,量值不精确
p = 2.6×10⁻⁹,OR = 65.9,CI 12.3–353.4
H4 零冲突且增量来自词典外
零冲突成立,增量部分成立
6/8 真正零交集,2/8 与地理词重叠但穷举度不同
H5 锚点分布可用矩阵刻画
成立
附件锚点独占 6 实体,产量与独占负相关
H6 JOIN 成本随规模可控
在实验规模内成立
14k 实体聚合 JOIN 12.82 ± 1.07 ms

前置文献指出的三项短板在本研究中都以场景化形式再现。SAG 不做实体消歧的代价,在缺少事件语义对冲的目录路径场景下,直接兑现为 E2 中三分之一的明确假阳性。低频桥接盲点变形为 E1 的仓库边界截断,形式不同,机制类似。指标口径乐观在评测侧再现为 E2 的自一致性 66.7%——评测者对同一批样本的判断都难以稳定复现。三者的根源相同:确定性字符串匹配不携带语义相关性判断。

本研究的结论强度受几项限制约束。首先是金标准的单标注属性,全部精确率数字都有向上偏差的风险,后续工作需要引入双标注与 Cohen κ 检验。其次是样本量——E2 的 n = 24 与金标准的 n = 23 决定了多数统计结论只能作为探索性证据,E3 那个跨越一个半数量级的置信区间就是直接体现。第三是外部效度,两个数据集的规模都在 10⁷ 记录量级,结论不能直接外推。第四是 E5 的 post-hoc 属性——数据等价性已经由 98 格逐格复核闭合,但事后设计的属性无法追溯改变,其结果应视为假设生成而不是假设确认。最后是预注册的内部性,E4 的词典遗漏虽然被程序化验证捕获并修正,但它也说明无意识的设计偏好会反复出现。

从部署角度看,把 SQL-SAG 应用于威胁情报目录研判需要在 JOIN 结果之外补充几层约束。命中文件数超过 10⁵ 的多租户共享库不应直接作为实体归属依据,需要提前做仓库粒度预检。信号分级适合用来安排复核的先后顺序,而不适合用来对外承诺具体精确率——L₁ 优先,L₂ 保留但要承担更高的人工核验成本,L₃ 主要用于误报召回追踪。候选生成和证据定位要分别标注,字典决定实体是否进入复核,锚点决定证据在哪里,两者需要独立记录,不能相互替代。对常用词和短缩写,需要用独立来源的过滤器兜底,禁止从测试集反推筛选条件。所有 JOIN 结果在离开数据库时都应携带锚点层级和置信度标注,缺少这类元数据的结果只能称为“候选”,不能进入研判结论。

8 总结

本文以预注册式设计报告了 SQL-SAG 在两个自建威胁情报目录研判数据集上的六组实验。一跳 JOIN 的有效样本膨胀倍数中位数为 ×9.99,同时存在 3 个召回缺口和 2 个泛仓库失效实体;名称共现 JOIN 的独立过滤器组合可将 TP 口径精确率提升至 62.5%,但标注自一致性仅 66.7%;L₁ 与 L₂ 的确证率分别为 87% 和 9%,Fisher 双侧 p = 2.6×10⁻⁹、OR = 65.9、95% CI 12.3–353.4;实体清单法覆盖了关键词法的全部 7 个确证实体并另行确证 8 个,其中 6 个与词典品牌词零交集;附件文件名锚点独占 6 个同类实体的唯一证据来源,候选生成路径与证据定位路径彼此正交;14k 实体规模下聚合型超边 JOIN 耗时 12.82 ± 1.07 ms。

综合来看,SQL-SAG 的 JOIN 结果适合作为候选生成与调查优先级排序的量化依据。它在多租户仓库粒度、名称消歧和小样本置信度上都存在不能由 JOIN 自身弥补的边界,未经独立过滤和人工复核的 JOIN 结果不应直接作为最终归因证据。在方法论层面,本研究的主要贡献是示范了预注册式设计如何在方法实现者兼任评测者的场景下降低事后选择偏差,并如实呈现了两处被程序化验证捕获的错误——E4 的词典遗漏与 E5 初版的口径失败,可供同类研究参照。

数据可得性:全部原始计数、脚本与设计文档均存档,授权范围内可复现。欢迎加入弱口令安全实验室申请授权。

参考文献

[1] Wu Y., Li J., Liang X., et al. SAG: SQL-Retrieval Augmented Generation with Query-Time Dynamic Hyperedges. arXiv:2606.15971, 2026.

[2] 本系列前篇:《论文精读|SAG:不建图谱,用 SQL JOIN 在查询时"临时"长出超边》,2026-07。

案例与实体均已编号脱敏,不指向任何可识别机构。本文仅作技术交流与学习之用。

 
打赏
 
更多>同类资讯
0相关评论

推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  皖ICP备20008329号-18
Powered By DESTOON