当您在 ML 服务中启动模型服务后,您可以开始体验模型。本文介绍体验模型的基本流程。
本文以公共模型sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
为例。
部署该模型后,可以通过句子、段落或整个文档的嵌入(embedding),来描述文本的语义内容,这些嵌入可作为其他 NLP 任务的输入特征。该模型具有多语言能力,能够支持广泛的国际化应用场景。
如何部署模型服务,请参见启动模型。
opensearch-remote-inference
插件体验 AI 模型前,需要提前在实例中安装opensearch-remote-inference
插件。安装插件会触发重启集群,建议在业务低峰期操作。如果已经安装该插件,则无需执行以下步骤。
opensearch-remote-inference
插件,然后单击插件后方的安装。说明
安装插件会触发重启集群,建议在业务低峰期操作。
创建 Ingest Pipeline,需要指定使用的机器学习模型,可以实现将指定字段转换为向量后嵌入回去。请从模型服务的调用信息中获取模型的url
和model
信息。如何查看调用信息,请参见查看模型调用信息。
以下代码:将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_knn
和desc_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,需要指定使用的机器学习模型。请从模型服务的调用信息中获取模型的url
和model
信息。如何查看调用信息,请参见查看模型调用信息。
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岁男性
、Boy
、Girl
、สาว(泰文女孩)
等众多语义来查询。
查询结果如下: