Полное руководство для начинающих по инструментам Hugging Face LLM

Полное руководство для начинающих по инструментам Hugging Face LLM' - 'Comprehensive beginner's guide to Hugging Face LLM tools

Хаггинг Фейс – это исследовательская лаборатория и центр искусственного интеллекта, которые объединяют сообщество ученых, исследователей и энтузиастов. За короткое время Хаггинг Фейс сумел занять значительное место в области искусственного интеллекта. Технологические гиганты, включая Google, Amazon и Nvidia, вложили значительные инвестиции в стартап Хаггинг Фейс, что привело к его оценке в 4,5 миллиарда долларов.

В этом руководстве мы познакомимся с трансформерами, языковыми моделями и тем, как библиотека Хаггинг Фейс играет важную роль в развитии открытого сообщества искусственного интеллекта. Мы также рассмотрим основные функции Хаггинг Фейс, включая конвейеры, наборы данных, модели и многое другое, с примерами на языке Python.

Трансформеры в NLP

В 2017 году Корнельский университет опубликовал влиятельную статью, в которой были представлены трансформеры. Это глубокие модели обучения, используемые в NLP. Это открытие стимулировало развитие больших языковых моделей, таких как ChatGPT.

Большие языковые модели или LLM (Large Language Models) – это системы искусственного интеллекта, которые используют трансформеры для понимания и создания текста, похожего на человеческий. Однако создание этих моделей является дорогостоящим процессом, требующим миллионы долларов, что ограничивает их доступность для крупных компаний.

Хаггинг Фейс, основанный в 2016 году, стремится сделать языковые модели NLP доступными для всех. Несмотря на то, что это коммерческая компания, она предлагает широкий спектр открытых ресурсов, которые помогают людям и организациям доступно создавать и использовать модели трансформеров. Машинное обучение заключается в обучении компьютеров выполнять задачи путем распознавания шаблонов, в то время как глубокое обучение, являющееся подмножеством машинного обучения, создает сеть, которая самостоятельно обучается. Трансформеры – это тип глубокой нейронной архитектуры, эффективно и гибко использующей входные данные, что делает их популярным выбором для создания больших языковых моделей благодаря меньшим требованиям к времени обучения.

Как Хаггинг Фейс облегчает проекты NLP и LLM

Хаггинг Фейс упрощает работу с LLM, предлагая:

  1. Широкий выбор заранее обученных моделей.
  2. Инструменты и примеры для настройки этих моделей под ваши конкретные потребности.
  3. Простые варианты развертывания для различных сред.

Важным ресурсом, доступным через Хаггинг Фейс, является Open LLM Leaderboard. Функционируя как всесторонняя платформа, она систематически отслеживает, ранжирует и оценивает эффективность различных моделей больших языковых моделей (LLMs) и чат-ботов, предоставляя анализ прогресса в области открытого программного обеспечения.

Оценка LLM измеряет модели по четырем метрикам:

  • AI2 Reasoning Challenge (25-shot) – серия вопросов по основам естественных наук.
  • HellaSwag (10-shot) – тест на логическое мышление, который, хотя прост для людей, является значительным вызовом для современных моделей.
  • MMLU (5-shot) – многофакторная оценка, касающаяся уровня компетенции текстовой модели в 57 различных областях знаний, включая основы математики, право и компьютерные науки.
  • TruthfulQA (0-shot) – инструмент для определения склонности модели к повторению часто встречающейся онлайн-дезинформации.

Оценки, описываемые терминами “25-shot”, “10-shot”, “5-shot” и “0-shot”, указывают на количество примеров, которые модель получает во время процесса оценки для определения ее производительности и способности к рассуждению в различных областях. В случае “few-shot” парадигм моделям предоставляется небольшое количество примеров для помощи в формулировке ответов, в то время как в режиме “0-shot” модели не получают никаких примеров и полностью полагаются на свои предварительные знания для адекватного ответа.

Компоненты Хаггинг Фейс

Конвейеры

Конвейеры являются частью библиотеки трансформеров Хаггинг Фейс, представляющей собой функционал, который упрощает использование заранее обученных моделей, доступных в репозитории Хаггинг Фейс. Он предоставляет интуитивный API для выполнения различных задач, включая анализ тональности, ответы на вопросы, маскированное моделирование языка, распознавание именованных сущностей и суммирование.

Конвейеры объединяют три основных компонента Хаггинг Фейс:

  1. Токенизатор: Подготавливает ваш текст для модели, преобразуя его в формат, который модель может понять.
  2. Модель: Это сердце конвейера, где на основе предварительно обработанного входа делаются фактические прогнозы.
  3. Пост-процессор: Преобразует сырые прогнозы модели в форму, понятную человеку.

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

Применение трансформеров с использованием библиотеки Hugging Face

Особенностью библиотеки Hugging Face является библиотека Transformers, которая упрощает задачи NLP, связывая модель с необходимыми этапами предварительной и последующей обработки, упрощая процесс анализа. Чтобы установить и импортировать библиотеку, используйте следующие команды:

pip install -q transformers
from transformers import pipeline

