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