Инструменты ИИ 101

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

mm
Добавьте Unite.AI в избранные источники в Google
HUGGING FACE - COMPLETE GUIDE

Hugging Face – это исследовательская лаборатория и центр, который создал сообщество ученых, исследователей и энтузиастов. За короткий период времени Hugging Face приобрел значительное присутствие в области ИИ. Технологические гиганты , включая Google (GOOGL ), Amazon (AMZN ) и Nvidia (NVDA ), инвестировали в стартап Hugging Face, сделав его оценку 4,5 миллиарда долларов.

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

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

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

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

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

Как Hugging облегчает проекты NLP и LLM

Hugging face Ecosystem - Models, dataset, metrics, transformers, accelerate, tokenizers

Hugging Face сделал работу с LLM проще, предлагая:

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

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

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

  • 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” модели не получают примеров и должны полагаться исключительно на свои предварительные знания для ответа соответствующим образом.

Компоненты Hugging

Конвейеры

‘Конвейеры’ – это часть библиотеки трансформеров Hugging Face, функция, которая помогает в легком использовании предобученных моделей, доступных в репозитории Hugging Face. Это предоставляет интуитивно понятный API для ряда задач, включая анализ настроений, ответы на вопросы, моделирование языка с масками, распознавание именованных сущностей и суммирование.

Конвейеры интегрируют три основных компонента Hugging Face:

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

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

Применения трансформеров с помощью библиотеки Hugging

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

pip install -q transformers
from transformers import pipeline

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

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

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

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

classifier = pipeline("text-classification")

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

sentences = ["Я рад представить вам удивительный мир ИИ.",
"Надеюсь, он не разочарует вас."]

<p># Получите результаты классификации для каждой строки в списке
results = classifier(sentences)</p>

<p># Переберите каждое результат и распечатайте метку и оценку
for i, result in enumerate(results):
print(f"Результат {i + 1}:")
print(f" Метка: {result['label']}")
print(f" Оценка: {round(result['score'], 3)}\n")

Вывод

Результат 1:
Метка: Положительная
Оценка: 1.0

<p>Результат 2:
Метка: Положительная
Оценка: 0.996

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

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

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

Вывод

 Илон Маск: PER, SpaceX: ORG 

Ответы на вопросы

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

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': 'Нью-Йорк'} 

Функция pipeline() 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 смещает фокус на Rust

Hugging face Safetensors и токенизатор Rust

Hugging face Safetensors и токенизатор GitHub Page

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

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

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

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

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

Safetensors

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

Токенизатор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

from transformers import AutoModelForQuestionAnswering, AutoTokenizer

<p># Загрузите предобученную модель и токенизатор
model = AutoModelForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
tokenizer = AutoTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')</p>

<p># Отобразите архитектуру модели
print(model)</p>

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


<p>def get_answer(text, question):
# Токенизируйте входной текст и вопрос
inputs = tokenizer(question, text, return_tensors='pt', max_length=512, truncation=True)
outputs = model(**inputs)</p>

<p> # Получите начальные и конечные баллы для ответа
answer_start = torch.argmax(outputs.start_logits)
answer_end = torch.argmax(outputs.end_logits) + 1</p>

<p> answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][answer_start:answer_end]))
return answer</p>

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

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


<p>text = """
The Eiffel Tower, located in Paris, France, is one of the most iconic landmarks in the world. It was designed by Gustave Eiffel and completed in 1889. The tower stands at a height of 324 meters and was the tallest man-made structure in the world at the time of its completion.
"""</p>

<p>question = "Who designed the Eiffel Tower?"</p>

<p># Получите ответ на вопрос
answer = get_answer(text, question)
print(f"The answer to the question is: {answer}")
# Output: The answer to the question is: Gustave Eiffel</p>

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

Заключение

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

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