AI

Что такое контролируемая тонкая настройка в LLM?

Освойте тонкую настройку супервизора для LLM с помощью этого руководства по Python, охватывающего концепции, инструменты, рабочий процесс и практические примеры для повышения эффективности ваших проектов по ИИ.
7 мин. чтения

В этом руководстве по контролируемой тонкой настройке LLM вы узнаете:

  • Что такое контролируемая тонкая настройка в контексте LLM
  • Какова цель этой практики
  • Ресурсы, необходимые для ее реализации
  • Рабочий процесс для контролируемой тонкой настройки LLM
  • Технические проблемы и соображения при внедрении SFT
  • Пошаговое руководство по воспроизведению контролируемой тонкой настройки на LLM

Давайте погрузимся!

Определение контролируемой точной настройки (SFT) в контексте LLM

Supervised fine-tuning (SFT) – это форма трансферного обучения, применяемая к LLM. Трансферное обучение – это метод машинного обучения, при котором знания, полученные при решении одной задачи, применяются для решения другой, но смежной задачи.

В контексте LLMS контролируемая тонкая настройка подразумевает использование предварительно обученной модели и ее дальнейшее обучение. Для этого вы настраиваете ее параметры, используя набор данных с помеченными примерами, относящимися к конкретной задаче.

“Контролируемый” характер является ключевым в этом процессе, потому что за всем этим стоят инженеры:

  • Они готовят набор данных для тонкой настройки с явными парами вход-выход. Этот набор данных содержит “правильные ответы”, которые направляют обучение модели на конкретные подсказки.
  • Они курируют весь процесс тонкой настройки – от установки до мониторинга и проверки.

В отличие от RAG(Retrieval-Augmented Generation), тонкая настройка изменяет саму модель. RAG оставляет модель нетронутой и просто снабжает ее новой релевантной информацией. Вместо этого тонкая настройка включает в себя новый процесс обучения.

Какова цель контролируемой тонкой настройки в LLM?

Основная цель контролируемой тонкой настройки – улучшить производительность LLM на конкретных задачах, выходящих за рамки его общих предварительно обученных возможностей. К ним относятся:

  • Специализация задач: Сделайте модель способной решать такие задачи, как резюмирование текста, генерация кода для определенного языка, анализ настроения и другие.
  • Адаптация к конкретной области: Наполните модель знаниями и терминологией, характерными для нишевых областей. Распространенными примерами являются анализ юридических документов, составление медицинских заключений и финансовое прогнозирование.
  • Выравнивание тона: Обучите модель принимать последовательный голос бренда, уровень формальности или конкретную разговорную личность, необходимую для таких приложений, как чат-боты.

Что нужно для осуществления тонкой настройки

В этот момент вы можете задаться вопросом: почему бы не обучить LLM этому с самого начала? Причина проста. Обучение LLM включает в себя:

  • Огромный объем данных, часто хранящийся в нескольких центрах обработки данных.
  • Много аппаратуры.
  • Вкладывая много денег и времени.

Для обучения таких моделей, как ChatGPT, Gemini и им подобных, вам потребуется:

  • Несколько месяцев, а то и лет.
  • Множество графических процессоров, каждый из которых стоит тысячи долларов, распределенных по нескольким центрам обработки данных.

Для тонкой настройки вам понадобятся всего три вещи:

  1. Предварительно обученная модель.
  2. Компьютер.
  3. Небольшой набор данных с метками.

Теперь должно быть понятно, почему тонкая настройка так удобна.

Механика, лежащая в основе рабочего процесса контролируемой тонкой настройки

Выполнение контролируемого процесса тонкой настройки включает в себя несколько технических этапов. Пора разложить весь процесс по полочкам!

Шаг № 1: Создание высококачественного набора данных SFT

