Visão geral dos rerankers
No domínio da recuperação de informação e da IA generativa, um reranker é uma ferramenta essencial que optimiza a ordem dos resultados das pesquisas iniciais. Os rerankers diferem dos modelos de incorporação tradicionais, pois recebem uma consulta e um documento como entrada e devolvem diretamente uma pontuação de semelhança em vez de incorporação. Esta pontuação indica a relevância entre a consulta e o documento de entrada.
Os reposicionadores são frequentemente utilizados após a primeira fase de recuperação, normalmente efectuada através de técnicas vectoriais de vizinho mais próximo aproximado (ANN). Embora as pesquisas ANN sejam eficientes na obtenção de um vasto conjunto de resultados potencialmente relevantes, podem nem sempre dar prioridade aos resultados em termos de proximidade semântica efectiva com a consulta. Neste caso, o rerankers é utilizado para otimizar a ordem dos resultados utilizando análises contextuais mais profundas, muitas vezes tirando partido de modelos avançados de aprendizagem automática como o BERT ou outros modelos baseados no Transformer. Ao fazê-lo, os rerankers podem aumentar drasticamente a precisão e a relevância dos resultados finais apresentados ao utilizador.
A biblioteca de modelos PyMilvus integra funções de rerank para otimizar a ordem dos resultados devolvidos pelas pesquisas iniciais. Depois de ter recuperado as incorporações mais próximas do Milvus, pode utilizar estas ferramentas de classificação para refinar os resultados da pesquisa e aumentar a precisão dos resultados da pesquisa.
Função de reclassificação | API ou código aberto |
---|---|
BGE | Código aberto |
Codificador cruzado | De fonte aberta |
Voyage | API |
Coesão | API |
Jina AI | API |
Antes de usar rerankers de código aberto, certifique-se de baixar e instalar todas as dependências e modelos necessários.
Para rerankers baseados em API, obtenha uma chave de API do fornecedor e defina-a nas variáveis de ambiente ou argumentos apropriados.
Exemplo 1: Usar a função de classificação da BGE para classificar documentos de acordo com uma consulta
Neste exemplo, demonstramos como classificar os resultados de pesquisa usando o reranker do BGE com base em uma consulta específica.
Para utilizar um reranker com a biblioteca de modelos PyMilvus, comece por instalar a biblioteca de modelos PyMilvus juntamente com o subpacote de modelos que contém todos os utilitários de classificação necessários:
pip install pymilvus[model]
# or pip install "pymilvus[model]" for zsh.
Para usar o reranker da BGE, primeiro importe a classe BGERerankFunction
:
from pymilvus.model.reranker import BGERerankFunction
Em seguida, crie uma instância de BGERerankFunction
para fazer o reranking:
bge_rf = BGERerankFunction(
model_name="BAAI/bge-reranker-v2-m3", # Specify the model name. Defaults to `BAAI/bge-reranker-v2-m3`.
device="cpu" # Specify the device to use, e.g., 'cpu' or 'cuda:0'
)
Para classificar documentos com base numa consulta, utilize o seguinte código:
query = "What event in 1956 marked the official birth of artificial intelligence as a discipline?"
documents = [
"In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
"The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
"In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
"The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems."
]
bge_rf(query, documents)
O resultado esperado é semelhante ao seguinte:
[RerankResult(text="The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.", score=0.9911615761470803, index=1),
RerankResult(text="In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.", score=0.0326971950177779, index=0),
RerankResult(text='The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.', score=0.006514905766152258, index=3),
RerankResult(text='In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.', score=0.0042116724917325935, index=2)]
Exemplo 2: usar um reranker para aumentar a relevância dos resultados de pesquisa
Neste guia, exploraremos como utilizar o método search()
no PyMilvus para realizar pesquisas de similaridade e como melhorar a relevância dos resultados da pesquisa usando um reranker. A nossa demonstração irá utilizar o seguinte conjunto de dados:
entities = [
{'doc_id': 0, 'doc_vector': [-0.0372721,0.0101959,...,-0.114994], 'doc_text': "In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence."},
{'doc_id': 1, 'doc_vector': [-0.00308882,-0.0219905,...,-0.00795811], 'doc_text': "The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals."},
{'doc_id': 2, 'doc_vector': [0.00945078,0.00397605,...,-0.0286199], 'doc_text': 'In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.'},
{'doc_id': 3, 'doc_vector': [-0.0391119,-0.00880096,...,-0.0109257], 'doc_text': 'The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.'}
]
Componentes do conjunto de dados:
doc_id
: Identificador único para cada documento.doc_vector
: Embeddings vectoriais que representam o documento. Para obter orientação sobre como gerar embeddings, consulte Embeddings.doc_text
: Conteúdo do texto do documento.
Preparativos
Antes de iniciar uma pesquisa por semelhança, é necessário estabelecer uma ligação com o Milvus, criar uma coleção e preparar e inserir dados nessa coleção. O trecho de código a seguir ilustra essas etapas preliminares.
from pymilvus import MilvusClient, DataType
client = MilvusClient(
uri="http://10.102.6.214:19530" # replace with your own Milvus server address
)
client.drop_collection('test_collection')
# define schema
schema = client.create_schema(auto_id=False, enabel_dynamic_field=True)
schema.add_field(field_name="doc_id", datatype=DataType.INT64, is_primary=True, description="document id")
schema.add_field(field_name="doc_vector", datatype=DataType.FLOAT_VECTOR, dim=384, description="document vector")
schema.add_field(field_name="doc_text", datatype=DataType.VARCHAR, max_length=65535, description="document text")
# define index params
index_params = client.prepare_index_params()
index_params.add_index(field_name="doc_vector", index_type="IVF_FLAT", metric_type="IP", params={"nlist": 128})
# create collection
client.create_collection(collection_name="test_collection", schema=schema, index_params=index_params)
# insert data into collection
client.insert(collection_name="test_collection", data=entities)
# Output:
# {'insert_count': 4, 'ids': [0, 1, 2, 3]}
Realizar uma pesquisa de similaridade
Após a inserção de dados, execute pesquisas de similaridade usando o método search
.
# search results based on our query
res = client.search(
collection_name="test_collection",
data=[[-0.045217834, 0.035171617, ..., -0.025117004]], # replace with your query vector
limit=3,
output_fields=["doc_id", "doc_text"]
)
for i in res[0]:
print(f'distance: {i["distance"]}')
print(f'doc_text: {i["entity"]["doc_text"]}')
O resultado esperado é semelhante ao seguinte:
distance: 0.7235960960388184
doc_text: The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.
distance: 0.6269873976707458
doc_text: In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.
distance: 0.5340118408203125
doc_text: The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.
Utilizar um reranker para melhorar os resultados da pesquisa
Em seguida, melhore a relevância dos resultados da pesquisa com uma etapa de reranking. Neste exemplo, usamos o CrossEncoderRerankFunction
criado no PyMilvus para classificar os resultados para melhorar a precisão.
# use reranker to rerank search results
from pymilvus.model.reranker import CrossEncoderRerankFunction
ce_rf = CrossEncoderRerankFunction(
model_name="cross-encoder/ms-marco-MiniLM-L-6-v2", # Specify the model name.
device="cpu" # Specify the device to use, e.g., 'cpu' or 'cuda:0'
)
reranked_results = ce_rf(
query='What event in 1956 marked the official birth of artificial intelligence as a discipline?',
documents=[
"In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
"The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
"In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
"The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems."
],
top_k=3
)
# print the reranked results
for result in reranked_results:
print(f'score: {result.score}')
print(f'doc_text: {result.text}')
O resultado esperado é semelhante ao seguinte:
score: 6.250532627105713
doc_text: The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.
score: -2.9546022415161133
doc_text: In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.
score: -4.771512031555176
doc_text: The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.