PNL DA HKU

PNL DA HKU / instructor-large

Um modelo ajustado por instruções e adaptado a texto; melhor desempenho que o `instructor-base`, mas pior que o `instructor-xl`.

Introdução à família de modelos do instrutor

O modelo Instructor da NKU NLP é um modelo de incorporação de texto aperfeiçoado com instruções. Cria incorporações específicas de tarefas (para classificação, recuperação, agrupamento, avaliação de texto, etc.) em vários domínios (como ciência e finanças) fornecendo apenas instruções de tarefas - não é necessário um ajuste fino adicional. Obteve resultados de ponta em 70 tarefas de incorporação!

Figura Como funciona o modelo de instrutor] (https://assets.zilliz.com/Figure_How_the_Instructor_Model_works_2b174dc8aa.png)

Figura: Como funciona o modelo do instrutor (imagem de NKU NLP)

O modelo de instrutor apresenta-se em três variações: instructor-base, instructor-xl e instructor-large. Cada versão oferece diferentes níveis de desempenho e escalabilidade para atender a várias necessidades de incorporação.

Introdução ao instructor-large

Instructor-large é o modelo de incorporação de texto de tamanho médio na família de modelos Instructor. Pode gerar texto incorporado específico de uma tarefa e adaptado a um domínio, fornecendo instruções em linguagem natural sem mais afinações. É ideal para quaisquer tarefas (por exemplo, classificação, recuperação, agrupamento, avaliação de texto, etc.) e domínios (por exemplo, ciência, finanças, etc.). O instructor-large alcança SOTA em 70 tarefas de incorporação diversas na referência MTEB.

O seu desempenho é melhor do que o do instructor-base, mas pior do que o do instructor-xl.

Comparação entre o instructor-base, instructor-xl e instructor-large:

Recursoinstructor-baseinstructor-largeinstructor-xl
Tamanho do parâmetro86 milhões335 milhões1,5 bilhão
Dimensão de incorporação768768768768
Pontuação média Pontuação MTEB55,958,458,8

Como criar embeddings de vetor com o modelo instructor-large

Recomendamos o uso da biblioteca InstructorEmbedding para criar embeddings vetoriais.

Uma vez gerados os embeddings vectoriais, podem ser armazenados no Zilliz Cloud (um serviço de base de dados vetorial totalmente gerido pela Milvus) e utilizados para pesquisa de similaridade semântica. Aqui estão quatro etapas principais:

  1. Inscreva-se para obter uma conta Zilliz Cloud gratuitamente.
  2. Configurar um cluster sem servidor e obter o Ponto de extremidade público e chave de API.
  3. Crie uma coleção de vectores e insira os seus embeddings vectoriais.
  4. Execute uma pesquisa semântica nos embeddings armazenados.

Gerar embeddings vectoriais através da InstructorEmbedding Library e inseri-los no Zilliz Cloud para pesquisa semântica

from InstructorEmbedding import INSTRUCTOR
from pymilvus import MilvusClient

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

docs = [["Representar o documento da Wikipédia para recuperação: ", "A inteligência artificial foi fundada como disciplina académica em 1956."],
        ["Representar o documento da Wikipédia para recuperação: ", "Alan Turing foi a primeira pessoa a efetuar investigação substancial em IA."],
        ["Representar o documento da Wikipédia para recuperação: ", "Nascido em Maida Vale, Londres, Turing foi criado no sul de Inglaterra."]]
# Gerar embeddings para documentos
docs_embeddings = model.encode(docs, normalize_embeddings=True)

queries = [["Representar a pergunta da Wikipédia para obter documentos de apoio: ", "Quando é que a inteligência artificial foi fundada"],
           ["Representar a pergunta da Wikipédia para obter documentos de apoio: ", "Onde nasceu Alan Turing?"]]
# Gerar ligações para as consultas
consultas_embeddings = model.encode(consultas, normalize_embeddings=True)

# Ligar ao Zilliz Cloud com o ponto de extremidade público e a chave da API
cliente = MilvusClient(
    uri=ZILLIZ_PUBLIC_ENDPOINT,
    token=ZILLIZ_API_KEY)

COLLECTION = "documents" (coleção)
if client.has_collection(nome_da_colecção=COLLECTION):
    client.drop_collection(nome_da_colecção=COLLECTION)
client.create_collection(
    nome_da_colecção=COLLECTION,
    dimension=768,
    auto_id=True)

for doc, embedding in zip(docs, docs_embeddings):
    client.insert(COLLECTION, {"text": doc, "vetor": embedding})
    
resultados = cliente.search(
    nome_da_colecção=COLLECTION,
    data=query_embeddings,
    consistency_level="Strong",
    output_fields=["text"])