Інструменти ШІ 101

Повний посібник для початківців з інструментами Hugging Face LLM

mm
HUGGING FACE - COMPLETE GUIDE

Hugging Face є лабораторією штучного інтелекту та хабом, який створив спільноту вчених, дослідників та ентузіастів. За короткий період часу Hugging Face здобув суттєву присутність у сфері штучного інтелекту. Технологічні гіганти, включаючи Google, Amazon та Nvidia, підтримали стартап Hugging Face значними інвестиціями, що зробило його оцінку 4,5 мільярда доларів.

У цьому посібнику ми познайомимо вас з трансформерами, LLM та тим, як бібліотека Hugging Face відіграє важливу роль у розвитку відкритої спільноти штучного інтелекту. Ми також пройдемо через основні функції Hugging Face, включаючи конвеєри, набори даних, моделі та інше, з практичними прикладами на Python.

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

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

Великі мовні моделі або LLM – це системи штучного інтелекту, які використовують трансформери для розуміння та створення тексту, подібного до людського. Однак створення цих моделей є дорогим, часто вимагаючи мільйонів доларів, що обмежує їх доступність великими компаніями.

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

Як Hugging Face сприяє проектам NLP та LLM

Hugging face Екосистема - Моделі, набори даних, метрики, трансформери, прискорювачі, токенізаційні засоби

Hugging Face зробив роботу з LLM простішою, пропонуючи:

  1. Широкий вибір попередньо навчених моделей для вибору.
  2. Інструменти та приклади для донастройки цих моделей до ваших конкретних потреб.
  3. Легкі варіанти розгортання для різних середовищ.

Відмінний ресурс, доступний через Hugging Face, – це Відкритий лідерборд LLM. Це комплексна платформа, яка систематично контролює, ранжує та оцінює ефективність спектру великих мовних моделей (LLM) та чат-ботів, забезпечуючи розбором досягнень у відкритому домені

LLM Бенчмарки вимірюють моделі чотирма метриками:

  • Виклик до розуміння AI2 (25-зразковий) – серія питань навколо початкової науки.
  • HellaSwag (10-зразковий) – тест на здогадування, який, хоча простий для людей, є суттєвим викликом для передових моделей.
  • MMLU (5-зразковий) – багатовимірна оцінка, яка торкається здібностей текстової моделі в 57 різних галузях, включаючи базову математику, право та комп’ютерні науки тощо.
  • TruthfulQA (0-зразковий) – інструмент для визначення схильності моделі повторювати часто зустрічається в Інтернеті дезінформацію.

Бенчмарки, які описуються термінами “25-зразковий”, “10-зразковий”, “5-зразковий” та “0-зразковий”, вказують на кількість прикладів запиту, які надаються моделі під час процесу оцінки для визначення її продуктивності та здібностей до висновків у різних галузях. У “фью-зразкових” парадигмах моделям надається невелика кількість прикладів для допомоги у відповідях, тоді як у “0-зразковому” режимі моделі не отримують жодних прикладів і повинні покладатися виключно на свої попередні знання для відповіді належним чином.

Компоненти Hugging Face

Конвеєри

‘конвеєри‘ – це частина бібліотеки трансформерів Hugging Face – функція, яка допомагає у легкому використанні попередньо навчених моделей, доступних у репозиторії Hugging Face. Це надає інтуїтивний API для ряду завдань, включаючи аналіз настрою, відповіді на питання, масковане моделювання мови, розпізнавання іменованих сутностей та підсумовування.

Конвеєри інтегрують три центральні компоненти Hugging Face:

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

Ці конвеєри не тільки зменшують обсяг кодування, але також пропонують користувальницький інтерфейс для виконання різних завдань NLP.

Застосування трансформерів за допомогою бібліотеки Hugging Face

Однією з видатних особливостей бібліотеки Hugging Face є бібліотека Трансформерів, яка спрощує завдання 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)

Вихід

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

Відповіді на питання

Відповіді на питання включають видобування точних відповідей на конкретні питання з даного контексту. Ініціюйте конвеєр відповідей на питання та введіть свій запит та контекст, щоб отримати бажану відповідь:

reader = pipeline("question-answering")
text = "Hugging Face - це компанія, яка створює інструменти для NLP. Вона розташована в Нью-Йорку та була заснована у 2016 році."
question = "Де розташована Hugging Face?"
outputs = reader(question=question, context=text)
print(outputs)

