完整题目
分块后的文本怎样转成向量并建立索引?嵌入模型、距离、Flat/HNSW/IVF/PQ 与向量服务应如何基于数据和约束选择?
本文目录
1. 定义可重建的输入
每个 chunk 不只包含文本,还应带稳定 chunk_id、doc_id、原文位置、文档/权限版本、语言、时间和内容哈希。先检查空文本、重复、解析顺序、超出模型输入限制和越权内容。切分长度由文档结构、tokenizer、引用粒度与评测决定,不存在“小于 512 就直接用某模型”的通用规则。
2. 选择并运行嵌入模型
从任务语言、许可与数据处理位置、最大输入、维度、是否需要 query/document 前缀、归一化和距离度量筛出候选。Sentence Transformers 一类双编码器适合将查询与文档分别编码并预计算文档向量;普通 BERT 的 CLS/mean pooling 未经针对性训练时不应自动视为高质量检索嵌入。品牌和榜单只能用于候选筛选,最终用自己的查询—证据标注验证。
批量编码时固定模型 revision、tokenizer、前缀模板、截断策略、dtype 与归一化方式,记录失败项并可重试。若模型输出已归一化,内积可用于余弦排序;否则距离配置必须与模型训练和归一化契约一致。不要把不同模型、不同维度的分数直接比较。
领域适配可以采用对比学习、hard negatives 或其他方法,但需要训练/验证/独立测试切分和基线。LoRA 只是参数更新方式,不能保证避免灾难性遗忘。
3. 以精确搜索建立真值
先用 Flat 或其他精确实现为固定查询计算近邻真值,再比较 HNSW、IVF、SQ/PQ 等候选的 Recall@K、延迟、内存和构建成本。