Эффективность процесса в значительной степени зависит от качества и релевантности набора данных для тонкой настройки. Это включает в себя:

  • Поиск данных: Получите необработанные данные, относящиеся к целевой задаче, используя один из многочисленных методов поиска данных. Объем данных может составлять от сотен до десятков тысяч строк. Это зависит от сложности задачи и предварительно обученной модели.
  • Структурирование данных: Преобразование исходных данных в структурированный формат, подходящий для процесса SFT. Одним из типичных форматов является JSON Lines (JSONL), где каждая строка представляет собой JSON-объект, содержащий отдельные поля для входных и желаемых выходных данных.
  • Обеспечение качества: Убедитесь, что данные точны, непротиворечивы, разнообразны и не содержат предвзятости, которая может негативно повлиять на поведение модели.

Шаг № 2: Выберите подходящую предварительно обученную модель

Существует несколько предварительно обученных моделей. Чтобы выбрать лучшую для вашего случая, необходимо учитывать следующие факторы:

  • Размер модели: Обозначается количеством параметров (например, 7B, 13B, 70B) и соотносится со способностью модели к изучению сложных паттернов и нюансов. Более крупные модели обычно обладают более высокой производительностью, но требуют больше аппаратных ресурсов для тонкой настройки.
  • Архитектура: Конкретная архитектура может подходить для решения определенных задач. Например
    :Polylang placeholder do not modify
  • Базовые возможности: Прежде чем приступать к тонкой настройке, оцените производительность предварительно обученной модели на академических эталонах, соответствующих вашей целевой задаче. Это обеспечит базовый уровень и покажет пригодность модели. Например
    :Polylang placeholder do not modify
  • Лицензирование: Лицензия, под которой выпускается модель, определяет, как ее можно использовать, изменять и распространять. Некоторые модели имеют разрешение на использование с открытым исходным кодом, а другие – нет.
  • Существующие тонкие настройки: Иногда запуск модели, уже прошедшей тонкую настройку для соответствующей задачи, может быть более эффективным, чем запуск исходной базовой модели. Это одна из форм промежуточной тонкой настройки.

Шаг № 3: Реализуйте цикл обучения

Суть процесса заключается в итерационном просмотре помеченного набора данных и корректировке весов модели следующим образом:

  • Передача вперед: Модель обрабатывает входной сигнал (подсказку) из набора данных SFT и генерирует выходной сигнал.
  • Расчет потерь: Функция потерь сравнивает сгенерированный моделью результат, токен за токеном, с целевым результатом, представленным в наборе данных. Это полезно для количественной оценки ошибки.
  • Обратный проход (обратное распространение): Рассчитанные потери используются для вычисления градиентов, показывающих, какой вклад в ошибку внес каждый вес модели.
  • Обновление весов: алгоритм оптимизатора использует градиенты и заданную скорость обучения для корректировки весов модели. Цель – минимизировать ошибки на последующих итерациях.
  • Настройка гиперпараметров: Параметры, управляющие процессом обучения, настраиваются для улучшения производительности модели.

Шаг № 4: Оцените результаты

На заключительном этапе необходимо оценить эффективность доработанной модели. Это включает в себя:

  • Валидационный набор: Часть помеченного набора данных должна использоваться для контроля прогресса и предотвращения перебора.
  • Тестовый набор: Вам нужен набор данных, содержащий новые и не увиденные моделью данные, который может быть подмножеством набора данных для тонкой настройки. Этот шаг выполняется для окончательной оценки после завершения тонкой настройки.
  • Метрики: Определите количественные показатели, относящиеся к задаче, чтобы оценить ее выполнение.
  • Качественный анализ: Анализ результатов моделирования для оценки согласованности, релевантности, соблюдения стиля и безопасности.

Технические проблемы и соображения при внедрении SFT

