AI News HubLIVE
站內改寫2 分鐘閱讀

為Pinecone生成測試數據 | Pinecone

本文介紹瞭如何為Pinecone生成測試數據,包括使用Parquet文件生成器、向量嵌入生成器等工具,以及如何將數據導入Pinecone。文章強調了模塊化工作流的重要性,並討論了數據規模對測試的影響。

作為一名Pinecone解決方案工程師,John Ward在過去一年中開發了多個內部工具和示例,用於測試平台的各個部分。本文是該系列的第一篇,重點介紹如何生成測試數據——一個看似簡單但在大規模下至關重要的環節。

生成測試數據的需求源於不同測試類型對數據集的不同要求。對於向量搜索測試,隨機向量僅適用於測試寫入吞吐量或查詢延遲,而召回率和準確性測試則需要基於真實文本的嵌入。為此,Ward設計了一套工具集,包括Parquet文件生成器、向量嵌入生成器、使用本地LLM進行Parquet分類的工具,以及按類別命名空間重新分區Parquet的工具。

工作流的第一步是生成源數據並準備嵌入和導入。Ward選擇了Hugging Face上的stanford-oval/ccnews數據集,因為它提供廣泛的新聞文章和豐富的元數據(標題、作者、來源URL、發佈日期、類別等)。數據以Parquet格式存儲,並符合Pinecone批量導入的結構要求:id字段使用UUID,values字段存儲稠密向量,metadata字段為JSON字符串。

在嵌入模型的選擇上,Ward使用了BAAI/bge-large-en-v1.5,生成1024維稠密向量。雖然Pinecone也提供託管嵌入模型,但本地生成可以模擬客户常見的自生成向量工作流。

第一個版本的腳本直接流式處理數據集、分塊文本、本地生成嵌入並直接upsert到Pinecone索引。這種方法適合小規模測試,但存在元數據大小限制(40KB)和空值處理問題。腳本中包含了迭代截斷長文本和過濾空值的邏輯。

然而,對於數百萬或數億向量,直接upsert的效率極低。因此,Ward將工作流拆分為兩個階段:第一階段僅將文本記錄寫入Parquet文件(values列為空列表),第二階段讀取這些文件、生成嵌入並寫入新的Parquet文件。這種分離使得嵌入生成可以在多台機器上並行處理,支持Apple M系列、NVIDIA GPU等異構環境。

第二階段使用PyArrow定義明確的Parquet模式,確保values列為LIST類型。每個記錄包含id、空values和元數據JSON字符串。分區大小通常為10,000到20,000條記錄,便於分發和錯誤重試。

第三階段是嵌入生成腳本,它自動檢測設備(使用mlx_embedding_models在Apple Silicon上運行,sentence-transformers在CUDA上,或CPU回退),讀取Parquet文件中的文本,生成嵌入並填充values列。輸出文件可直接用於Pinecone批量導入。

批量導入時,將Parquet文件複製到對象存儲(如Amazon S3),然後運行Pinecone的批量導入命令。對於小規模測試,可以直接upsert;對於大規模數據集,批量導入更高效。

Ward總結了幾點經驗:保持工作流模塊化;明確測試目標(延遲/吞吐量 vs. 召回率);注意元數據大小限制和空值處理。整個流程可重複使用,適用於不同規模、模型和硬件配置。