Семантический поиск в PostgreSQL - PullRequest
0 голосов
/ 15 сентября 2018

Я знаю, что в PostgreSQL оптимизирован поиск по сходству триграмм и даже индексирование (CREATE INDEX trgm_idx ON table USING gist (column gist_trgm_ops);), которое можно использовать непосредственно из Django (веб-фреймворк):

Model.objects.filter(attribute__trigram_similar=query_string)

Но что, если вместо поверхностного сходства я хочу выполнить запрос семантического сходства для объектов базы данных? (что явно отличается от классического сходства триграмм).

Хорошим примером может служить универсальный кодировщик предложений Google , где я бы преобразовал все строки в 512 векторов вложения (используя библиотеку) и выполнил запрос, рассчитав нормализованное произведение точек (косинусное сходство) и получив объект с наибольшим сходством (или, возможно, n объектов со сходством >=0.50).

Самое простое, что нужно сделать - это выполнить итерацию (на уровне инфраструктуры) объектов базы данных, но это крайне неэффективно (особенно если база данных велика), поэтому я бы предпочел найти способ выполнения запроса к базе данных. уровень (и, возможно, если это возможно, настроить оптимальную индексацию для семантического поиска?).


Как лучше всего выполнить пользовательский поиск сходства в базе данных предварительно векторизованных объектов?

Что если я получу точечное произведение всех объектов в предварительно векторизованной базе данных вручную?

Спасибо!

...