Создание масштабируемой сети знаний для поиска более 60 миллионов научных работ с помощью векторного поиска Weaviate

Keenious - это поисковая система, предназначенная для студентов, исследователей и любопытных! Наше дополнительное приложение работает прямо из вашего текстового редактора; анализируя весь документ и находя наиболее релевантные результаты в процессе работы. Попробуйте прямо сейчас бесплатно здесь!

Вступление

В Keenious мы придаем большое значение интуиции в наших результатах поиска. В отличие от традиционного поиска, наша академическая поисковая система уравновешивает непосредственно релевантные результаты (ключевые слова и т. Д.) Со случайными результатами, которые через свое семантическое значение связаны с входным документом. Случайные результаты способствуют постоянному открытию и изучению исследований и тем, которые имеют жизненно важное значение для исследователей и студентов всех уровней.

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

В последнее время мы изучаем способы ввести форму семантического поиска, которая может выполняться без семантических векторов на основе текста. Наши аргументы в пользу этого заключались в том, чтобы обеспечить возможность глубокого изучения и открытия исследований и тем без необходимости наличия у пользователя документа для поиска. Мы часто называем это проблемой холодного запуска, т. Е. Ситуацией, когда у пользователя нет бумаги или текста документа для поиска.

Мы уделяли огромное внимание разработке решения, которое позволяет пользователям легко находить персонализированные рекомендации по исследованиям с помощью всего одного запроса или ввода (понравившаяся статья, тема и т. Д.), без документа или поискового запроса! Решение, к которому мы пришли, заключалось в использовании Графов знаний (KG) в сочетании с решением быстрого векторного поиска (Weaviate).

В этой статье , мы кратко коснемся графов знаний и того, как мы использовали их в Keenious, сосредоточив основное внимание на том, как мы масштабировали граф и сделали его вложения доступными для поиска с помощью Weaviate, включая обзор Weaviate и некоторая информация о том, почему Weaviate выделился для нас как подходящий инструмент для этой задачи.

Краткое руководство по Keenious

Прежде чем мы начнем, возможно, вы не знакомы с Keenious и его функциями. Keenious - это инструмент, который анализирует ваши статьи и за секунды показывает самые актуальные исследования из миллионов онлайн-публикаций.

Мы считаем, что обучение - это не статичный процесс, поэтому и исследования не должны быть статичными. С Keenious ваш документ - это поисковый запрос. Наше дополнение анализирует ваш текст - когда вы его пишете - и на каждом этапе находит для вас наиболее релевантные исследования. Киниос обнаруживает скрытые жемчужины исследований, просеивая междисциплинарные темы, области и области исследований. Вы можете изменить направление своего исследования одним щелчком мыши.

Если вам нужно найти что-то более конкретное, вы можете индивидуально изучить каждое предложение в своей статье или документе, используя поиск по фокусу. Мы сузим область поиска, сохранив при этом релевантность для остальной части документа.

Суммируя:

  • Keenious живет прямо в выбранном вами текстовом редакторе (Microsoft Word или Google docs).
  • Keenious анализирует весь ваш документ одним щелчком мыши и находит актуальные научные исследования из коллекции из более чем 60 миллионов научных работ.
  • Сосредоточьтесь на поиске, выделив выделенный фрагмент текста, чтобы провести более точный поиск с учетом всего контекста вашего документа.
  • Легко фильтруйте свой поиск, добавляя темы исследования, диапазоны дат, ключевые слова и многое другое!
  • Добавляйте в закладки свои любимые документы и избегайте ненужной прокрутки с помощью нашей интеллектуальной библиотеки, которая организует закладки по отношению к вашему текущему документу.
  • И еще очень скоро

График академических знаний

Графики знаний (KG) - это глубокая тема с множеством терминологии, относящейся к предметной области, поэтому отличное введение в KG можно найти в этой статье:



Однако, если время имеет существенное значение, ниже приведены несколько кратких, но ни в коем случае не исчерпывающих сведений о графах знаний.

  • Семантические сети AKA: это сеть, которая соединяет несколько сущностей и концепций реального мира и различает различные способы, которыми все они могут соотноситься друг с другом. Практически любую концепцию / сущность / систему можно абстрагировать как граф знаний.
  • Более формально KG - это разнородные графы, в которых может существовать несколько типов узлов и / или ребер. Например, набор данных Movielens можно абстрагировать до KG, состоящего из узлов многих типов, таких как фильмы, актеры, жанры, язык и края которые определяют отношения между двумя сущностями, то есть актерами → звездами → фильмами.
  • Они прямо противоположны однородным графам, где все вершины и ребра одного типа, например, дружеская (социальная) сеть.

Основные объекты (узлы) и отношения (ребра) нашей сети знаний - это цитаты из статей вместе с другими метаданными, относящимися к конкретным статьям, которые обогащают граф.

Используя эти связи узлов и ребер, мы смогли создать граф академических знаний и обучить настраиваемую модель для создания очень богатых встраиваний графов, где каждое вложение представляет уникальный тип узла, включая документы в нашем наборе данных. Эти вложения составляют основу этого поиска и являются тем, что мы скармливаем Weaviate, чтобы сделать каждую уникальную сущность в нашем KG обнаруживаемой.

Система поиска векторных изображений Weaviate

Weaviate - это векторная поисковая система, помогающая обеспечить будущее поиска и открытий искусственного интеллекта. Векторный поиск сейчас находится на важном и действительно интересном перекрестке, где он превращается в мейнстрим поиска, и его преимущества невозможно отрицать.

Подобно тому, как инвертированный индекс изменил то, как мы проводим полнотекстовый поиск, векторные поисковые системы, такие как Weaviate, обеспечивают следующее поколение поиска по неструктурированным данным в тексте, изображениях и, в нашем случае, в графе знаний.

Объекты данных и поиск по смешанному индексу

С нуля архитектура Weaviate хорошо продумана и продумана. Объекты данных в Weaviate основаны на структуре свойств класса с векторами, прикрепленными к каждому объекту данных. Это позволяет легко запрашивать все объекты в Weaviate с помощью GraphQL, особенно когда сложные фильтры и скалярные значения являются частью вашего запроса. Фактически, сочетание традиционного инвертированного индекса и векторного индекса является частью того, что действительно выделяет Weaviate. Пользователи могут выбрать включение или исключение объектов данных с определенными скалярными значениями (текст, числа и т. Д.) Из векторного поиска в одном запросе.

Нам очень понравилось включение традиционной фильтрации поиска, поскольку поиск Keenious уже построен на мощных параметрах фильтрации, которые мы можем отразить в нашем экземпляре Weaviate.

Plug and Play Дизайн

Еще одним интересным аспектом дизайна Weaviate является модульность его API. В частности, API векторных индексов структурирован так, чтобы работать как система надстроек, которые «на будущее» Weaviate адаптируют к текущим улучшениям в векторном поиске.

Текущий тип векторного индекса Weaviate - HNSW, который представляет собой современный алгоритм векторного поиска приближенного ближайшего соседа (ИНС). Поиск ИНС - очень активная область исследований, и все время представляются новые архитектуры индексов, которые могут улучшить отзывчивость и эффективность. Поскольку API векторных индексов Weaviate не зависит от серверной части, это означает, что в будущем, когда к доступным плагинам Weaviate будет добавлен самый последний и самый лучший индекс ИНС, пользователи, вероятно, смогут переключиться с минимальными изменениями в свои настройки, если таковые будут.

Я думаю, что решение потратить время на разработку API, который можно адаптировать к любому векторному индексу в будущем, было действительно отличным выбором. Слишком много систем текстового поиска застревают в использовании методов поиска, созданных более 20 лет назад, которые давно уже превзойдены, но не могут быть заменены из-за слишком тесной связи кода.

Интеграции и модули