После этого вы можете выполнять задачи NLP, начиная с анализа настроения, который категоризирует текст на положительное или отрицательное настроение. Мощная функция pipeline() библиотеки служит в качестве центра, объединяющего другие конвейеры и облегчающего применение задач в аудио-, видео- и мультимодальных областях.

Практическое применение

Классификация текста

Классификация текста становится легкой с помощью функции pipeline() библиотеки Hugging Face. Вот как можно инициировать конвейер классификации текста:

classifier = pipeline("text-classification")

Для практического опыта подайте строку или список строк в ваш конвейер, чтобы получить предсказания, которые можно красиво визуализировать с помощью библиотеки Pandas Python. Ниже приведен фрагмент кода на Python, демонстрирующий это:

sentences = ["Я рад представить вам замечательный мир искусственного интеллекта.",
"Надеюсь, что вы не разочаруетесь."]
# Получить результаты классификации для каждого предложения в списке
results = classifier(sentences)
# Пройдите по каждому результату и выведите метку и оценку
for i, result in enumerate(results):
print(f"Результат {i + 1}:")
print(f" Метка: {result['label']}")
print(f" Оценка: {round(result['score'], 3)}\n")

Результат

Результат 1: 
Метка: ПОЛОЖИТЕЛЬНЫЙ 
Оценка: 1.0 
Результат 2: 
Метка: ПОЛОЖИТЕЛЬНЫЙ 
Оценка: 0.996 

Распознавание именованных сущностей (NER)

NER является ключевым в извлечении реальных объектов, называемых «именованными сущностями», из текста. Используйте конвейер NER для эффективной идентификации этих сущностей:

ner_tagger = pipeline("ner", aggregation_strategy="simple")
text = "Илон Маск является генеральным директором SpaceX."
outputs = ner_tagger(text)
print(outputs)

Результат

 Результат 1: Метка: ПОЛОЖИТЕЛЬНЫЙ Оценка: 1.0 Результат 2: Метка: ПОЛОЖИТЕЛЬНЫЙ Оценка: 0.996 

Вопросно-ответная система

Вопросно-ответная система предполагает извлечение точных ответов на конкретные вопросы из заданного контекста. Инициализируйте конвейер вопросно-ответных задач и введите свой вопрос и контекст, чтобы получить желаемый ответ:

reader = pipeline("question-answering")
text = "Hugging Face - компания, создающая инструменты для NLP. Она базируется в Нью-Йорке и была основана в 2016 году."
question = "Где базируется Hugging Face?"
outputs = reader(question=question, context=text)
print(outputs)

Результат

 {'score': 0.998, 'start': 51, 'end': 60, 'answer': 'Нью-Йорк'} 

Функция конвейера Hugging Face предлагает множество заранее созданных конвейеров для различных задач, помимо классификации текста, NER и вопросно-ответных систем. Ниже приведены подробности о некоторых доступных задачах:

Таблица: Задачи конвейера Hugging Face

Задача Описание Идентификатор конвейера
Генерация текста Генерация текста на основе заданного начала pipeline(task=“text-generation”)
Суммаризация Суммирование длинного текста или документа pipeline(task=“summarization”)
Классификация изображений Маркировка входного изображения pipeline(task=“image-classification”)
Классификация аудио Категоризация аудиоданных pipeline(task=“audio-classification”)
Визуальный вопросно-ответ Ответ на запрос, используя и изображение, и вопрос pipeline(task=“vqa”)

 

Для подробных описаний и дополнительных задач обратитесь к документации по конвейеру на веб-сайте Hugging Face.

Почему Hugging Face переключает свое внимание на Rust

GitHub-страница Hugging Face Safetensors и Tokenizer

Экосистема Hugging Face (HF) начала использовать Rust в своих библиотеках, таких как Safetensors и Tokenizers.

Недавно Hugging Face также выпустил новый фреймворк машинного обучения под названием Candle. В отличие от традиционных фреймворков, использующих Python, Candle создан на Rust. Цель использования Rust заключается в улучшении производительности и упрощении пользовательского опыта при поддержке операций с графическим ускорителем.

Основная цель Candle – облегчить бессерверное выводимое заключение, обеспечивая возможность развертывания легких двоичных файлов и устраняя использование Python в рабочих процессах, которые иногда замедляются из-за накладных расходов. Этот фреймворк является решением проблем, которые возникают с полными фреймворками машинного обучения, такими как PyTorch, которые являются большими и медленными при создании экземпляров на кластере.

Давайте рассмотрим, почему Rust становится предпочтительным выбором в гораздо большей степени, чем Python.

  1. Скорость и производительность – Rust известен своей невероятной скоростью, превосходящей Python, который традиционно используется в фреймворках машинного обучения. Производительность Python иногда может замедляться из-за его глобального интерпретатора (GIL), но у Rust этой проблемы нет, что обеспечивает более быстрое выполнение задач и, следовательно, улучшает производительность в проектах, где он используется.
  2. Безопасность – Rust обеспечивает гарантии безопасности памяти без сборщика мусора, что является важным аспектом обеспечения безопасности конкурентных систем. Это играет важную роль в областях, таких как Safetensors, где безопасность обработки структур данных является приоритетом.

