通过 AstraDB/Cassandra 实现向量搜索-通过最少的代码进行理解
首先
是什麼?
本文的目的是什麼?
你是否了解向量搜索?
在这篇文章中,我们假设读者已经对”向量搜索”有一定了解,并旨在介绍一种新的执行该操作的方法。我们希望能够简洁明了地传达给技术人员所需的实质性信息,以帮助他们建立一个具体的概念。
请将以下内容用中文进行重述,只需要一个选项:假设读者已经有对Cassandra和AstraDB的基本理解。
通過閱讀這篇文章:
-
- ベクトル検索の実行について、他のテクノロジーでの経験のある人は、新しい実行手段として、イメージを持つことができるでしょう。
-
- CassandraとPythonライブラリについての知識があれば、何がおこなわれているか、さらに具体的に理解できるでしょう。
- AstraDBについての知識、あるいは関心があれば、実際にAstraDBを使って、ベクトル検索を実行することも難しくないでしょう。
介绍(2023年6月)
Apache Caddandre:CEP-30:通过存储附属索引进行近似最近邻(ANN)向量搜索。
状态已更改为“已采纳”。
AstraDB 阿斯特拉数据库
以上的功能可以用作预览。
点击上述按钮创建新的数据库,将生成一个预览模式的数据库,并在概览页面中显示Vector Search文档的链接,如下所示。
实践
基本的流程
-
- 将值向量化
-
- 执行数据集的注册和索引化
- 执行向量搜索
将值进行向量化
在这里,我们使用SentenceTransformers的MiniLM。
!pip sentence-transformers
from sentence_transformers import SentenceTransformer
transformer = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
embedding = transformer.encode(text).tolist()
注册和索引化数据集
数据表定义
存储向量数据的表定义。
session.execute(f"""CREATE TABLE IF NOT EXISTS vector_preview.products_table
(product_id int,
chunk_id int,
product_name text,
description text,
price text,
description_embedding vector<float, 384>,
PRIMARY KEY (product_id, chunk_id))""")
指标定义
创建索引。
session.execute(f"""CREATE CUSTOM INDEX IF NOT EXISTS minilm_desc ON vector_preview.products_table (description_embedding) USING 'org.apache.cassandra.index.sai.StorageAttachedIndex'""")
数据录入
query = SimpleStatement(
f"""
INSERT INTO vector_preview.products_table
(product_id, chunk_id, product_name, description, price, description_embedding)
VALUES (%s, %s, %s, %s, %s, %s)
"""
)
display(row)
session.execute(query, (product_id, chunk_id, product_name, description, pricevalue, embedding))
执行向量搜索
query = SimpleStatement(
f"""
SELECT *
FROM demo.products_table
ORDER BY description_embedding ANN OF {embedding} LIMIT 5;
"""
)
results = session.execute(query)
top_5_products = results._current_rows
for row in top_5_products:
print(f"""{row.product_id}, {row.product_name}, {row.description}, {row.price}\n""")
最后
本篇文章的撰写主要是为了整理我自己的理解,但是我意识到可能有很多人会认为解释不够友善。然而,正如我在开头整理的那样,如果我们能够建立起前提,我希望内容传达得更加简洁明了。
补充(2023年7月19日)
AstraDB 的向量搜索功能已经正式推出。
2023年7月18日,我们在上述中介绍的AstraDB的向量搜索功能已经转为正式可用,并可在生产环境中使用。
示例/教程
在下方的GitHub存储库中,我们公开了可以验证其运行情况的样本/教程(解释和评论提供了英语和日语),该样本/教程是Apache Cassandra的向量搜索扩展功能,仅介绍了其精华。