К общему модульному подходу Weaviate добавляются функциональные модули, которые они создали поверх поиска, и множество настраиваемых модулей векторизации, которые предоставляют готовые данные для векторных преобразований. Есть несколько действительно мощных модулей, которые можно выбрать прямо из коробки, и также очень легко создать свой собственный модуль, если в вашем сценарии использования есть несколько рутинных шагов преобразования, включенных в процесс. Ниже приведены некоторые из доступных мне модулей:

  • text2vec-contexttionary: очень интересная функция, которая по существу включает контекстуализированное представление каждого объекта данных, добавляемого в базу данных, с использованием как вставляемых значений, так и их отношений в качестве текста, который должен быть векторизован.
  • text2vec-transformers: использует модели встраивания расширенных предложений из преобразователей предложений для создания встраивания абзаца / документа для каждого импорта текстового объекта в Weaviate, так что разработчику не нужно реализовывать логический вывод. кодируйте себя.
  • img2vec-neural: Подобно text2vec, этот модуль автоматически векторизует изображения в векторные представления с использованием больших предварительно обученных моделей компьютерного зрения, чтобы без труда включить семантический поиск на любом изображении.

Горизонтальная масштабируемость

Примечание. На момент написания функции горизонтальной масштабируемости Weaviate только что выпустил свой релиз-кандидат v.1.8.0-rc0 . Ожидается, что к осени 2021 года у него будет стабильный выпуск.

Хотя наш вариант использования в настоящее время может соответствовать одному экземпляру узла Weaviate, мы подозреваем, что в конечном итоге нам понадобится решение для поиска векторов, которое масштабируется до бесконечности. В мире векторного поиска это было непросто. Многие алгоритмы векторного поиска имеют предел производительности после добавления определенного количества векторов. Weaviate также может масштабироваться по горизонтали как кластер узлов, во многом так же, как Elasticsearch в настоящее время делает для текстового поиска. Фактически, горизонтально масштабируемая версия Weaviate состоит из индекса, разбитого на множество различных сегментов или небольших индексов ИНС, которые затем могут быть распределены между несколькими узлами.

При такой настройке фактически нет ограничений на количество объектов, которые можно добавить в кластер Weaviate, поскольку его можно масштабировать для любого варианта использования без каких-либо потерь в производительности.

Горизонтальная масштабируемость, вероятно, является наиболее важной особенностью, необходимой для того, чтобы система векторного поиска была действительно готова к работе. Weaviate действительно хорошо подходит для масштабируемости. Кроме того, вся кодовая база, включая настраиваемую реализацию HNSW, написана на Go, который как язык очень хорошо подходит для больших масштабируемых систем, учитывая его расширенные встроенные параллельные и сетевые библиотеки.

Расширение возможностей поиска в сети знаний с помощью Weaviate

Дополнительное примечание: Любой, кто рассматривает возможность использования Weaviate, может сообщить полезную информацию о том, что у него очень разные требования к памяти в зависимости от того, для какого «режима» он вам нужен. . Если вы активно индексируете и добавляете новые объекты, то есть много операций записи, то потребление памяти, вероятно, будет максимальным. С другой стороны, если вы, как и мы, делаете один большой индекс для множества объектов, вы можете перезапустить Weaviate после и использовать часть памяти, потому что все векторы не нужно хранить в памяти для вставок.

Теперь, когда мы глубоко погрузились в Weaviate и его основные принципы, давайте обсудим, как Keenious на самом деле использует Weaviate для поддержки наших будущих функций поиска в сети знаний.

Хотя Weaviate имеет ряд функциональных модулей, как упоминалось ранее, по своей сути это чисто векторная база данных и поисковая система. Поскольку мы обучили нашу собственную пользовательскую модель для создания богатых встраиваний для элементов в нашей академической сети знаний, все наши векторы были импортированы непосредственно в Weaviate без каких-либо преобразований.

Наш сценарий использования, который начинался с 50 миллионов элементов для индексации, быстро вырос до более чем 60 миллионов, и мы (вместе с командой Weaviate) много узнали о том, как успешно импортировать такое количество элементов в версию Weaviate с одним узлом, сохраняя при этом скорость поиска. и использование памяти (относительно) низкое.

