You need to enable JavaScript to run this app.
导航
Text Embedding 模型使用案例
最近更新时间:2024.09.26 11:38:08首次发布时间: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插件的操作列中勾选安装并选择需要安装的插件版本,然后单击批量提交
    图片
  6. 批量提交对话框,查看提示信息,然后单击确定

    说明

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

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

创建 ingest pipeline

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

PUT _ingest/pipeline/remote_embedding_test
{
    "description": "text embedding pipeline for remote inference",
    "processors": [
      {
        "remote_text_embedding": {
          "remote_config": {
            "method": "POST",
            "url": "http://d-178882836804***-serve-svc.r-00408**: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": "name_knn",
            "desc": "desc_knn"
          }
        }
      }
    ]
}

创建索引

创建索引时,指明使用的默认管道为新建的 ingest pipeline,并在配置 properties 时将name_knndesc_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": {
      "desc_knn": {
        "type": "knn_vector",
        "dimension": 384,
        "method": {
          "name": "hnsw",
          "engine": "nmslib",
          "space_type": "cosinesimil"
        }
      },
      "name_knn": {
        "type": "knn_vector",
        "dimension": 384,
        "method": {
          "name": "hnsw",
          "engine": "nmslib",
          "space_type": "cosinesimil"
        }
      },
      "desc": {
        "type": "text"
      },
      "name": {
        "type": "text"
      }
    }
  }
}

创建 search pipeline

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

PUT _search/pipeline/remote_embedding_sentence_transformers_paraphrase_multilingual_minilm_l12_v2
{
    "description": "test",
    "request_processors": [
      {
        "remote_embedding": {
          "remote_config": {
            "method": "POST",
            "url": "http://d-178882836804***-serve-svc.r-00408o0**: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" } }
{ "name" : "男性" }
{ "index" : { "_index" : "remote_sementic" } }
{ "name" : "男人" }
{ "index" : { "_index" : "remote_sementic" } }
{ "name" : "男孩" }
{ "index" : { "_index" : "remote_sementic" } }
{ "name" : "男士" }
{ "index" : { "_index" : "remote_sementic" } }
{ "name" : "先生" }
{ "index" : { "_index" : "remote_sementic" } }
{ "name" : "绅士" }
{ "index" : { "_index" : "remote_sementic" } }
{ "name" : "女性" }
{ "index" : { "_index" : "remote_sementic" } }
{ "name" : "女人" }
{ "index" : { "_index" : "remote_sementic" } }
{ "name" : "女孩" }
{ "index" : { "_index" : "remote_sementic" } }
{ "name" : "女士" }
{ "index" : { "_index" : "remote_sementic" } }
{ "name" : "小姐" }
{ "index" : { "_index" : "remote_sementic" } }
{ "name" : "姑娘" }

语义查询

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

GET remote_sementic/_search?search_pipeline=remote_embedding_sentence_transformers_paraphrase_multilingual_minilm_l12_v2
{
  "_source": "name", 
  "query": {
    "bool": {
      "must": [
        {
          "remote_neural": {
            "name_knn": {
              "query_text": "{查询语义}",
              "k": 100
            }
          }
        }
      ]
    }
  }
}

在以上命令中的{查询语义}需要替换为真实语句。在本示例中可以使用10岁男性BoyGirlสาว(泰文女孩)等众多语义来查询。
查询结果如下:
图片
图片