参考文档:Redis as a vector database quick start guide | Docs
2、向量数据库在机器学习中大量使用,其中嵌入表示是一个重要的原因
【嵌入表示】:在机器学习中,经常需要将数据转换为嵌入表示(embedding),即将数据转换为向量形式。这些嵌入表示可以捕捉数据之间的复杂关系,并用于各种机器学习任务。向量数据库能够直接存储和查询这些嵌入表示,使得机器学习模型能够更高效地利用这些数据。
1、选择一个机器学习模型:
本次选用预处理模型: MS MARCO数据集,它被广泛的应用于搜索模型,聊天模型以及其他的AI场景中;
说明:MS MARCO是一个文本搜索排序领域最具代表性的数据集。它收录了微软Bing搜索引擎和Cortana智能助手近百万查询词与800万文档在内的真实搜索场景数据。
数据模型引用:
from sentence_transformers import SentenceTransformer
embedder = SentenceTransformer('msmarco-distilbert-base-v4')
2)创建矢量化嵌入表示
keys = sorted(client.keys("bikes:*"))
# >>> ['bikes:001', 'bikes:002', ..., 'bikes:011']
将key值用作JSON的参数。使用get命令,以及JSONPath表达式$.description,获取列表信息。然后,将列表传递给encode方法,以获得矢量化嵌入的列表:
descriptions = client.json().mget(keys, "$.description")
descriptions = [item for sublist in descriptions for item in sublist]
embedder = SentenceTransformer("msmarco-distilbert-base-v4")
embeddings = embedder.encode(descriptions).astype(np.float32).tolist()
VECTOR_DIMENSION = len(embeddings[0])
# >>> 768
现在,接下来JSON将矢量化描述添加到Redis中的JSON文档中。SET命令。以下命令在JSONPath$.description_embeddings下的每个文档中插入一个新字段。
pipeline = client.pipeline()
for key, embedding in zip(keys, embeddings):
pipeline.json().set(key, "$.description_embeddings", embedding)
pipeline.execute()
# >>> [True, True, True, True, True, True, True, True, True, True, True]
获取一个数据:get命令
res = client.json().get("bikes:010")
# >>>
# {
# "model": "Summit",
# "brand": "nHill",
# "price": 1200,
# "type": "Mountain Bike",
# "specs": {
# "material": "alloy",
# "weight": "11.3"
# },
# "description": "This budget mountain bike from nHill performs well..."
# "description_embeddings": [
# -0.538114607334137,
# -0.49465855956077576,
# -0.025176964700222015,
# ...
# ]
# }