В настоящее время мы создаем индекс и базу данных на нашей собственной рабочей станции, которую все в Keenious с любовью называют Goku. Скоро мы переведем этот шаг на работу в Kubernetes. В Weaviate есть очень полезный инструмент для быстрого создания базового файла docker-compose для начала работы, посмотрите его здесь.

Мы использовали файл docker-compose в качестве основы, добавив некоторые пользовательские переменные среды для скорости сборки мусора Go, которая контролирует агрессивность сборки мусора Go. Нам удалось установить для него значения ниже, чем значение по умолчанию 100, поскольку это помогло снизить использование памяти за счет более медленного импорта. Это то, что варьируется от варианта использования к варианту использования, поэтому экспериментируйте на ходу. Команда Weaviate недавно написала отличный документ о планировании ресурсов с помощью Weaviate.

Weaviate предлагает широкий выбор клиентов в зависимости от того, какой язык вам удобен. На данный момент есть клиенты для Python, Go, Java, Javascript и очень полезный интерфейс командной строки.

Мы выбрали клиент Python, поскольку он, вероятно, является наиболее многофункциональным и лучше всего подходит для итеративной разработки. Если вы собираетесь импортировать много объектов, вам почти наверняка придется использовать массовый API в клиенте. Этот API недавно был полностью переработан, и теперь он предлагает несколько различных способов массового добавления объектов в зависимости от ваших предпочтений. Кроме того, у клиента и сервера полностью включена аутентификация, когда вам нужно настроить контроль доступа к экземпляру.

Советы по настройке Weaviate для вашего случая использования

В настоящее время векторный индекс имеет 4 основных параметра, которые можно в некотором смысле настраивать. Вот эти параметры:

  • efConstruction
  • maxConnections
  • ef
  • vectorCacheMaxObjects

Первые 3 параметра поступают непосредственно из HNSW и относятся к алгоритму, поэтому стоит проверить исходную статью для более подробного объяснения того, что делает каждый параметр. Основное влияние этих параметров, в частности efConstruction и maxConnections, - это компромисс между отзывом / точностью и временем использования / импорта ресурсов.

Увеличение maxConnections обычно улучшает качество индекса, но также увеличивает размер графика HNSW в памяти. Если вы не можете позволить себе увеличенное использование памяти, то параметр, который вы хотите увеличить, может быть efConstruction, но увеличение этого параметра увеличит время импорта.

Параметр ef действительно используется только при поиске и зависит от количества объектов в вашем индексе и ваших требований к задержке. Мы обнаружили, что при использовании более высоких значений для efConstruction во время индексации мы можем позволить себе более низкие значения ef во время поиска.

Будьте осторожны с vectorCacheMaxObjects: вы почти наверняка захотите, чтобы оно было больше или равно количеству объектов в вашем наборе данных во время индексации, но при запуске Weaviate для простого поиска может быть полезно сохранить память это низкий, поскольку вам не нужно хранить все векторы в памяти, график HNSW выполняет тяжелую работу, а векторы просто используются для расчета окончательных оценок расстояния.

Заключение

Вот и все! В Keenious мы очень довольны Weaviate как за качество векторного поиска, так и за все дополнительные функции, которые действительно меняют правила игры в векторном поиске.

Выбор Weaviate позволил нам полностью сосредоточиться на разработке потрясающих функций для нашей поисковой системы, которые включают более 60 миллионов встраиваний сетей знаний, которые мы храним в Weaviate. Мы можем подойти к решению академических задач поиска, поставив во главу угла продукт, а не технические требования к реализации, и это здорово.

В скором времени (конец осени 2021 г.) мы создали несколько довольно забавных функций, и мы с нетерпением ждем возможности поделиться ими с вами после их выпуска, так что следите за обновлениями.

P.S. Команда Weaviate (SeMI Technologies) очень дружелюбна и очень заинтересована со своими пользователями. Они очень помогли нам начать работу с Weaviate и даже сосредоточили свое время на исправлении ошибок, которые напрямую повлияли на наш сценарий использования. Если у вас есть какие-либо вопросы, то лучший способ связаться с ними - это их слабость.

Попробуйте Keenious сегодня бесплатно, загрузив или установив наше дополнение на keenious.com.