Боретеся зі штучним інтелектом або повним циклом розробки? Наші експерти допоможуть вам: індивідуальні консультації, технічна інтеграція та багато іншого. Звертайтеся за адресою [email protected].

Створення моделі семантичного пошуку з трансформаторами речень для RAG-додатку

Впровадження конвеєра розширеного пошуку (Retrieval Augmented Generation, RAG) шляхом точного налаштування власної семантичної моделі пошуку - це потужний підхід до підвищення точності та релевантності систем запитань-відповідей.

Цей метод поєднує в собі сильні сторони семантичного пошуку та генеративного ШІ, дозволяючи системі краще розуміти запитання користувачів і генерувати точніші та контекстно-релевантні відповіді. Налаштовуючи модель семантичного пошуку за допомогою трансформаторів речень, розробники можуть адаптувати модель до своєї конкретної галузі, покращуючи загальну продуктивність конвеєра RAG.

Семантичний пошук

Що таке семантичний пошук?

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

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

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

Що таке розширене покоління пошуку (RAG)?

Семантичний пошук

Доповнена генерація на основі пошуку (Retrieval Augmented Generation, RAG) - це метод, який підвищує точність і надійність генеративних моделей ШІ, таких як моделі великих мов (LLM), шляхом включення зовнішніх джерел даних для надання більш контекстуально точної та актуальної інформації. Він інтегрує компонент пошуку з генеративною моделлю, дозволяючи системі шукати і отримувати відповідну інформацію з бази даних або бази знань, щоб доповнити свої внутрішні знання при створенні відповідей.

Такий підхід гарантує, що ШІ-модель може надавати відповіді на основі найактуальніших, достовірних фактів, і дає можливість користувачам перевірити джерела інформації, використаної у відповідях моделі. RAG допомагає ґрунтувати ШІ-модель на зовнішніх джерелах знань, підвищуючи якість її результатів і надаючи можливість оновлювати модель без необхідності тривалого перенавчання.

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

Що таке бібліотека трансформаторів речень?

Трансформатори речень

Бібліотека Sentence Transformers - це потужний фреймворк Python, розроблений для сучасних текстових вбудовувань. Вона побудована на основі нейронних мереж-трансформерів, таких як BERT, RoBERTa, XLM-R та інших, що забезпечують високу продуктивність у різних завданнях, включаючи семантичний пошук, перефразування, порівняння семантичної схожості, кластеризацію та багато іншого. Ця бібліотека дозволяє легко налаштовувати методи вбудовування речень, що дає змогу створювати вбудовування речень для конкретних завдань, пристосовані до конкретних потреб. Дізнайтеся більше на сайті Sentence Transformers

Бібліотека пропонує широкий вибір попередньо навчених моделей трансформаторів речень для більш ніж 50 мов, доступних на платформі Hugging Face. Користувачі також можуть тренувати або допрацьовувати власні моделі, використовуючи бібліотеку, забезпечуючи гнучкість у створенні власних моделей для унікальних випадків використання. Нещодавно команда розробників Sentence Transformers випустила нову велику версію (v3), яка значно покращує можливості цієї бібліотеки, особливо можливості її тонкого налаштування.

Бібліотека "Трансформатори речень" є швидкою, повною та добре підтримуваною, тому ми використовуємо її в цьому підручнику.

Створення власної моделі семантичного пошуку

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

Спочатку створимо невеликий набір даних, що містить наші дані. Створіть CSV-файл з 1 стовпчиком (під назвою "dataset.csv"), що містить наступну технічну документацію про принтери HP (у реальному житті вам, звісно, знадобиться набагато більше прикладів):

"HP® LaserJets have unmatched printing speed, performance and reliability that you can trust. Enjoy Low Prices and Free Shipping when you buy now online."
"Every HP LaserJet comes with a one-year HP commercial warranty (or HP Limited Warranty)."
"HP LaserJet ; Lowest cost per page on mono laser printing. · $319.99 ; Wireless options available. · $109.00 ; Essential management features. · $209.00."

Кожен рядок може містити до 512 лексем (приблизно 400 слів), а для досягнення максимальної точності рекомендується не перевищувати 128 лексем (приблизно 100 слів). Тепер, коли в нашому наборі даних є 3 частини документації, ми можемо закодувати дані, використовуючи нашу модель за допомогою трансформаторів речень. Створіть Python-скрипт (переконайтеся, що PyTorch і Sentence Transformers встановлені).

from sentence_transformers import SentenceTransformer
import csv
import torch

model_name = 'paraphrase-multilingual-mpnet-base-v2'
encoded_model_path = 'semantic_search_model.pt'
dataset_path = 'dataset.csv'

