Применение моделей большого языка произвело трансформацию в различных секторах, открыв новый рубеж в обработке и понимании естественного языка. LLM, известные тем, что генерируют тексты, похожие на человеческие, произвели революцию в чат-ботах, создании контента и даже в решении сложных задач.
Однако, несмотря на свои впечатляющие возможности, LLM сталкиваются с заметными проблемами, особенно в плане понимания контекста и поддержания точности в расширенных взаимодействиях. Распространенной ошибкой является их склонность к « галлюцинациям », когда сгенерированный контент, хотя и беглый, может оказаться неточным или нерелевантным.
Именно здесь такие технологии, как поисково-дополненная генерация (RAG) и векторные базы данных, приобретают решающее значение. Интегрируя LLM с RAG, который динамически извлекает соответствующую информацию из обширных наборов данных, мы можем значительно смягчить эти ограничения. Синергия между LLM и векторными базами данных, способными эффективно обрабатывать и извлекать структурированные векторные данные, обещает вывести на новый уровень глубину, контекст и надежность приложений LLM.
В этом блоге читатели могут ожидать:
Поисково-дополненная генерация (RAG) — это инновационная парадигма в области искусственного интеллекта и обработки естественного языка. Это знаменует собой значительный отход от традиционных языковых моделей за счет интеграции поиска информации в процесс создания языка. Этот гибридный подход расширяет возможности моделей ИИ генерировать ответы, которые не только контекстуально точны, но и наполнены актуальными знаниями из внешних источников данных.
Появление RAG можно отнести к стремлению преодолеть ограничения стандартных языковых моделей, таких как GPT (Генераторный предварительно обученный преобразователь). Традиционные модели, несмотря на их способность генерировать связный текст, часто не могут обеспечить точные, основанные на фактах ответы, особенно на запросы, требующие конкретных знаний в реальном времени.
Вот описание того, как работает технология расширенной генерации данных (RAG) при интеграции с векторной базой данных:
Прием и индексирование . Рабочий процесс начинается с обширной базы знаний , которая является основой интеллекта системы. Эта база знаний обычно представляет собой большой массив документов, содержащих информацию, которая может быть запрошена пользователями. Эти документы могут быть чем угодно: от листов часто задаваемых вопросов и статей до баз данных структурированной информации. Прежде чем эти документы можно будет использовать, они проходят процесс приема, в ходе которого они предварительно обрабатываются и преобразуются во встраивания. Модель внедрения — часто сложный алгоритм машинного обучения — используется для преобразования текстовой информации в векторные представления. Эти вложения численно представляют семантическое содержание документов в многомерном пространстве, оптимальном для сравнения сходства.
Взаимодействие с клиентом : все начинается с того, что клиент взаимодействует с приложением и отправляет запрос. Этот запрос представляет собой запрос информации или вопрос, на который клиент ожидает ответа от ИИ.
Внедрение запроса : необработанный запрос клиента затем обрабатывается моделью внедрения. Эта модель преобразует текстовый запрос в вектор, который представляет собой числовое представление, отражающее семантическое значение запроса в многомерном пространстве.
Поиск в базе данных векторов . Вектор запроса отправляется в базу данных векторов, специализированную базу данных, предназначенную для обработки многомерных векторных данных. База данных выполняет поиск по сходству для получения наиболее подходящих вложений документов. Эти внедрения представляют собой предварительно обработанные знания из базы знаний, которые были загружены в систему.
Получение контекста : полученные внедрения документа объединяются с исходным запросом для формирования подсказки, которая включает в себя как запрос, так и соответствующий контекст.
Генерация ответа языковой модели : это расширенное приглашение затем передается в модель изучения языка (LLM). LLM использует контекст полученных документов для генерации точного, информативного и контекстуально соответствующего запросу клиента ответа.
Генеративный ответ . Наконец, LLM выдает генеративный ответ, который доставляется обратно клиенту через приложение. Этот ответ не только основан на предварительно обученных знаниях модели, но также дополняется конкретной информацией, полученной из базы знаний, что делает его очень релевантным запросу пользователя.
Векторные базы данных хранят и управляют данными, которые были преобразованы в числовую векторную форму, часто с помощью таких процессов, как внедрение моделей в машинное обучение. Вложения — это численные представления данных, часто многомерные векторы, которые отражают семантические или контекстуальные особенности исходных входных данных. В случае текстовых данных встраивания преобразуют слова, предложения или целые документы в форму, которую может обработать компьютер. Модели машинного обучения, в частности нейронные сети, используются для создания этих вложений, чтобы аналогичные значения были близки в векторном пространстве. Эти базы данных предназначены для эффективного выполнения поиска по сходству, который позволяет найти точки данных, наиболее близкие к заданному вектору запроса в векторном пространстве.
Вот более глубокий взгляд на процесс:
Хранение данных : когда документы принимаются, модель внедрения (например, нейронная сеть) преобразует текст в многомерный вектор. Каждый вектор представляет семантическое значение документа в числовой форме. Эти векторы затем сохраняются в базе данных векторов.
Индексирование . Чтобы облегчить быстрый поиск, база данных создает индекс на этих векторах, используя алгоритмы, подходящие для многомерных пространств, такие как инвертированный файловый индекс (IVF) или иерархический навигационный малый мир (HNSW). Выбор типа индекса балансирует между скоростью и точностью поиска.
Поиск по сходству : когда создается запрос, он также преобразуется в вектор с использованием той же модели внедрения. Затем база данных векторов использует индекс для быстрого поиска векторов, наиболее похожих на вектор запроса. Сходство определяется метриками расстояния, такими как евклидово расстояние или косинусное сходство.
Преимущества вложений :
Семантическое сходство : встраивания спроектированы таким образом, что семантически схожие элементы располагаются ближе в векторном пространстве, что позволяет системам понимать контекст и значение. Например, в области геномики данные об экспрессии генов могут быть закодированы как встраивания, чтобы выявить закономерности, указывающие на взаимосвязь между различными генами и фенотипами. Это может помочь в выявлении биомаркеров заболеваний, которые могут быть не выявлены с помощью традиционного анализа.
Сложные отношения : они могут фиксировать сложные отношения и нюансы в данных, которые могут быть упущены при традиционных представлениях. Практическое применение можно увидеть в системах рекомендаций, например тех, которые используются потоковыми сервисами, такими как Netflix или Spotify. Эти платформы используют встраивания, чтобы понять предпочтения пользователей и особенности контента, тем самым рекомендуя фильмы или песни, которые имеют сходство с предыдущим выбором пользователя. Несмотря на разнообразие контента, встраивания позволяют давать детальные рекомендации, выходящие за рамки жанра или исполнителя, учитывая более глубокие модели пользовательского потребления.
Единообразие . Встраивания преобразуют различные типы данных в единый векторный формат, упрощая такие операции, как сравнение и извлечение.
Создание локальной среды разработки для RAG и Vector DB ( Milvus ) включает в себя несколько ключевых шагов.
Вот структурированное руководство:
Предпосылки :
Убедитесь, что в вашей системе установлен Python 3.6+.
Для запуска Milvus необходим Docker.
Виртуальная среда :
Создайте новую виртуальную среду и используйте ее:
python3 -m venv rag-milvus-env source rag-milvus-env/bin/activate # Install supporting dependencies pip install transformers datasets faiss-cpu torch sentence-transformers pymilvus
Милвус использует докер :
Извлеките и запустите образ Milvus Docker: (вы также можете использовать другие векторные базы данных)
Вы можете использовать приведенные ниже шаги или следовать руководству по началу работы, представленному здесь .
docker pull milvusdb/milvus:latest docker run -d --name milvus_cpu -p 19530:19530 -p 19121:19121 milvusdb/milvus:latest
Данные настройки :
Теперь давайте попробуем загрузить несколько примеров данных, создать внедрения и вставить их в коллекцию.
import requests import csv url = "http://qim.fs.quoracdn.net/quora_duplicate_questions.tsv" # Download the file response = requests.get(url) response.raise_for_status() # This will raise an error if the download failed # Decode the content and split into lines lines = response.content.decode('utf-8').splitlines() questions = [] # Process the lines reader = csv.reader(lines, delimiter='\t') next(reader) # Skip the header row for row in reader: questions.extend([row[1], row[4]]) # Assuming the questions are in the 2nd and 3rd columns questions = questions[:10000]
Создание вложений
from sentence_transformers import SentenceTransformer # transformer to create embeddings model = SentenceTransformer('all-MiniLM-L6-v2') embeddings = model.encode(questions)
Вставка в векторную БД.
# connect to db connections.connect() embedding_size = 384 # Prepare the collection schema fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=embedding_size) ] schema = CollectionSchema(fields, "questions") collection = Collection("questions", schema) # Insert the document embeddings mr = collection.insert([embeddings]) # to get document, in practice this would be some external DB. id_to_question = {str(mr.primary_keys[i]): questions[i] for i in range(len(questions))} # List all collections collections = list_collections() print(collections)
Проиндексируйте коллекцию.
from pymilvus import Collection index_params = { "metric_type": "L2", "index_type": "HNSW", # Index of type HNSW, refer to docs for other types. "params": { "M": 16, # Example value, adjust as needed "efConstruction": 200 } } collection = Collection("questions") collection.create_index( field_name="embedding", index_params=index_params )
Запрос документов
query = "What is artificial intelligence?" query_embedding = model.encode(query) collection.load() # Define search parameters search_params = {"metric_type": "L2", "params": {"nprobe": 10}} # Perform the search results = collection.search( data=[query_vector], anns_field="embedding", param=search_params, limit=10, expr=None, consistency_level="Strong" ) # Process results for result in results: milvus_id = str(result.id) # Convert ID to string for dictionary lookup original_question = id_to_question[milvus_id] print(f"Milvus ID: {milvus_id}, Similar Question: {original_question}")
Как только мы получим семантически похожие документы из векторной базы данных, мы сможем передать этот контекст + входной запрос в LLM, что даст гораздо лучшие результаты, поскольку у LLM теперь есть контекст.
В заключение отметим, что интеграция RAG с векторными базами данных, такими как Milvus, предлагает мощное решение некоторых из наиболее насущных проблем в приложениях LLM, особенно тех, которые требуют глубокого контекстного понимания и динамического поиска информации. Объединив генеративные возможности LLM с точностью и эффективностью векторных баз данных, предприятия могут значительно повысить актуальность и точность ответов, основанных на искусственном интеллекте, предоставляя пользователям ценное и контекстуально богатое взаимодействие.
Поскольку ИИ продолжает развиваться, объединение этих технологий представляет собой не просто шаг, а скачок вперед, предвещая будущее, в котором ИИ сможет поддерживать более сложные, разнообразные и тонкие приложения во всех секторах. Этот блог подготовил почву для новаторов и практиков, которые могли начать экспериментировать с этими инструментами, расширяя границы возможного в сфере корпоративных приложений ИИ.