Azure OpenAI ada-002超Token限制:分块拼接后如何用PCA降维?
超8K Token文档的Azure OpenAI ada-002嵌入处理与PCA降维方案
超8K Token文档的嵌入处理流程
- 准备文档文本,完成清洗、标准化、移除停用词操作,确保符合Azure OpenAI ada-002的Token计数规则
- 按空格分割文本为单词,完成Token化
- 若文档Token总量超过8192,将其拆分为多个最大Token数为8192的子文档
- 将每个子文档传入Azure OpenAI ada-002接口,获取对应的嵌入向量
- 将所有子文档的浮点嵌入向量拼接为单个向量,作为原文档的整体表示
- 为实现基于问题的相似文档检索,需将拼接后的高维向量降维至与问题向量一致的1536维
示例说明
一份10K Token的文档会被拆分为8K和2K的两个子文档,各自生成1536维的嵌入向量,拼接后得到3072维的向量,无法直接与1536维的问题向量做相似度对比,因此必须将其降回1536维。
基于PCA的降维解决方案(C#)
采用PCA实现降维时,常见示例代码要求输入为二维数组(double[][]),但我们的拼接向量是一维数组(double[]),只需做简单格式转换即可适配:
// 假设这是拼接后的高维向量(示例为3072维) double[] combinedEmbedding = new double[3072]; // ... 填充实际拼接得到的向量数据 // 将一维向量包装为二维数组(单样本集合) double[][] data = new double[][] { combinedEmbedding }; // 初始化PCA实例 var pca = new PrincipalComponentAnalysis() { Method = PrincipalComponentMethod.Center, Whiten = false }; // 训练PCA模型 pca.Learn(data); // 将向量降维至目标维度1536 double[][] reducedData = pca.Transform(data, 1536); // 从结果中提取降维后的一维向量 double[] reducedEmbedding = reducedData[0];
关键说明
- 把单个一维向量包装成包含一个元素的二维数组,满足PCA方法对输入样本集合的格式要求
- 调用
Transform方法时指定目标维度为1536,与问题向量维度保持一致 - 最终从返回的二维数组中取出首元素,即为适配后的1536维文档向量
内容的提问来源于stack exchange,提问作者Stavros Koureas
相关产品推荐
相关产品推荐

