1. Обзор
В этой лабораторной работе вы научитесь создавать конвейер оценки для системы генерации с дополненной реальностью (Retrieval-Augmented Generation, RAG). Вы будете использовать сервис оценки Vertex AI Gen AI Evaluation Service для создания пользовательских критериев оценки и построения системы оценки для задачи ответа на вопросы.
В ходе работы вы будете использовать примеры из набора данных Стэнфордского университета по ответам на вопросы (SQuAD 2.0) для подготовки оценочных наборов данных, настройки оценок без использования ссылок и с использованием ссылок, а также интерпретации результатов. К концу этой лабораторной работы вы поймете, как оценивать системы RAG и почему выбираются те или иные подходы к оценке.
Основа набора данных
Мы будем работать с тщательно разработанными примерами, охватывающими множество областей, представленных в наборе данных SQuAD 2.0 для ответов на вопросы :
- Нейробиология : проверка технической точности в научных условиях.
- История : Оценка фактической точности исторических повествований.
- География : Оценка территориальных и политических знаний
Такое разнообразие помогает понять, как подходы к оценке могут быть применены в различных предметных областях.
Ссылки
- Примеры кода: Данная лабораторная работа основана на примерах из документации Vertex AI Evaluation.
- Основа набора данных: набор данных для ответов на вопросы SQuAD 2.0
- Оптимизация извлечения RAG: тестирование, настройка, успех
Что вы узнаете
В этой лабораторной работе вы научитесь выполнять следующие задачи:
- Подготовьте наборы данных для оценки систем RAG.
- Внедрите оценку без использования ссылок, применяя такие метрики, как обоснованность и релевантность.
- Примените оценку на основе эталонных данных с использованием мер семантического сходства.
- Создавайте собственные оценочные метрики с подробными критериями подсчета баллов.
- Интерпретируйте и визуализируйте результаты оценки для принятия решения о выборе модели.
2. Настройка проекта
Аккаунт Google
Если у вас еще нет личного аккаунта Google, вам необходимо его создать .
Используйте личный аккаунт вместо рабочего или учебного.
Войдите в консоль Google Cloud.
Войдите в консоль Google Cloud, используя личную учетную запись Google.
Включить выставление счетов
Обменяйте 5 долларов США на кредиты Google Cloud (по желанию)
Для проведения этого мастер-класса вам потребуется платежный аккаунт с достаточным балансом. Если вы планируете использовать собственную платежную систему, этот шаг можно пропустить.
- Перейдите по этой ссылке и войдите в систему, используя свой личный аккаунт Google. Вы увидите примерно следующее:

- Нажмите кнопку «НАЖМИТЕ ЗДЕСЬ ДЛЯ ДОСТУПА К ВАШИМ КРЕДИТАМ ». Это переведет вас на страницу настройки вашего платежного профиля.

- Нажмите «Подтвердить». Теперь вы подключены к пробному платёжному аккаунту Google Cloud Platform.

Создайте личный платежный аккаунт.
Если вы настроили оплату с использованием кредитов Google Cloud, этот шаг можно пропустить.
Чтобы настроить личный платежный аккаунт, перейдите сюда, чтобы включить оплату в облачной консоли.
Несколько замечаний:
- Выполнение этой лабораторной работы должно обойтись менее чем в 1 доллар США в виде облачных ресурсов.
- В конце этой лабораторной работы вы можете выполнить действия по удалению ресурсов, чтобы избежать дальнейших списаний средств.
- Новые пользователи могут воспользоваться бесплатной пробной версией стоимостью 300 долларов США .
Создать проект (необязательно)
Если у вас нет текущего проекта, который вы хотели бы использовать для этой лабораторной работы, создайте новый проект здесь .
3. Что такое генерация с расширенным извлечением (Retrieval Augmented Generation, RAG)?
RAG — это метод, используемый для повышения фактической точности и релевантности ответов, получаемых от больших языковых моделей (LLM). Он связывает LLM с внешней базой знаний, чтобы обосновать ее ответы конкретной, проверяемой информацией.
Процесс включает в себя следующие этапы:
- Преобразование вопроса пользователя в числовое представление (встраивание).
- Поиск в базе знаний документов с похожими векторными представлениями.
- Предоставление этих соответствующих документов в качестве контекста для магистерской программы, наряду с исходным вопросом, позволит получить ответ.
Узнайте больше о RAG .
Что делает оценку RAG сложной?
Оценка систем RAG отличается от оценки традиционных языковых моделей.
Проблема многокомпонентности : системы RAG объединяют три операции, каждая из которых может стать точкой отказа:
- Качество поиска : Нашла ли система нужные контекстные документы?
- Использование контекста : Эффективно ли модель использовала полученную информацию?
- Качество генерации : Хорошо ли написан, полезен ли и точен ли итоговый ответ?
Ответ может оказаться некорректным, если какой-либо из этих компонентов работает не так, как ожидалось. Например, система может получить правильный контекст, но модель его проигнорирует. Или же модель может сгенерировать корректный ответ, который окажется неправильным, поскольку полученный контекст был нерелевантен.
4. Настройте среду Vertex AI Workbench.
Начнём с создания новой среды блокнота, в которой мы будем запускать код, необходимый для оценки систем RAG.
- Перейдите на страницу «API и сервисы» в вашей облачной консоли .
- Нажмите «Включить» для Vertex AI API .

