SPLADE
SPLADE embedding - это модель, которая предлагает очень разреженные представления для документов и запросов, наследуя желаемые свойства от моделей bag-of-words (BOW), такие как точное соответствие терминов и эффективность.
Milvus интегрируется с моделью SPLADE через класс SpladeEmbeddingFunction. Этот класс предоставляет методы для кодирования документов и запросов и возврата вкраплений в виде разреженных векторов, совместимых с индексацией Milvus.
Чтобы воспользоваться этой функцией, установите необходимые зависимости:
pip install --upgrade pymilvus
pip install "pymilvus[model]"
Чтобы инстанцировать SpladeEmbeddingFunction, используйте команду:
from pymilvus import model
splade_ef = model.sparse.SpladeEmbeddingFunction(
model_name="naver/splade-cocondenser-selfdistil",
device="cpu"
)
Параметры:
имя_модели(строка)
Имя модели SPLADE, которую следует использовать для кодирования. Возможные варианты: naver/splade-cocondenser-ensembledistil (по умолчанию), naver/splade_v2_max, naver/splade_v2_distil и naver/splade-cocondenser-selfdistil. Дополнительные сведения см. в разделе Игра с моделями.
устройство(строка)
Используемое устройство, с cpu для CPU и cuda:n для n-го устройства GPU.
Чтобы создать вкрапления для документов, используйте метод encode_documents():
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
docs_embeddings = splade_ef.encode_documents(docs)
# Print embeddings
print("Embeddings:", docs_embeddings)
# since the output embeddings are in a 2D csr_array format, we convert them to a list for easier manipulation.
print("Sparse dim:", splade_ef.dim, list(docs_embeddings)[0].shape)
Ожидаемый результат будет похож на следующий:
Embeddings: (0, 2001) 0.6392706036567688
(0, 2034) 0.024093208834528923
(0, 2082) 0.3230178654193878
...
(2, 23602) 0.5671860575675964
(2, 26757) 0.5770265460014343
(2, 28639) 3.1990697383880615
Sparse dim: 30522 (1, 30522)
Для создания вкраплений для запросов используйте метод encode_queries():
queries = ["When was artificial intelligence founded",
"Where was Alan Turing born?"]
query_embeddings = splade_ef.encode_queries(queries)
# Print embeddings
print("Embeddings:", query_embeddings)
# since the output embeddings are in a 2D csr_array format, we convert them to a list for easier manipulation.
print("Sparse dim:", splade_ef.dim, list(query_embeddings)[0].shape)
Ожидаемый результат похож на следующий:
Embeddings: (0, 2001) 0.6353746056556702
(0, 2194) 0.015553371049463749
(0, 2301) 0.2756537199020386
...
(1, 18522) 0.1282549500465393
(1, 23602) 0.13133203983306885
(1, 28639) 2.8150033950805664
Sparse dim: 30522 (1, 30522)