TEI 랭커Compatible with Milvus 2.6.x
TEI Ranker는 의미론적 재랭킹을 통해 검색 관련성을 향상시키기 위해 Hugging Face의 텍스트 임베딩 추론(TEI) 서비스를 활용합니다. 이는 기존의 벡터 유사도를 뛰어넘는 검색 결과 순서에 대한 고급 접근 방식을 나타냅니다.
전제 조건
Milvus에서 TEI Ranker를 구현하기 전에 다음이 필요합니다:
재랭크할 텍스트가 포함된
VARCHAR필드가 있는 Milvus 컬렉션재랭크 기능이 있는 실행 중인 TEI 서비스. TEI 서비스 설정에 대한 자세한 지침은 공식 TEI 문서를 참조하세요.
TEI 랭커 기능 만들기
Milvus 애플리케이션에서 TEI 랭커를 사용하려면 재랭킹 작동 방식을 지정하는 함수 객체를 생성하세요. 이 함수는 Milvus 검색 작업에 전달되어 결과 순위를 향상시킵니다.
from pymilvus import MilvusClient, Function, FunctionType
# Connect to your Milvus server
client = MilvusClient(
uri="http://localhost:19530" # Replace with your Milvus server URI
)
# Configure TEI Ranker
tei_ranker = Function(
name="tei_semantic_ranker", # Unique identifier for your ranker
input_field_names=["document"], # VARCHAR field containing text to rerank
function_type=FunctionType.RERANK, # Must be RERANK for reranking functions
params={
"reranker": "model", # Enables model-based reranking
"provider": "tei", # Specifies TEI as the service provider
"queries": ["renewable energy developments"], # Query text for relevance evaluation
"endpoint": "http://localhost:8080", # Your TEI service URL
"max_client_batch_size": 32, # Optional: batch size for processing (default: 32)
"truncate": True, # Optional: Truncate the inputs that are longer than the maximum supported size
"truncation_direction": "Right", # Optional: Direction to truncate the inputs
}
)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.common.clientenum.FunctionType;
import io.milvus.v2.service.collection.request.CreateCollectionReq;
MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder()
.uri("http://localhost:19530")
.build());
CreateCollectionReq.Function ranker = CreateCollectionReq.Function.builder()
.functionType(FunctionType.RERANK)
.name("vllm_semantic_ranker")
.inputFieldNames(Collections.singletonList(NAME_FIELD))
.param("reranker", "model")
.param("provider", "tei")
.param("queries", "[\"renewable energy developments\"]")
.param("endpoint", "http://localhost:8080")
.param("max_client_batch_size", "32")
.param("truncate", "true")
.param("truncation_direction", "Right")
.build();
searchWithRanker(scientists, ranker);
// nodejs
// go
# restful
TEI 랭커 관련 파라미터
다음 매개변수는 TEI 랭커에 특정한 매개변수입니다:
파라미터 |
필수? |
설명 |
값/예시 |
|---|---|---|---|
|
예 |
모델 순위 재지정을 사용하려면 |
|
|
예 |
재랭크에 사용할 모델 서비스 제공업체입니다. |
|
|
예 |
재랭크 모델에서 관련성 점수를 계산하는 데 사용하는 쿼리 문자열의 목록입니다. 쿼리 문자열의 수는 검색 작업의 쿼리 수와 정확히 일치해야 하며(텍스트 대신 쿼리 벡터를 사용하는 경우에도 마찬가지), 그렇지 않으면 오류가 보고됩니다. |
["검색 쿼리"] |
|
예 |
TEI 서비스 URL입니다. |
|
|
No |
모델 서비스가 모든 데이터를 한 번에 처리하지 못할 수 있으므로 여러 요청에서 모델 서비스에 액세스하기 위한 배치 크기를 설정합니다. |
|
|
아니요 |
최대 시퀀스 길이를 초과하는 입력을 잘라낼지 여부입니다. |
|
|
아니요 |
입력이 너무 길 때 잘라낼 방향입니다:
|
|
모든 모델 랭커에서 공유되는 일반 파라미터(예: provider, queries)는 모델 랭커 만들기를 참조하세요.
표준 벡터 검색에 적용하기
표준 벡터 검색에 TEI 랭커를 적용하려면 다음과 같이 하세요:
# Execute search with vLLM reranking
results = client.search(
collection_name="your_collection",
data=[your_query_vector], # Replace with your query vector
anns_field="dense_vector", # Vector field to search
limit=5, # Number of results to return
output_fields=["document"], # Include text field for reranking
ranker=tei_ranker, # Apply tei reranking
consistency_level="Bounded"
)
import io.milvus.v2.common.ConsistencyLevel;
import io.milvus.v2.service.vector.request.SearchReq;
import io.milvus.v2.service.vector.response.SearchResp;
import io.milvus.v2.service.vector.request.data.EmbeddedText;
SearchReq searchReq = SearchReq.builder()
.collectionName("your_collection")
.data(Arrays.asList(new EmbeddedText("AI Research Progress"), new EmbeddedText("What is AI")))
.annsField("vector_field")
.limit(10)
.outputFields(Collections.singletonList("document"))
.functionScore(FunctionScore.builder()
.addFunction(ranker)
.build())
.consistencyLevel(ConsistencyLevel.BOUNDED)
.build();
SearchResp searchResp = client.search(searchReq);
// nodejs
// go
# restful