В последнее время я много слышал о «векторной базе данных». Проведя некоторое исследование, я обнаружил, что это связано с «семантическим поиском». Давайте разберемся с этими понятиями и зачем они нам нужны.

Семантический поиск: разные люди имеют разное значение. Однако здесь я имею в виду «поиск по намерению/значению запроса». Цель состоит в том, чтобы получить более точные результаты поиска, помимо простого поиска по ключевым словам. Предположим, вы хотите найти «кто является футболистом номер 1 в мире», на самом деле вы имеете в виду «кто является лучшим футболистом в мире» или «лучшие футболисты в мире», а не «какой футболист в мире носит одежду». рубашка «номер 1». Это может быть очень полезно в любом сценарии поиска (не только на естественном языке, но и в аудио, изображениях и т. д.).



Вектор: вектор — это просто список чисел. Для обработки естественного языка вы можете токенизировать слово и перевести предложение в список индексов слов.

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





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

Векторная база данных. База данных векторов индексирует и хранит вложения векторов для быстрого поиска и поиска сходства с такими возможностями, как операции CRUD, фильтрация метаданных и горизонтальное масштабирование. Традиционная база данных не предназначена для простого хранения, индексирования и поиска векторов.



Pinecone — это векторная база данных, и опять же, лучшее, что можно сделать для изучения нового — это репозиторий с примерами рабочего кода.



В этой записной книжке показано, как выполнять семантический поиск с помощью Pinecone. Это довольно понятно, поэтому я просто описываю основные шаги, вы можете следить за блокнотом:

  1. Используйте набор данных дубликатов вопросов Quora, который содержит пары вопросов, которые не совпадают синтаксически, но имеют одинаковое значение.
  2. Подключитесь к Pinecore и создайте индекс для хранения векторов
  3. Для каждого вопроса Quora создайте кортеж (идентификатор, векторы, метаданные) и вставьте его в индекс Pinecore.
  4. Используйте пример вопроса Quora для поиска похожих вопросов в указателе.

Приложение