Dingo是一个数据质量评估工具,帮助您自动检测数据集中的数据质量问题。Dingo提供了多种内置规则和模型评估方法,并支持自定义评估方法。Dingo支持常用的文本数据集和多模态数据集,包括预训练数据集、微调数据集和评估数据集。此外,Dingo支持多种使用方式,包括本地CLI和SDK,使其易于集成到各种评估平台中,如OpenCompass。

pip install dingo-python
from dingo.config.input_args import EvaluatorLLMArgs
from dingo.io.input import Data
from dingo.model.llm.llm_text_quality_model_base import LLMTextQualityModelBase
from dingo.model.rule.rule_common import RuleEnterAndSpace
data = Data(
data_id='123',
prompt="你好,介绍一下这个世界",
content="你好!世界是一个广阔而多样的地方,充满了奇迹、文化和令人惊叹的自然美景。"
)
def llm():
LLMTextQualityModelBase.dynamic_config = EvaluatorLLMArgs(
key='YOUR_API_KEY',
api_url='https://api.openai.com/v1/chat/completions',
model='gpt-4o',
)
res = LLMTextQualityModelBase.eval(data)
print(res)
def rule():
res = RuleEnterAndSpace().eval(data)
print(res)
from dingo.config import InputArgs
from dingo.exec import Executor
# 从Hugging Face评估数据集
input_data = {
"input_path": "tatsu-lab/alpaca", # 来自Hugging Face的数据集
"dataset": {
"source": "hugging_face",
"format": "plaintext" # 格式:纯文本
},
"executor": {
"eval_group": "sft", # SFT数据的规则集
"result_save": {
"bad": True # 保存评估结果
}
}
}
input_args = InputArgs(**input_data)
executor = Executor.exec_map["local"](input_args)
result = executor.execute()
print(result)
python -m dingo.run.cli --input test/env/local_plaintext.json
python -m dingo.run.cli --input test/env/local_json.json
评估后(当result_save.bad=True时),会自动生成前端页面。要手动启动前端:
python -m dingo.run.vsl --input 输出目录
其中输出目录包含评估结果,且包含一个summary.json文件。

在我们的在线演示中尝试Dingo:(Hugging Face) 🤗
在本地尝试Dingo:
cd app_gradio
python app.py

Dingo包含一个实验性的模型上下文协议(MCP)服务器。关于运行服务器并与Cursor等客户端集成的详细信息,请参阅专用文档:
为了帮助您快速开始使用Dingo MCP,我们制作了一个视频教程:
https://github.com/user-attachments/assets/aca26f4c-3f2e-445e-9ef9-9331c4d7a37b
该视频逐步演示了如何使用Dingo MCP服务器与Cursor。
Dingo通过基于规则和提示的评估指标提供全面的数据质量评估。这些指标涵盖了多个质量维度,包括有效性、完整性、相似性、安全性等。
我们的评估系统包括:
大多数指标都有学术来源的支持,以确保客观性和科学严谨性。
要在您的评估中使用这些评估提示,请在配置中指定它们:
input_data = {
# 其他参数...
"executor": {
"prompt_list": ["QUALITY_BAD_SIMILARITY"], # 要使用的特定提示
},
"evaluator": {
"llm_config": {
"LLMTextQualityPromptBase": { # 要使用的LLM模型
"model": "gpt-4o",
"key": "YOUR_API_KEY",
"api_url": "https://api.openai.com/v1/chat/completions"
}
}
}
}
您可以自定义这些提示,以专注于特定的质量维度或适应特定领域的需求。结合适当的LLM模型,这些提示可以实现跨多个维度的全面数据质量评估。
有关使用Dingo的幻觉检测能力的详细指南,包括HHEM-2.1-Open本地推理和基于LLM的评估:
有关使用Dingo的两阶段事实性评估系统的综合指南:
Dingo为不同类型的数据集提供了预配置的规则组:
| 组别 | 使用场景 | 示例规则 |
|---|---|---|
default | 通用文本质量 | RuleColonEnd,RuleContentNull,RuleDocRepeat等。 |
sft | 微调数据集 | 包含default规则以及用于幻觉检测的RuleHallucinationHHEM |
rag | RAG系统评估 | RuleHallucinationHHEM,PromptHallucination用于响应一致性 |
hallucination | 幻觉检测 | PromptHallucination结合基于LLM的评估 |
pretrain | 预训练数据集 | 包含20多个规则,如RuleAlphaWords,RuleCapitalWords等。 |
要使用特定的规则组:
input_data = {
"executor": {
"eval_group": "sft", # 使用"default","sft","rag","hallucination"或"pretrain"
}
# 其他参数...
}
如果内置规则不满足您的需求,您可以创建自定义规则:
from dingo.model import Model
from dingo.model.rule.base import BaseRule
from dingo.config.input_args import EvaluatorRuleArgs
from dingo.io import Data
from dingo.model.modelres import ModelRes
@Model.rule_register('QUALITY_BAD_RELEVANCE', ['default'])
class MyCustomRule(BaseRule):
"""检查文本中的自定义模式"""
dynamic_config = EvaluatorRuleArgs(pattern=r'your_pattern_here')
@classmethod
def eval(cls, input_data: Data) -> ModelRes:
res = ModelRes()
# 您的规则实现在这里
return res
from dingo.model import Model
from dingo.model.llm.base_openai import BaseOpenAI
@Model.llm_register('my_custom_model')
class MyCustomModel(BaseOpenAI):
# 自定义实现在这里
pass
更多示例见:
from dingo.config import InputArgs
from dingo.exec import Executor
input_args = InputArgs(**input_data)
executor = Executor.exec_map["local"](input_args)
result = executor.execute()
# 获取结果
summary = executor.get_summary() # 总体评估摘要
bad_data = executor.get_bad_info_list() # 有问题的数据列表
good_data = executor.get_good_info_list() # 高质量数据列表
from dingo.config import InputArgs
from dingo.exec import Executor
from pyspark.sql import SparkSession
# 初始化Spark
spark = SparkSession.builder.appName("Dingo").getOrCreate()
spark_rdd = spark.sparkContext.parallelize([...]) # 您的数据作为Data对象
input_data = {
"executor": {
"eval_group": "default",
"result_save": {"bad": True}
}
}
input_args = InputArgs(**input_data)
executor = Executor.exec_map["spark"](input_args, spark_session=spark, spark_rdd=spark_rdd)
result = executor.execute()
评估后,Dingo生成:
summary.json):总体指标和分数报告描述:
num_good / totalQUALITY_BAD_COMPLETENESS / totalQUALITY_BAD_COMPLETENESS-RuleColonEnd / total示例摘要:
{
"task_id": "d6c922ec-981c-11ef-b723-7c10c9512fac",
"task_name": "dingo",
"eval_group": "default",
"input_path": "test/data/test_local_jsonl.jsonl",
"output_path": "outputs/d6c921ac-981c-11ef-b723-7c10c9512fac",
"create_time": "20241101_144510",
"score": 50.0,
"num_good": 1,
"num_bad": 1,
"total": 2,
"type_ratio": {
"QUALITY_BAD_COMPLETENESS": 0.5,
"QUALITY_BAD_RELEVANCE": 0.5
},
"name_ratio": {
"QUALITY_BAD_COMPLETENESS-RuleColonEnd": 0.5,
"QUALITY_BAD_RELEVANCE-RuleSpecialCharacter": 0.5
}
}
当前内置的检测规则和模型方法侧重于常见的数据质量问题。对于专门的评估需求,我们建议定制检测规则。
我们感谢所有贡献者为改进和增强Dingo所做的努力。请参考贡献指南了解如何为项目做出贡献。
该项目使用Apache 2.0 开源许可证。
该项目使用fasttext进行某些功能,包括语言检测。fasttext根据MIT许可证发布,这与我们的Apache 2.0许可证兼容,并为各种使用场景提供了灵活性。
如果您发现此项目有用,请考虑引用我们的工具:
@misc{dingo,
title={Dingo:一个全面的AI数据质量评估工具,适用于大型模型},
author={Dingo 贡献者},
howpublished={\url{https://github.com/MigoXLab/dingo}},
year={2024