Вихід

 { 'рахунок': 0.998, 'початок': 51, 'кінець': 60, 'відповідь': 'Нью-Йорк'} 

Функція pipeline() Hugging Face пропонує ряд попередньо створених конвеєрів для різних завдань, окрім класифікації тексту, NER та відповідей на питання. Нижче наведено деталі щодо підмножини доступних завдань:

Таблиця: Завдання конвеєрів Hugging Face

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

 

Для детального опису та більшої кількості завдань зверніться до документації конвеєрів на сайті Hugging Face.

Чому Hugging Face зміщує свій фокус на Rust

Hugging face Safetensors і токенізаційний засіб Rust

Hugging face Safetensors і токенізаційний засіб GitHub Сторінка

Екосистема Hugging Face (HF) почала використовувати Rust у своїх бібліотеках, таких як safesensors і tokenizers.

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 сприяє цьому процесу, прискорюючи час виконання, забезпечуючи, що процес токенізації не тільки точний, але також швидкий, підвищуючи ефективність завдань природної мови.
На основі токенізаційного засобу Hugging Face лежить концепція субсловної токенізації, яка знаходить деликатний баланс між словесною та символічною токенізацією для оптимізації збереження інформації та розміру словника. Це відбувається через створення субтокенів, таких як “##ing” та “##ed”, зберігаючи семантичну багатість, одночасно уникнувши розширення словника.

Субсловна токенізація включає фазу навчання для визначення найбільш ефективного балансу між символічною та словесною токенізацією. Це виходить за рамки простих префіксних та суфіксних правил, вимагаючи всебічного аналізу мовних закономірностей у великих текстових корпусах для проектування ефективного субсловного токенізаційного засобу. Генерований токенізаційний засіб здатний обробляти нові слова, розбиваючи їх на відомі субтокени, зберігаючи високий рівень семантичного розуміння.

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

Бібліотека токенізаційних засобів Hugging Face розділяє процес токенізації на кілька етапів, кожний з яких займається окремим аспектом токенізації. Давайте розглянемо ці компоненти:

  • Нормалізатор: Виконує початкові перетворення вхідного рядка, застосовуючи необхідні корекції, такі як перетворення у нижній регістр, уніфіковану нормалізацію Юнікоду та видалення.
  • Попередній токенізаційний засіб: Відповідає за фрагментацію вхідного рядка на попередні сегменти, визначаючи розриви на основі попередньо визначених правил, таких як розриви, позначені пробілами.
  • Модель: Керує відкриттям та створенням субтокенів, адаптуючись до особливостей вашого вхідного даних та пропонуючи можливості навчання.
  • Постпроцесор: Покращує конструктивні функції для забезпечення сумісності з багатьма моделями, заснованими на трансформерах, такими як 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

# Завантажте попередньо навчену модель та токенізаційний засіб
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

У кодовому фрагменті ми імпортуємо необхідні модулі з пакету трансформерів, потім завантажуємо попередньо навчену модель та її відповідний токенізаційний засіб за допомогою методу from_pretrained. Ми вибираємо модель BERT, донастроєну на наборі даних SQuAD.

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


text = """
Ейфелева вежа, розташована в Парижі, Франції, є однією з найвідоміших пам'яток світу. Вона була спроектована Густавом Ейфелем та завершена у 1889 році. Вежа має висоту 324 метри та була найвищою спорудою світу на момент її завершення.
"""

question = "Хто спроектував Ейфелеву вежу?"

# Отримайте відповідь на запит
answer = get_answer(text, question)
print(f"Відповідь на запит: {answer}")
# Вихід: Відповідь на запит: Густав Ейфель

У цьому скрипті ми будуємо функцію get_answer, яка приймає текст та запит, токенізаційний засіб їх належним чином, та використовує попередньо навчену модель BERT для витягнення відповіді з тексту. Це демонструє практичне застосування бібліотеки трансформерів Hugging Face для створення простої, але потужної системи відповідей на питання. Для повного розуміння концепцій рекомендується провести практичний експеримент, використовуючи Google Colab Notebook.

Висновок

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

Я провів останні п'ять років, занурючись у захопливий світ машинного навчання та глибокого навчання. Моя пристрасть та експертиза привели мене до внеску у понад 50 різноманітних проектів програмної інженерії, з особливим акцентом на AI/ML. Моя триваюча цікавість також привела мене до обробки природної мови, галузі, яку я бажаю дослідити далі.