Реализация SFT сопряжена с рядом технических проблем, таких как:

  • Качество и масштаб базы данных: Наиболее серьезной проблемой является создание или поиск достаточно большого, качественного и репрезентативного набора данных с метками. Низкое качество данных напрямую влияет на низкую производительность модели. Извлечение, очистка, маркировка, агрегирование и форматирование данных требуют значительных усилий и специальных знаний в данной области.
  • Смягчение катастрофического забывания: Интенсивная тонкая настройка на конкретной задаче может привести к тому, что модель “забудет” некоторые из своих общих возможностей, полученных во время предварительного обучения. Такие стратегии, как использование более низких скоростей обучения, тонкая настройка в течение меньшего количества эпох или использование разнообразных данных, могут помочь смягчить это явление.
  • Стратегии оптимизации гиперпараметров: Поиск оптимального набора гиперпараметров – это эмпирический процесс. Это требует проведения множества экспериментов и тщательного контроля за показателями валидации. Автоматизированные системы настройки гиперпараметров могут помочь, но они усложняют процесс.

Контролируемая точная настройка LLM: Пошаговое руководство

Пора применить теорию на практике. В этом разделе мы расскажем вам о тонкой настройке легкого LLM, чтобы вы могли использовать свой компьютер без дополнительного оборудования. Задача состоит в том, чтобы настроить LLM для создания описаний товаров электронной коммерции, задав им список характеристик.

В качестве LLM вы будете использовать DistilGPT2, который представляет собой дистиллированную версию GPT-2 с меньшим размером и эффективностью.

Давайте доработаем выбранную модель!

Пререквизиты

Чтобы повторить этот урок по контролируемой тонкой настройке LLM, на вашей машине должен быть установлен Python версии 3.10+.

Для тонкой настройки вам также понадобится набор данных CSV. Здесь мы будем использовать пользовательский набор данных, содержащий данные о товарах электронной коммерции. Набор данных содержит следующие поля для каждого продукта:

  • Категория: Электроника, книги, кухня и подобное.
  • Название: Название продукта.
  • Характеристики: Основные характеристики продукта.
  • Цвет: Цвет изделия.
  • Описание: Текст, описывающий, что представляет собой продукт или что он делает.

Ниже приведено изображение, на котором показан пример используемых данных:

Образец набора данных, используемого для тонкой настройки

Шаг №1: Начните

Предположим, что вы назвали главную папку своего проекта fine_tuning/. По завершении этого шага папка будет иметь следующую структуру:

fine_tuning/
    ├── data/
    |   └── data.csv
    ├── results_distilgpt2/
    ├── tuning.py
    └── venv/

Где:

  • data.csv содержит помеченные данные для точной настройки LLM, представленной ранее.
  • results_distilgpts/ – это папка, в которой будут храниться результаты. Она будет создана автоматически в процессе работы.
  • tuning.py – это файл Python, содержащий всю логику.
  • venv/ содержит виртуальное окружение.

Вы можете создать каталог виртуальной среды venv/ следующим образом:

python -m venv venv

Чтобы активировать его, в Windows выполните команду:

venv\Scripts\activate

Эквивалентно, на macOS/Linux выполните команду:

source venv/bin/activate

В активированной виртуальной среде установите библиотеки, необходимые для этого урока:

pip install transformers datasets torch trl  

В этом проекте используются следующие библиотеки:

  • transformers: библиотека Hugging Face для самых современных моделей машинного обучения.
  • datasets: Библиотека Hugging Face для доступа к наборам данных и их обработки.
  • torch: PyTorch, фреймворк машинного обучения с открытым исходным кодом.
  • trl: Библиотека Hugging Face’s Transformer Reinforcement Learning, которая включает в себя инструменты для SFT, такие как SFTTrainer.

Отлично! Ваша среда Python для тонкой настройки LLM настроена правильно.

Шаг № 2: Первоначальная настройка, загрузка данных и форматирование текста

В качестве первого шага в файле tuning.py необходимо настроить весь процесс:

import os
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, pipeline
from trl import SFTTrainer

