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

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 спрощує роботу з LLM, пропонуючи:
- Широкий вибір попередньо натренованих моделей для вибору.
- Інструменти та приклади для налаштування цих моделей під ваші конкретні потреби.
- Легкі варіанти розгортання для різних середовищ.
Одним із корисних ресурсів, доступних через Hugging Face, є Open LLM Leaderboard. Це платформа, яка систематично відстежує, ранжує та оцінює ефективність великих мовних моделей (LLM) та чат-ботів, забезпечуючи детальний аналіз прогресу в області відкритого штучного інтелекту.
LLM Benchmarks оцінює моделі за чотирма метриками:
- AI2 Reasoning Challenge (25-зразок) — серія питань навколо елементарної науки.
- HellaSwag (10-зразок) — тест на здравий глузд, який, хоча й простий для людей, є суттєвим викликом для сучасних моделей.
- MMLU (5-зразок) — багатоманітна оцінка, яка торкається здатності текстової моделі працювати в 57 різних галузях, включаючи базову математику, право та комп’ютерні науки тощо.
- TruthfulQA (0-зразок) — інструмент для визначення схильності моделі повторювати часто зустрічається в інтернеті дезінформацію.
Ці бенчмарки, позначені термінами “25-зразок”, “10-зразок”, “5-зразок” та “0-зразок”, вказують на кількість прикладів, наданих моделі під час процесу оцінювання для визначення її продуктивності та здатності до висновків у різних галузях. У “фью-зразкових” парадигмах моделям надається невелика кількість прикладів для допомоги у формуванні їхніх відповідей, тоді як у “0-зразковому” режимі моделі не отримують жодних прикладів і повинні покладатися виключно на свою попередню підготовку для надання відповідей.
Компоненти Hugging
Трубопроводи
‘Трубопроводи’ – це частина бібліотеки трансформерів Hugging Face, особливість, яка спрощує використання попередньо натренованих моделей у репозиторії Hugging Face. Це забезпечує інтуїтивний API для ряду завдань, включаючи аналіз настрою, питання-відповідь, масковане мовлення та підсумовування.
Трубопроводи інтегрують три основні компоненти Hugging Face:
- Токенізація: Підготує ваш текст для моделі, перетворивши його у формат, який модель може зрозуміти.
- Модель: Це серце трубопроводу, де відбуваються фактичні передбачення на основі попередньо оброблених вхідних даних.
- Постобробка: Перетворює сурові передбачення моделі у людсько-читабельну форму.
Ці трубопроводи не тільки зменшують обсяг кодування, але й пропонують користувачам дружній інтерфейс для виконання різних завдань 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 Результат 2: Мітка: ПОЗИТИВ Оцінка: 0.996
Розпізнавання іменованих сутностей (NER)
NER є важливим у витягуванні реальних об’єктів, названих сутностей, з тексту. Використовуйте трубопровід NER для ефективного визначення цих сутностей:
ner_tagger = pipeline("ner", aggregation_strategy="simple")
text = "Ілон Маск - це CEO SpaceX."
outputs = ner_tagger(text)
print(outputs)
Вихід
Ілон Маск: ПЕРСОНА, SpaceX: ОРГАНІЗАЦІЯ
Відповіді на питання
Відповіді на питання включають витягування точних відповідей на конкретні питання з даного контексту. Ініціалізуйте трубопровід питань-відповідей та введіть своє питання та контекст, щоб отримати бажану відповідь:
reader = pipeline("question-answering")
text = "Hugging Face - це компанія, яка створює інструменти для NLP. Вона розташована в Нью-Йорку та була заснована у 2016 році."
question = "Де розташована Hugging Face?"
outputs = reader(question=question, context=text)
print(outputs)
Вихід
{ 'оцінка': 0.998, 'початок': 51, 'кінець': 60, 'відповідь': 'Нью-Йорк' } Бібліотека 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 (HF) почала використовувати Rust у своїх бібліотеках, таких як safesensors і токенізація.
Hugging Face також недавно випустила нову бібліотеку машинного навчання під назвою Candle. На відміну від традиційних бібліотек, які використовують Python, Candle побудована на Rust. Метою використання Rust є підвищення продуктивності та спрощення користувальницького досвіду підтримки операцій з GPU.
Основна мета Candle – забезпечити серверну інференцію, зробити можливим розгортання легких бінарних файлів та видалити Python з робочих процесів виробництва, які іноді можуть сповільнити процеси через його накладні витрати. Ця бібліотека прийшла як рішення для подолання проблем, пов’язаних з повними бібліотеками машинного навчання, такими як PyTorch, які великі та повільні при створенні екземплярів на кластері.
Давайте розглянемо, чому Rust стає все більш популярним вибором порівняно з Python.
- Швидкість та продуктивність – Rust відомий своєю неймовірною швидкістю, перевершуючи Python, який традиційно використовується у бібліотеках машинного навчання. Продуктивність Python іноді може бути сповільнена через його Глобальний інтерпретатор блокування (GIL), але Rust не зустрічає цієї проблеми, обіцяючи швидше виконання завдань та, як наслідок, покращення продуктивності у проектах, де він реалізований.
- Безпека – Rust забезпечує гарантії безпеки пам’яті без сміттєзбірника, аспект, який є важливим для забезпечення безпеки паралельних систем. Це грає важливу роль у галузях, таких як safetensors, де безпека обробки даних є пріоритетом.
Safetensors
Safetensors користуються швидкістю та особливостями безпеки Rust. Safetensors включають маніпуляцію тензорами, складної математичної сутності, і наявність Rust забезпечує, що ці операції не тільки швидкі, але й безпечні, уникнувши звичайних помилок та проблем безпеки, які можуть виникнути через неправильну обробку пам’яті.
Токенізація
Токенізація займається розділенням речень чи фраз на менші одиниці, такі як слова чи терміни. Rust сприяє цьому процесу, прискорюючи час виконання, забезпечуючи, що процес токенізації не тільки точний, але й швидкий, підвищуючи ефективність завдань NLP.
У центрі токенізації Hugging Face лежить концепція субсловної токенізації, яка балансує слово- та символ-рівневу токенізацію для оптимізації збереження інформації та розміру словника. Це відбувається шляхом створення субтокенів, таких як “##ing” та “##ed”, зберігаючи семантичну багату інформацію, одночасно уникнувши розширення словника.
Субсловна токенізація включає фазу навчання для визначення найбільш ефективного балансу між символ- та слово-рівневою токенізацією. Це виходить за межі простих префіксних та суфіксних правил, вимагаючи всебічного аналізу мовних закономірностей у великих текстових корпусах для розробки ефективного субсловного токенізатора. Генерований токенізатор здатний обробляти нові слова, розбиваючи їх на відомі субслова, зберігаючи високий рівень семантичного розуміння.
Компоненти токенізації
Бібліотека токенізації розділяє процес токенізації на кілька етапів, кожний з яких займається окремим аспектом токенізації. Давайте розглянемо ці компоненти:
- Нормалізатор: Виконує початкові перетворення вхідної строки, застосовуючи необхідні корективи, такі як перетворення у нижній регістр, нормалізація Юнікоду та видалення зайвих символів.
- Попередня токенізація: Відповідає за розбиття вхідної строки на попередні сегменти, визначаючи розриви на основі попередньо визначених правил, таких як розриви за пробілами.
- Модель: Керує відкриттям та створенням субтокенів, адаптуючись до особливостей вашого вхідного даних та пропонуючи можливості навчання.
- Постобробка: Розширює можливості конструкції для забезпечення сумісності з багатьма моделями на основі трансформерів, такими як 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>
У цьому кодовому фрагменті ми імпортуємо необхідні модулі з пакету трансформерів, завантажуємо попередньо натреновану модель та відповідну токенізацію за допомогою методу from_pretrained. Ми обираємо модель BERT, дофільтровану на наборі даних SQuAD.
Давайте розглянемо приклад використання цієї функції, де у нас є певний текстовий уривок та питання до нього:
<p>text = """
Ейфелева вежа, розташована в Парижі, Франції, є однією з найвідоміших пам'яток світу. Вона була спроектована Густавом Ейфелем та завершена у 1889 році. Вежа має висоту 324 метри та була найвищою спорудою світу на момент завершення.
"""</p>
<p>question = "Хто спроектував Ейфелеву вежу?"</p>
<p># Отримання відповіді на питання
answer = get_answer(text, question)
print(f"Відповідь на питання: {answer}")
# Вихід: Відповідь на питання: Густав Ейфель</p>
У цьому скрипті ми створюємо функцію get_answer, яка приймає текст та питання, токенізацію їх, а потім використовує попередньо натреновану модель BERT для отримання відповіді з тексту. Це демонструє практичне застосування бібліотеки трансформерів Hugging Face для створення простої, але потужної системи питання-відповідь. Для глибшого розуміння концепцій рекомендується проводити практичні експерименти, використовуючи Google Colab Notebook.
Висновок
Через свій широкий спектр відкритих інструментів, попередньо натренованих моделей та дружніх трубопроводів Hugging Face дозволяє як досвідченим професіоналам, так і новачкам легко входити у світ штучного інтелекту. Крім того, ініціатива інтегрувати Rust, через його швидкість та особливості безпеки, підкреслює приверженість Hugging Face інноваціям, забезпечуючи ефективність та безпеку у застосунках штучного інтелекту. Трансформаційна робота Hugging Face не тільки демократизує доступ до високорівневих інструментів штучного інтелекту, але й створює колаборативне середовище для навчання та розвитку у сфері штучного інтелекту, сприяючи майбутньому, де штучний інтелект буде доступний усім.

















