Журнал изменений
2024/12/27: Инициализация проекта
Введение
Dingo — это инструмент оценки качества данных, который помогает вам автоматически обнаруживать проблемы с качеством данных в ваших наборах данных. Dingo предоставляет множество встроенных правил и методов оценки моделей, а также поддерживает пользовательские методы оценки. Dingo поддерживает часто используемые текстовые наборы данных и мультимодальные наборы данных, включая наборы данных предварительной подготовки, наборы данных тонкой настройки и наборы данных оценки. Кроме того, Dingo поддерживает несколько методов использования, включая локальный CLI и SDK, что упрощает интеграцию в различные платформы оценки, такие как OpenCompass .
Архитектурная схема

Быстрый старт
Related MCP server: Tigris MCP Server
Установка
pip install dingo-pythonПримеры использования
1. Использование Evaluate Core
from dingo.config.config import DynamicLLMConfig
from dingo.io.input.MetaData import MetaData
from dingo.model.llm.llm_text_quality_model_base import LLMTextQualityModelBase
from dingo.model.rule.rule_common import RuleEnterAndSpace
def llm():
data = MetaData(
data_id='123',
prompt="hello, introduce the world",
content="Hello! The world is a vast and diverse place, full of wonders, cultures, and incredible natural beauty."
)
LLMTextQualityModelBase.dynamic_config = DynamicLLMConfig(
key='',
api_url='',
# model='',
)
res = LLMTextQualityModelBase.eval(data)
print(res)
def rule():
data = MetaData(
data_id='123',
prompt="hello, introduce the world",
content="Hello! The world is a vast and diverse place, full of wonders, cultures, and incredible natural beauty."
)
res = RuleEnterAndSpace().eval(data)
print(res)2. Оценить локальный текстовый файл (открытый текст)
from dingo.io import InputArgs
from dingo.exec import Executor
# Evaluate a plaintext file
input_data = {
"eval_group": "sft", # Rule set for SFT data
"input_path": "data.txt", # Path to local text file
"dataset": "local",
"data_format": "plaintext", # Format: plaintext
"save_data": True # Save evaluation results
}
input_args = InputArgs(**input_data)
executor = Executor.exec_map["local"](input_args)
result = executor.execute()
print(result)3. Оцените набор данных «Обнимающееся лицо»
from dingo.io import InputArgs
from dingo.exec import Executor
# Evaluate a dataset from Hugging Face
input_data = {
"eval_group": "sft", # Rule set for SFT data
"input_path": "tatsu-lab/alpaca", # Dataset from Hugging Face
"data_format": "plaintext", # Format: plaintext
"save_data": True # Save evaluation results
}
input_args = InputArgs(**input_data)
executor = Executor.exec_map["local"](input_args)
result = executor.execute()
print(result)4. Оцените формат JSON/JSONL
from dingo.io import InputArgs
from dingo.exec import Executor
# Evaluate a JSON file
input_data = {
"eval_group": "default", # Default rule set
"input_path": "data.json", # Path to local JSON file
"dataset": "local",
"data_format": "json", # Format: json
"column_content": "text", # Column containing the text to evaluate
"save_data": True # Save evaluation results
}
input_args = InputArgs(**input_data)
executor = Executor.exec_map["local"](input_args)
result = executor.execute()
print(result)5. Использование LLM для оценки
from dingo.io import InputArgs
from dingo.exec import Executor
# Evaluate using GPT model
input_data = {
"input_path": "data.jsonl", # Path to local JSONL file
"dataset": "local",
"data_format": "jsonl",
"column_content": "content",
"custom_config": {
"prompt_list": ["PromptRepeat"], # Prompt to use
"llm_config": {
"detect_text_quality": {
"model": "gpt-4o",
"key": "YOUR_API_KEY",
"api_url": "https://api.openai.com/v1/chat/completions"
}
}
}
}
input_args = InputArgs(**input_data)
executor = Executor.exec_map["local"](input_args)
result = executor.execute()
print(result)Интерфейс командной строки
Оценка с помощью наборов правил
python -m dingo.run.cli --input_path data.txt --dataset local -e sft --data_format plaintext --save_data TrueОцените с помощью LLM (например, GPT-4o)
python -m dingo.run.cli --input_path data.json --dataset local -e openai --data_format json --column_content text --custom_config config_gpt.json --save_data TrueПример config_gpt.json :
{
"llm_config": {
"openai": {
"model": "gpt-4o",
"key": "YOUR_API_KEY",
"api_url": "https://api.openai.com/v1/chat/completions"
}
}
}Визуализация графического интерфейса
После оценки (с save_data=True ) будет автоматически сгенерирована страница frontend. Чтобы вручную запустить frontend:
python -m dingo.run.vsl --input output_directoryГде output_directory содержит результаты оценки с файлом summary.json .