# Configure parameters
base_model_name = "distilgpt2"  # Pre-trained model to be fine-tuned
data_file_path = "data/data.csv" # Path to your CSV data file
output_model_dir = "./results_distilgpt2"  # Directory to save training results and checkpoints
final_model_path = os.path.join(output_model_dir, "final_model") # Path to save the final fine-tuned model
max_seq_length_for_tokenization = 512 # Maximum sequence length for tokenizing inputs

# Load dataset
raw_dataset = load_dataset("csv", data_files=data_file_path)

# Define a function to format entries into a prompt-completion pair
def format_dataset_entry(data_item):
    prompt_template = "Generate a product description for the following item:\nFeatures: {features_data}\n\nDescription:"
    data_item["text"] = prompt_template.format(features_data=data_item["features"]) + " " + data_item["description"]
    return data_item

# Apply the formatting function to the train split of the dataset
text_formatted_dataset = raw_dataset["train"].map(format_dataset_entry)

Этот фрагмент:

  • Определяет имя LLM для использования с base_model_name.
  • Определяет путь, по которому находится CSV-файл, и открывает его методом load_dataset().
  • Создает папку, в которой будут храниться результаты(results_distilgpt2/).
  • Создает функцию format_dataset_entry(), которая преобразует каждую строку из raw_dataset в текстовый формат для тонкой настройки. Она также добавляет измененное содержимое в колонку “описание” в CSV, заменяя текущее. Это обеспечит модель очищенными текстовыми описаниями.
  • Применяет функцию format_dataset_entry() к каждому элементу тренировочного разделенного набора данных с помощью метода map().

Отлично! Вы завершили начальную настройку процесса.

Шаг № 3: Токенизация набора данных

Языковые модели не понимают необработанный текст. Они оперируют числовыми представлениями, называемыми лексемами. Этот шаг включает загрузку предварительно обученного токенизатора и его использование для преобразования форматированных текстовых записей в последовательности идентификаторов токенов:

# Load the tokenizer associated with the base model
tokenizer = AutoTokenizer.from_pretrained(base_model_name)
tokenizer.pad_token = tokenizer.eos_token # Padding token

# Define a function to tokenize the "text" field of the dataset
def tokenize_function(data_items_batch):
    return tokenizer(
        data_items_batch["text"],
        truncation=True,
        padding="max_length",
        max_length=max_seq_length_for_tokenization,
    )

# Apply the tokenization function to the formatted dataset
tokenized_dataset = text_formatted_dataset.map(
    tokenize_function,
    batched=True,
    remove_columns=text_formatted_dataset.column_names
)

Приведенный выше код выполняет следующие действия:

  • Загружает токенизатор, связанный с именем base_model_name, с помощью метода AutoTokenizer.from_pretrained().
  • Определяет маркер подстановки, чтобы сделать все входные последовательности одинаковой длины при подаче их в модель.
  • Токенизирует набор данных с помощью пользовательской функции tokenize_function() и применяет токенизацию к набору данных.

Замечательно! Набор данных токенизирован.

Шаг № 4: Настройка и запуск процесса тонкой настройки

Набор данных подготовлен и токенизирован, так что теперь можно переходить к основной задаче тонкой настройки:

# Load the pre-trained language model
model = AutoModelForCausalLM.from_pretrained(base_model_name)

# Define training arguments for the SFTTrainer
training_args = TrainingArguments(
    output_dir=output_model_dir,
    num_train_epochs=3,
    per_device_train_batch_size=1,
    learning_rate=2e-5,
    logging_steps=10,
    save_steps=50,
    report_to="none",
)

# Initialize the SFTTrainer
trainer = SFTTrainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_dataset,
)

# Begin the training process
trainer.train()

# Save the fine-tuned model and tokenizer to the specified path
trainer.save_model(final_model_path)
tokenizer.save_pretrained(final_model_path)