Доступ к Vertex AI Workbench
- В консоли Google Cloud перейдите в раздел Vertex AI , щелкнув меню навигации ☰ > Vertex AI > Workbench .
- Создайте новый экземпляр рабочей среды.

- Назовите экземпляр рабочей среды
evaluation-workbench. - Выберите свой регион и зону, если эти значения еще не заданы.
- Нажмите «Создать» .

- Подождите, пока верстак подготовится. Это может занять несколько минут.

- После того, как рабочая среда будет подготовлена, нажмите «Открыть JupyterLab» .

- В рабочей среде создайте новый блокнот Python3 .

Чтобы узнать больше о возможностях и функциях этой среды, ознакомьтесь с официальной документацией Vertex AI Workbench .
Установите оценочный SDK Vertex AI.
Теперь давайте установим специализированный SDK для оценки, который предоставляет инструменты для анализа RAG.
- В первой ячейке вашего блокнота добавьте и выполните следующую команду импорта (SHIFT+ENTER), чтобы установить Vertex AI SDK (вместе с ознакомительными компонентами).
Это установит Vertex AI SDK с ознакомительными расширениями, которые включают в себя:%pip install --upgrade --user --quiet google-cloud-aiplatform[evaluation]- EvalTask : Основной класс для выполнения оценок.
- MetricPromptTemplateExamples : Предопределенные метрики оценки
- PointwiseMetric : Фреймворк для создания пользовательских метрик.
- notebook_utils : Инструменты визуализации для анализа результатов
- Важно : После установки вам потребуется перезапустить ядро, чтобы использовать новые пакеты. В строке меню в верхней части окна JupyterLab перейдите в раздел Ядро > Перезапустить ядро .
5. Инициализируйте SDK и импортируйте библиотеки.
Прежде чем создавать конвейер оценки, необходимо настроить среду. Это включает в себя настройку параметров проекта, инициализацию SDK Vertex AI для подключения к Google Cloud и импорт специализированных библиотек Python, которые вы будете использовать для оценки.
- Определите переменные конфигурации для вашей задачи оценки. В новой ячейке добавьте и выполните следующий код, чтобы задать
PROJECT_ID,LOCATIONи имяEXPERIMENTдля организации этого запуска.import vertexai PROJECT_ID = "YOUR PROJECT ID" LOCATION = "YOUR LOCATION" # @param {type:"string"} EXPERIMENT = "rag-eval-01" # @param {type:"string"} if not PROJECT_ID or PROJECT_ID == "[your-project-id]": raise ValueError("Please set your PROJECT_ID") - Инициализируйте SDK Vertex AI. В новой ячейке добавьте и запустите следующий код.
На этом этапе выполняется аутентификация и подключение вашей записной книжки к вашему проекту в Google Cloud.vertexai.init(project=PROJECT_ID, location=LOCATION) - Импортируйте необходимые классы из ознакомительного SDK, выполнив следующий код в следующей ячейке:
Вот краткое описание каждого импорта:import pandas as pd from vertexai.evaluation import EvalTask, MetricPromptTemplateExamples, PointwiseMetric from vertexai.preview.evaluation import notebook_utils- pandas : Для создания и управления данными в DataFrames.
- EvalTask : Основной класс, который выполняет задачу оценки.
- MetricPromptTemplateExamples : Предоставляет доступ к предопределенным метрикам оценки Google.
- PointwiseMetric : фреймворк для создания собственных пользовательских метрик.
- notebook_utils : Набор инструментов для визуализации результатов.
6. Подготовьте набор данных для оценки.
Хорошо структурированный набор данных является основой любой надежной оценки. Для систем RAG ваш набор данных должен содержать два ключевых поля для каждого примера:
- Подсказка : Это весь объем входных данных, предоставленных языковой модели. Необходимо объединить вопрос пользователя с контекстом, полученным вашей системой RAG (
prompt = User Question + Retrieved Context). Это важно, чтобы служба оценки знала, какую информацию модель использовала для создания своего ответа. - Ответ : Это окончательный ответ, полученный вашей моделью RAG.
Для получения статистически достоверных результатов рекомендуется использовать набор данных, содержащий около 100 примеров. В этой лабораторной работе вы будете использовать небольшой набор данных, чтобы продемонстрировать процесс.
Давайте создадим наборы данных. Вы начнете со списка вопросов и retrieved_contexts из системы RAG. Затем вы определите два набора ответов: один от модели, которая, по-видимому, работает хорошо ( generated_answers_by_rag_a ), и один от модели, которая работает плохо ( generated_answers_by_rag_b ).
Наконец, вы объедините эти части в два DataFrame pandas, eval_dataset_rag_a и eval_dataset_rag_b , следуя описанной выше структуре.
- В новой ячейке добавьте и выполните следующий код, чтобы определить вопросы и два набора сгенерированных ответов.
Это определяет основные компоненты вашего набора данных: вопросы, длинные контекстные фрагменты, полученные системой RAG для каждого вопроса, и ответы, сгенерированные двумя различными моделями (высокоэффективной моделью A и низкоэффективной моделью B).questions = [ "Which part of the brain does short-term memory seem to rely on?", "What provided the Roman senate with exuberance?", "What area did the Hasan-jalalians command?", ] generated_answers_by_rag_a = [ "frontal lobe and the parietal lobe", "The Roman Senate was filled with exuberance due to successes against Catiline.", "The Hasan-Jalalians commanded the area of Syunik and Vayots Dzor.", ] generated_answers_by_rag_b = [ "Occipital lobe", "The Roman Senate was subdued because they had food poisoning.", "The Galactic Empire commanded the state of Utah.", ] - Определите переменные retrieved_contexts. Добавьте и запустите следующий код в новой ячейке.
Теперь, когда у вас есть все необходимые компоненты, вы объедините их в структурированные DataFrame pandas, требуемые службой оценки.retrieved_contexts = [ "Short-term memory is supported by transient patterns of neuronal communication, dependent on regions of the frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe. Long-term memory, on the other hand, is maintained by more stable and permanent changes in neural connections widely spread throughout the brain. The hippocampus is essential (for learning new information) to the consolidation of information from short-term to long-term memory, although it does not seem to store information itself. Without the hippocampus, new memories are unable to be stored into long-term memory, as learned from patient Henry Molaison after removal of both his hippocampi, and there will be a very short attention span. Furthermore, it may be involved in changing neural connections for a period of three months or more after the initial learning.", "In 62 BC, Pompey returned victorious from Asia. The Senate, elated by its successes against Catiline, refused to ratify the arrangements that Pompey had made. Pompey, in effect, became powerless. Thus, when Julius Caesar returned from a governorship in Spain in 61 BC, he found it easy to make an arrangement with Pompey. Caesar and Pompey, along with Crassus, established a private agreement, now known as the First Triumvirate. Under the agreement, Pompey's arrangements would be ratified. Caesar would be elected consul in 59 BC, and would then serve as governor of Gaul for five years. Crassus was promised a future consulship.", "The Seljuk Empire soon started to collapse. In the early 12th century, Armenian princes of the Zakarid noble family drove out the Seljuk Turks and established a semi-independent Armenian principality in Northern and Eastern Armenia, known as Zakarid Armenia, which lasted under the patronage of the Georgian Kingdom. The noble family of Orbelians shared control with the Zakarids in various parts of the country, especially in Syunik and Vayots Dzor, while the Armenian family of Hasan-Jalalians controlled provinces of Artsakh and Utik as the Kingdom of Artsakh.", ] - В новой ячейке добавьте и выполните следующий код для создания
eval_dataset_rag_aиeval_dataset_rag_b.eval_dataset_rag_a = pd.DataFrame( { "prompt": [ "Answer the question: " + question + " Context: " + item for question, item in zip(questions, retrieved_contexts) ], "response": generated_answers_by_rag_a, } ) eval_dataset_rag_b = pd.DataFrame( { "prompt": [ "Answer the question: " + question + " Context: " + item for question, item in zip(questions, retrieved_contexts) ], "response": generated_answers_by_rag_b, } ) - Чтобы просмотреть первые несколько строк набора данных для модели А, выполните следующий код в новой ячейке.
Это хорошая практика, позволяющая убедиться в правильности его создания.eval_dataset_rag_a
7. Выберите и создайте метрики.
Теперь, когда наборы данных готовы, вы можете решить, как измерять производительность. Для оценки вашей модели можно использовать одну или несколько метрик. Каждая метрика оценивает определенный аспект ответа модели, например, ее фактическую точность или релевантность.
Вы можете использовать комбинацию двух типов метрик:
- Предопределенные метрики : готовые к использованию метрики, предоставляемые SDK для распространенных задач оценки.
- Пользовательские метрики : метрики, которые вы определяете для проверки качеств, имеющих отношение к вашему сценарию использования.
В этом разделе вы изучите предопределенные метрики, доступные для RAG.
Изучите предопределенные метрики
SDK включает в себя несколько встроенных метрик для оценки систем ответов на вопросы. Эти метрики используют языковую модель в качестве «оценщика», который выставляет оценку ответам вашей модели на основе набора инструкций.
- В новой ячейке добавьте и выполните следующий код, чтобы увидеть полный список предопределенных имен метрик:
В результате отображается список доступных метрик, которые можно использовать сразу же после установки.MetricPromptTemplateExamples.list_example_metric_names() - Чтобы понять, как работают эти метрики, вы можете изучить соответствующие шаблоны подсказок. В новой ячейке добавьте и запустите следующий код, чтобы увидеть инструкции, данные оценщику LLM для метрики
question_answering_quality.# See the prompt example for one of the pointwise metrics print(MetricPromptTemplateExamples.get_prompt_template("question_answering_quality"))
8. Создание пользовательских метрик
Помимо предопределенных метрик, вы можете создавать собственные метрики для оценки критериев, специфичных для вашего варианта использования. Для создания пользовательской метрики необходимо написать шаблон запроса, который указывает оценщику LLM, как оценивать ответ.
Создание пользовательской метрики включает в себя два шага:
- Определите шаблон подсказки : строка, содержащая ваши инструкции для оценщика LLM. Хороший шаблон включает в себя четкую роль, критерии оценки, рубрику выставления баллов и заполнители, такие как
{prompt}и{response}. - Создайте объект PointwiseMetric : вы заключаете строку шаблона запроса в этот класс и присваиваете метрике имя.
Вам предстоит создать две пользовательские метрики для оценки релевантности и полезности ответов системы RAG.
- Определите шаблон запроса для метрики релевантности. Этот шаблон предоставляет подробную рубрику для оценщика LLM. В новой ячейке добавьте и выполните следующий код:
relevance_prompt_template = """ You are a professional writing evaluator. Your job is to score writing responses according to pre-defined evaluation criteria. You will be assessing relevance, which measures the ability to respond with relevant information when given a prompt. You will assign the writing response a score from 5, 4, 3, 2, 1, following the rating rubric and evaluation steps. ## Criteria Relevance: The response should be relevant to the instruction and directly address the instruction. ## Rating Rubric 5 (completely relevant): Response is entirely relevant to the instruction and provides clearly defined information that addresses the instruction's core needs directly. 4 (mostly relevant): Response is mostly relevant to the instruction and addresses the instruction mostly directly. 3 (somewhat relevant): Response is somewhat relevant to the instruction and may address the instruction indirectly, but could be more relevant and more direct. 2 (somewhat irrelevant): Response is minimally relevant to the instruction and does not address the instruction directly. 1 (irrelevant): Response is completely irrelevant to the instruction. ## Evaluation Steps STEP 1: Assess relevance: is response relevant to the instruction and directly address the instruction? STEP 2: Score based on the criteria and rubrics. Give step by step explanations for your scoring, and only choose scores from 5, 4, 3, 2, 1. # User Inputs and AI-generated Response ## User Inputs ### Prompt {prompt} ## AI-generated Response {response} """ - Определите шаблон запроса для показателя полезности, используя тот же подход. Добавьте и запустите следующий код в новой ячейке:
helpfulness_prompt_template = """ You are a professional writing evaluator. Your job is to score writing responses according to pre-defined evaluation criteria. You will be assessing helpfulness, which measures the ability to provide important details when answering a prompt. You will assign the writing response a score from 5, 4, 3, 2, 1, following the rating rubric and evaluation steps. ## Criteria Helpfulness: The response is comprehensive with well-defined key details. The user would feel very satisfied with the content in a good response. ## Rating Rubric 5 (completely helpful): Response is useful and very comprehensive with well-defined key details to address the needs in the instruction and usually beyond what explicitly asked. The user would feel very satisfied with the content in the response. 4 (mostly helpful): Response is very relevant to the instruction, providing clearly defined information that addresses the instruction's core needs. It may include additional insights that go slightly beyond the immediate instruction. The user would feel quite satisfied with the content in the response. 3 (somewhat helpful): Response is relevant to the instruction and provides some useful content, but could be more relevant, well-defined, comprehensive, and/or detailed. The user would feel somewhat satisfied with the content in the response. 2 (somewhat unhelpful): Response is minimally relevant to the instruction and may provide some vaguely useful information, but it lacks clarity and detail. It might contain minor inaccuracies. The user would feel only slightly satisfied with the content in the response. 1 (unhelpful): Response is useless/irrelevant, contains inaccurate/deceptive/misleading information, and/or contains harmful/offensive content. The user would feel not at all satisfied with the content in the response. ## Evaluation Steps STEP 1: Assess comprehensiveness: does the response provide specific, comprehensive, and clearly defined information for the user needs expressed in the instruction? STEP 2: Assess relevance: When appropriate for the instruction, does the response exceed the instruction by providing relevant details and related information to contextualize content and help the user better understand the response. STEP 3: Assess accuracy: Is the response free of inaccurate, deceptive, or misleading information? STEP 4: Assess safety: Is the response free of harmful or offensive content? Give step by step explanations for your scoring, and only choose scores from 5, 4, 3, 2, 1. # User Inputs and AI-generated Response ## User Inputs ### Prompt {prompt} ## AI-generated Response {response} """ - Создайте объекты
PointwiseMetricдля двух ваших пользовательских метрик. Это превратит ваши шаблоны подсказок в многократно используемые компоненты для задачи оценки. Добавьте и запустите следующий код в новой ячейке:relevance = PointwiseMetric( metric="relevance", metric_prompt_template=relevance_prompt_template, ) helpfulness = PointwiseMetric( metric="helpfulness", metric_prompt_template=helpfulness_prompt_template, )
Теперь у вас есть две новые, многократно используемые метрики ( relevance и helpfulness ), готовые для вашей работы по оценке.
9. Запустите задание оценки.
Теперь, когда наборы данных и метрики готовы, вы можете запустить оценку. Для этого создайте объект EvalTask для каждого набора данных, который хотите протестировать.
Объект EvalTask объединяет компоненты для выполнения оценочного запуска:
- dataset : DataFrame, содержащий ваши подсказки и ответы.
- метрики : Список метрик, по которым вы хотите проводить оценку.
- эксперимент : Эксперимент Vertex AI позволяет записывать результаты, что помогает отслеживать и сравнивать результаты запусков.
- Создайте объект
EvalTaskдля каждой модели. Этот объект объединяет набор данных, метрики и имя эксперимента. Добавьте и запустите следующий код в новой ячейке, чтобы настроить задачи: Теперь вы настроили два объектаrag_eval_task_rag_a = EvalTask( dataset=eval_dataset_rag_a, metrics=[ "question_answering_quality", relevance, helpfulness, "groundedness", "safety", "instruction_following", ], experiment=EXPERIMENT, ) rag_eval_task_rag_b = EvalTask( dataset=eval_dataset_rag_b, metrics=[ "question_answering_quality", relevance, helpfulness, "groundedness", "safety", "instruction_following", ], experiment=EXPERIMENT, )EvalTask, по одному для каждого набора ответов модели. Предоставленный вами списокmetricsдемонстрирует ключевую особенность службы оценки: предопределенные метрики (например,safety) и пользовательские объектыPointwiseMetric. - После настройки задач выполните их, вызвав метод `
.evaluate(). Это отправит задачи в бэкэнд Vertex AI для обработки и может занять несколько минут. В новой ячейке добавьте и выполните следующий код:result_rag_a = rag_eval_task_rag_a.evaluate() result_rag_b = rag_eval_task_rag_b.evaluate()
После завершения оценки результаты будут сохранены в объектах result_rag_a и result_rag_b , готовые к анализу в следующем разделе.
10. Проанализируйте результаты.
Результаты оценки теперь доступны. Объекты result_rag_a и result_rag_b содержат сводные оценки и подробные пояснения для каждой строки. В этом задании вы проанализируете эти результаты, используя вспомогательные функции из notebook_utils .
Просмотреть сводные данные
- Для получения общего обзора используйте вспомогательную функцию
display_eval_result(), чтобы увидеть средний балл по каждой метрике. В новой ячейке добавьте и запустите следующий код, чтобы просмотреть сводку для модели A:notebook_utils.display_eval_result( title="Model A Eval Result", eval_result=result_rag_a ) - Сделайте то же самое для модели B. Добавьте и запустите этот код в новой ячейке:
notebook_utils.display_eval_result( title="Model B Eval Result", eval_result=result_rag_b, )
Визуализация результатов оценки
Графики могут упростить сравнение производительности моделей. Вы будете использовать два типа визуализации:
- Радарная диаграмма: показывает общую "форму" производительности каждой модели. Больший размер диаграммы указывает на лучшую общую производительность.
- Гистограмма: Для прямого сравнения каждого показателя.
Эти визуализации помогут вам сравнить модели по субъективным качествам, таким как релевантность, обоснованность и полезность.
- Для подготовки к построению графика объедините результаты в один список кортежей. Каждый кортеж должен содержать название модели и соответствующий ей объект результата. В новой ячейке добавьте и выполните следующий код:
eval_results = [] eval_results.append(("Model A", result_rag_a)) eval_results.append(("Model B", result_rag_b)) - Теперь создайте радарную диаграмму для сравнения моделей по всем метрикам одновременно. Добавьте и запустите следующий код в новой ячейке:
Более крупная форма указывает на лучшие общие характеристики.notebook_utils.display_radar_plot( eval_results, metrics=[ "question_answering_quality", "safety", "groundedness", "instruction_following", "relevance", "helpfulness", ], ) - Для более наглядного сравнения по каждому показателю создайте столбчатую диаграмму. В новой ячейке добавьте и выполните следующий код:
Эта визуализация позволяет легко увидеть разницу в производительности между двумя моделями.notebook_utils.display_bar_plot( eval_results, metrics=[ "question_answering_quality", "safety", "groundedness", "instruction_following", "relevance", "helpfulness", ], )
Визуализация наглядно покажет, что характеристики модели А (большая фигура на радарной диаграмме и высокие столбцы на столбчатой диаграмме) превосходят характеристики модели В.
Просмотреть подробное объяснение для отдельного случая
Сводные баллы показывают общую производительность. Чтобы понять, почему модель показала определенные результаты, необходимо ознакомиться с подробными объяснениями, сгенерированными оценщиком LLM для каждого примера.
- Вспомогательная функция
display_explanations()позволяет просматривать отдельные результаты. Чтобы увидеть подробную разбивку результатов второго примера (num=2) из модели A, добавьте и запустите следующий код в новой ячейке:notebook_utils.display_explanations(result_rag_a, num=2) - Вы также можете использовать эту функцию для фильтрации по определенной метрике во всех примерах. Это полезно для отладки конкретной области низкой производительности. Чтобы понять, почему модель B показала такие низкие результаты по метрике
groundedness, добавьте и запустите этот код в новой ячейке: Это позволяет получить конкретную обратную связь о том, где модель дает сбой, что крайне важно для итеративного улучшения.notebook_utils.display_explanations(result_rag_b, metrics=["groundedness"])
11. Оценка с использованием «эталонного ответа».
Ранее вы проводили оценку без использования ссылок, когда ответ модели оценивался только на основе подсказки. Этот метод полезен, но оценка носит субъективный характер.
Теперь вы будете использовать метод оценки с привязкой к эталонному значению. Этот метод добавляет в набор данных «золотой стандарт» (также называемый эталонным ответом). Сравнение ответа модели с эталонным ответом обеспечивает более объективную оценку производительности. Это позволяет измерить:
- Фактическая корректность : Соответствует ли ответ модели фактам, указанным в эталонном ответе?
- Семантическое сходство : Означает ли ответ модели то же самое, что и эталонный ответ?
- Полнота : Содержит ли ответ модели всю ключевую информацию из эталонного ответа?
Подготовьте указанный набор данных.
Для проведения оценки с использованием эталонных данных необходимо добавить «эталонный ответ» к каждому примеру в вашем наборе данных.
Начнём с определения списка golden_answers . Сравнение эталонных ответов с ответами из модели A покажет ценность этого метода:
- Вопрос 1 (Мозг): Сгенерированный ответ и эталонный ответ идентичны. Правильный ответ — модель А.
- Вопрос 2 (Сенат): Ответы семантически схожи, но сформулированы по-разному. Хороший показатель должен это учитывать.
- Вопрос 3 (Хасана-Джалалиана): Ответ модели А фактически неверен в соответствии с контекстом.
golden_answerвыявляет эту ошибку.
- В новой ячейке определите список golden_answers.
golden_answers = [ "frontal lobe and the parietal lobe", "Due to successes against Catiline.", "The Hasan-Jalalians commanded the area of Artsakh and Utik.", ] - Создайте DataFrames для оценки, используя следующий код, который находится в ячейке ниже:
Этот код объединяет переменную golden_answers с уже созданными вами ранее переменными.referenced_eval_dataset_rag_a = pd.DataFrame( { "prompt": [ "Answer the question: " + question + " Context: " + item for question, item in zip(questions, retrieved_contexts) ], "response": generated_answers_by_rag_a, "reference": golden_answers, } ) referenced_eval_dataset_rag_b = pd.DataFrame( { "prompt": [ "Answer the question: " + question + " Context: " + item for question, item in zip(questions, retrieved_contexts) ], "response": generated_answers_by_rag_b, "reference": golden_answers, } )
Теперь наборы данных готовы к оценке с использованием ссылок.
Создайте пользовательскую ссылочную метрику.
Вы также можете создавать пользовательские метрики для оценки на основе ссылок. Процесс аналогичен, но шаблон запроса теперь включает в себя заполнитель {reference} для эталонного ответа.
Имея однозначно «правильный» ответ, можно использовать более строгую бинарную систему оценки (например, 1 за правильный ответ, 0 за неправильный) для измерения фактической точности. Давайте создадим новую метрику question_answering_correctness , которая реализует эту логику.
- Определите шаблон запроса. В новой ячейке добавьте и выполните следующий код:
Этот шаблон предписывает оценщику LLM провести строгое сравнение между {ответом} модели и эталонным {ответом}, оценивая его как правильный (1) или неправильный (0).question_answering_correctness_prompt_template = """ You are a professional writing evaluator. Your job is to score writing responses according to pre-defined evaluation criteria. You will be assessing question answering correctness, which measures the ability to correctly answer a question. You will assign the writing response a score from 1, 0, following the rating rubric and evaluation steps. ### Criteria: Reference claim alignment: The response should contain all claims from the reference and should not contain claims that are not present in the reference. ### Rating Rubric: 1 (correct): The response contains all claims from the reference and does not contain claims that are not present in the reference. 0 (incorrect): The response does not contain all claims from the reference, or the response contains claims that are not present in the reference. ### Evaluation Steps: STEP 1: Assess the response' correctness by comparing with the reference according to the criteria. STEP 2: Score based on the rubrics. Give step by step explanations for your scoring, and only choose scores from 1, 0. # User Inputs and AI-generated Response ## User Inputs ### Prompt {prompt} ## Reference {reference} ## AI-generated Response {response} """ - Оберните строку шаблона запроса в объект PointwiseMetric. Это придаст вашей метрике формальное имя и сделает её многоразовым компонентом для задачи оценки. Добавьте и запустите следующий код в новой ячейке:
question_answering_correctness = PointwiseMetric( metric="question_answering_correctness", metric_prompt_template=question_answering_correctness_prompt_template, )
Теперь у вас есть настраиваемая, основанная на реальных данных метрика для строгой проверки фактов.
12. Выполните указанную оценку.
Теперь вам нужно будет настроить задачу оценки, используя указанные наборы данных и новую метрику. Для этого снова воспользуйтесь классом EvalTask .
Список метрик теперь объединяет ваши пользовательские метрики, основанные на модели, с метриками, основанными на вычислениях. Оценка на основе эталонных данных позволяет использовать традиционные метрики, основанные на вычислениях, которые выполняют математические сравнения между сгенерированным текстом и эталонным текстом. Вы будете использовать три распространенных типа:
-
exact_match: Присваивает 1 балл только в том случае, если сгенерированный ответ идентичен эталонному ответу, и 0 баллов в противном случае. -
bleu: Показатель точности. Он измеряет, сколько слов из сгенерированного ответа также встречается в эталонном ответе. -
rouge: Показатель полноты. Он измеряет, сколько слов из эталонного ответа было учтено в сгенерированном ответе.
- Настройте задачу оценки, используя указанные наборы данных и новый набор метрик. В новой ячейке добавьте и выполните следующий код для создания объектов
EvalTask:referenced_answer_eval_task_rag_a = EvalTask( dataset=referenced_eval_dataset_rag_a, metrics=[ question_answering_correctness, "rouge", "bleu", "exact_match", ], experiment=EXPERIMENT, ) referenced_answer_eval_task_rag_b = EvalTask( dataset=referenced_eval_dataset_rag_b, metrics=[ question_answering_correctness, "rouge", "bleu", "exact_match", ], experiment=EXPERIMENT, ) - Выполните указанную оценку, вызвав метод
.evaluate(). Добавьте и запустите этот код в новой ячейке:referenced_result_rag_a = referenced_answer_eval_task_rag_a.evaluate() referenced_result_rag_b = referenced_answer_eval_task_rag_b.evaluate()
13. Проанализируйте указанные результаты.
Оценка завершена. В этом задании вы проанализируете результаты, чтобы измерить фактическую точность моделей, сравнив их ответы с эталонными ответами.
Просмотреть сводные результаты
- Проанализируйте сводные результаты для указанной оценки. В новой ячейке добавьте и выполните следующий код, чтобы отобразить сводные таблицы для обеих моделей:
Вы заметите, что модель A показывает хорошие результаты по вашей пользовательской метрикеnotebook_utils.display_eval_result( title="Model A Eval Result", eval_result=referenced_result_rag_a, ) notebook_utils.display_eval_result( title="Model B Eval Result", eval_result=referenced_result_rag_b, )question_answering_correctness, но получает более низкие оценки поexact_match. Это подчеркивает ценность метрик, основанных на моделях, которые могут распознавать семантическое сходство, а не просто идентичный текст.
Визуализируйте результаты для сравнения.
Визуализация может сделать разницу в производительности между двумя моделями более очевидной. Сначала объедините результаты в один список для построения графиков, а затем создайте радарные и столбчатые диаграммы.
- Объедините указанные результаты оценки в один список для построения графика. Добавьте и запустите следующий код в новой ячейке:
referenced_eval_results = [] referenced_eval_results.append(("Model A", referenced_result_rag_a)) referenced_eval_results.append(("Model B", referenced_result_rag_b)) - Создайте радарную диаграмму для визуализации производительности каждой модели по новому набору метрик. Добавьте и запустите этот код в новой ячейке:
notebook_utils.display_radar_plot( referenced_eval_results, metrics=[ "question_answering_correctness", "rouge", "bleu", "exact_match", ], ) - Создайте столбчатую диаграмму для прямого сравнения результатов. Это покажет, как каждая модель показала себя по различным метрикам. Добавьте и запустите следующий код в новой ячейке:
notebook_utils.display_bar_plot( referenced_eval_results, metrics=[ "question_answering_correctness", "rouge", "bleu", "exact_match", ], )
Эти визуализации подтверждают, что модель А значительно точнее и фактически соответствует эталонным ответам, чем модель В.
14. От практики к производству
Вы успешно выполнили полный цикл оценки системы RAG. В этом заключительном разделе подводятся итоги освоенных вами ключевых стратегических концепций и предлагается структура для применения этих навыков в реальных проектах.
Передовые методы производства
Чтобы применить навыки, полученные в этой лаборатории, в реальной производственной среде, следует учитывать следующие четыре ключевых момента:
- Автоматизируйте с помощью CI/CD: интегрируйте свой набор инструментов оценки в конвейер CI/CD (например, Cloud Build, GitHub Actions). Запускайте оценку автоматически при изменении кода, чтобы выявлять регрессии и блокировать развертывания, если показатели качества падают ниже установленных вами стандартов.
- Развивайте свои наборы данных: статичный набор данных устаревает. Используйте систему контроля версий для ваших «золотых» тестовых наборов (с помощью Git LFS или Cloud Storage) и постоянно добавляйте новые, сложные примеры, используя выборку из реальных (анонимизированных) пользовательских запросов.
- Оценивайте не только генератор, но и сам механизм поиска: без правильного контекста невозможно дать отличный ответ. Внедрите отдельный этап оценки для вашей системы поиска, используя такие метрики, как коэффициент попаданий (был ли найден нужный документ?) и средний обратный ранг (MRR) (насколько высоко был ранжирован нужный документ?).
- Отслеживайте показатели во времени: экспортируйте сводные оценки из ваших оценочных запусков в такой сервис, как Google Cloud Monitoring . Создавайте панели мониторинга для отслеживания тенденций качества и настраивайте автоматические оповещения о значительном снижении производительности.
Матрица передовой методологии оценки
Выбор подходящего подхода к оценке зависит от ваших конкретных целей. В этой матрице приведено краткое описание того, когда следует использовать каждый метод.
Подход к оценке | Наилучшие варианты использования | Основные преимущества | Ограничения |
Без ссылок | Мониторинг производства, непрерывная оценка | Золотых ответов не требуется, отражает субъективное качество. | Более высокая стоимость, потенциальная предвзятость оценщика. |
На основе эталонных значений | Сравнение моделей, сравнительный анализ | Объективное измерение, более быстрые вычисления | Требует идеальных ответов, может упустить семантическую эквивалентность. |
Пользовательские метрики | Оценка, специфичная для данной области | Разработано с учетом потребностей бизнеса. | Требуется проверка и затраты на разработку. |
Гибридный подход | Комплексные производственные системы | Лучший из всех подходов | Повышенная сложность и необходимость оптимизации затрат. |
Ключевые технические выводы
При создании и оценке собственных систем RAG учитывайте следующие основные принципы:
- Обоснованность имеет решающее значение для RAG : этот показатель позволяет однозначно различать системы RAG высокого и низкого качества, что делает его необходимым для мониторинга производства.
- Множество показателей обеспечивает надежность : ни один отдельный показатель не охватывает все аспекты качества RAG. Комплексная оценка требует учета нескольких параметров.
- Пользовательские метрики значительно повышают ценность : критерии оценки, специфичные для конкретной предметной области, часто учитывают нюансы, которые упускают общие метрики, повышая точность оценки.
- Статистическая строгость обеспечивает уверенность : правильный размер выборки и проверка значимости превращают оценку из догадки в надежный инструмент принятия решений.
структура принятия решений о развертывании в производственной среде
Используйте эту поэтапную схему в качестве руководства для развертывания систем RAG в будущем:
- Этап 1 — Разработка : Используйте оценку на основе эталонных данных с известными тестовыми наборами для сравнения и выбора модели.
- Этап 2 — Предпроизводство : Проведение комплексной оценки с использованием обоих подходов для подтверждения готовности к производству.
- Этап 3 — Производство : Внедрить мониторинг без использования эталонных образцов для непрерывной оценки качества без поиска оптимальных решений.
- Этап 4 — Оптимизация : Используйте результаты оценки для совершенствования модели и улучшения системы поиска информации.
15. Заключение
Поздравляем! Вы успешно завершили лабораторную работу.
Данная лабораторная работа является частью учебного курса "Готовый к внедрению ИИ в производство с использованием Google Cloud".
- Изучите полный учебный план , чтобы преодолеть разрыв между прототипом и серийным производством.
- Делитесь своими успехами, используя хэштег
ProductionReadyAI.
Краткий обзор
Вы научились:
- Для оценки качества ответа на основе полученного контекста проведите оценку без использования ссылок.
- Проведите оценку с использованием справочных данных, добавив «эталонный ответ» для проверки фактической правильности.
- Для обоих подходов используйте сочетание предопределенных и пользовательских метрик.
- Используйте как метрики, основанные на моделях (например,
question_answering_quality), так и метрики, основанные на вычислениях (rouge,bleu,exact_match). - Анализ и визуализация результатов позволяют понять сильные и слабые стороны модели.
Такой подход к оценке помогает создавать более надежные и точные приложения генеративного искусственного интеллекта.