bi_encoder = SentenceTransformer(model_name)

passages = []
with open(dataset_path) as csv_file:
    csv_reader = csv.reader(csv_file)
    for row in csv_reader:
        passages.append(row[0])
        
corpus_embeddings = bi_encoder.encode(
    passages, batch_size=32, convert_to_tensor=True, show_progress_bar=True)

torch.save(corpus_embeddings, encoded_model_path)

Цей скрипт завантажує і використовує paraphrase-multilingual-mpnet-base-v2 як базову модель і використовує її для кодування наших даних. Ви можете вибрати одну з багатьох доступних попередньо навчених моделей, залежно від ваших вимог (розмір моделі, сценарій використання, підтримувані мови, ...). Залежно від вашого апаратного забезпечення ви можете адаптувати параметр "batch_size", щоб пришвидшити процес кодування.

Після створення ви можете використовувати вашу модель для виводу за допомогою наступного скрипту на Python:

import csv
from sentence_transformers import SentenceTransformer, util
import torch

bi_encoder = SentenceTransformer('paraphrase-multilingual-mpnet-base-v2')
semantic_search_model = torch.load('semantic_search_model.pt')

passages = []
with open('app/custom_model/dataset.csv') as csv_file:
    csv_reader = csv.reader(csv_file)
    for row in csv_reader:
        passages.append(row[0])

question_embedding = bi_encoder.encode(
    "How long is the warranty on the HP Color LaserJet Pro?", convert_to_tensor=True)
hits = util.semantic_search(
    question_embedding, semantic_search_model, top_k=3)
hits = hits[0]

result = {"search_results": [
    {"score": hit['score'], "text": passages[hit['corpus_id']]} for hit in hits]}

Наведений вище скрипт виводу повертає наступні результати:

{
"search_results": [
    {
        "score": 0.99,
        "text": "Every HP LaserJet comes with a one-year HP commercial warranty (or HP Limited Warranty)."
    },
    {
        "score": 0.74,
        "text": "All consumer PCs and printers come with a standard one-year warranty. Care packs provide an enhanced level of support and/or an extended period of coverage for your HP hardware. All commercial PCs and printers come with either a one-year or three-year warranty."
    },
    {
        "score": 0.68,
        "text": "In-warranty plan · Available in 2-, 3-, or 4-year extension plans · Includes remote problem diagnosis support and Next Business Day Exchange Service."
    },
    ]
}

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

Генерування відповіді природною мовою за допомогою генеративного ШІ

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

Ми можемо легко досягти цього, використовуючи просунуті LLM, такі як GPT-4 на OpenAI або LLaMA 3 і ChatDolphin на NLP Cloud. Ви можете зберегти найкращий результат з семантичної моделі пошуку і передати його як контекст до LLM, або зберегти кілька результатів. Ось приклад з використанням лише найкращого результату:

Context: Every HP LaserJet comes with a one-year HP commercial warranty (or HP Limited Warranty).
Based on the above context, answer the following question: How long is the warranty on the HP Color LaserJet Pro?

Цей запит повертає щось на кшталт цього:

The warranty on the HP Color LasertJet Pro lasts at least 1 year.

Модель семантичного пошуку з закодованими даними проти зберігання вбудовувань у векторній базі даних

У системі Retrieval-Augmented Generation (RAG) створення семантичної моделі пошуку з локальними закодованими даними або використання векторної бази даних є двома цікавими варіантами.

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

Підприємствам, які прагнуть досягти дуже низьких затримок, рекомендується кодувати власні дані і завантажувати їх у графічний процесор, щоб скоротити час обчислень. Однак це відбувається за рахунок гнучкості, оскільки ваші дані потрібно кодувати заново щоразу, коли змінюється набір даних. Якщо ваші базові дані змінюються дуже часто, вам може бути простіше витягувати вбудовування і поетапно зберігати їх у векторній базі даних (наприклад, PG Vector).

Висновок

Доповнене генерація запитів має вирішальне значення для компаній, які шукають відповіді на питання про конкретні дані, такі як технічна документація, контракти тощо, оскільки вона значно підвищує точність отриманих результатів. Наприклад, RAG є ключовим компонентом чат-бота служби підтримки.

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

Якщо ви не зацікавлені у створенні та розгортанні власної моделі семантичного пошуку на основі "Трансформаторів речень" самостійно, ви можете легко зробити це в 1 клік на NLP Cloud. Спробуйте семантичний пошук в NLP Cloud прямо зараз!

Якщо у вас виникли запитання про RAG, семантичний пошук і трансформатори речень, будь ласка, не соромтеся запитувати нас, ми завжди раді проконсультувати!

Julien
Технічний директор NLP Cloud