Этот код:

  • Загружает базовую модель с помощью метода AutoModelForCausalLM.from_pretrained().
  • Определяет настройки процесса, такие как количество эпох, размер партии и скорость обучения, с помощью метода TrainingArguments().
  • Инициализирует и запускает SFTTrainer(), предоставляя модели токенизированный набор данных и аргументы для обучения. Это управляет фактическим циклом тонкой настройки.
  • Обучает модель и сохраняет результаты в специальной папке.

Фантастика! Вы начали процесс тонкой настройки.

Шаг № 5: Оценка и тестирование уточненной модели

Теперь вам нужно оценить производительность и посмотреть, насколько хорошо модель генерирует описания для новых, невидимых особенностей продукта:

# Load the fine-tuned model and tokenizer for testing
fine_tuned_model_for_testing = AutoModelForCausalLM.from_pretrained(final_model_path)
fine_tuned_tokenizer_for_testing = AutoTokenizer.from_pretrained(final_model_path)

# Create a text-generation pipeline with the fine-tuned model
generator_fine_tuned = pipeline("text-generation", model=fine_tuned_model_for_testing, tokenizer=fine_tuned_tokenizer_for_testing)

# Define example product features for testing
test_product_features = [
    "Category: Kitchen, Name: Electric Kettle, Features: 1.7L capacity, Stainless steel, Auto shut-off, Boil-dry protection, Color: Silver",
    "Category: Office, Name: Ergonomic Office Chair, Features: Lumbar support, Adjustable height, Mesh back, Swivel, Color: Black"
]

# Define the prompt template
prompt_template_inference = "Generate a product description for the following item:\nFeatures: {features}\n\nDescription:"

# Generate descriptions for each test item
for features_item in test_product_features:
    full_prompt = prompt_template_inference.format(features=features_item)
    print(f"\nPROMPT:\n{full_prompt}")

    generated_outputs = generator_fine_tuned(
        full_prompt,
        max_new_tokens=70,
        num_return_sequences=1,
        pad_token_id=fine_tuned_tokenizer_for_testing.eos_token_id,
        eos_token_id=fine_tuned_tokenizer_for_testing.eos_token_id
    )
    print(f"GENERATED (Fine-tuned):\n{generated_outputs[0]['generated_text']}")

Этот фрагмент выполняет следующие действия:

  • Загружает настроенную модель и токенизатор.
  • Создает конвейер для генерации текста с точно настроенной моделью с помощью метода pipeline().
  • Определяет список, в котором содержатся новые, невидимые описания продуктов для подачи и оценки тонкой настройки модели с помощью test_product_features.
  • Генерирует описания для каждого элемента теста в цикле for.
  • Выводит сгенерированные описания по модели с точной настройкой.

Круто! Вы создали конвейер для тестирования и оценки работы модели.

Шаг №6: Соберите все вместе

Теперь ваш файл tuning.py должен содержать:

import os
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, pipeline
from trl import SFTTrainer

# Configure parameters
base_model_name = "distilgpt2"  # Pre-trained model
data_file_path = "data/data.csv" # Path to data
output_model_dir = "./results_distilgpt2"  # Directory to save results and checkpoints
final_model_path = os.path.join(output_model_dir, "final_model") # Path to save the final fine-tuned model
max_seq_length_for_tokenization = 512 # Maximum length for tokenizing inputs

# Load dataset
raw_dataset = load_dataset("csv", data_files=data_file_path)

# Define a function to format entries into a prompt-completion pair
def format_dataset_entry(data_item):
    prompt_template = "Generate a product description for the following item:\nFeatures: {features_data}\n\nDescription:"
    data_item["text"] = prompt_template.format(features_data=data_item["features"]) + " " + data_item["description"]
    return data_item

# Apply the formatting function to the train split of the dataset
text_formatted_dataset = raw_dataset["train"].map(format_dataset_entry)

# Load the tokenizer associated with the base model
tokenizer = AutoTokenizer.from_pretrained(base_model_name)
tokenizer.pad_token = tokenizer.eos_token

