多模态搜索
2.11 版引入
使用多模态嵌入模型搜索文本和图像数据。
先决条件
在使用文本搜索之前,必须设置多模态嵌入模型。有关更多信息,请参阅选择模型。
配置多模态搜索
有两种方法可以配置多模态搜索
自动化工作流
OpenSearch 提供了一个工作流模板,它会自动创建摄取管道和索引。创建工作流时,您必须提供已配置模型的模型 ID。查看多模态搜索工作流模板的默认设置,以确定是否需要更新任何参数。例如,如果模型维度与默认值 (1024
) 不同,请在output_dimension
参数中指定模型的维度。要创建默认的多模态搜索工作流,请发送以下请求
POST /_plugins/_flow_framework/workflow?use_case=multimodal_search&provision=true
{
"create_ingest_pipeline.model_id": "mBGzipQB2gmRjlv_dOoB"
}
OpenSearch 会为创建的工作流返回一个工作流 ID:
{
"workflow_id" : "U_nMXJUBq_4FYQzMOS4B"
}
要检查工作流状态,请发送以下请求:
GET /_plugins/_flow_framework/workflow/U_nMXJUBq_4FYQzMOS4B/_status
工作流完成后,state
将变为 COMPLETED
。该工作流创建以下组件
- 一个名为
nlp-ingest-pipeline
的摄入管道 - 一个名为
my-nlp-index
的索引
您现在可以继续步骤 3 和 4,将文档摄取到索引中并搜索索引。
手动设置
要手动配置带有文本和图像嵌入的多模态搜索,请按照以下步骤操作
步骤 1:创建摄入管道
为了生成向量嵌入,您需要创建一个包含text_image_embedding
处理器的摄取管道,该处理器会将文档字段中的文本或图像转换为向量嵌入。处理器的field_map
决定了从哪些文本和图像字段生成向量嵌入以及将嵌入存储到哪个输出向量字段中。
以下示例请求创建了一个摄取管道,其中image_description
中的文本和image_binary
中的图像将被转换为文本嵌入,并且这些嵌入将存储在vector_embedding
中
PUT /_ingest/pipeline/nlp-ingest-pipeline
{
"description": "A text/image embedding pipeline",
"processors": [
{
"text_image_embedding": {
"model_id": "-fYQAosBQkdnhhBsK593",
"embedding": "vector_embedding",
"field_map": {
"text": "image_description",
"image": "image_binary"
}
}
}
]
}
步骤 2:创建用于摄取的索引
为了使用管道中定义的文本嵌入处理器,请创建一个向量索引,并将上一步中创建的管道添加为默认管道。确保在field_map
中定义的字段映射为正确的类型。继续示例,vector_embedding
字段必须映射为 k-NN 向量,其维度与模型维度匹配。同样,image_description
字段应映射为text
,image_binary
字段应映射为binary
。
以下示例请求创建了一个设置了默认摄入管道的向量索引
PUT /my-nlp-index
{
"settings": {
"index.knn": true,
"default_pipeline": "nlp-ingest-pipeline",
"number_of_shards": 2
},
"mappings": {
"properties": {
"vector_embedding": {
"type": "knn_vector",
"dimension": 1024,
"method": {
"name": "hnsw",
"engine": "lucene",
"parameters": {}
}
},
"image_description": {
"type": "text"
},
"image_binary": {
"type": "binary"
}
}
}
}
有关创建向量索引及其支持方法的更多信息,请参阅创建向量索引。
步骤 3:将文档摄取到索引中
要将文档摄取到上一步创建的索引中,请发送以下请求
PUT /nlp-index/_doc/1
{
"image_description": "Orange table",
"image_binary": "iVBORw0KGgoAAAANSUI..."
}
在文档摄取到索引之前,摄取管道会在文档上运行text_image_embedding
处理器,为image_description
和image_binary
字段生成向量嵌入。除了原始的image_description
和image_binary
字段外,索引文档还包括vector_embedding
字段,其中包含组合的向量嵌入。
步骤 4:搜索索引
要对索引执行向量搜索,请在搜索模型 API或查询 DSL查询中使用neural
查询子句。您可以使用向量搜索过滤器来细化结果。您可以按文本、图像或同时按文本和图像进行搜索。
以下示例请求使用神经查询搜索文本和图像
GET /my-nlp-index/_search
{
"size": 10,
"query": {
"neural": {
"vector_embedding": {
"query_text": "Orange table",
"query_image": "iVBORw0KGgoAAAANSUI...",
"model_id": "-fYQAosBQkdnhhBsK593",
"k": 5
}
}
}
}
为了避免在每次神经查询请求中传递模型 ID,您可以在向量索引或字段上设置默认模型。要了解更多信息,请参阅在索引或字段上设置默认模型。
后续步骤
- 浏览我们的教程,了解如何构建 AI 搜索应用程序。