量化

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[源代码]

将嵌入量化为较低的精度。这可以用于减少内存占用并提高相似性搜索的速度。支持的精度有 "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"、"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}, …], …]。搜索所用时间是一个浮点值。