# Define a function to tokenize the "text" field of the dataset
def tokenize_function(data_items_batch):
    return tokenizer(
        data_items_batch["text"],
        truncation=True,
        padding="max_length",
        max_length=max_seq_length_for_tokenization,
    )

# Apply the tokenization function to the formatted dataset
tokenized_dataset = text_formatted_dataset.map(
    tokenize_function,
    batched=True,
    remove_columns=text_formatted_dataset.column_names
)

# Load the pre-trained language model
model = AutoModelForCausalLM.from_pretrained(base_model_name)

# Define training arguments for the SFTTrainer
training_args = TrainingArguments(
    output_dir=output_model_dir,
    num_train_epochs=3,
    per_device_train_batch_size=1,
    learning_rate=2e-5,
    logging_steps=10,
    save_steps=50,
    report_to="none",
)

# Initialize the SFTTrainer
trainer = SFTTrainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_dataset,
)

# Begin the training process
trainer.train()

# Save the fine-tuned model and tokenizer to the specified path
trainer.save_model(final_model_path)
tokenizer.save_pretrained(final_model_path)

# Load the fine-tuned model and tokenizer for testing
fine_tuned_model_for_testing = AutoModelForCausalLM.from_pretrained(final_model_path)
fine_tuned_tokenizer_for_testing = AutoTokenizer.from_pretrained(final_model_path)

# Create a text-generation pipeline with the fine-tuned model
generator_fine_tuned = pipeline("text-generation", model=fine_tuned_model_for_testing, tokenizer=fine_tuned_tokenizer_for_testing)

# Define example product features for testing
test_product_features = [
    "Category: Kitchen, Name: Electric Kettle, Features: 1.7L capacity, Stainless steel, Auto shut-off, Boil-dry protection, Color: Silver",
    "Category: Office, Name: Ergonomic Office Chair, Features: Lumbar support, Adjustable height, Mesh back, Swivel, Color: Black"
]

# Define the prompt template
prompt_template_inference = "Generate a product description for the following item:\nFeatures: {features}\n\nDescription:"

# Generate descriptions for each test item
for features_item in test_product_features:
    full_prompt = prompt_template_inference.format(features=features_item)
    print(f"\nPROMPT:\n{full_prompt}")

    generated_outputs = generator_fine_tuned(
        full_prompt,
        max_new_tokens=70,
        num_return_sequences=1,
        pad_token_id=fine_tuned_tokenizer_for_testing.eos_token_id,
        eos_token_id=fine_tuned_tokenizer_for_testing.eos_token_id
    )
    print(f"GENERATED (Fine-tuned):\n{generated_outputs[0]['generated_text']}")

Запустите свой код с помощью:

python tuning.py

Ожидаемый результат будет выглядеть следующим образом:

Ожидаемый результат при использовании CSV из 300 строк

Как показано на рисунке, подсказка просит модель создать описание для электрического чайника, предоставляя необходимую информацию. Модель создает описание, как и ожидалось. Если разложить этот результат на части, то можно увидеть:

  • Генерируемое название продукта: генерируется название продукта “ProChef Luxury Living Hood Series X”, которое звучит правдоподобно для кухонного предмета, и описание.
  • Противоречивая деталь: В завершение написано “Доступен в потрясающей отделке Pure White”, что противоречит “Цвет: серебристый”, указанному в характеристиках. Таким образом, хотя тонкая настройка и направляет модель, она не гарантирует идеальной согласованности. Особенно это касается небольших моделей и ограниченного количества тренировок.

Несовершенства и противоречия типичны для генеративных моделей, особенно для таких небольших, как distilgpt2. Они также могут зависеть от размера и качества набора данных для тонкой настройки, а также от количества эпох обучения. В данном случае используемый набор данных содержит всего 300 строк. Больший набор данных позволил бы получить более точное описание чайника.

Чтобы показать потерю качества, ниже приведен ожидаемый результат с CSV, содержащим всего 5 строк:

