Как вы оцениваете качество синтетических данных? (Self-consistency, LLM-as-Judge)
Краткий тезис
Оценка качества синтетических данных — критический этап, позволяющий отсеять шумные, нерелевантные или неверные примеры перед использованием в обучении или RAG. Основные методы: Self-consistency (проверка согласованности генераций на один и тот же запрос), LLM-as-Judge (автоматическая оценка сильным LLM), Human validation (выборочная Review|ручная проверка) и Downstream quality (оценка влияния на целевую задачу). Комбинация этих подходов даёт надёжный фильтр качества.
1. Термин: Синтетические данные
Синтетические данные — это искусственно сгенерированные примеры (вопрос-ответ, документ-резюме и т.д.), созданные с помощью LLM или других алгоритмов, а не собранные из реальных источников. Они используются для:
- расширения обучающих наборов, когда реальных данных мало;
- создания пар для RAG (вопросы к документам);
- fine-tuning моделей под специфические домены.
Риски синтетика может содержать галлюцинации, повторяться, быть нерепрезентативной. Поэтому оценка качества обязательна.
2. Self-consistency (согласованность)
Self-consistency — метод, при котором один и тот же запрос (например, вопрос) подаётся в LLM несколько раз (обычно 3–5) с разными seed или температурой, и измеряется согласованность полученных ответов.
Как работает
- Берём синтетический пример (вопрос, контекст, ответ).
- Генерируем ответ на тот же вопрос 3 раза (с temperature > 0, например 0.7).
- Сравниваем ответы между собой (или с оригинальным синтетическим ответом) с помощью метрик ROUGE-L, F1 по токенам, BERTScore.
- Если среднее согласие (agreement) ниже порога (например, 0.8), пример считается шумным и отбрасывается.
Пример кода (Python)
from rouge_score import rouge_scorer
import numpy as np
def self_consistency_score(question, original_answer, llm, n=3):
generated = [llm.generate(question, temperature=0.7) for _ in range(n)]
scorer = rouge_scorer.RougeScorer(['rougeL'], use_stemmer=True)
scores = []
for gen in generated:
score = scorer.score(original_answer, gen)['rougeL'].fmeasure
scores.append(score)
return np.mean(scores)
# Порог: если средний ROUGE-L < 0.8 → отбрасываем
if self_consistency_score(q, a, my_llm) < 0.8:
discard()
Интерпретация порогов
| Средний ROUGE-L | Качество | Действие |
|---|---|---|
| > 0.9 | Отличное | Оставить |
| 0.8 – 0.9 | Хорошее | Оставить |
| 0.6 – 0.8 | Среднее | Проверить вручную |
| < 0.6 | Низкое | Отбросить |
Ограничения Self-consistency не гарантирует фактической правильности — ответы могут быть согласованными, но неверными. Поэтому метод лучше сочетать с другими.
3. LLM-as-Judge
LLM-as-Judge — использование сильной LLM (GPT-4, Claude 3.5) для оценки качества синтетических данных по заданным критериям.
Процесс
- Создаём промпт-судью, который просит LLM оценить ответ по шкале (например, 1–10) по критериям: корректность, релевантность, полнота, отсутствие галлюцинаций.
- Подаём на вход вопрос, контекст (если есть) и синтетический ответ.
- Получаем оценку. Примеры с оценкой ниже порога (например, < 7) отбрасываются.
Пример промпта
Ты — эксперт по оценке качества данных. Оцени ответ на вопрос по шкале 1-10, где 10 — идеально.
Вопрос: {question}
Контекст: {context}
Ответ: {answer}
Критерии:
- Корректность (факты соответствуют контексту)
- Полнота (ответ покрывает все аспекты вопроса)
- Релевантность (ответ прямо относится к вопросу)
Верни только число от 1 до 10.
Калибровка LLM-as-Judge
- Использовать chain-of-thought (попросить LLM сначала объяснить оценку, потом выставить число).
- Проверять inter-judge agreement (сравнивать оценки от разных LLM или от одной с разными промптами).
- Периодически валидировать на небольшом наборе, размеченном человеком.
Преимущества и недостатки
| Плюсы | Минусы |
|---|---|
| Быстро, масштабируемо | LLM может быть предвзята (например, предпочитать длинные ответы) |
| Можно настраивать критерии | Стоимость (если много данных) |
| Не требует разметки человеком | Не всегда точна на сложных доменах |
4. Human validation (ручная валидация)
Human validation — выборочная проверка синтетических данных экспертами-людьми.
Как внедрить
- Отбираем случайную стратифицированную выборку (обычно 5–10% от всего набора).
- Каждый пример проверяется 1–2 аннотаторами по тем же критериям, что и LLM-as-Judge.
- Вычисляем inter-annotator agreement (Cohen's kappa, Fleiss' kappa). Если согласие низкое (< 0.6), уточняем инструкции.
- По результатам корректируем пороги для Self-consistency и LLM-as-Judge.
Пример
- Всего 10 000 синтетических пар.
- Отбираем 500 пар (5%).
- Два аннотатора ставят оценки 1–5.
- Если средняя оценка < 3, пересматриваем метод генерации.
Зачем Human validation — золотой стандарт, но дорогой. Используется для калибровки автоматических метрик и выявления систематических ошибок.
5. Downstream quality (оценка на целевой задаче)
Самый прагматичный метод: обучить модель на синтетических данных и оценить её качество на реальных задачах.
Пайплайн
- Обучаем модель (например, fine-tuning LLM или RAG-ретривер) на синтетическом датасете.
- Оцениваем на отдельном тестовом наборе реальных данных (человеческая разметка).
- Сравниваем метрики (accuracy, F1, ROUGE-L, faithfulness) с baseline (модель без синтетики или с другим источником).
- Если прирост метрик значимый — синтетика качественная.
Пример
- Baseline: RAG с эмбеддингами OpenAI → точность ответов 72%.
- После добавления 5000 синтетических QA пар (отфильтрованных) → точность 78%.
- Если бы синтетика была шумной, точность могла бы упасть.
Важно Downstream quality — конечная проверка, но требует времени и вычислительных ресурсов. Используется после фильтрации другими методами.
6. Комбинированный подход (рекомендуемый па
Навигация
- Предыдущий: 681
- Следующий: 683
- Индекс: 00. Индекс разборов