Safetensors

Safetensors получают преимущества от скорости и функций безопасности Rust. Safetensors включает манипуляцию тензорами, сложной математической сущностью, и использование Rust гарантирует, что операции не только быстрые, но и безопасные, избегая распространенных ошибок и проблем безопасности, которые могут возникнуть при неправильной обработке памяти.

Tokenizer

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

В основе токенизатора Hugging Face лежит концепция подтокенизации (subword tokenization), которая находит деликатный баланс между токенизацией на уровне слов и символов, чтобы оптимизировать сохранение информации и размер словаря. Он функционирует путем создания подтокенов, таких как “##ing” и “##ed”, сохраняя семантическую богатство, при этом избегая раздувания словаря.

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

Компоненты токенизации

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

  • Нормализатор: Производит начальные преобразования строки ввода, применяя необходимые корректировки, такие как преобразование в нижний регистр, нормализацию Unicode и удаление.
  • Предварительный токенизатор: Отвечает за фрагментацию строки ввода на предварительные сегменты, определяя разделения на основе заранее определенных правил, таких как разделение пробелами.
  • Модель: Координирует поиск и создание подтокенов, адаптируясь к особенностям входных данных и предлагая возможности обучения.
  • Пост-процессор: Улучшает функции построения для обеспечения совместимости с множеством моделей на основе трансформаторов, таких как BERT, добавляя токены, такие как [CLS] и [SEP].

Чтобы начать работу с Hugging Face tokenizers, установите библиотеку с помощью команды pip install tokenizers и импортируйте ее в вашу среду Python. Библиотека может токенизировать большие объемы текста за очень короткое время, тем самым экономя ценные вычислительные ресурсы для более интенсивных задач, таких как обучение моделей.

Библиотека tokenizers использует Rust, который наследует синтаксическую схожесть с C++, вводя новые концепции в проектирование языков программирования. В сочетании с привязками к Python, она позволяет насладиться производительностью языка нижнего уровня при работе в среде Python.

Наборы данных

Hugging Face наборы данных

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

from datasets import load_dataset
# Загрузка набора данных
dataset = load_dataset('squad')
# Отображение первой записи
print(dataset[0])

Этот скрипт использует функцию load_dataset для загрузки набора данных SQuAD, который является популярным выбором для задач вопросно-ответной системы.

Использование предобученных моделей и объединение всего вместе

Hugging Face модели

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

from transformers import AutoModelForQuestionAnswering, AutoTokenizer
# Загрузка предобученной модели и токенизатора
model = AutoModelForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
tokenizer = AutoTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
# Отображение архитектуры модели
print(model)

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

def get_answer(text, question):
    # Токенизация входного текста и вопроса
    inputs = tokenizer(question, text, return_tensors='pt', max_length=512, truncation=True)
    outputs = model(**inputs)
    # Получение оценок начала и конца ответа
    answer_start = torch.argmax(outputs.start_logits)
    answer_end = torch.argmax(outputs.end_logits) + 1
    answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][answer_start:answer_end]))
    return answer

В этом фрагменте кода мы импортируем необходимые модули из пакета transformers, затем загружаем предобученную модель и соответствующий токенизатор с использованием метода from_pretrained. Мы выбираем модель BERT, дообученную на наборе данных SQuAD.

Давайте рассмотрим пример использования этой функции, где у нас есть абзац текста, и мы хотим извлечь конкретный ответ на вопрос:

text = """
Эйфелева башня, расположенная в Париже, Франция, является одной из самых известных достопримечательностей в мире. Она была спроектирована Гюставом Эйфелем и завершена в 1889 году. Башня имеет высоту 324 метра и была самой высокой искусственной структурой в мире на момент ее завершения.
"""
question = "Кто спроектировал Эйфелеву башню?"
# Получение ответа на вопрос
answer = get_answer(text, question)
print(f"Ответ на вопрос: {answer}")
# Вывод: Ответ на вопрос: Гюстав Эйфель

В этом скрипте мы создаем функцию get_answer, которая принимает текст и вопрос, токенизирует их соответствующим образом и использует предобученную модель BERT, чтобы извлечь ответ из текста. Это демонстрирует практическое применение библиотеки transformers от Hugging Face для создания простой, но мощной системы вопросно-ответа. Для лучшего понимания концепций рекомендуется провести практические эксперименты с использованием блокнота Google Colab.

Заключение

Благодаря своему обширному набору инструментов с открытым исходным кодом, предварительно обученным моделям и удобным конвейерам, он позволяет как опытным профессионалам, так и новичкам погрузиться в огромный мир искусственного интеллекта с ощущением легкости и понимания. Более того, инициатива по интеграции Rust, благодаря его скорости и функциям безопасности, подчеркивает приверженность Hugging Face к стимулированию инноваций, обеспечивая эффективность и безопасность в приложениях искусственного интеллекта. Преобразующая работа Hugging Face не только демократизирует доступ к инструментам искусственного интеллекта высокого уровня, но и содействует коллаборативной среде для обучения и развития в сфере искусственного интеллекта, способствуя будущему, где искусственный интеллект будет доступен для