量化¶
sentence_transformers.quantization 定义了不同的有用函数来执行嵌入量化。
备注
嵌入量化 <../../../examples/applications/embedding-quantization/README.html>
_ 与模型量化不同。前者缩小了嵌入的大小,使得语义搜索/检索更快,并且需要更少的内存和磁盘空间。后者指的是降低模型权重的精度以加快推理速度。本页仅展示前者的文档。
- sentence_transformers.quantization.quantize_embeddings(embeddings: Tensor | ndarray, precision: Literal['float32', 'int8', 'uint8', 'binary', 'ubinary'], ranges: ndarray | None = None, calibration_embeddings: ndarray | None = None) ndarray [源代码][源代码]¶
将嵌入量化为较低的精度。这可以用来减少内存占用并提高相似性搜索的速度。支持的精度有 "float32"、"int8"、"uint8"、"binary" 和 "ubinary"。
- 参数:
embeddings -- 未量化的(例如浮点数)嵌入向量,需要量化到给定的精度
precision -- 要转换的精度。选项有 "float32", "int8", "uint8", "binary", "ubinary"。
ranges (Optional[np.ndarray]) -- 嵌入量化的范围。这仅用于 int8 量化,其中范围指的是每个维度的最小值和最大值。因此,它是一个形状为 (2, embedding_dim) 的二维数组。默认值为 None,这意味着范围将从校准嵌入中计算。
calibration_embeddings (Optional[np.ndarray]) -- 用于量化过程中校准的嵌入。这仅用于 int8 量化,校准嵌入可用于计算范围,即每个维度的最小值和最大值。默认值为 None,这意味着范围将从查询嵌入中计算。不推荐这样做。
- 返回:
使用指定精度的量化嵌入
- sentence_transformers.quantization.semantic_search_faiss(query_embeddings: np.ndarray, corpus_embeddings: np.ndarray | None = None, corpus_index: faiss.Index | None = None, corpus_precision: Literal['float32', 'uint8', 'ubinary'] = 'float32', top_k: int = 10, ranges: np.ndarray | None = None, calibration_embeddings: np.ndarray | None = None, rescore: bool = True, rescore_multiplier: int = 2, exact: bool = True, output_index: bool = False) tuple[list[list[dict[str, int | float]]], float, faiss.Index] [源代码][源代码]¶
使用 FAISS 库执行语义搜索。
如果满足以下条件,将执行重新评分:1.
rescore
为 True 2. 查询嵌入未量化 3. 语料库已量化,即语料库精度不是 float32 只有当这些条件都为真时,我们才会搜索top_k * rescore_multiplier
个样本,然后重新评分以仅保留top_k
。- 参数:
query_embeddings -- 查询句子的嵌入。理想情况下不进行量化,以允许重新评分。
corpus_embeddings -- 语料库句子的嵌入。应使用
corpus_embeddings
或corpus_index
之一,不能同时使用。嵌入可以量化为 "int8" 或 "binary" 以提高搜索效率。corpus_index -- 语料库句子的FAISS索引。应使用
corpus_embeddings
或corpus_index
之一,不能同时使用两者。corpus_precision -- 语料嵌入的精度。选项有 "float32"、"int8" 或 "binary"。默认是 "float32"。
top_k -- 要检索的顶部结果数量。默认值为 10。
ranges -- 嵌入量化的范围。这仅用于 int8 量化,其中范围指的是每个维度的最小值和最大值。因此,它是一个形状为 (2, embedding_dim) 的二维数组。默认值为 None,这意味着范围将从校准嵌入中计算。
calibration_embeddings -- 用于量化过程中校准的嵌入。这仅用于 int8 量化,校准嵌入可用于计算范围,即每个维度的最小值和最大值。默认值为 None,这意味着范围将从查询嵌入中计算。不推荐这样做。
rescore -- 是否执行重新评分。请注意,只有在查询嵌入未量化且语料库量化的情况下,即语料库精度不是“float32”时,才会使用重新评分。默认值为True。
rescore_multiplier -- 重评分时的过采样因子。代码现在将搜索
top_k * rescore_multiplier
个样本,然后重新评分以仅保留top_k
个。默认值为 2。exact -- 是否使用精确搜索或近似搜索。默认值为 True。
output_index -- 是否输出用于搜索的FAISS索引。默认是False。
- 返回:
包含搜索结果列表和搜索所用时间的元组。如果
output_index
为 True,元组还将包含用于搜索的 FAISS 索引。- 抛出:
ValueError -- 如果同时提供了
corpus_embeddings
和corpus_index
,或者两者都没有提供。
搜索结果列表的格式为:[[{"corpus_id": int, "score": float}, ...], ...] 搜索所用时间为浮点数值。
- sentence_transformers.quantization.semantic_search_usearch(query_embeddings: np.ndarray, corpus_embeddings: np.ndarray | None = None, corpus_index: usearch.index.Index | None = None, corpus_precision: Literal['float32', 'int8', 'binary'] = 'float32', top_k: int = 10, ranges: np.ndarray | None = None, calibration_embeddings: np.ndarray | None = None, rescore: bool = True, rescore_multiplier: int = 2, exact: bool = True, output_index: bool = False) tuple[list[list[dict[str, int | float]]], float, usearch.index.Index] [源代码][源代码]¶
使用 usearch 库执行语义搜索。
如果满足以下条件,将执行重新评分:1.
rescore
为 True 2. 查询嵌入未量化 3. 语料库已量化,即语料库精度不是 float32 只有当这些条件都为真时,我们才会搜索top_k * rescore_multiplier
个样本,然后重新评分以仅保留top_k
。- 参数:
query_embeddings -- 查询句子的嵌入。理想情况下不进行量化,以允许重新评分。
corpus_embeddings -- 语料库句子的嵌入。应使用
corpus_embeddings
或corpus_index
之一,不能同时使用。嵌入可以量化为 "int8" 或 "binary" 以提高搜索效率。corpus_index -- 用于语料库句子的usearch索引。应使用
corpus_embeddings
或corpus_index
中的一个,不能同时使用两者。corpus_precision -- 语料嵌入的精度。选项有 "float32"、"int8" 或 "binary"。默认是 "float32"。
top_k -- 要检索的顶部结果数量。默认值为 10。
ranges -- 嵌入量化的范围。这仅用于 int8 量化,其中范围指的是每个维度的最小值和最大值。因此,它是一个形状为 (2, embedding_dim) 的二维数组。默认值为 None,这意味着范围将从校准嵌入中计算。
calibration_embeddings -- 用于量化过程中校准的嵌入。这仅用于 int8 量化,校准嵌入可用于计算范围,即每个维度的最小值和最大值。默认值为 None,这意味着范围将从查询嵌入中计算。不推荐这样做。
rescore -- 是否执行重新评分。请注意,只有在查询嵌入未量化且语料库量化的情况下,即语料库精度不是“float32”时,才会使用重新评分。默认值为True。
rescore_multiplier -- 重评分时的过采样因子。代码现在将搜索
top_k * rescore_multiplier
个样本,然后重新评分以仅保留top_k
个。默认值为 2。exact -- 是否使用精确搜索或近似搜索。默认值为 True。
output_index -- 是否输出用于搜索的usearch索引。默认为False。
- 返回:
包含搜索结果列表和搜索所用时间的元组。如果
output_index
为 True,元组还将包含用于搜索的 usearch 索引。- 抛出:
ValueError -- 如果同时提供了
corpus_embeddings
和corpus_index
,或者两者都没有提供。
搜索结果列表的格式为:[[{"corpus_id": int, "score": float}, ...], ...] 搜索所用时间为浮点数值。