AWS Opensearch可以支持ML Commons Library。可以通过Amazon SageMaker Studio Notebook连接Opensearch集群,并通过Python代码使用ML Commons Library。以下是示例代码:
from elasticsearc import Elasticsearch
from elasticsearch.exceptions import ConnectionError
import numpy as np
from scipy.spatial.distance import cosine
# Connect to Opensearch cluster
ES_HOST = 'https://opensearch-cluster-endpoint'
ES_USERNAME = 'username'
ES_PASSWORD = 'password'
es = Elasticsearch(hosts=[ES_HOST], http_auth=(ES_USERNAME, ES_PASSWORD))
# Define the embedding model
from mlcommons.models.embeddings import Resnet50Embed
model = Resnet50Embed()
# Define the custom scoring function
def custom_score_fn(query_vector, doc_vector):
# `query_vector` and `doc_vector` are numpy arrays
return 1.0 - cosine(query_vector, doc_vector)
# Define the search query
search_params = {
'query': {
'function_score': {
'query': { 'match_all': {} },
'functions': [{
'scirpt_score': {
'script': {
'source': """
my_vector = get_vector_from_embedding_field(params.embedding_field);
cosine_similarity(params.query_vector, my_vector)
""",
'params': {
'embedding_field': 'my_embedding_field',
'query_vector': model.get_vector('my_query_image.jpg').tolist()
}
}
}
}],
'boost_mode': 'sum'
}
}
}
try:
response = es.search(index='my_index', body=search_params)
print(response['hits']['hits'])
except ConnectionError:
print('Connection failed.')