Link Search Menu Expand Document Documentation Menu

文本分块

2.13 版本引入

AI 搜索中处理大型文本文档时,通常需要将它们拆分成更小的片段,因为大多数嵌入模型都有词元长度限制。这个过程称为文本分块,通过确保每个嵌入表示一个符合模型限制的聚焦内容片段,有助于保持向量搜索结果的质量和相关性。

要将长文本拆分成片段,您可以使用 text_chunking 处理器作为 text_embeddingsparse_encoding 处理器的预处理步骤,以获取每个分块片段的嵌入。有关处理器参数的更多信息,请参阅文本分块处理器。在开始之前,请按照预训练模型文档中概述的步骤注册一个嵌入模型。以下示例通过将文本拆分成片段,然后使用 text_embedding 处理器生成嵌入。

步骤 1:创建管道

以下示例请求创建了一个摄取管道,将 passage_text 字段中的文本转换为分块片段,这些片段将存储在 passage_chunk 字段中。passage_chunk 字段中的文本随后被转换为文本嵌入,嵌入则存储在 passage_embedding 字段中

PUT _ingest/pipeline/text-chunking-embedding-ingest-pipeline
{
  "description": "A text chunking and embedding ingest pipeline",
  "processors": [
    {
      "text_chunking": {
        "algorithm": {
          "fixed_token_length": {
            "token_limit": 10,
            "overlap_rate": 0.2,
            "tokenizer": "standard"
          }
        },
        "field_map": {
          "passage_text": "passage_chunk"
        }
      }
    },
    {
      "text_embedding": {
        "model_id": "LMLPWY4BROvhdbtgETaI",
        "field_map": {
          "passage_chunk": "passage_chunk_embedding"
        }
      }
    }
  ]
}

步骤 2:创建用于摄取的索引

为了使用摄取管道,您需要创建一个向量索引。passage_chunk_embedding 字段必须是 nested 类型。knn.dimension 字段必须包含您模型的维度数

PUT testindex
{
  "settings": {
    "index": {
      "knn": true
    }
  },
  "mappings": {
    "properties": {
      "text": {
        "type": "text"
      },
      "passage_chunk_embedding": {
        "type": "nested",
        "properties": {
          "knn": {
            "type": "knn_vector",
            "dimension": 768
          }
        }
      }
    }
  }
}

步骤 3:将文档摄取到索引中

要将文档摄取到上一步创建的索引中,请发送以下请求

POST testindex/_doc?pipeline=text-chunking-embedding-ingest-pipeline
{
  "passage_text": "This is an example document to be chunked. The document contains a single paragraph, two sentences and 24 tokens by standard tokenizer in OpenSearch."
}

步骤 4:搜索索引

您可以使用 nested 查询对索引执行向量搜索。我们建议将 score_mode 设置为 max,其中文档分数设置为所有片段嵌入中的最高分数

GET testindex/_search
{
  "query": {
    "nested": {
      "score_mode": "max",
      "path": "passage_chunk_embedding",
      "query": {
        "neural": {
          "passage_chunk_embedding.knn": {
            "query_text": "document",
            "model_id": "-tHZeI4BdQKclr136Wl7"
          }
        }
      }
    }
  }
}

后续步骤

  • 浏览我们的教程,了解如何构建 AI 搜索应用程序。
剩余 350 字符

有问题?

想贡献?