跳转到主要内容

引言

Hacker News 数据集包含 2874 万条帖子及其嵌入向量。这些嵌入向量由 SentenceTransformers 模型 all-MiniLM-L6-v2 生成。每个嵌入向量的维度为 384 该数据集可用于讲解基于用户生成文本数据构建的大规模真实世界向量搜索应用在设计、容量规划和性能等方面的考量。

数据集详情

ClickHouse 将包含嵌入向量的完整数据集作为单个 Parquet 文件提供,文件位于一个 S3 bucket 中。 我们建议用户先参考文档进行容量规划,以估算该数据集所需的存储和内存资源。

步骤

1

创建表

创建 hackernews 表,用于存储帖子、其嵌入向量及相关属性:
id 只是一个递增的整数。附加属性可在谓词中使用,以帮助理解 如文档中所述的、结合后过滤/前过滤的向量相似性搜索
2

加载数据

要从 Parquet 文件中加载数据集,请运行以下 SQL 语句:
向表中插入 2874 万行数据需要几分钟时间。
3

构建向量相似度索引

运行以下 SQL,在 hackernews 表的 vector 列上定义并构建向量相似度索引:
有关索引创建和搜索的参数及性能注意事项,请参见文档。 上述语句中,HNSW 超参数 Mef_construction 分别使用了 64 和 512。 你需要通过评估索引构建时间和搜索结果质量, 为这些参数谨慎选择最佳配置值。对于完整的 2874 万数据集,构建并保存索引甚至可能需要几分钟到几小时,具体取决于可用的 CPU 核心数量和存储带宽。
4

执行 ANN 搜索

向量相似度索引构建完成后,向量搜索查询会自动使用该索引:
Query
首次将向量索引加载到内存中可能需要几秒到几分钟。
5

为搜索查询生成嵌入向量

Sentence Transformers 提供本地化、易于使用的嵌入模型,用于捕捉句子和段落的语义。此 HackerNews 数据集包含由 all-MiniLM-L6-v2 模型生成的向量嵌入。下方提供了一个示例 Python 脚本,演示如何使用 sentence_transformers Python 包以编程方式生成嵌入向量。搜索嵌入向量随后作为参数传入 SELECT 查询中的 cosineDistance() 函数。
以下展示了运行上述 Python 脚本及相似度搜索结果的示例 (每条结果仅打印前 20 个帖子各自的前 100 个字符) :

摘要 Demo 应用

上述示例演示了如何使用 ClickHouse 进行语义搜索和文档检索。接下来将介绍一个简单却极具潜力的生成式 AI 示例应用。该应用程序执行以下步骤:
  1. 接收用户输入的 topic
  2. 使用 SentenceTransformers 和模型 all-MiniLM-L6-v2主题 生成 embedding 向量
  3. 使用 hackernews 表上的向量相似度搜索来检索高度相关的帖子/评论
  4. 使用 LangChain 和 OpenAI gpt-3.5-turbo Chat API 对第 3 步中检索到的内容进行总结。 第 3 步中检索到的帖子/评论会作为 上下文 传递给 Chat API,是 Generative AI 的关键一环。
下面首先列出运行摘要应用程序的示例,随后是该应用程序的完整代码。运行此应用程序需要在环境变量 OPENAI_API_KEY 中设置 OpenAI API key。OpenAI API key 可在 https://platform.openai.com 注册后获取。该应用程序展示了一个 Generative AI 用例,适用于多个企业领域,例如: 客户情感分析、技术支持自动化、用户对话挖掘、法律文件、医疗记录、 会议记录、财务报表等。
上述应用程序的代码:
最后修改于 2026年6月29日