Моделі та платформи ШІ

LlamaIndex: Розширте свої додатки LLM за допомогою власних даних легко

mm
Додайте Unite.AI до бажаних джерел у Google

Багатомовні моделі (LLM) типу GPT від OpenAI були навчені на різноманітних публічно доступних даних, демонструючи вражаючі можливості у генерації тексту, підсумовуванні, відповідях на питання та плануванні. Незважаючи на їхню універсальність, часто виникає питання про безперешкодну інтеграцію цих моделей з власними, приватними або пропріетарними даними.

Бізнес та особи переповнені унікальними та власними даними, часто розміщеними в різних додатках, таких як Notion, Slack та Salesforce (CRM ), або зберігаються у особистих файлах. Для використання LLM з цими даними було запропоновано та експериментально перевірено кілька методологій.

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

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

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

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

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

Llama Index

Llama Index

Це було розпочато Джері Ліу, колишнім науковим співробітником Uber. Експериментуючи з GPT-3 минулої осені, Ліу помітив обмеження моделі щодо обробки приватних даних, таких як особисті файли. Це спостереження призвело до початку відкритого проекту LlamaIndex.

Ініціатива привернула інвесторів, забезпечивши $8,5 мільйонів у недавньому раунді сіяного фінансування.

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

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

Високорівневі концепції та деякі інсайти

1. Retrieval Augmented Generation (RAG):

LlamaIndex RAG

LlamaIndex RAG

RAG – це двосторонній процес, призначений для поєднання LLM з власними даними, тим самим підвищуючи здатність моделі надавати точніші та інформативніші виходи. Процес складається з:

  • Стадія індексування: Це підготовчий етап, на якому закладений фундамент для створення бази знань.
LlamaIndex INDEXES

LlamaIndex Indexing

  • Стадія запиту: Тут база знань досліджується для пошуку релевантного контексту для допомоги LLM у відповідях на запити.
LlamaIndex QUERY STAGE

LlamaIndex Query Stage

Подорож індексування з LlamaIndex:

  • Конектори даних: Конектори даних можна вважати паспортом ваших даних до LlamaIndex. Вони допомагають імпортувати дані з різних джерел та форматів, укладаючи їх у просту структуру “Документ”. Конектори даних можна знайти у LlamaHub, відкритому репозиторії, наповненому завантажувачами даних. Ці завантажувачі створені для легкої інтеграції, забезпечуючи досвід “підключи та працюй” з будь-яким додатком LlamaIndex.
Llama hub

