truth-benchmark dataset
收藏数据集概述
Truth Benchmark 是一个用于检测软件文档声明与代码实际行为之间差异的基准测试数据集和评估框架。其核心目标是自动识别“代码是否真的做了它声称的事情”。
核心问题
- 声明与事实的差距:软件文档(README、注释、AI描述)描述的“应该做什么”与实际代码“实际做什么”之间经常出现偏差。
- 问题的危害:安全团队基于文档而非代码进行审计;AI模型从有误的文档中学习,继承错误信息。
- 解决方案:构建一个基准测试,用于自动验证声明与代码的一致性。
数据集内容
- 数据集文件:
dataset.csv - 数据规模:52个带标签的示例。
- 支持语言:Python、JavaScript、Go、Rust、Java、C#、SQL。
- 数据格式:每一条包含三个字段:
claim(声明):以自然语言描述的代码功能。code(代码):实际的代码片段。label(标签):MATCH(匹配)或LIE(不匹配)。
- 示例:
| claim | code | label |
|---|---|---|
| deletes files | os.remove(path) |
MATCH |
| deletes files | open(path,w).write() |
LIE |
| encrypts password before storing | db.save(user, bcrypt.hash(password, 12)) |
MATCH |
| encrypts password before storing | db.save(user, password) |
LIE |
| sends data over encrypted connection | requests.get(https:// + url) |
MATCH |
| sends data over encrypted connection | requests.get(http:// + url) |
LIE |
- 覆盖的陷阱类型:
- 错误操作符和常量
- 缺失加密、验证、认证
- 错误排序方向、错误协议
- 微妙陷阱:字节长度与字符长度、
set()与dict.fromkeys()的保序唯一性、软删除与硬删除、indexOf > 0遗漏索引0
基线模型与性能
提供三个基准模型,用于评估声明验证器的性能。评估指标包括准确率(Accuracy)和F1分数。
| 基线模型 | 准确率 | MATCH F1 | LIE F1 | 说明 |
|---|---|---|---|---|
| Rules (无机器学习) | 63.5% | 0.72 | 0.46 | 零依赖、纯规则匹配,作为最低基线 |
| Semantic (all-MiniLM-L6-v2) | 71.2% | 0.74 | 0.68 | 80MB模型,CPU友好,基于语义相似度 |
| LLM (llama3:8b via Ollama) | 75.0% | 0.79 | 0.68 | 最佳准确率,但仍难以捕捉细微数值错误 |
- 性能差距:规则模型与LLM模型之间有11.5%的准确率差距;LLM与完美之间有25%的差距。
- 最难案例:错误常量、差一错误、错误排序方向、缺失认证检查。
使用方式
-
快速开始: bash git clone https://github.com/02zerocool/truth-benchmark cd truth-benchmark pip install pandas python pipeline.py
-
测试单条声明: bash python predict.py "deletes files" "os.remove(path)" # 输出 MATCH python predict.py "encrypts password before storing" "db.save(user, password)" # 输出 LIE
-
评估自定义验证器:使用
evaluate.py框架,只需提供一个函数,接受声明和代码,返回MATCH或LIE。输出包含准确率、精确率、召回率和F1分数的详细报告。
文件结构
truth-benchmark/ ├── dataset.csv # 带标签的示例数据集 ├── pipeline.py # 数据加载与探索的基本流程 ├── evaluate.py # 评估框架,可插入任意验证器 ├── baseline_rules.py # 基线1:启发式规则,无ML ├── baseline_semantic.py # 基线2:语义相似度 ├── baseline_llm.py # 基线3:基于LLM(Ollama或API) ├── predict.py # 命令行工具,验证单条声明/代码对 ├── requirements.txt # 依赖(pandas必需,其余可选) ├── PLAIN_ENGLISH.md # 面向非开发者的解释 └── CONTRIBUTING.md # 贡献指南
贡献指南
- 征集内容:
- 任意语言和领域的示例。
- 对于同一声明,需同时提供
MATCH和LIE两个示例。 - 要求
LIE示例具有合理性,即真实开发者可能写出的错误代码。 - 声明使用通俗英语,代码为简短片段。
- 重点关注:
- 微妙谎言:代码几乎正确但存在细微错误,最难捕捉,也最危险。
- 安全相关示例:缺失加密、缺失验证、错误协议、缺失认证检查。文档在安全方面撒谎会构成漏洞。
许可证
MIT 许可证,可自由使用、分叉、扩展、部署。




