Personalização da pontuação do Cortex Search¶
Por padrão, as consultas aos Cortex Search Services aproveitam a similaridade vetorial, a correspondência de texto e a reclassificação para determinar a relevância de cada resultado. Você pode personalizar a pontuação dos resultados da pesquisa de várias maneiras:
Aplique aumentos numéricos com base nas colunas de metadados numéricos
Aplique decréscimos de tempo com base nas colunas de metadados de carimbo de data/hora
Desabilite a reclassificação para reduzir a latência da consulta
Modifique os pesos dos componentes para ajustar o peso dos componentes de pontuação individuais (vetor, texto, reclassificação) na classificação geral da pesquisa.
Aumentos numéricos e decréscimos de tempo¶
Você pode aumentar ou aplicar decadências nos resultados da pesquisa com base em metadados numéricos ou de carimbo de data/hora. Esse recurso é útil quando você tem metadados estruturados, como sinais de popularidade ou atualidade, para cada resultado que podem ajudar a determinar a relevância dos documentos no momento da consulta. Você pode especificar duas categorias de sinais de classificação ao fazer uma consulta:
Tipo |
Descrição |
Tipos de coluna aplicáveis |
Exemplo de campos de metadados (ilustrativo) |
|---|---|---|---|
Aumento numérico |
Metadados numéricos que aumentam os resultados com mais atenção ou atividade. |
|
|
Decréscimo do tempo |
Metadados de data ou hora que aumentam os resultados mais recentes. A influência de sinais de recenticidade diminui com o tempo. |
|
Os metadados de aumento e decréscimo provêm de colunas na tabela de origem das quais um Cortex Search Service é criado. Você especifica as colunas de metadados que serão usadas para aumentar ou diminuir ao fazer a consulta, mas essas colunas devem ser incluídas durante a criação do Cortex Search Service.
Ao consultar um Cortex Search Service, especifique as colunas a serem usadas para aumento ou redução nos campos opcionais numeric_boosts e time_decays no campo scoring_config.functions. Você também pode especificar o peso de cada aumento ou decréscimo.
{
"scoring_config": {
"functions": {
"numeric_boosts": [
{
"column": "column_name",
"weight": 1
},
/* ... */
],
"time_decays": [
{
"column": "column_name",
"weight": 1,
"limit_hours": 120
},
/* ... */
]
}
}
}
Propriedades¶
numeric_boosts(matriz, opcional):<numeric_boost_object>(objeto, opcional):column_name(string): especifica a coluna numérica à qual o reforço deve ser aplicado.weight(float): especifica o peso ou a importância atribuída à coluna impulsionada no processo de classificação. Quando várias colunas são especificadas, um peso maior aumenta a influência do campo.
time_decays(matriz, opcional):<time_decay_object>(objeto, opcional):column_name(string): especifica a coluna de data ou hora à qual o decréscimo deve ser aplicado.weight(float): especifica o peso ou a importância atribuída à coluna com decréscimo no processo de classificação. Quando várias colunas são especificadas, um peso maior aumenta a influência do campo.limit_hours(float): define o limite após o qual o tempo começa a ter menos efeito sobre a relevância ou a importância do documento. Por exemplo, um valor de 240 emlimit_hoursindica que os documentos com carimbos de data/hora com mais de 240 horas (10 dias) no passado a partir do carimbo de data/horanownão recebem um aumento significativo, enquanto os documentos com um carimbo de data/hora nas últimas 240 horas devem receber um aumento mais significativo.now(cadeia de caracteres, opcional): carimbo de data/hora de referência opcional a partir do qual os decréscimos são calculados no formato ISO-8601yyyy-MM-dd'T'HH:mm:ss.SSSXXX. Por exemplo,"2025-02-19T14:30:45.123-08:00". O padrão é o carimbo de data/hora atual, se não for especificado.
Nota
Os aumentos numéricos são aplicados como médias ponderadas aos campos retornados, enquanto os decréscimos utilizam uma função logarítmica suavizada para rebaixar os valores menos recentes.
Os pesos são relativos nos campos de impulso ou decréscimos especificados. Se apenas um único campo for fornecido em uma matriz boosts ou decays, o valor de seu peso será irrelevante.
Se mais de um campo for fornecido, os pesos serão aplicados em relação uns aos outros. Um campo com peso de 10, por exemplo, afeta a classificação do registro duas vezes mais do que um campo com peso de 5.
Reclassificação¶
Por padrão, as consultas ao Cortex Search Services utilizam semantic reranking para melhorar a relevância dos resultados de pesquisa. Embora a reclassificação possa aumentar de forma mensurável a relevância do resultado, ele também pode aumentar visivelmente a latência da consulta. Você pode desativar a reclassificação em qualquer consulta do Cortex Search se descobrir que o benefício de qualidade proporcionado pela reclassificação pode ser sacrificado por velocidades de consulta mais rápidas em seu caso de uso comercial.
Nota
A desativação da reclassificação reduz a latência da consulta em 100 a 300 ms, em média, mas a redução exata da latência, bem como a magnitude da degradação da qualidade, varia de acordo com as cargas de trabalho. Avalie os resultados lado a lado, com e sem reclassificação, antes de decidir desativá-la nas consultas.
Você pode desativar o mecanismo de classificação para uma consulta individual no momento da consulta no campo scoring_config.reranker no seguinte formato:
{
"scoring_config": {
"reranker": "none"
}
}
Propriedades¶
reranker(cadeia de caracteres, opcional): parâmetro que pode ser definido como “none” se o mecanismo de classificação for desativado. Se for excluído ou nulo, será usado o mecanismo de classificação padrão.
Pesos dos componentes¶
O campo weights no objeto scoring_config permite especificar os pesos dos componentes de pontuação individuais (vectors, texts, reranker) na pontuação geral de cada resultado. Por padrão, os pesos são definidos como 1,0 para cada componente, com uma contribuição igual para a pontuação geral.
Você pode especificar pesos no seguinte formato:
{
"scoring_config": {
"functions": {
"weights": {
"texts": 3,
"vectors": 2,
"reranker": 1
}
}
}
}
Propriedades¶
weights(objeto, opcional): Especifica pesos para combinar texto, vetor e pontuações de reclassificação para cada documento. Os pesos são aplicados uns aos outros dentro deste campo.
Por exemplo, o seguinte especifica que as pontuações de texto devem ser ponderadas 3 vezes mais que as pontuações de vetores, e as pontuações de reclassificação devem ser ponderadas 2 vezes mais que as pontuações de texto:
{
"scoring_config": {
"functions": {
"weights": {
"texts": 3,
"vectors": 1,
"reranker": 2
}
}
}
}
Perfis de pontuação nomeados¶
Os aumentos/decréscimos e as configurações de reclassificação formam uma configuração de pontuação, que pode ser especificada no parâmetro scoring_config ao fazer uma consulta. As configurações de pontuação também podem receber um nome e anexadas ao Cortex Search Service.
O uso de um perfil de pontuação nomeado permite que você use facilmente uma configuração de pontuação em aplicativos e consultas sem precisar especificar a configuração de pontuação completa a cada vez. Se você alterar a configuração de pontuação, só precisará atualizá-la em um lugar, não em todas as consultas.
Para adicionar um perfil de pontuação ao seu Cortex Search Service, use o comando ALTER CORTEX SEARCH SERVICE … ADD SCORING PROFILE, como mostrado no exemplo a seguir:
ALTER CORTEX SEARCH SERVICE my_search_service
ADD SCORING PROFILE IF NOT EXISTS heavy_comments_with_likes
'{
"functions": {
"numeric_boosts": [
{ "column": "comments", "weight": 6 },
{ "column": "likes", "weight": 1 }
]
}
}'
A sintaxe da definição do perfil de pontuação é o mesmo esquema usado no parâmetro scoring_config ao fazer uma consulta.
Os perfis de pontuação não podem ser modificados após serem criados; para alterar um perfil, descarte-o e recriá-lo com a nova configuração de pontuação. Para excluir um perfil de pontuação nomeado, use ALTER CORTEX SEARCH SERVICE … DROP SCORING PROFILE.
Para consultar um Cortex Search Service usando um perfil de pontuação nomeado, especifique o nome do perfil no parâmetro scoring_profile ao fazer uma consulta, como mostrado nos exemplos a seguir:
results = svc.search(
query="technology",
columns=["comments", "likes"],
scoring_profile="heavy_comments_with_likes",
limit=10
)
curl --location https://<account_url>/api/v2/databases/<db_name>/schemas/<schema_name>/cortex-search-services/<service_name>:query \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: Bearer $PAT" \
--data '{
"query": "technology",
"columns": ["DOCUMENT_CONTENTS", "LIKES", "COMMENTS"],
"scoring_profile": "heavy_comments_with_likes",
"limit": 10
}'
SELECT SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
'my_search_service',
'{
"query": "technology",
"columns": ["comments", "likes"],
"scoring_profile": "heavy_comments_with_likes",
"limit": 10
}'
);
Para ver os perfis de pontuação armazenados de um serviço, consulte a exibição CORTEX_SEARCH_SERVICE_SCORING_PROFILES no esquema INFORMATION_SCHEMA, conforme mostrado no exemplo a seguir:
SELECT *
FROM my_db.INFORMATION_SCHEMA.CORTEX_SEARCH_SERVICE_SCORING_PROFILES
WHERE service_name = 'my_search_service';
Nota
Os resultados de DESCRIBE CORTEX SEARCH SERVICE e SHOW CORTEX SEARCH SERVICE contêm uma coluna chamada scoring_profile_count que indica o número de perfis de pontuação para cada serviço.
Pontuações dos componentes¶
As pontuações dos componentes fornecem informações detalhadas de pontuação para resultados de pesquisa. Eles permitem que os desenvolvedores entendam como as classificações de pesquisa são determinadas e depurem o desempenho da pesquisa. As pontuações para cada resultado são retornadas no campo @scores para cada “componente” de recuperação (texto, vetor). As pontuações dos componentes são úteis em cenários onde há necessidade de:
Estabelecer limites: use pontuações de componentes para determinar quando passar resultados para um processo downstream, como um agente.
Depurar classificações de pesquisa: entenda por que certos documentos têm uma classificação mais alta do que outros nos resultados de pesquisa.
Como entender as pontuações de componentes¶
As pontuações dos componentes fornecem detalhamentos de como o Cortex Search calcula a pontuação de relevância final para cada resultado de pesquisa. O sistema de pontuação consiste em vários componentes:
- ** Similaridade de cosseno**
Pontuações baseadas na similaridade semântica entre a consulta e os índices do vetor. Pontuações mais altas indicam correspondências conceituais ou baseadas em significado mais fortes usando incorporações vetoriais.
- Correspondência de texto
Pontuações baseadas em similaridade de palavras-chave/lexical entre a consulta e os índices de texto. Pontuações mais altas indicam correspondências de palavras-chave exatas ou difusas mais fortes.
Formato da resposta¶
Com as pontuações de componente ativadas, as informações de pontuação a seguir são retornadas para todas as consultas do Cortex Search. Para obter mais informações sobre a sintaxe do Cortex Search Query, consulte Consulta ao Cortex Search Service.
{
"results": [
{
"@scores": {
"cosine_similarity": <cosine_similarity_score>,
"text_match": <text_match_score>
}
}
]
}
Campos de pontuação¶
@scores.cosine_similarity: Pontuação de similaridade de cosseno entre a consulta e o valor no índice vetorial, no intervalo [-1, 1].@scores.text_match: Pontuação de correspondência de texto entre a consulta e o valor no índice de texto. Esta pontuação é ilimitada e seu intervalo depende da consulta.
Notas de uso¶
As pontuações de
cosine_similaritysão:Retornadas para qualquer consulta que inclua um VECTOR INDEX.
Limitadas no intervalo [-1, 1] e comparáveis em diferentes consultas.
Calculadas após prefixar cada consulta com um prefixo que aumenta a qualidade da pesquisa em muitos casos. Esse prefixo varia de acordo com o modelo, mas geralmente se parece com:
Represent this sentence for searching relevant passages: {query}. A pontuação de similaridade de cosseno retornada é a similaridade de cosseno entre a consulta com o prefixo e o valor no índice do vetor.
As pontuações de
text_matchsão:Retornado para qualquer consulta que inclua um TEXT INDEX. As pontuações de
text_matchsão ilimitadas.Não comparável entre diferentes consultas. Por exemplo, uma pontuação de correspondência de texto de 0,95 em um resultado para uma determinada consulta não é comparável a uma pontuação de correspondência de texto de 0,95 em um resultado para uma consulta diferente para o mesmo serviço.
Os valores de
@scoresnão são afetados pelo parâmetroweights. Os pesos afetam apenas a ordenação final dos resultados.
