量化
sentence_transformers.quantization
定义了用于执行嵌入量化的各种实用函数。
注意
嵌入量化不同于模型量化。前者旨在缩小嵌入的大小,以加快语义搜索/检索速度并减少内存和磁盘空间占用。后者则指降低模型权重的精度以加速推理。本页仅提供嵌入量化的文档。
- 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 [source]
将嵌入量化到更低的精度。这可以用于减少内存占用并提高相似度搜索的速度。支持的精度有“float32”、“int8”、“uint8”、“binary”和“ubinary”。
- 参数:
embeddings – 未量化的(例如浮点型)嵌入,用于量化到给定精度
precision – 要转换到的精度。选项包括“float32”、“int8”、“uint8”、“binary”、“ubinary”。
ranges (可选[np.ndarray]) – 嵌入量化的范围。这仅用于 int8 量化,其中范围指的是每个维度的最小值和最大值。因此,它是一个形状为 (2, embedding_dim) 的二维数组。默认值为 None,表示范围将从校准嵌入中计算。
calibration_embeddings (可选[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] [source]
使用 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] [source]
使用 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”、“ubinary”或“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}, …], …] 搜索所花费的时间是一个浮点值。