Ожидаемый результат при использовании CSV из 300 строк

Как видите, в результате получилась полная галлюцинация. Если разложить все по полочкам:

  • Сгенерированное название продукта: ****It называет продукт “Офисное кресло” вместо “Эргономичное офисное кресло” в первой фразе.
  • Противоречивая деталь: ****Во второй фразе название становится “Lumbar”. Таким образом, модель путает название с характеристикой (“поясничная поддержка”).
  • Несогласованная грамматика: обе фразы имеют несогласованную и неправильную грамматику.
  • Отсутствующие характеристики: Цвет и характеристики (“Поясничная поддержка”, “Регулируемая высота”, “Поворот”) не указаны в описании.

Однако если предоставить тот же запрос модели distilgpt2 без процесса тонкой настройки, результат будет значительно хуже. Это происходит потому, что данная модель не была обучена на столь специфических данных. Например, она не смогла бы дать описание чайника.

Обратите внимание, что по завершении процесса код автоматически создаст папку results_distilgpt2/. В ней будут храниться результаты. Внутри нее вы найдете вложенные папки, которые сообщают о результатах, сохраненных моделью в разные эпохи:

Папка с результатами, сохраненными моделью

Это полезно, если вы хотите получить любую из них в качестве контрольных точек и использовать их по своему усмотрению.

И вуаля! Тонкая настройка LLM завершена.

Заключение

В этой статье вы узнали, что такое контролируемая тонкая настройка в контексте LLM. Вы также прошли через пошаговый процесс воспроизведения процесса тонкой настройки.

Основой SFT является наличие высококачественных наборов данных для точной настройки моделей. К счастью, Bright Data предлагает вам множество услуг по получению и созданию наборов данных:

  • Браузер для скрапинга: Браузер, совместимый с Playwright, Selenium и Puppeter, со встроенными возможностями разблокировки.
  • API для веб-скреперов: Предварительно настроенные API для извлечения структурированных данных из 100+ основных доменов.
  • Web Unlocker: Универсальный API, позволяющий разблокировать сайты с защитой от ботов.
  • SERP API: Специализированный API, который открывает результаты поисковых систем и извлекает полные данные SERP.
  • Базовые модели: Доступ к совместимым наборам данных веб-масштаба для предварительного обучения, оценки и тонкой настройки.
  • Поставщики данных: Подключайтесь к надежным поставщикам, чтобы получать высококачественные, готовые к искусственному интеллекту наборы данных в масштабе.
  • Пакеты данных: Получите готовые к использованию наборы данных – структурированные, обогащенные и аннотированные.

Создайте бесплатную учетную запись Bright Data, чтобы испытать наши услуги по извлечению данных и изучить наш рынок наборов данных!

Кредитная карта не требуется

Вас также может заинтересовать

Building AI-Ready Vector Datasets for LLMs blog image
AI

Создание готовых для ИИ векторных данных для магистрантов: Руководство по использованию Bright Data, Google Gemini и Pinecone

Большие языковые модели (LLM) меняют способы доступа к информации и создания интеллектуальных приложений. Чтобы полностью использовать их потенциал, особенно при работе со специфическими знаниями или собственными данными, очень важно создавать высококачественные структурированные векторные наборы данных. Производительность и точность LLM напрямую зависят от качества исходных данных. Плохо подготовленные наборы данных могут привести к некачественным результатам, в […]
7 мин. чтения
How to Bypass Amazon CAPTCHA blog image
Веб-данные

Как избежать CAPTCHA от Amazon: руководство 2025

Узнайте три проверенных метода обхода Amazon CAPTCHA и оптимизируйте свой рабочий процесс веб-скреппинга.
3 мин. чтения
Scrapy vs Playwright blog image
Веб-данные

Scrapy против Playwright: Сравнение для веб-скрапинга

Изучите ключевые различия и преимущества использования Scrapy и Playwright для эффективного веб-скраппинга.
6 мин. чтения