我知道PostgreSQL有三叉图相似性搜索,甚至索引也为此进行了优化(
CREATE INDEX trgm_idx ON table USING gist (column gist_trgm_ops);
),可直接从Django(web框架)使用:
Model.objects.filter(attribute__trigram_similar=query_string)
但是,如果我想对数据库对象执行语义相似性查询,而不是表面相似性,该怎么办?(这明显不同于经典的三叉图相似性)。
谷歌就是一个很好的例子
universal sentence encoder
,其中我将所有字符串转换为512维嵌入向量(使用库),通过计算标准化点积(余弦相似性)执行查询,并生成具有最高相似性的对象(或者可能是n个具有相似性的对象)
>=0.50
).
最简单的方法是(在框架级别)对数据库对象进行迭代,但这是非常低效的(尤其是在数据库很大的情况下),因此我更愿意找到一种在数据库级别执行查询的方法(如果可能的话,还可以为语义搜索设置最佳索引?)。
在预矢量化对象的数据库上执行这种自定义相似性搜索的最佳方式是什么?
如果我手动得到预矢量化数据库中所有对象的点积呢?
非常感谢。