Онлайн-демонстрация
Попробуйте Dingo в нашей онлайн-демонстрации: (Обнимающее лицо)🤗
Показатели качества данных
Dingo классифицирует проблемы качества данных по 7 измерениям метрик качества. Каждое измерение можно оценить с помощью как методов на основе правил, так и подсказок LLM:
Метрика качества | Описание | Примеры правил | Примеры подсказок LLM |
ПОЛНОТА | Проверяет, являются ли данные неполными или отсутствуют |
| Проверяет, заканчивается ли текст двоеточием или многоточием, содержит ли он непарные скобки или отсутствуют ли в нем критические компоненты. |
ЭФФЕКТИВНОСТЬ | Проверяет, являются ли данные значимыми и правильно ли они отформатированы. |
| Обнаруживает искаженный текст, слова, слипшиеся без пробелов, и текст с отсутствующими знаками препинания. |
БЕГЛОСТЬ | Проверяет грамматическую правильность текста и его естественность при чтении |
| Определяет слишком длинные слова, фрагменты текста без знаков препинания или контент с хаотичным порядком чтения |
АКТУАЛЬНОСТЬ | Обнаруживает нерелевантный контент в данных | Варианты | Проверяет на наличие нерелевантной информации, такой как сведения о цитатах, верхние/нижние колонтитулы, маркеры сущностей, HTML-теги |
БЕЗОПАСНОСТЬ | Выявляет конфиденциальную информацию или конфликты ценностей |
| Проверяет персональные данные и контент, связанный с азартными играми, порнографией, политическими вопросами |
СХОДСТВО | Обнаруживает повторяющийся или очень похожий контент |
| Оценивает текст на предмет последовательно повторяющегося содержимого или многократного использования специальных символов. |
ПОНЯТНОСТЬ | Оценивает, насколько легко интерпретировать данные |
| Обеспечивает правильное форматирование формул LaTeX и Markdown с правильной сегментацией и переносами строк. |
Оценка качества LLM
Dingo предоставляет несколько методов оценки на основе LLM, определенных подсказками в каталоге dingo/model/prompt . Эти подсказки регистрируются с помощью декоратора prompt_register и могут быть объединены с моделями LLM для оценки качества:
Подсказки по оценке качества текста
Тип подсказки | Метрическая | Описание |
| Различные качественные параметры | Комплексная оценка качества текста, охватывающая эффективность, релевантность, полноту, понятность, схожесть, беглость и безопасность |
| Эффективность | Обнаруживает искаженный текст и антисканирующий контент |
| Сходство | Выявляет проблемы повторения текста |
| Беглость | Проверяет слова на наличие слипшихся слов без надлежащего интервала |
| Полнота | Оценивает блоки кода и проблемы форматирования списков |
| Эффективность | Обнаруживает нечитаемые символы из-за проблем с кодировкой |
Подсказки по оценке 3H (честные, полезные, безвредные)
Тип подсказки | Метрическая | Описание |
| Честность | Оценивает, содержат ли ответы точную информацию без фальсификаций или обмана. |
| Полезность | Оценивает, отвечают ли ответы непосредственно на вопросы и следуют ли они соответствующим инструкциям |
| Безвредность | Проверяет, не содержат ли ответы вредоносного контента, дискриминационного языка и опасной помощи |
Подсказки для оценки предметной области
Тип подсказки | Метрическая | Описание |
| Качество экзаменационных вопросов | Специализированная оценка качества экзаменационных вопросов, уделяющая особое внимание отображению формул, форматированию таблиц, структуре абзацев и форматированию ответов. |
| Качество извлечения HTML | Сравнивает различные методы извлечения Markdown из HTML, оценивая полноту, точность форматирования и семантическую согласованность. |
| Качество данных и домен | Оценивает качество данных до обучения с использованием методологии DataMan (14 стандартов, 15 доменов). Присваивает оценку (0/1), тип домена, статус качества и причину. |
Подсказки по классификации
Тип подсказки | Метрическая | Описание |
| Категоризация тем | Классифицирует текст по таким категориям, как языковая обработка, письмо, код, математика, ролевая игра или вопросы и ответы по знанию |
| Классификация изображений | Распознает изображения как CAPTCHA, QR-код или обычные изображения |
Подсказки по оценке изображения
Тип подсказки | Метрическая | Описание |
| Релевантность изображения | Оценивает, соответствует ли изображение эталонному изображению по количеству лиц, деталям и визуальным элементам. |
Использование оценки LLM при оценке
Чтобы использовать эти подсказки для оценки в своих оценках, укажите их в своей конфигурации:
input_data = {
# Other parameters...
"custom_config": {
"prompt_list": ["QUALITY_BAD_SIMILARITY"], # Specific prompt to use
"llm_config": {
"detect_text_quality": { # LLM model to use
"model": "gpt-4o",
"key": "YOUR_API_KEY",
"api_url": "https://api.openai.com/v1/chat/completions"
}
}
}
}Вы можете настроить эти подсказки, чтобы сосредоточиться на определенных измерениях качества или адаптироваться к определенным требованиям домена. В сочетании с соответствующими моделями LLM эти подсказки позволяют проводить комплексную оценку качества данных по нескольким измерениям.
Группы правил
Dingo предоставляет предварительно настроенные группы правил для различных типов наборов данных:
Группа | Вариант использования | Примеры правил |
| Общее качество текста |
|
| Тонкая настройка наборов данных | Правила по |
| Наборы данных для предварительного обучения | Полный набор из более чем 20 правил, включая |
Чтобы использовать определенную группу правил:
input_data = {
"eval_group": "sft", # Use "default", "sft", or "pretrain"
# other parameters...
}Основные характеристики
Поддержка из разных источников и в разных режимах
Источники данных : локальные файлы, наборы данных Hugging Face, хранилище S3
Типы данных : наборы данных для предварительного обучения, тонкой настройки и оценки.
Модальности данных : Текст и изображение
Оценка на основе правил и моделей
Встроенные правила : более 20 общих эвристических правил оценки
Интеграция LLM : OpenAI, Kimi и локальные модели (например, Llama3)
Пользовательские правила : легко расширяйте свои собственные правила и модели.
Оценка безопасности : интеграция API Perspective
Гибкое использование
Интерфейсы : CLI и SDK-опции
Интеграция : Простая интеграция с другими платформами
Движки исполнения : локальные и Spark
Комплексная отчетность
Метрики качества : 7-мерная оценка качества
Прослеживаемость : подробные отчеты для отслеживания аномалий
Руководство пользователя
Пользовательские правила, подсказки и модели
Если встроенные правила не соответствуют вашим требованиям, вы можете создать собственные:
Пример пользовательского правила
from dingo.model import Model
from dingo.model.rule.base import BaseRule
from dingo.config.config import DynamicRuleConfig
from dingo.io import MetaData
from dingo.model.modelres import ModelRes
@Model.rule_register('QUALITY_BAD_RELEVANCE', ['default'])
class MyCustomRule(BaseRule):
"""Check for custom pattern in text"""
dynamic_config = DynamicRuleConfig(pattern=r'your_pattern_here')
@classmethod
def eval(cls, input_data: MetaData) -> ModelRes:
res = ModelRes()
# Your rule implementation here
return resИндивидуальная интеграция LLM
from dingo.model import Model
from dingo.model.llm.base_openai import BaseOpenAI
@Model.llm_register('my_custom_model')
class MyCustomModel(BaseOpenAI):
# Custom implementation here
passБольше примеров смотрите в:
Двигатели исполнения
Местное исполнение
from dingo.io import InputArgs
from dingo.exec import Executor
input_args = InputArgs(**input_data)
executor = Executor.exec_map["local"](input_args)
result = executor.execute()
# Get results
summary = executor.get_summary() # Overall evaluation summary
bad_data = executor.get_bad_info_list() # List of problematic data
good_data = executor.get_good_info_list() # List of high-quality dataИсполнение Искры
from dingo.io import InputArgs
from dingo.exec import Executor
from pyspark.sql import SparkSession
# Initialize Spark
spark = SparkSession.builder.appName("Dingo").getOrCreate()
spark_rdd = spark.sparkContext.parallelize([...]) # Your data as MetaData objects
input_args = InputArgs(eval_group="default", save_data=True)
executor = Executor.exec_map["spark"](input_args, spark_session=spark, spark_rdd=spark_rdd)
result = executor.execute()Отчеты об оценке
После оценки Dingo генерирует:
Сводный отчет (
summary.json): общие показатели и оценкиПодробные отчеты : конкретные проблемы по каждому нарушению правил
Пример резюме:
{
"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
}
}MCP-сервер (экспериментальный)
Dingo включает экспериментальный сервер Model Context Protocol (MCP). Подробности о запуске сервера и его интеграции с такими клиентами, как Cursor, см. в специальной документации:
Документация сервера Dingo MCP (README_mcp.md)
Исследования и публикации
«Комплексная оценка качества данных для многоязычных веб-данных» : WanJuanSiLu: высококачественный набор данных веб-текста с открытым исходным кодом для языков с низкими ресурсами
«Качество данных предварительной подготовки с использованием методологии DataMan» : DataMan: Менеджер данных для предварительной подготовки больших языковых моделей
Планы на будущее
[ ] Более богатые графические и текстовые оценочные индикаторы
[ ] Оценка модальности аудио и видео данных
[ ] Оценка небольшой модели (fasttext, Qurating)
[ ] Оценка разнообразия данных
Ограничения
Текущие встроенные правила обнаружения и методы модели фокусируются на общих проблемах качества данных. Для специализированных потребностей оценки мы рекомендуем настраивать правила обнаружения.
Благодарности
Вклад
Мы ценим всех участников за их усилия по улучшению и совершенствованию Dingo . Пожалуйста, обратитесь к Руководству по внесению вклада для получения рекомендаций по внесению вклада в проект.
Лицензия
В этом проекте используется лицензия Apache 2.0 Open Source .
Цитата
Если вы считаете этот проект полезным, пожалуйста, рассмотрите возможность цитирования нашего инструмента:
@misc{dingo,
title={Dingo: A Comprehensive Data Quality Evaluation Tool for Large Models},
author={Dingo Contributors},
howpublished={\url{https://github.com/DataEval/dingo}},
year={2024}
}