Использование реляционной базы данных для запроса неструктурированных данных

Использование реляционной базы данных для запроса неструктурированных данных

24 ноября 2022 г.

Реляционные базы данных были основой некоторых из самых важных приложений в мире в течение последних пятидесяти лет. Хотя доступны и другие базы данных, такие как базы данных Key Value, Document и Graph, реляционные базы данных остаются наиболее популярными. Основная причина этого заключается в том, что SQL, или язык реляционных баз данных, прост в освоении новичками и эффективен в применении экспертами.

Однако, когда мы вступаем в новую эру искусственного интеллекта, хранения структурированных данных уже недостаточно. Сегодня 80% данных в мире представляют собой неструктурированные данные, включая необработанный текст, изображения, аудио, видео и множество других типов файлов. Эти неструктурированные данные содержат большое количество важной информации, которую мы не можем получить с помощью текущей системы реляционных баз данных. Хорошая новость заключается в том, что последние достижения в области машинного обучения позволяют нам понимать неструктурированные данные способами, которые ранее были невозможны, и мы можем извлечь выгоду из этой возможности, сделав эту технологию более доступной.

Реляционная база данных для неструктурированных данных

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

Основная концепция Superinsight заключается в следующем

  • Superinsight построен на основе PostgreSQL, поэтому он обладает всеми функциями PostgreSQL, а также возможностями машинного обучения.
  • Superinsight автоматически анализирует и индексирует любые данные, хранящиеся в столбцах с типом данных [ТЕКСТ].
  • Необработанные текстовые данные сохраняются как значения, а данные на основе файлов, такие как изображения, сохраняются как ссылка на фактическое местоположение.

Установка

Superinsight можно запускать как отдельный компьютер или как часть среды оркестрации, такой как Kubernetes. Для этой демонстрации будет использоваться автономная версия.

Docker — это самый удобный способ установки Superinsight. Перед запуском команды не забудьте изменить имя пользователя и пароль.

docker run 
--name superinsight-db-standalone 
-p 5432:5432 
-e SUPERINSIGHT_USER=admin 
-e SUPERINSIGHT_PASSWORD=password 
-e ENV_IMAGE_TO_LABEL=True 
superinsight/superinsight-db-standalone:latest

:::подсказка Для этой демонстрации мы собираемся установить флаг ENV_IMAGE_TO_LABEL=True, эта опция позволяет нам искать изображения на основе текста.

:::

Подключение

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

postgres://admin:password@127.0.0.1:5432/superinsight

Хранение и поиск неструктурированных данных

Superinsight может хранить как структурированные, так и неструктурированные данные, используя стандартный SQL. Superinsight будет анализировать неструктурированные данные только в том случае, если они хранятся в столбце с типом данных [ТЕКСТ]. В следующем примере мы будем использовать набор данных продуктов Flipkart.

Создать таблицу

Для создания таблицы можно использовать стандартный оператор CREATE TABLE. Поскольку мы хотим, чтобы Superinsight анализировал только столбцы под названием, изображением и описанием как неструктурированные данные, мы используем тип данных [ТЕКСТ] для этих столбцов. Кроме того, каждая таблица должна иметь первичный ключ; это требование для SuperInsight.

CREATE TABLE mldb.product (
    _id serial PRIMARY KEY,
    category varchar(500),
    brand varchar(500),
    name TEXT,
    image TEXT,
    description TEXT,
    price float8,
    url varchar(500)
);

Вставить записи

Для вставки записей можно использовать стандартные операторы SQL Insert. Значения имен и описаний столбцов хранятся в базе данных, но для изображений мы сохраняем URL-адрес изображения. Superinsight автоматически считывает и индексирует изображения на основе каждого URL-адреса изображения. В этом примере мы добавим 20 записей в нашу базу данных. Сценарий SQL можно загрузить здесь.

Семантический поиск необработанного текста

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

:::подсказка Примечание: Superinsight должен загрузить последнюю модель семантического поиска в вашу базу данных перед нашим первым поиском. В зависимости от пропускной способности Интернета это может занять 1–2 минуты.

:::

SELECT predictions.score, mldb.product.image, mldb.product.name, mldb.product.description
FROM mldb.product
JOIN model.semantic_search
ON model.semantic_search.inputs = mldb.product.description
WHERE model.semantic_search.similar = 'Something to sit on'
ORDER BY predictions.score DESC

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

Семантический поиск изображения к изображению

Поиск изображений аналогичен поиску необработанного текста. Все, что нужно изменить, — это значение предложения WHERE и условие предложения ON. Мы будем использовать URL-адрес изображения в качестве значения поиска для поиска записей на основе схожести изображений.

SELECT predictions.score, mldb.product.image, mldb.product.name, mldb.product.description
FROM mldb.product
JOIN model.semantic_search
ON model.semantic_search.inputs = mldb.product.image
WHERE model.semantic_search.similar = 'http://img5a.flixcart.com/image/short/u/4/a/altht-3p-21-alisha-38-original-imaeh2d5vm5zbtgg.jpeg'
ORDER BY predictions.score DESC

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

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

Мы также можем искать изображения, описывая контекст изображения текстом. В следующем примере мы ищем изображения «женское платье».

SELECT predictions.score, mldb.product.image, mldb.product.name, mldb.product.description
FROM mldb.product
JOIN model.semantic_search
ON model.semantic_search.inputs = mldb.product.image
WHERE model.semantic_search.similar = 'woman dress'
ORDER BY predictions.score DESC

Заключение

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


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE