46.6kЗаказать демоВойтиНачать бесплатно
HKU NLP

HKU NLP / instructor-base

Самый маленький вариант семейства моделей Instructor, разработанный с учетом баланса эффективности и производительности.

Введение в семейство моделей инструкторов

Модель Instructor от NKU NLP - это модель встраивания текста с точной настройкой инструкций. Она создает вкрапления для конкретных задач (классификация, поиск, кластеризация, оценка текста и т. д.) в различных областях (например, наука и финансы), просто предоставляя инструкции по задаче - дополнительная тонкая настройка не требуется.

Рисунок Рисунок "Как работает модель инструктора"

Рисунок: Как работает модель инструктора (иллюстрация NKU NLP)

Модель инструктора существует в трех вариантах: instructor-base, instructor-xl и instructor-large. Каждая версия предлагает различные уровни производительности и масштабируемости для удовлетворения различных потребностей во встраивании.

Введение в instructor-base

instructor-base - это самый маленький вариант семейства моделей Instructor, разработанный с учетом баланса эффективности и производительности. Он идеально подходит для задач, требующих высококачественных текстовых вкраплений при меньших вычислительных затратах.

Сравнение instructor-base, instructor-xl и instructor-large

Featureinstructor-baseinstructor-largeinstructor-xl
Размер параметров86 миллионов335 миллионов1,5 миллиарда
Размер вставки768768768768
Avg. MTEB Score55,958,458,8

Как создавать вкрапления с помощью instructor-base.

Существует два основных способа создания векторных вкраплений:

  • PyMilvus: Python SDK для Milvus, который легко интегрирует модель instructor-base.
  • Библиотека Instructor: библиотека Python InstructorEmbedding.

После создания векторных вкраплений их можно хранить в Zilliz Cloud (полностью управляемый сервис векторных баз данных на базе Milvus) и использовать для поиска семантического сходства. Вот четыре ключевых шага:

Создание вкраплений с помощью PyMilvus

from pymilvus.model.dense import InstructorEmbeddingFunction
из pymilvus import MilvusClient

ef = InstructorEmbeddingFunction(
    "hkunlp/instructor-base",
    query_instruction="Представьте вопрос Википедии для поиска подтверждающих документов:",
    doc_instruction="Представьте документ Википедии для поиска:")

docs = [
   "Искусственный интеллект был основан как академическая дисциплина в 1956 году",
   "Алан Тьюринг был первым человеком, который провел значительные исследования в области искусственного интеллекта",
   "Тьюринг родился в Майда-Вейл, Лондон, и вырос на юге Англии".
]
# Генерируем вкрапления для документов
docs_embeddings = ef.encode_documents(docs)

запросы = ["Когда был основан искусственный интеллект",
          "Где родился Алан Тьюринг?"]

# Генерируем вкрапления для запросов
query_embeddings = ef.encode_queries(queries)

client = MilvusClient(
    uri=ZILLIZ_PUBLIC_ENDPOINT,
    token=ZILLIZ_API_KEY)
    
КОЛЛЕКЦИЯ = "документы"
if client.has_collection(collection_name=COLLECTION):
    client.drop_collection(collection_name=COLLECTION)
client.create_collection(
    имя_коллекции=COLLECTION,
    dimension=ef.dim,
    auto_id=True)

для doc, embedding в zip(docs, docs_embeddings):
    client.insert(COLLECTION, {"text": doc, "vector": embedding})

results = client.search(
    имя_коллекции=КОЛЛЕКЦИЯ,
    data=query_embeddings,
    consistency_level="Strong",
    output_fields=["text"])

Генерируем векторные вкрапления с помощью библиотеки InstructorEmbedding

from InstructorEmbedding import INSTRUCTOR
из pymilvus import MilvusClient

model = INSTRUCTOR('hkunlp/instructor-base')

docs = [["Представьте документ Википедии для поиска: ", "Искусственный интеллект был основан как академическая дисциплина в 1956 году"],
        ["Представьте документ Википедии для поиска: ", "Алан Тьюринг был первым человеком, который провел серьезные исследования в области искусственного интеллекта"],
        ["Представьте документ Википедии для поиска: ", "Тьюринг родился в Майда-Вейл, Лондон, и вырос в южной Англии"]].
# Генерируем вкрапления для документов
docs_embeddings = model.encode(docs, normalize_embeddings=True)


queries = [["Представьте вопрос Википедии для поиска подтверждающих документов: ", "Когда был основан искусственный интеллект"]
           ["Представьте вопрос Википедии для поиска подтверждающих документов: ", "Где родился Алан Тьюринг?"]]
# Генерируем вкрапления для запросов
query_embeddings = model.encode(queries, normalize_embeddings=True)

# Подключение к облаку Zilliz с помощью публичной конечной точки и ключа API
client = MilvusClient(
    uri=ZILLIZ_PUBLIC_ENDPOINT,
    token=ZILLIZ_API_KEY)

КОЛЛЕКЦИЯ = "документы"
if client.has_collection(collection_name=COLLECTION):
    client.drop_collection(collection_name=COLLECTION)
client.create_collection(
    имя_коллекции=COLLECTION,
    dimension=768,
    auto_id=True)

для doc, embedding в zip(docs, docs_embeddings):
    client.insert(COLLECTION, {"text": doc, "vector": embedding})
    
results = client.search(
    имя_коллекции=КОЛЛЕКЦИЯ,
    data=query_embeddings,
    consistency_level="Strong",
    output_fields=["text"])