Прилагането на конвейер за разширено генериране на извличане (Retrieval Augmented Generation - RAG) чрез прецизиране на собствения ви модел за семантично търсене е мощен подход за подобряване на точността и релевантността на системите за отговор на въпроси.
Тази техника съчетава силните страни на семантичното търсене и генеративния изкуствен интелект, като позволява на системата да разбира по-добре въпросите на потребителите и да генерира по-точни и контекстуално подходящи отговори. Чрез фино настройване на модела за семантично търсене с помощта на Sentence Transformers разработчиците могат да приспособят модела към своята специфична област, като подобрят цялостната производителност на конвейера RAG.
Семантичното търсене е техника за търсене на данни, която надхвърля традиционните методи за търсене, основани на ключови думи. Тя използва алгоритми за обработка на естествен език и машинно обучение, за да подобри точността на резултатите от търсенето, като взема предвид намерението на търсещия и контекстуалното значение на термините, използвани в заявката му. Целта на този подход е да се разбере основното значение на заявката за търсене и съдържанието на уебстраниците, а не просто да се съпоставят ключовите думи. По този начин семантичното търсене може да предостави по-подходящи резултати, дори ако те не съдържат точните думи, използвани в първоначалното запитване.
За да се постигне това, при семантичното търсене се използват различни техники, като дезамбигулация на думи, извличане на понятия и разширяване на заявката. То използва също векторно търсене и машинно обучение, за да връща резултати, които имат за цел да съответстват на намеренията и контекста на потребителя. Семантичното търсене се използва широко в уеб търсачките, като Google, и се захранва от технологии като Knowledge Graph, която съхранява структурирани данни за същности и техните взаимоотношения. Това позволява на търсачките да разбират смисъла на заявките за търсене и да предоставят по-точни и смислени резултати.
Семантичното търсене е много полезно за фирмите, които искат да отговорят на въпроси, свързани с техните собствени знания в областта, като например техническа документация, договори, описания на продукти...
Разширеното генериране на извличане (Retrieval Augmented Generation - RAG) е техника, която повишава точността и надеждността на генеративните модели на изкуствения интелект, като например големите езикови модели (Large Language Models - LLMs), чрез включване на външни източници на данни, за да се осигури по-точна и актуална информация в контекста. Тя интегрира компонент за извличане на информация с генеративен модел, като позволява на системата да търси и извлича съответната информация от база данни или база знания, за да допълни вътрешните си знания при генерирането на отговори.
Този подход гарантира, че моделът с изкуствен интелект може да предоставя отговори въз основа на най-актуалните и надеждни факти и дава възможност на потребителите да проверяват източниците на информацията, използвана в отговорите на модела. RAG помага за обосноваването на модела на ИИ с външни източници на знания, като подобрява качеството на неговите резултати и осигурява начин за актуализиране на модела, без да е необходимо мащабно преквалифициране.
RAG е чудесна стратегия за смекчаване на потенциалните халюцинации от генеративните модели на ИИ. RAG помага за изграждането на система за отговаряне на въпроси, която има най-доброто от двата свята: фактическа точност и човешки отговори, генерирани на естествен език.
Библиотеката Sentence Transformers е мощна рамка на Python, предназначена за вграждане на текстове от най-ново поколение. Тя е изградена на базата на невронни мрежи с трансформатори като BERT, RoBERTa, XLM-R и други, като постига най-висока производителност в различни задачи, включително семантично търсене, извличане на парафрази, сравняване на семантично сходство, клъстериране и др. Тази библиотека позволява лесна фина настройка на методите за вграждане на изречения, което дава възможност за създаване на вграждане на изречения, съобразено с конкретните задачи. Научете повече на уебсайта на Sentence Transformers
Библиотеката предлага широк избор от предварително обучени модели на Sentence Transformers за повече от 50 езика, които са достъпни в платформата Hugging Face. Потребителите могат също така да обучават или да настройват свои собствени модели, използвайки библиотеката, което осигурява гъвкавост за създаване на персонализирани модели за уникални случаи на употреба. Екипът на Sentence Transformers наскоро пусна нова основна версия (v3), която значително подобрява възможностите на тази библиотека, особено нейните възможности за фина настройка.
Библиотеката Sentence Transformers е бърза, изчерпателна и добре поддържана, поради което я използваме в този урок.
Създаването на собствен модел за семантично търсене е чудесен начин да получите точни резултати, като същевременно осигурите много ниска латентност. Това важи с още по-голяма сила, ако разположите собствения си модел за семантично търсене на графичен процесор.
Първо, нека създадем малък набор от данни, съдържащ нашите данни. Създайте 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.
В една система с разширено търсене (RAG) създаването на семантичен модел за търсене с локално кодирани данни или използването на векторна база данни са две интересни възможности.
Когато кодираме собствените си данни, преобразуваме данните в тензори и след това имаме възможност да ги заредим на графичен процесор. От друга страна, векторната база данни е специализирана база данни, предназначена за ефективно съхраняване, индексиране и търсене на тези високоразмерни вектори.
За фирмите, които искат да постигнат много ниска латентност, се препоръчва да кодират собствените си данни и да ги зареждат в графичен процесор, за да подобрят времето за изчисление. Това обаче е за сметка на гъвкавостта, тъй като данните ви трябва да се кодират отново при всяка промяна на набора от данни. Ако базовите ви данни се променят много често, за вас може да е по-просто да извлечете вгражданията и да ги съхранявате поетапно във векторна база данни (като PG Vector например).
Разширеното генериране на извличането е от решаващо значение за предприятията, които искат да отговорят на въпроси за специфични данни, като например техническа документация, договори и т.н., тъй като то значително повишава точността на резултатите. RAG е ключов компонент на чатбот за поддръжка, например.
Sentence Transformers е чудесна библиотека, която може да се използва за създаване на собствен модел за семантично търсене въз основа на собствени данни. Когато се използва на графичен процесор и се съчетае с усъвършенстван генеративен модел на изкуствен интелект, такъв модел се оказва изключително мощен.
Ако не се интересувате от създаването и внедряването на собствен модел за семантично търсене въз основа на трансформатори на изречения, можете лесно да го направите с едно кликване в NLP Cloud. Опитайте семантичното търсене в NLP Cloud сега!
Ако имате въпроси относно RAG, семантичното търсене и Sentence Transformers, моля, не се колебайте да ни попитате, за нас винаги е удоволствие да ви консултираме!
Julien
Технически директор в NLP Cloud