如何在 Python 中执行向量搜索并查找文档的语义相似性?
最后更新日期:2024 年 4 月 20 日
问题
如何在 Python 中执行向量搜索并查找文档的语义相似性?
答案
要在 Python 中执行向量相似性搜索,首先创建索引以执行相似文档的推荐。对于模型 `all-distilroberta-v1`,请确保 `DIM` 为 `768`(参见示例)。
FT.CREATE vss_index ON HASH PREFIX 1 "doc:" SCHEMA name TEXT content TEXT creation NUMERIC SORTABLE update NUMERIC SORTABLE content_embedding VECTOR FLAT 6 TYPE FLOAT32 DIM 768 DISTANCE_METRIC COSINE
文档建模
然后导入建模库,为了使用 `all-distilroberta-v1`,您必须包含库 `SentenceTransformer`。
from sentence_transformers import SentenceTransformer
现在我们需要生成文档的向量表示。使用合适的模型计算以下内容的向量嵌入:
content = "This is an arbitrary content"
model = SentenceTransformer('sentence-transformers/all-distilroberta-v1')
embedding = model.encode(content).astype(np.float32).tobytes()
现在您可以将嵌入存储在 Hash 中,该 Hash
doc = { "content_embedding" : embedding,
"name" : "Document's title",
"state" : document.state}
conn.hset("doc:{}".format(pk), mapping=doc)
搜索相似文档
为了搜索与给定文档相似的文档,您将按照之前创建向量嵌入数据库时的方式对文档进行建模。
model = SentenceTransformer('sentence-transformers/all-distilroberta-v1')
new_embedding = model.encode(content).astype(np.float32).tobytes()
然后执行相似性搜索。
q = Query("*=>[KNN 3 @v $vec]").return_field("__v_score").dialect(2)
res = conn.ft("vss_index").search(q, query_params={"vec": new_embedding})