You need to enable JavaScript to run this app.
导航
Text Embedding 模型使用案例
最近更新时间:2024.10.24 14:23:19首次发布时间:2024.05.15 11:57:47

当您在 ML 服务中启动模型服务后,您可以开始体验模型。本文介绍体验模型的基本流程。

准备工作

部署模型服务

本文以公共模型sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2为例。
部署该模型后,可以通过句子、段落或整个文档的嵌入(embedding),来描述文本的语义内容,这些嵌入可作为其他 NLP 任务的输入特征。该模型具有多语言能力,能够支持广泛的国际化应用场景。
如何部署模型服务,请参见创建推理服务启动推理服务

安装opensearch-remote-inference插件

体验前,需要提前在实例中安装opensearch-remote-inference插件。安装插件会触发重启集群,建议在业务低峰期操作。如果已经安装该插件,则无需执行以下步骤。

  1. 登录云搜索服务控制台
  2. 在顶部导航栏,选择目标项目和地域。
  3. 实例列表 v2页面,单击目标实例名称。
  4. 在实例详情的左侧导航栏选择实例管理 > 插件管理,然后单击系统内置插件
  5. 单击批量安装/升级/卸载,然后在opensearch-remote-inference插件的操作列中勾选安装并选择需要安装的插件版本,然后单击批量提交
    Image
  6. 批量提交对话框,查看提示信息,然后单击确定

    说明

    安装插件会触发重启集群,建议在业务低峰期操作。

    Image
  7. 查看插件安装进度。
    执行插件安装操作后,目标插件状态显示为安装中,当状态变为已安装,则表示插件安装成功可以使用插件相关功能。

创建 ingest pipeline

创建 Ingest Pipeline,需要指定使用的机器学习模型,可以实现将指定字段转换为向量后嵌入回去。请从模型服务的调用信息中获取模型的urlmodel信息。如何查看调用信息,请参见查看模型访问地址和调用信息
以下代码:将name.last字段转为向量存储到last_knn中。

PUT _ingest/pipeline/remote_embedding_test
{
    "description": "text embedding pipeline for remote inference",
    "processors": [
      {
        "remote_embedding": {
          "remote_config": {
            "method": "POST",
            "url": "http://d-1847112161**-serve-svc.r-**mdkmb:8000/v1/embeddings",
            "params": {
              "token": "token"
            },
            "headers": {
              "Content-Type": "application/json"
            },
            "advance_request_body": {
              "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
            }
          },
          "field_map": {
            "name": { 
              "last": "last_knn"
              }
          }
        }
      }
    ]
}

创建索引

创建索引时,在 settings 中,配置index.knntrue,同时指明使用的默认管道为新建的 ingest pipeline;在 mappings 中,将last_knn字段设置为knn_vector

PUT remote_sementic
{
   "settings": {
    "index.knn": true,
    "number_of_shards": 1,
    "default_pipeline": "remote_embedding_test",
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "nested",
        "properties": {
          "first": {
            "type": "keyword"
          },
          "last": {
            "type": "keyword"
          },
          "last_knn": {
            "type": "knn_vector",
            "dimension": 384,
            "method": {
              "name": "hnsw",
              "space_type": "L2",
              "engine": "lucene",
              "parameters": {
                "ef_construction": 128,
                "m": 24
              }
            }
          }
        }
      }
    }
  }
}

创建 search pipeline

创建 Search Pipeline,需要指定使用的机器学习模型。请从模型服务的调用信息中获取模型的urlmodel信息。如何查看调用信息,请参见查看模型访问地址和调用信息

PUT _search/pipeline/search_pipeline
{
    "description": "test",
    "request_processors": [
      {
        "remote_embedding": {
          "remote_config": {
            "method": "POST",
            "url": "http://d-18471121614**-serve-svc.r-***dkmb:8000/v1/embeddings",
            "params": {
              "token": "token"
            },
            "headers": {
              "content_type": "application/json"
            },
            "advance_request_body": {
              "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
            }
          }
        }
      }
    ]
}

写入数据

批量写入数据。

POST _bulk
{"index":{"_index":"remote_sementic", "_id":"1"}}
{"name":[{"first": "John", "last":"Smith"}] }
{"index":{"_index":"remote_sementic", "_id":"2"}}
{"name":[{"first": "Bob", "last": "Bruce"}] }
{"index":{"_index":"remote_sementic", "_id":"3"}}
{"name":[{"first": "Toms", "last": "Vito"}] }
{"index":{"_index":"remote_sementic", "_id":"4"}}
{"name":[{"first": "Alice", "last": "White"}] }

语义查询

部署sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2公共模型后,您可以通过句子、段落或整个文档的嵌入(embedding),来描述文本的语义内容。

GET remote_sementic/_search?search_pipeline=search_pipeline
{
  "size": 10,
  "query": {
    "nested": {
      "path": "name",
      "query": {
        "remote_neural": {
          "name.last_knn": {
            "query_text": "{查询语义}",
            "k": 100
          }
        }
      }
    }
  }
}

在以上命令中的{查询语义}需要替换为真实语句。在本示例中可以使用White白色белый(俄语)ขาว(泰语)等众多语义来查询。
查询结果如下:
Image
Image