LlamaIndex hub (https://llamahub.ai/)

  • Документи / Ноди: Документ можна порівняти з універсальною валізою, яка може містити різноманітні типи даних – чи то PDF, вивід API, чи записи бази даних. Нод, з іншого боку, являє собою фрагмент або “шматок” з документа, збагачений метаданими та зв’язками з іншими нодами, забезпечуючи міцний фундамент для точної витягання даних пізніше.
  • Індекси даних: Після імпортування даних LlamaIndex допомагає індексувати ці дані у витягуваний формат. За лаштунками він розбиває сирі документи на проміжні представлення, обчислює векторні вкладення та виводить метадані. Серед індексів “VectorStoreIndex” часто є вибір за замовчуванням.

Типи індексів у LlamaIndex: Ключ до організованих даних

LlamaIndex пропонує різні типи індексів, кожний з яких відповідає різним потребам та випадкам використання. У центрі цих індексів лежать “ноди”, про які вже згадувалося вище. Давайте спробуємо зрозуміти індекси LlamaIndex разом з їхньою механікою та застосуванням.

1. Індекс списку:

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

2. Векторний індекс сховища:

  • Механізм: Тут ноди перетворюються у векторні вкладення, зберігаються локально або у спеціалізованій векторній базі даних, такій як Milvus. Під час запиту він витягує найкращі подібні ноди, направляючи їх до синтезатора відповідей.
  • Перевага: Якщо ваш робочий процес залежить від порівняння тексту за семантичною подібністю через векторний пошук, цей індекс можна використовувати.

3. Деревний індекс:

  • Механізм: У деревному індексі вхідні дані перетворюються на деревоподібну структуру, побудовану знизу вгору з листових нод (оригінальних фрагментів даних). Батьківські ноди виникають як підсумки листових нод, створені за допомогою GPT. Під час запиту деревний індекс може рухатися від кореневого ноду до листових нод або будувати відповіді безпосередньо з вибраних листових нод.
  • Перевага: З деревним індексом запитування великих текстових фрагментів стає більш ефективним, а витягання інформації з різних текстових сегментів спрощується.

4. Індекс ключових слів:

  • Механізм: Індекс ключових слів складається з карти ключових слів до нод. Під час запиту ключові слова витягуються з запиту, і лише відображені ноди стають видимими.
  • Перевага: Коли у вас є чіткі запитання користувача, індекс ключових слів можна використовувати. Наприклад, пошук у документах зі здоров’я стає більш ефективним, якщо фокусується лише на документах, пов’язаних з COVID-19.

Встановлення LlamaIndex

Встановлення LlamaIndex – це простий процес. Ви можете вибрати встановлення його безпосередньо з Pip або з джерела. (Перевірте, чи встановлено Python у вашій системі, або ви можете використовувати Google Colab)

1. Встановлення з Pip:

  • Виконайте наступну команду:
    pip install llama-index
  • Примітка: Під час встановлення LlamaIndex може завантажувати та зберігати локальні файли для певних пакетів, таких як NLTK та HuggingFace. Для вказівки каталогу для цих файлів використовуйте змінну середовища “LLAMA_INDEX_CACHE_DIR”.

2. Встановлення з джерела:

  • Спочатку клонуйте репозиторій LlamaIndex з GitHub:
    git clone https://github.com/jerryjliu/llama_index.git
  • Після клонування перейдіть до каталогу проекту.
  • Вам потрібен Poetry для керування залежностями пакетів.
  • Тепер створіть віртуальне середовище за допомогою Poetry:
    poetry shell
  • Нарешті, встановіть основні пакети за допомогою:
    poetry install

Налаштування вашого середовища для LlamaIndex

1. Налаштування OpenAI:

  • За замовчуванням LlamaIndex використовує gpt-3.5-turbo від OpenAI для генерації тексту та text-embedding-ada-002 для витягання та вкладень.
  • Для використання цієї настройки вам потрібно мати OPENAI_API_KEY. Отримайте його, зареєструвавшись на сайті OpenAI та створивши новий токен API.
  • У вас є гнучкість у налаштуванні базової великомасштабної мови (LLM) відповідно до потреб вашого проекту. В залежності від вашого постачальника LLM вам можуть знадобитися додаткові ключі середовища та токени.

2. Налаштування локального середовища:

  • Якщо ви не хочете використовувати OpenAI, LlamaIndex автоматично переключиться на локальні моделі – LlamaCPP та llama2-chat-13B для генерації тексту, і BAAI/bge-small-en для витягання та вкладень.
  • Для використання LlamaCPP слідувати наданому посібнику з установки. Перевірте, чи встановлено пакет llama-cpp-python, ідеально скомпільований для підтримки вашої GPU. Ця настройка використовуватиме близько 11,5 ГБ оперативної пам’яті по CPU та GPU.
  • Для локальних вкладень виконайте pip install sentence-transformers. Ця локальна настройка використовуватиме близько 500 МБ пам’яті.

З цими настройками ви можете налаштувати своє середовище для використання потужності OpenAI або виконання моделей локально, відповідно до вимог та ресурсів вашого проекту.

Простий випадок використання: Запитування веб-сторінок з LlamaIndex та OpenAI

Ось простий Python-скрипт, який демонструє, як ви можете запитувати веб-сторінку для отримання конкретних інсайтів:

!pip install llama-index html2text


<p>import os
from llama_index import VectorStoreIndex, SimpleWebPageReader</p>

<p># Введіть свій ключ OpenAI нижче:
os.environ["OPENAI_API_KEY"] = ""</p>

<p># URL, який ви хочете завантажити у свій векторний сховище:
url = "http://www.paulgraham.com/fr.html"</p>

<p># Завантажте URL у документи (можна кілька документів)
documents = SimpleWebPageReader(html_to_text=True).load_data([url])</p>

<p># Створіть векторне сховище з документів
index = VectorStoreIndex.from_documents(documents)</p>

<p># Створіть інженерію запиту, щоб запитувати його:
query_engine = index.as_query_engine()</p>

<p># Задайте будь-яке питання щодо завантажених даних:
response = query_engine.query("Які три найкращі поради Пола щодо збору коштів?")
print(response)
Три найкращі поради Пола щодо збору коштів:
1. Почніть з низької кількості при первинному зборі коштів. Це дозволяє гнучкість та збільшує шанси на зборі більше коштів у довгостроковій перспективі.
2. Стремтеся до прибутковості, якщо можливо. Маєючи план досягнення прибутковості без залежності від додаткового фінансування, робить стартап більш привабливим для інвесторів.
3. Не оптимізуйте для валюації. Хоча валюація важлива, вона не є найкритичнішою складовою при зборі коштів. Сконцентруйтесь на отриманні необхідних коштів та пошуку добрих інвесторів замість цього.
Google Colab Llama Index Notebook

Google Colab Llama Index Notebook

З цим скриптом ви створили потужний інструмент для витягання конкретної інформації з веб-сторінки, просто запитавши питання. Це лише маленький погляд на те, що можна досягти з LlamaIndex та OpenAI при запитуванні веб-даних.

LlamaIndex проти Langchain: Вибір на основі вашої мети

Ваш вибір між LlamaIndex та Langchain залежатиме від мети вашого проекту. Якщо ви хочете розробити розумний інструмент пошуку, LlamaIndex – це солідний вибір, який виділяється як розумний механізм зберігання даних для їх витягання. З іншого боку, якщо ви хочете створити систему типу ChatGPT з можливістю плагінів, Langchain – це ваш вибір. Він не тільки дозволяє кілька інстансів ChatGPT та LlamaIndex, але також розширює функціональність, дозволяючи створення агентів з кількома завданнями. Наприклад, з Langchain ви можете створити агентів, здатних виконувати код Python під час проведення пошuku в Google. Коротко кажучи, хоча LlamaIndex excels у обробці даних, Langchain оркеструє кілька інструментів для надання комплексного рішення.

LlamaIndex Logo Artwork created using Midjourney

LlamaIndex Logo Artwork created using Midjourney

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