Este tópico descreve a configuração de 17 operadores de recursos integrados, incluindo id_feature, raw_feature e expr_feature.
id_feature
Introdução
id_feature é um recurso discreto. Inclui recursos de valor único, como IDs de usuário e de item, e recursos multivalorados, como cores de itens.
Configuração
{
"feature_type": "id_feature",
"feature_name": "item_is_main",
"expression": "item:is_main",
"need_prefix": true,
"separator": "\u001D",
"default_value": ""
}
Parâmetro | Obrigatório | Descrição |
feature_name | Sim | Nome do recurso, usado como prefixo da saída. |
expression | Sim | Campo de source. |
need_prefix | Não | Defina se o
|
value_type | Não | Tipo de saída. Padrão: |
separator | Não | Insira o separador multivalorado. O padrão é |
default_value | Não | Valor padrão usado quando o campo de source está vazio. |
weighted | Não | Especifique se a entrada está no formato chave:valor. Se definido como |
value_dimension | Não | Dimensão de truncamento da saída para recursos multivalorados. O valor padrão é |
stub_type | Não | Se |
Suporta agrupamento de recursos (binning). Consulte Agrupamento de recursos (discretização) para obter detalhes.
Compatível com o tipo
arraypara recursos multivalorados.
Exemplos
Os exemplos a seguir mostram a entrada e a saída do recurso item:is_main conforme diferentes configurações.
|
Tipo |
Entrada (item:is_main) |
Recurso de saída |
|
int64_t |
100 |
item_is_main_100 |
|
double |
5.2 |
item_is_main_5.2 |
|
string |
abc |
item_is_main_abc |
|
string multivalorada |
abc^]bcd |
[item_is_main_abc, item_is_main_bcd] |
|
int multivalorado |
123^]456 |
[item_is_main_123, item_is_main_456] |
^] representa o separador multivalorado, cujo código ASCII é "\x1D" e também pode ser escrito como "\u001d".
raw_feature
Visão geral
O operador raw_feature processa recursos contínuos e suporta tipos numéricos como int, float e double.
Configuração
{
"feature_type" : "raw_feature",
"feature_name" : "ctr",
"expression" : "item:ctr",
"normalizer" : "method=log10"
}
|
Parâmetro |
Obrigatório |
Descrição |
|
feature_name |
Sim |
Nome do recurso. |
|
expression |
Sim |
Campo de source. Deve ser |
|
normalizer |
Não |
Método de normalização. Consulte a seção Normalizer para obter detalhes. |
|
value_type |
Não |
Tipo de saída. Padrão: |
|
separator |
Não |
Separador para entradas multivaloradas. Padrão: |
|
default_value |
Não |
Valor padrão para entradas nulas ou vazias. |
|
value_dimension |
Não |
Defina a dimensão do campo de saída para truncamento. O valor padrão é 1. O tipo do schema é |
|
stub_type |
Não |
Padrão: |
Este operador suporta agrupamento/discretização de recursos. Para detalhes de configuração, consulte Agrupamento de recursos (discretização).
Compatível com entradas multivaloradas do tipo
array.
Exemplo
^] representa o separador multivalorado. Observe que este é um único caractere com código ASCII "\x1D", e não dois caracteres.
|
Tipo |
Valor |
Saída |
|
int64_t |
100 |
100 |
|
double |
100.1 |
100.1 |
|
Int multivalorado |
123^]456 |
[123, 456] (A dimensão de entrada deve corresponder ao |
Normalizer
Tanto raw_feature quanto match_feature suportam quatro tipos de normalizadores: minmax, zscore, log10, and expression. As configurações e métodos de cálculo são:
-
minmax
Exemplo: method=minmax,min=2.1,max=2.2
Fórmula: x = (x - min) / (max - min)
-
zscore
Exemplo: method=zscore,mean=0.0,standard_deviation=10.0
Fórmula: x = (x - mean) / standard_deviation
-
log10
Exemplo: method=log10,threshold=1e-10,default=-10
Fórmula: x = x > threshold ? log10(x) : default;
-
expression
Exemplo: method=expression,expr=sign(x)
Fórmula: Configure qualquer função ou expressão. A variável
xrepresenta o valor de entrada.
expr_feature
Visão geral
O expr_feature avalia uma expressão e gera o resultado como um tipo especificado, como float, double, int32 ou int64. Ele suporta computação em lote e broadcasting.
Nota: Ao usar este operador de recurso, **todas as entradas devem ser conversíveis para o tipo double**.
Configuração
{
"feature_type" : "expr_feature",
"feature_name" : "ctr_sigmoid",
"value_type": "float",
"expression" : "sigmoid(pv/(1+click))",
"variables": ["item:pv", "item:click"]
}
Quando pv = 2, click = 3, o valor do recurso de expressão é 0.6224593312.
|
Parâmetro |
Obrigatório |
Descrição |
|
feature_name |
Sim |
Nome do recurso. |
|
expression |
Sim |
Expressão a ser avaliada. |
|
variables |
Sim |
Variáveis (campos de entrada) usadas na |
|
value_type |
Não |
O tipo do recurso de saída pode ser |
|
separator |
Não |
Separador para entradas |
|
default_value |
Não |
Valor padrão retornado se ocorrer um erro durante a avaliação da expressão, como ao encontrar um valor nulo. |
|
value_dimension |
Não |
O valor padrão é 0, representando a dimensão de saída usada para truncamento ou preenchimento. Se o valor for 1, o tipo do schema é |
|
fill_missing |
No |
O padrão para preenchimento de valores ausentes é |
|
stub_type |
Não |
Se definido como |
Exemplos
{
"feature_name": "expr_feat",
"feature_type": "expr_feature",
"value_type": "float",
"expression": "a+b",
"variables": ["a", "b"],
"value_dimension": 3
}
-
Computação escalar e vetorial (broadcasting)
Quando
a=1eb=[1, 2, 6], o resultado é[2, 3, 7].
-
Cálculo
element-wisevetor-vetorQuando a variável
a=[3, 2, 1]e a variávelb=[1, 2, 6], o resultado é[4, 4, 7].
-
Variáveis temporárias e expressões com vírgula
Por exemplo:
x=roundp(a),(a-x)*b. Neste exemplo,xé uma variável temporária e não precisa ser configurada emvariables.Uma expressão com vírgula é avaliada da esquerda para a direita e retorna o valor de sua subexpressão mais à direita.
Para reduzir a sobrecarga de memória, reutilize variáveis existentes como variáveis temporárias sempre que a semântica permitir.
Combinar recursos de expressão e sequência
{
"features": [
{
"feature_name": "sphere_distance",
"feature_type": "expr_feature",
"expression": "sphere_dist(click_id_lng,click_id_lat,j_lng,j_lat)",
"variables": ["user:click_id_lng", "user:click_id_lat", "item:j_lng", "item:j_lat"],
"default_value": "0",
"value_dimension": 3,
"stub_type": true
},
{
"feature_name": "time_diff",
"feature_type": "expr_feature",
"variables": ["user:cur_time", "user:clk_time_seq"],
"expression": "cur_time-clk_time_seq",
"default_value": "0",
"separator": ";",
"value_dimension": 3,
"stub_type": true
},
{
"sequence_name": "click_seq",
"sequence_length": 3,
"sequence_delim": ";",
"sequence_pk": "user:click_item",
"features": [
{
"feature_name": "spherical_distance",
"feature_type": "raw_feature",
"expression": "feature:sphere_distance",
"default_value": "0.0"
},
{
"feature_name": "time_diff_seq",
"feature_type": "id_feature",
"expression": "feature:time_diff",
"default_value": "0.0",
"num_buckets": 10000
}
]
}
]
}
Expressões
-
Funções integradas (escalares)
Nome da função
Número de parâmetros
Descrição
rnd
0
Gera um número aleatório no intervalo [0, 1).
isnan
1
Retorna 1.0 se a entrada for NaN e 0.0 caso contrário. Requer a versão 1.0.5 ou posterior.
sin
1
Retorna o seno de um número.
cos
1
Retorna o cosseno de um número.
tan
1
Retorna a tangente de um número.
asin
1
Retorna o arco seno de um número.
acos
1
Retorna o arco cosseno de um número.
atan
1
Retorna a arco tangente de um número.
sinh
1
Retorna o seno hiperbólico de um número.
cosh
1
Retorna o cosseno hiperbólico de um número.
tanh
1
Retorna a tangente hiperbólica de um número.
asinh
1
Retorna o seno hiperbólico inverso de um número.
acosh
1
Retorna o cosseno hiperbólico inverso de um número.
atanh
1
Retorna a tangente hiperbólica inversa de um número.
log2
1
Retorna o logaritmo na base 2 de um número.
log10
1
Retorna o logaritmo na base 10 de um número.
log
1
Retorna o logaritmo natural (base e) de um número.
ln
1
Retorna o logaritmo natural (base e) de um número.
exp
1
Eleva o número de Euler (e) à potência de um número.
sqrt
1
Retorna a raiz quadrada de um número.
sign
1
Retorna o sinal de um número: -1 para negativo, 1 para positivo ou 0 para zero.
abs
1
Retorna o valor absoluto de um número.
rint
1
Arredonda um número para o inteiro mais próximo.
round
1
Arredonda um número para o inteiro mais próximo, usando o método "arredondar metade para longe de zero".
roundp
2
Arredonda um número para uma precisão especificada. Por exemplo,
roundp(3.14159, 2)retorna3.14.mod
2
Retorna o resto de uma divisão.
floor
1
Arredonda um número para baixo, até o inteiro mais próximo.
ceil
1
Arredonda um número para cima, até o inteiro mais próximo.
trunc
1
Trunca um número removendo sua parte fracionária.
sigmoid
1
Retorna a sigmoide de um número.
sphere_dist
4
Retorna a distância esférica entre dois pontos GPS. Argumentos:
lng1,lat1,lng2,lat2.haversine
4
Retorna a distância Haversine entre dois pontos GPS. Argumentos:
lng1,lat1,lng2,lat2.min
Variável
Retorna o valor mínimo de uma lista de argumentos.
max
Variável
Retorna o valor máximo de uma lista de argumentos.
sum
Variável
Retorna a soma de todos os argumentos.
avg
Variável
Retorna o valor médio de todos os argumentos.
Nota: Estas funções integradas suportam computação em lote e broadcasting.
-
Funções integradas de operação vetorial
Nome da função
Número de parâmetros
Descrição
len
1
Retorna o comprimento (número de elementos) de um vetor.
l2_norm
1
Retorna o vetor normalizado L2.
squared_norm
1
Retorna a norma L2 ao quadrado de um vetor.
dot
2
Retorna o produto escalar de dois vetores.
euclid_dist
2
Retorna a distância euclidiana entre dois vetores.
corr
2
Retorna o coeficiente de correlação de Pearson entre dois vetores.
std_dev
1
Retorna o desvio padrão amostral de um vetor (divide por n-1).
pop_std_dev
1
Retorna o desvio padrão populacional de um vetor (divide por n).
variance
1
Retorna a variância amostral de um vetor (divide por n-1).
pop_variance
1
Retorna a variância populacional de um vetor (divide por n).
reduce_min
1
Retorna o valor mínimo em um vetor.
reduce_max
1
Retorna o valor máximo em um vetor.
reduce_sum
1
Retorna a soma de todos os elementos em um vetor.
reduce_mean
1
Retorna o valor médio de todos os elementos em um vetor.
reduce_prod
1
Retorna o produto de todos os elementos em um vetor.
Nota: Se uma expressão contiver uma dessas funções integradas de operação vetorial, todas as outras variáveis na expressão devem ser escalares.
-
Operadores binários integrados
Operador
Descrição
Prioridade
=
Atribuição *
0
OU lógico
1
&&
E lógico
2
OU bit a bit
3
&
E bit a bit
4
<=
Menor ou igual a
5
>=
Maior ou igual a
5
!=
Diferente de
5
==
Igual a
5
>
Maior que
5
<
Menor que
5
+
Adição
6
-
Subtração
6
*
Multiplicação
7
/
Divisão
7
%
Módulo
7
^
Eleva x à potência de y.
8
* O operador de atribuição é especial: ele modifica um de seus argumentos e aplica-se apenas a variáveis.
-
Operador ternário integrado
Este operador fornece funcionalidade if-else.
A avaliação preguiçosa (lazy evaluation) avalia apenas o ramo necessário de uma expressão.
Operador
Descrição
Sintaxe
?:
Operador if-then-else
condition ? value_if_true : value_if_false -
Constantes integradas
Constante
Descrição
Valor
_pi
A constante matemática pi (π).
3.141592653589793
_e
A constante matemática e, também conhecida como número de Euler.
2.718281828459045
combo_feature
Visão geral
O operador combo_feature cria um recurso sintético calculando o produto cartesiano de vários campos de source. Esse processo também é conhecido como cruzamento de recursos. O operador id_feature é um caso especial de combo_feature que envolve apenas um único campo de source. Normalmente, os campos de source para cruzamento de recursos provêm de tabelas diferentes, como combinar um recurso de usuário com um recurso de item.
Configuração
{
"feature_type" : "combo_feature",
"feature_name" : "comb_age_item",
"expression" : ["user:age_class", "item:item_id"],
"need_prefix": true,
"separator": "\u001D",
"default_value": ""
}
Parâmetro | Obrigatório | Descrição |
feature_name | Sim | Nome do recurso. |
expression | Sim | Um array dos campos de source a serem combinados. |
need_prefix | Não | Defina se os valores de saída devem ter o
|
value_type | Não | Tipo de dados de saída. O padrão é |
separator | Não | Separador multivalorado para a entrada. O padrão é |
default_value | Não | Valor padrão a ser usado para entradas vazias ou nulas. |
value_dimension | Não | O valor padrão é 0. Este parâmetro define o truncamento da saída. Se o valor for 1, o tipo do schema é |
stub_type | Não | Se definido como |
Suporta agrupamento de recursos. Para instruções de configuração, consulte agrupamento de recursos (discretização).
Compatível com entradas multivaloradas do tipo
array.
Exemplos
O símbolo ^] representa o separador multivalorado, que é um único caractere com código ASCII "\x1D", e não dois caracteres.
|
** |
** |
Saída |
|
123 |
45678 |
comb_age_item_123_45678 |
|
abc, bcd |
45678 |
[comb_age_item_abc_45678, comb_age_item_bcd_45678] |
|
abc, bcd |
12345^]45678 |
[comb_age_item_abc_12345, comb_age_item_abc_45678, comb_age_item_bcd_12345, comb_age_item_bcd_45678] |
O número de valores de saída é calculado da seguinte forma:
|F1| * |F2| * ... * |Fn|
Onde |Fn| representa o número de valores no n-ésimo campo de source.
lookup_feature
Visão geral
Semelhante ao match_feature, o operador lookup_feature localiza uma chave dentro de um conjunto de pares chave-valor e retorna o valor correspondente.
Este operador depende de dois parâmetros: map e key.
O parâmetro
mapé um dicionário ou uma string multivalorada. Em uma string multivalorada, cada elemento é um par chave-valor no formato "k1:v1".O parâmetro
keypode ser de qualquer tipo de dados. Para múltiplas chaves, recomenda-se o uso de um array como tipo de entrada. Para gerar um recurso, o operador recupera o valor do parâmetrokey, converte-o para o tipo de chave domape encontra o valor correspondente no mapa.
Configuração
{
"feature_type": "lookup_feature",
"feature_name": "item_match_item",
"map": "item:item_attr",
"key": "item:item_value",
"need_discrete": true,
"need_key": true
}
Parâmetro | Obrigatório | Descrição |
feature_name | Sim | Prefixo do nome do recurso. |
map | Sim | Dicionário de source que contém os pares chave-valor. |
key | Sim | Chave a ser pesquisada no |
value_type | Não | Tipo de saída. O padrão é |
separator | Não | Separador multivalorado para o parâmetro |
default_value | Não | Valor padrão a ser retornado se uma chave não for encontrada ou se a entrada for nula. |
need_prefix | Não | Defina se o
|
need_key | Não | Defina se a
|
normalizer | Não | Método de normalização. Funciona como o parâmetro normalizer do operador raw_feature. |
combiner | Não | Método de agregação usado para combinar valores recuperados de múltiplas chaves. Valores válidos: |
need_discrete | Não | Se definido como |
value_dimension | Não | Defina a dimensão de saída. Valores válidos:
|
stub_type | Não | Se definido como |
Suporta operações de agrupamento (binning). Para o método de configuração, consulte agrupamento de recursos (discretização).
O parâmetro
mapsuporta entradas do tipo dicionário, e o parâmetrokeysuporta entradas do tipo array.
Exemplo
Para a configuração acima, suponha que um documento tenha os seguintes dados:
item_attr : "k1:v1^]k2:v2^]k3:v3"
O símbolo ^] representa o separador multivalorado. É um único caractere com código ASCII "\x1D", e não dois caracteres. Para inserir este caractere, pressione C-q C-5 no emacs ou C-v C-5 no vim. Aqui, item_attr é uma string multivalorada.
Quando o parâmetro map representa vários pares chave-valor como uma string, ele deve ser uma string multivalorada, não uma string padrão.
item_value : "k2"
O recurso resultante é item_match_item_k2_v2.
need_prefix == true
feature_name: fg
map: {"k1:123", "k2:234", "k3:3"}
key: {"k1"}
Result: feature={"fg_123"}
need_prefix == false
map: {"k1:123", "k2:234", "k3:3"}
key: {"k1"}
Result: feature={123}
Combinar resultados de lookup
Ao fornecer múltiplas chaves, use o parâmetro combiner para agregar os valores recuperados.
Para usar o combiner, defina need_discrete como false. Nesse caso, os valores consultados devem ser numéricos ou strings conversíveis em números.
match_feature
Visão geral
O operador match_feature é tipicamente usado para correspondência recurso-a-recurso. Em sua essência, realiza uma busca em mapa de dois níveis.
Configuração
O arquivo de configuração usa o formato JSON.
{
"feature_name": "user__l1_ctr_1",
"feature_type": "match_feature",
"category": "ALL",
"need_discrete": false,
"item": "item:category_level1",
"user": "user:l1_ctr_1",
"match_type": "hit"
}
-
user: Um dicionário aninhado.O campo
userusa uma string para representar o mapa de dois níveis.Para o mapa de primeiro nível,
|é o separador entre itens, e^é o separador entre uma chave e seu valor.Para o mapa de segundo nível,
,é o separador entre itens, e:é o separador entre uma chave e seu valor.O dicionário de primeiro nível também suporta uma entrada
Map<K, string>, ondeKpode ser dos tiposstring,int32,int64. O valor do mapa é uma string que representa o dicionário interno e usa os mesmos separadores.
-
category: A chave primária para a busca no mapa de primeiro nível.ALLé um caractere curinga que corresponde a todas as chaves neste nível. -
item: A chave secundária para a busca no mapa de segundo nível.ALLé um caractere curinga que corresponde a todas as chaves neste nível. -
need_discretetrue: O modelo usa o nome do recurso gerado a partir da saída e ignora o valor do recurso. Por padrão, este parâmetro éfalse.false: O modelo usa o valor do recurso correspondente da saída e ignora o nome do recurso.
-
match_typehit: Gera um único recurso correspondente. O operador primeiro consulta o mapa de primeiro nível usando o valor decategorye, em seguida, consulta o mapa de segundo nível resultante usando o valor deitempara recuperar o valor final. Para realizar correspondência de nível único, defina a chave do mapa de primeiro nível comoALLe defina o parâmetrocategoryna configuração de geração de recursos (FG) como "ALL".multihit: Corresponde e gera múltiplos valores quando o caractere curingaALLé usado nos camposcategoryeitem.
-
normalizerMétodo de normalização. Este parâmetro tem o mesmo significado que no operador raw_feature e entra em vigor apenas quando
need_discrete=false. -
show_categoryDefina se o valor de
categorydeve ser adicionado como prefixo na saída. O padrão étrueseneed_discrete=trueematch_type=hit, efalsecaso contrário. -
show_itemDefina se o valor de
itemdeve ser adicionado como prefixo na saída. O padrão étrueseneed_discrete=trueematch_type=hit, efalsecaso contrário. -
value_typeTipo de dados de saída. O padrão é
string. -
separatorOpcional. Separador multivalorado para o campo
keydo tipo string. O padrão é"\u001D". -
default_valueOpcional. Valor padrão para entradas nulas.
-
value_dimensionOpcional. Defina a estrutura de dados da saída. O padrão é 0. Se definido como 1, a saída é um único valor do tipo
value_type; caso contrário, é um array do tipoarray<value_type>. -
stub_typeOpcional. Se definido como
true, a saída é tratada como resultado intermediário e não é enviada ao modelo. Padrão:false.
Exemplos
Exemplo de recurso de usuário (dicionário aninhado)
Por exemplo, a string 50011740^50011740:0.2,36806676:0.3,122572685:0.5|50006842^16788:0.1 converte para o seguinte mapa de dois níveis:
{
"50011740": {
"50011740": 0.2,
"36806676": 0.3,
"122572685": 0.5
},
"50006842": {
"16788": 0.1
}
}
Hit
Este exemplo mostra uma configuração para o tipo de correspondência hit.
{
"feature_name": "brand_hit",
"feature_type": "match_feature",
"category": "item:auction_root_category",
"need_discrete": true,
"item": "item:brand_id",
"user": "user:user_brand_tags_hit",
"match_type": "hit"
}
Com os seguintes valores de campo:
|
Campo |
Valor |
|
|
user_brand_tags_hit |
50011740^107287172:0.2,36806676:0.3,122572685:0.5 |
50006842^16788816:0.1,10122:0.2,29889:0.3,30068:19 |
|
auction_root_category |
50006842 |
|
|
brand_id |
30068 |
Se
need_discrete=true, o operador realiza uma busca em duas etapas. Primeiro, usa o valor deauction_root_category(50006842) para consultaruser_brand_tags_hit, que retorna o mapa interno16788816:0.1,10122:0.2,29889:0.3,30068:19. Em seguida, consulta esse mapa interno com obrand_id(30068) para recuperar o valor19. A operação então gera o nome do recurso:brand_hit_50006842_30068_19.Se
need_discrete=false, o resultado é19.0.O campo
user_brand_tags_hittambém pode ser do tipo Map, por exemplo:{"50011740": "107287172:0.2,36806676:0.3,122572685:0.5", "50006842": "16788816:0.1,10122:0.2,29889:0.3,30068:19"}.
Para realizar correspondência de nível único, altere o valor de category na configuração para ALL. Suponha que os campos tenham os seguintes valores:
|
Campo |
Valor |
|
user_brand_tags_hit |
ALL^16788816:40,10122:40,29889:20,30068:20 |
|
brand_id |
30068 |
Se
need_discrete=true, o resultado ébrand_hit_ALL_30068_20.Se
need_discrete=false, o resultado é20.0.
Alternativamente, use o operador lookup_feature neste cenário. Isso requer alterar o formato do valor de user_brand_tags_hit para "16788816:40^]10122:40^]29889:20^]30068:20". A string '^]' representa o separador multivalorado \u001d, que é um caractere não imprimível.
O operador lookup_feature suporta tipos de entrada complexos, como map e array, oferecendo melhor desempenho.
overlap_feature
Visão geral
Gera informações sobre correspondências de termos entre duas strings. Por exemplo, use este recurso para determinar se uma query está no title de um item.
Método | Descrição |
query_common_ratio | Calcula a proporção de termos sobrepostos em relação ao número total de termos na O valor retornado está no intervalo [0.0, 1.0]. |
title_common_ratio | Calcula a proporção de termos sobrepostos em relação ao número total de termos no O valor está no intervalo [0.0, 1.0]. |
is_contain | Verifica se a
|
is_equal | Verifica se a
|
index_of | Calcula o índice inicial da primeira ocorrência de toda a |
proximity_min_cover | Calcula a O valor está no intervalo [0, length(title)]. Um valor de 0 indica que pelo menos um |
proximity_min_dist | Calcula a O valor está no intervalo [0, length(title)+1]. Um valor de length(title)+1 indica que não há termos correspondentes. |
proximity_max_dist | Calcula a O valor está no intervalo [0, length(title)+1]. Um valor de length(title)+1 indica que não há termos correspondentes. |
proximity_avg_dist | Calcula a O valor está no intervalo [0, length(title)+1]. Um valor de length(title)+1 indica que não há termos correspondentes. |
O artigo "An Exploration of Proximity Measures in Information Retrieval" descreve os métodos de cálculo para esses recursos.
Suponha que a sequência de term s de um title (document) seja: t1,t2,t1,t3,t5,t4,t2,t3,t4
MinCover mede o comprimento do menor segmento do
documentque cobre cadaquery termpelo menos uma vez.MinDist (Distância mínima entre pares): A distância mínima encontrada entre qualquer par de
query terms correspondentes. Por exemplo, se umaqueryQ=t1,t2,t3 tiver distâncias entre pares de 1, 2 e 3 em umdocument, o MinDist é min(1,2,3)=1.MaxDist (Distância máxima entre pares): A distância máxima encontrada entre qualquer par de
query terms correspondentes. Para o mesmo exemplo, MaxDist=max(1,2,3)=3.AveDist (Distância média entre pares): A média das distâncias entre pares de todos os
query terms correspondentes. Para o mesmo exemplo, AveDist=(1+2+3)/3=2.
Observe que todos os operadores de agregação (MinDist, MaxDist e AveDist) são definidos com base nas distâncias entre pares de query term s correspondentes. Se um document contiver apenas um query term correspondente, o valor para MinDist, AveDist e MaxDist será o comprimento do document.
Configuração
{
"feature_type" : "overlap_feature",
"feature_name" : "is_contain",
"query" : "user:attr1",
"title" : "item:attr2",
"method" : "is_contain",
"separator" : " ",
"normalizer" : ""
}
|
Parâmetro |
Obrigatório |
Descrição |
|
feature_type |
Sim |
Tipo do recurso. Deve ser |
|
feature_name |
Sim |
Nome do |
|
query |
Sim |
Campo de source para o texto da |
|
title |
Sim |
Campo de source para o texto do |
|
method |
Sim |
Método de cálculo. Os valores válidos são |
|
separator |
- |
Insira o separador. Se nenhum valor for inserido, o padrão é |
|
normalizer |
Não |
O |
|
stub_type |
Não |
O padrão é |
O overlap_feature retorna um valor float.
Exemplo 1
Dada uma query de "high,high2,fiberglass,abc" e um title de "high,quality,fiberglass,tube,for,golf,bag":
|
Método |
Valor |
|
query_common_ratio |
0.5 |
|
title_common_ratio |
0.28 |
|
is_contain |
0 |
|
is_equal |
0 |
Exemplo 2
method=index_of, title=the cat sat on the mat.
|
Query |
Valor |
|
the cat |
0 |
|
sat |
2 |
|
the mat |
4 |
|
cap |
-1 |
|
gap |
-1 |
sequence_feature
Visão geral
O comportamento histórico de um usuário é um recurso crítico. Esse comportamento é tipicamente representado como uma sequência, como uma série de cliques ou compras. As entidades que compõem a sequência podem ser os próprios itens ou seus atributos.
Configuração
Por exemplo, para processar uma sequência de cliques de usuário com comprimento máximo de 50, extraia os recursos item_id, price e ts para cada item. Aqui, ts é a diferença entre o tempo da requisição (request_time) e o tempo do evento (event_time). O exemplo a seguir mostra a configuração.
{
"sequence_name": "click_50_seq",
"sequence_length": 50,
"sequence_delim": ";",
"sequence_pk": "user:click_50_seq",
"features": [
{
"feature_name": "item_id",
"feature_type": "id_feature",
"value_type": "string",
"expression": "item:item_id"
},
{
"feature_name": "price",
"feature_type": "raw_feature",
"expression": "item:price"
},
{
"feature_name": "ts",
"feature_type": "raw_feature",
"expression": "user:ts"
},
{
"feature_name": "time_diff_seq",
"feature_type": "custom_feature",
"operator_name": "SeqExpr",
"operator_lib_file": "3rdparty/lib64/libseq_expr.so",
"expression": ["user:cur_time", "user:clk_time_seq"],
"formula": "cur_time - clk_time_seq",
"sequence_fields": ["clk_time_seq"],
"default_value": "0",
"value_type": "double",
"is_op_thread_safe": false,
"value_dimension": 1
}
]
}
sequence_name: Nome da sequência.sequence_length: Comprimento máximo da sequência.sequence_delim: Delimitador que separa elementos na sequência.-
sequence_pk: Chave primária da sequência. Um exemplo é
user:click_50_seq, que armazena os 50 itemIDs mais recentes clicados por um usuário. O serviço de inferência de modelo usa este campo como chave para consultarside info.-
Os parâmetros de requisição para o Online Inference Service (EAS Processor) devem incluir um recurso cuja chave seja
sequence_pk.-
Por exemplo:
click_50_seq: 5410233389955966;1832586(O separador é o valor especificado parasequence_delim)No exemplo acima, o valor do recurso
click_50_seqé 5410233389955966;1832586
-
-
Sub-recursos do lado do item da sequência não precisam ser incluídos na requisição ao serviço de inferência de modelo.
O serviço de inferência de modelo usa este campo como chave para consultar as
side infodo item.Por exemplo, nesta configuração, os recursos de sequência
item_id, pricenão são necessários na requisição ao serviço de inferência. Em vez disso, eles são recuperados do cache de itens do Processor e concatenados usando o SDK fg. Esse processo garante que o formato seja consistente com o usado durante o treinamento offline.
-
Sub-recursos do lado do usuário da sequência devem ser incluídos na requisição ao serviço de inferência de modelo.
O nome do recurso é
${sequence_name}__${input_name}, por exemplo:click_50_seq__ts.${input_name}é tipicamente configurado com a opçãoexpression, mas a configuração pode variar para diferentes tipos de sub-recursos.${input_name}não inclui um prefixo deinput domain(comoitem:ouuser:).
-
Features: As
side infode uma sequência, que incluem informações como valores de atributos estáticos de um item e informações temporais comportamentais.-
sequence_fields: Especifique os nomes dos campos da sequência de entrada. O valor é uma
stringou um array[string].Quando um operador de recurso tem apenas um campo de entrada, o conteúdo desse campo deve ser uma sequência. Nesse caso, não é necessário configurar
sequence_fields.Quando um operador de recurso tem múltiplos campos de entrada, se você não configurar
sequence_fields, todos os recursos do lado do item (como item:XXX) são assumidos como campos de entrada da sequência.
-
A tabela de entrada para uma tarefa offline deve incluir colunas correspondentes a todos os sub-recursos.
-
Quando a coluna é uma sequência (veja as regras para
sequence_fields), ela é nomeada como${sequence_name}__${input_name}.Por exemplo, nesta configuração, a tabela offline requer 4 colunas:
click_50_seq__item_id,click_50_seq__price,click_50_seq__tseclick_50_seq__clk_time_seq.O tipo recomendado para uma coluna em uma tabela offline é array (para melhor desempenho), embora o tipo
stringusandosequence_delimcomo separador de elementos também seja suportado.
-
Se a coluna não for uma sequência, nomeie-a como
${input_name}sem prefixo.Por exemplo, nesta configuração, a tabela offline requer uma coluna não sequencial:
${cur_time}
Use a configuração global
input_aliaspara definir um alias mais curto para um nome de coluna longo (veja o exemplo abaixo).O agrupamento de recursos é suportado. Para detalhes de configuração, consulte Agrupamento de recursos (discretização). Quando o agrupamento é configurado, o tipo de elemento de saída é
int64, e a forma é determinada pela configuraçãovalue_dimension.value_dimension (ou
value_dim): A dimensão de cada elemento na Sequência. Para umsequence_raw_feature, o tipo de saída é1quando este parâmetro é definido comoarray<float>, earray<array<float>>para outros valores. Para umsequence_id_feature, o tipo de saída éarray<string>quando este parâmetro é definido como1, earray<array<string>>para outros valores. O valor padrão é 0.
Qualquer tipo de recurso pode ser configurado como um sub-recurso de sequência. O seguinte é um exemplo:
{ "features": [ { "sequence_name": "common_seq", "sequence_length": 50, "sequence_delim": ";", "sequence_pk": "user:click_50_seq", "features": [ { "feature_name": "item_id", "feature_type": "id_feature", "value_type": "String", "expression": "item:item_id", "value_dimension": 1 }, { "feature_name": "price", "feature_type": "raw_feature", "expression": "item:price" }, { "feature_name": "ts", "feature_type": "raw_feature", "expression": "user:ts" }, { "feature_name": "expr_feat", "feature_type": "expr_feature", "expression": "a > b", "variables": ["item:a", "item:b"], "sequence_fields": "a", "default_value": "0", "value_dimension": 1 }, { "feature_name": "lookup_feat", "feature_type": "lookup_feature", "map": "user:dict", "key": "item:prop", "separator": ",", "default_value": "0", "value_type": "float", "combiner": "sum", "boundaries": [0.0, 0.15, 0.5] }, { "feature_name": "match_feat", "feature_type": "match_feature", "user": "user:nested_dict", "category": "item:pkey", "item": "item:skey", "separator": "\u001D", "default_value": "0", "matchType": "hit", "value_type": "float", "value_dimension": 1 }, { "feature_name": "bm25_score", "feature_type": "bm25_feature", "separator": " ", "default_value": "0", "query": "user:query", "document": "item:document", "sequence_fields": "query", "document_number": 100, "avg_doc_length": 6, "term_doc_freq_dict": { "this": 30, "example": 10, "document": 15 } }, { "feature_name": "overlap_feat", "feature_type": "overlap_feature", "query": "user:query2", "title": "item:title2", "sequence_fields": "query2", "method": "index_of", "separator": " ", "default_value": "-1" }, { "feature_type": "kv_dot_product", "feature_name": "query_doc_sim", "query": "user:query3", "document": "item:title", "sequence_fields": "query3", "separator": "|", "default_value": "0" }, { "feature_name": "seg_feat", "feature_type": "tokenize_feature", "expression": "input_a", "default_value": "0", "output_type": "word", "tokenizer_type": "sentencepiece", "vocab_file": "spmodel.model" }, { "feature_name": "txt_norm", "feature_type": "text_normalizer", "expression": "input", "default_value": "<oov>", "parameter": 28 }, { "feature_name": "seq_combo_feat", "feature_type": "combo_feature", "expression": ["user:tags", "item:cat"], "sequence_fields": ["tags"], "separator": "_", "default_value": "0", "value_dimension": 1 }, { "feature_name": "norm_str", "feature_type": "str_replace_feature", "expression": ["user:profile"], "default_value": "", "replace_file": "synonyms.txt", "replacements": { "|": "", "aa": "x", "a": "X" }, "value_dimension": 1 }, { "feature_name": "query_tokens", "feature_type": "regex_replace_feature", "expression": ["user:query_tokens"], "default_value": "", "value_type": "string", "regex_pattern": [ "\\|", "#", "\\(.*\\)" ], "replacement": "", "value_dimension": 1 }, { "feature_name": "slice", "feature_type": "slice_feature", "value_type": "int32", "expression": ["context:array"], "slice": "0:3", "value_dimension": 3, "num_buckets": 100000 }, { "feature_name": "mask_feature", "feature_type": "bool_mask_feature", "value_type": "float", "expression": [ "user:click_items", "item:is_valid" ] }, { "feature_name": "time_diff_seq", "feature_type": "custom_feature", "operator_name": "SeqExpr", "operator_lib_file": "3rdparty/lib64/libseq_expr.so", "expression": ["user:cur_time", "user:clk_time_seq"], "formula": "cur_time - clk_time_seq", "sequence_fields": ["clk_time_seq"], "default_value": "0", "value_type": "double", "is_op_thread_safe": false, "value_dimension": 1 } ] } ], "input_alias": { "common_seq__clk_time_seq": "clk_time_seq" } }Nota: O parâmetro
input_aliasespecifica um alias para um campo de entrada. O formato é"origin_field": "alias_field", o que permite usar um nome mais curto para substituir o nome original do campo de entrada.Formato achatado
Normalmente, obtenha a versão de sequência adicionando o prefixo
sequence_a um tipo de recurso não sequencial (feature_type). Observe que, para recursos de sequência, geralmente é necessário configurar umdefault_value.Exemplos:
sequence_id_feature: O valor de saída é sempre uma
string. Se precisar de um tipo diferente, useslice_feature.sequence_raw_feature: O tipo de valor de saída é fixo em
float. Se precisar de outros tipos, useslice_feature.
Caso especial 1: Alguns tipos de transformação de recursos possuem versões sequenciais e não sequenciais.
Para ativar a versão correspondente, defina
is_sequence: true/false.Neste caso, o parâmetro
feature_typenão requer o prefixosequence_.Exemplos:
Caso especial 2: Alguns tipos de transformação de recursos possuem apenas uma versão sequencial.
Neste caso, o parâmetro
feature_typenão requer o prefixosequence_.Exemplos:
Para esses dois casos especiais, adicione os seguintes parâmetros opcionais:
sequence_length: Comprimento máximo da sequência. Elementos além desse comprimento são truncados. O valor padrão é -1, o que significa que a sequência não é truncada.sequence_delim: Separador entre elementos da sequência. O valor padrão é
;.
O código a seguir fornece um exemplo de configuração.
{ "feature_name": "clk_seq__item_id", "feature_type": "sequence_id_feature", "sequence_name": "clk_seq", "sequence_length": 50, "sequence_delim": ";", "expression": "item:clk_item_seq", "separator": "\u001D", "default_value": "" }, { "feature_name": "clk_seq__item_price", "feature_type": "sequence_raw_feature", "sequence_name": "clk_seq", "sequence_length": 50, "sequence_delim": ";", "expression": "item:clk_item_prices", "separator": "\u001D", "default_value": "0" }, { "feature_name": "test", "feature_type": "sequence_lookup_feature", "map": "user:prefer_tags", "key": "item:tags", "sequence_length": 2, "separator": ",", "default_value": "-1024", "value_type": "int32", "normalizer": "method=expression,expr=x+1", "combiner": "sum", "default_bucketize_value": 50, "num_buckets": 10000 }, { "feature_name": "test", "feature_type": "sequence_combo_feature", "separator": "_", "default_value": "0", "expression": ["user:f1", "item:f2"], "hash_bucket_size": 10000 }No exemplo anterior, os campos de entrada
clk_item_seqeclk_item_pricesdevem ser uma Sequência, que pode ser um array ou uma string com elementos separados pelo caractere configurado porsequence_delim.Com esta configuração, o serviço online (Processor) não consulta side info. Forneça a entrada completa.
O nome do campo de entrada para um recurso de sequência no formato achatado é igual ao nome configurado e não recebe o prefixo
${sequence_name}__.
Geração de recursos online
Obtenha as sideinfo de comportamento de duas maneiras. Uma maneira é recuperar as sideinfo do cache de itens do EasyRec Processor. O campo especificado por
sequence_pké usado como chave primária para buscar informações de atributos do item no cache de itens. A outra maneira é preencher os valores dos campos correspondentes na requisição. Por exemplo, o campo "ts" na configuração anterior representa (request_time - event_time), que é o tempo da requisição de recomendação menos o tempo do comportamento do usuário. Esse valor muda a cada requisição e, portanto, deve ser obtido da requisição.user_features { key: "click_50_seq" value { string_feature: "9008721;34926279;22487529;73379;840804;911247;31999202;7421440;4911004;40866551" } } user_features { key: "click_50_seq__ts" value { string_feature: "23;113;401363;401369;401375;401405;486678;486803;486922;486969" } }combine_feature
Introdução
O operador
combine_featureagrega múltiplos valores de um recurso de entrada em um único valor usando uma estratégia de combinação especificada (combiner).Sua versão sequencial,
sequence_combine_feature, agrega valores dentro de cada elemento de um recurso de sequência, transformando uma sequência multivalorada em uma sequência de valor único.Principais capacidades
Combinação multivalorada: Agrega múltiplos valores de um recurso em um único valor.
Estratégia de combinação flexível: Suporta várias estratégias, como
sum,mean,max,minecount.Mapeamento de valores: Converte identificadores de string em valores numéricos, ideal para processar uma sequência de eventos comportamentais.
Suporte a separador duplo: Permite configurar tanto um delimitador de sequência quanto um separador multivalorado.
Configuração
Configuração básica (combinação numérica)
{ "feature_name": "combine_feat", "feature_type": "combine_feature", "expression": "user:behavior_seq", "combiner": "sum", "separator": "|" }Configure a versão sequencial de duas maneiras:
Defina o parâmetro
feature_typecomosequence_combine_feature.Adicione o parâmetro
"is_sequence": true.
{ "feature_name": "seq_combine_feat", "feature_type": "sequence_combine_feature", "expression": "user:behavior_seq", "combiner": "sum", "separator": "|", "sequence_delim": ";" }Ou:
{ "feature_name": "seq_combine_feat", "feature_type": "combine_feature", "expression": "user:behavior_seq", "combiner": "sum", "is_sequence": true, "separator": "|", "sequence_delim": ";" }Configuração de mapeamento de valores (eventos comportamentais)
{ "feature_name": "behavior_score", "feature_type": "sequence_combine_feature", "expression": "user:action_events", "combiner": "sum", "separator": "|", "sequence_delim": ";", "value_map": { "expo": 1, "click": 2, "buy": 4 } }O operador aplica primeiro o mapeamento de valores e depois combina os valores resultantes.
Parâmetros
Parâmetro
Obrigatório
Descrição
feature_name
Sim
Nome do recurso de saída.
feature_type
Sim
Especifique o tipo de operador. Por exemplo,
sequence_combine_feature.expression
Sim
Recurso de entrada.
combiner
Não
Estratégia de combinação. Valores suportados:
sum,mean,max,minecount. O padrão ésum.value_map
Não
Um mapa de valores para converter valores de string em valores numéricos antes da combinação.
is_sequence
Não
Especifique se a entrada é um recurso de sequência.
separator
Não
Separador multivalorado. O padrão é
\u001D.sequence_delim
Não
Delimitador de sequência. O padrão é uma string vazia.
default_value
Não
Valor padrão a ser usado para entradas nulas ou vazias.
stub_type
Não
Se definido como
true, o recurso serve apenas como resultado intermediário e não é enviado ao modelo. O padrão éfalse.Exemplos
Exemplo 1: Combinação numérica básica (soma)
Configuração:
{ "feature_name": "score_sum", "feature_type": "sequence_combine_feature", "expression": "user:scores", "combiner": "sum", "separator": ",", "sequence_delim": ";" }Entrada e Saída:
Entrada
Saída
Descrição
"1,2,3;4,5;6"[6, 9, 6]1+2+3=6, 4+5=9, 6=6
"10;20,30"[10, 50]10=10, 20+30=50
["1,2,3", "4,5", "6"][6, 9, 6]1+2+3=6, 4+5=9, 6=6
[[1,2,3], [4,5], [6]][6, 9, 6]1+2+3=6, 4+5=9, 6=6
Exemplo 2: Sequência de eventos comportamentais (com mapa de valores)
Configuração:
{ "feature_name": "behavior_weight", "feature_type": "sequence_combine_feature", "expression": "user:actions", "combiner": "sum", "separator": "|", "sequence_delim": ";", "value_map": { "expo": 1, "click": 2, "buy": 4 } }Entrada e Saída:
Entrada
Saída
Descrição
`"expoclick
buy"`
[7]O operador mapeia eventos para seus valores e depois os soma: 1+2+4=7.
"click"[2]O valor mapeado é 2.
`"expoclick"`
[3]1+2=3
`"expoclick
buy;expo;click"`
[7, 1, 2]A string de entrada contém múltiplos elementos separados pelo delimitador de sequência (;).
`["expoclick", "expo", "click
buy"]`
[3, 1, 6]O array de entrada contém múltiplos elementos.
tokenize_feature
Visão geral
O operador
tokenize_featuretokeniza uma string de entrada, retornando a string tokenizada ou os IDs de token correspondentes. Este operador suporta arquivos de vocabulário no formatotokenizer.jsonda bibliotecatokenizers-cpp.Para mais informações sobre o formato do arquivo de vocabulário, consulte os seguintes recursos:
https://github.com/huggingface/tokenizers
https://github.com/mlc-ai/tokenizers-cpp
Configuração
{ "feature_name": "title_token", "feature_type": "tokenize_feature", "expression": "item:title", "default_value": "", "vocab_file": "tokenizer.json", "tokenizer_type": "sentencepiece", "output_type": "word_id", "output_delim": "," }Parâmetro
Obrigatório
Descrição
feature_name
Sim
Nome do recurso a ser criado.
expression
Sim
Especifique o campo de source. A source deve ser
user,itemoucontext.vocab_file
Sim
Caminho do arquivo de vocabulário.
default_value
Não
Valor padrão para a entrada.
tokenizer_type
Não
Tipo do tokenizador. Valor válido:
sentencepiece. Se este parâmetro não for especificado, o sistema infere o tipo do tokenizador a partir dovocab_file.output_type
Não
word_id: Retorna os IDs dos tokens.word: Retorna a string tokenizada.
output_delim
Não
O separador para a saída de
word_idouwordé usado apenas em tarefas offline.stub_type
Não
Quando definido como
true, este recurso é considerado um resultado intermediário e não é enviado ao modelo.Exemplo
Quando
output_typeéword_id, o operador retorna uma string de IDs de token, separados pelo caractere especificado emoutput_delim.Tipo
item:title
Saída
string
It is good today!
1147,310,1175,3063,2
Exemplos de vocabulário
Nome do arquivo
Tipo de tokenizador
Link para baixe
bert-base-chinese-vocab.json
WordPiece
tokenizer.json
BPE
spiece.model
sentencepiece
text_normalizer
Visão geral
O operador
text_normalizerrealiza normalização de texto. Seus recursos incluem conversão de maiúsculas/minúsculas, conversão de chinês tradicional para simplificado, conversão de caracteres de largura total para meia largura, filtragem de caracteres especiais, conversão de codificação GBK/UTF-8 e divisão de caracteres chineses.Configuração
{ "feature_name": "txt_norm", "feature_type": "text_normalizer", "expression": "item:title", "stop_char_file": "stop_char.txt", "max_length": 256, "parameter": 0, "remove_space": false, "is_gbk_input": false, "is_gbk_output": false }Parâmetro
Obrigatório
Descrição
feature_name
Sim
Nome do recurso.
expression
Sim
Campo de source. A source deve ser
user,itemoucontext.stop_char_file
Não
Caminho para um arquivo contendo os caracteres especiais a serem removidos. Este arquivo deve estar codificado em GBK. Se você omitir este parâmetro, o operador usará uma lista integrada.
max_length
Não
Se o comprimento do texto de entrada exceder este valor, o operador pulará a normalização de texto e retornará o valor original.
remove_space
-
Indica se os espaços devem ser removidos.
is_gbk_input
Não
Indica se a entrada está codificada em GBK. Se
false, o operador assume que a entrada é UTF-8.is_gbk_output
Não
Indica se a saída deve ser codificada em GBK. Se
false, o operador codifica a saída como UTF-8.parameter
-
Uma máscara de bits que especifica as operações de normalização a serem executadas.
default_value
Não
Valor padrão a ser retornado se o campo de source for nulo ou vazio.
Nota:
O arquivo
stop_char_filedeve usar codificação GBK.Cada linha no arquivo
stop_char_filepode conter apenas um caractere. Caso contrário, a filtragem falhará.
Opções de normalização de texto
O parâmetro
parameterespecifica a soma de um ou mais dos seguintes números.Por exemplo, se as funções necessárias forem conversão de maiúsculas para minúsculas, conversão de largura total para meia largura, conversão de chinês tradicional para simplificado e filtragem de caracteres especiais, então
parameter=4+8+16+32=60.O valor padrão do parâmetro
parameteré 60.#define __NORMALIZED_LOWER2UPPER__ 2 /* Convert lowercase to uppercase. */ #define __NORMALIZED_UPPER2LOWER__ 4 /* Convert uppercase to lowercase. */ #define __NORMALIZED_SBC2DBC__ 8 /* Convert full-width to half-width characters. */ #define __NORMALIZED_BIG52GBK__ 16 /* Convert Traditional to Simplified Chinese. */ #define __NORMALIZED_FILTER__ 32 /* Filter special characters. */ #define __NORMALIZED_SPLITCHARS__ 512 /* Split Chinese characters into single characters, separated by spaces. */Exemplo
{ "feature_name": "txt_norm", "feature_type": "text_normalizer", "expression": "input_a", "parameter": 28 }inputs=["Regular Expression Code Generator", "HTML Filtering Tool", "Regular Expression Syntax Cheatsheet", "The Cat/"]
outputs=["regex code generator", "HTML filtering tool", "regular expression syntax quick reference", "the cat/"]
Recurso Bm25
Recursos
O algoritmo BM25 (Best Matching) é um dos principais algoritmos de correspondência de texto em recuperação de informação, usado para calcular pontuações de relevância de busca. O algoritmo primeiro analisa uma consulta em termos
q_i . Em seguida, para cada resultado de busca D, ele calcula a pontuação de relevância de cada termoq_i para D. Finalmente, calcula uma soma ponderada das pontuações de relevância de cada termoq_i para produzir a pontuação final de relevância entre a consulta e D.Para chinês, aborde a tokenização da consulta como análise de morfemas, tratando cada termo como um morfema
q_i .A fórmula geral para o algoritmo BM25 é:
score(Q,d)=i=1∑nwiR(qi,d) Onde
Q representa uma consulta,q_i é oi -ésimo termo da consulta,d é um documento,w_i é o peso deq_i , e R(q_i, d) é a pontuação de relevância deq_i para o documentod .Importância do termo
Existem vários métodos para determinar a relevância de um termo para um documento. Um dos mais comuns é a frequência inversa de documentos (IDF). A fórmula é a seguinte:
IDF(qi)=logn(qi)+0.5N−n(qi)+0.5 Aqui,
N representa o número total de documentos no corpus, en(q_i) representa o número total de documentos no corpus que contêm qi.De acordo com a definição de IDF, para uma dada coleção de documentos, quanto mais documentos contiverem o termo
q_i , menor será o peso deq_i . Em outras palavras, quando muitos documentos contêmq_i , o poder discriminativo deq_i é baixo. Portanto,q_i é menos importante para determinar a relevância.Relevância do termo
No BM25, a pontuação de relevância entre um termo
q_i e um documentod , denotada porR(q_i,d) , é:R(qi,d)=fi+Kfi⋅(k1+1)⋅qfi+k2qfi⋅(k2+1) K=k1⋅(1−b+b⋅avgdldl) k_1, k_2, b são fatores de ajuste, tipicamente definidos com base na experiência. Valores comuns sãok_1=1.2, b=0.75, k_2=0 .f_i é a frequência do termoq_i no documentod , eqf_i é a frequência do termoq_i na consulta.dl é o comprimento do documentod , eavgdl é o comprimento médio do documento em todos os documentos. Como um termoq_i tipicamente aparece apenas uma vez em uma consulta (qf_i=1 ), a fórmula simplifica para:R(qi,d)=fi+Kfi⋅(k1+1) Pela definição de
K , observa-se que o parâmetrob ajusta o impacto do comprimento do documento na relevância. Quanto maior o valor deb , maior o efeito do comprimento do documento na pontuação de relevância, e vice-versa. Quanto maior o comprimento relativo de um documento, maior o valor deK , o que reduz a pontuação de relevância. Isso ocorre porque um documento mais longo tem maior probabilidade de conterq_i . Portanto, para o mesmo valor def_i , a relevância de um documento longo paraq_i é mais fraca do que a relevância de um documento curto paraq_i .A fórmula de pontuação de relevância do algoritmo
BM25pode ser resumida da seguinte forma:score(Q,d)=j=1∑nIDF(qi)fi+k1⋅(1−b+b⋅avgdldl)fi⋅(k1+1) A fórmula
BM25demonstra que o uso de diferentes métodos para tokenização, ponderação de termos e determinação da relevância termo-documento pode produzir vários métodos de pontuação de relevância de busca, oferecendo grande flexibilidade para o design de algoritmos.Configuração
{ "feature_type": "bm25_feature", "feature_name": "query_doc_relevance", "query": "user:query", "document": "item:title", "term_doc_freq_file": "term_doc_freq.txt", "document_number": 1000, "avg_doc_length": 100.0, "k1": 1.2, "b": 0.75, "separator": "\u001D", "default_value": "" }Parâmetro
Obrigatório
Descrição
feature_name
Sim
Nome do recurso de saída.
query
Sim
Campo de source para a consulta.
document
Sim
Campo de source para o documento.
term_doc_freq_file
Não
Caminho do arquivo para os dados de frequência termo-documento. Cada linha contém um termo e sua contagem de documentos, separados por espaço em branco.
term_doc_freq_dict
Não
Uma alternativa ao
term_doc_freq_file. Um dicionário que mapeia termos para suas contagens de documentos.document_number
Sim
Número total de documentos, que corresponde a
N na fórmula.k1
Não
Parâmetro de ajuste para o algoritmo BM25. Valores típicos variam de 1.2 a 2.0. O padrão é 1.2.
b
Não
Parâmetro de ajuste para o algoritmo BM25. O padrão é 0.75.
separator
Não
Separador para entrada multivalorada. O padrão é
\u001D.normalizer
Não
Método de normalização. Para detalhes, consulte a configuração do raw_feature.
default_value
Não
Valor padrão para entradas nulas.
stub_type
Não
Se definido como true, este recurso serve apenas como resultado intermediário e é excluído da saída do modelo. O padrão é false.
Especifique
term_doc_freq_fileouterm_doc_freq_dict. O primeiro tem precedência e é usado se ambos forem especificados.Ao usar este recurso no serviço online, coloque o arquivo
term_doc_freq_fileefg.jsonno mesmo diretório.
kv_dot_product
Visão geral
Calcula o produto escalar dos vetores de dois índices
key-value, ou o tamanho da interseção de dois conjuntos.Configuração
{ "feature_type": "kv_dot_product", "feature_name": "query_doc_sim", "query": "user:query", "document": "item:title", "separator": "|", "default_value": "0" }Parâmetro
Obrigatório
Descrição
feature_name
Sim
Nome do recurso de saída.
query
Sim
Especifique o campo de source para a consulta.
document
Sim
Especifique o campo de source para o documento.
separator
Não
Separador para entradas multivaloradas. O padrão é "\u001D".
kv_delimiter
Não
Separador para pares chave-valor. O padrão é ":".
normalizer
Não
Método de normalização. Para mais informações, consulte a configuração do raw_feature.
default_value
Não
Valor a ser retornado para uma entrada vazia. O padrão é 0.
stub_type
Não
O padrão é false. Se definido como true, o recurso serve apenas como resultado intermediário e não é incluído na saída do modelo.
Este recurso suporta tipos complexos, como
arrayemap. Para desempenho ideal, use tipos complexos.Quando a entrada não possui uma parte
value, ovaluepadrão é 1.0. Use esta propriedade para encontrar o tamanho da interseção de dois conjuntos.Se você não configurar
default_value, o valor padrão será definido como 0.
Exemplos
Consulta
Documento
Saída
"a:0.5
b:0.5"
"d:0.5
b:0.5"
0.25
["a:0.5", "b:0.5"]
["d:0.5", "b:0.5"]
0.25
{"a":0.5, "b":0.5}
{"d":0.5, "b":0.5}
0.25
["a:0.5", "b:0.5"]
{"d":0.5, "b":0.5}
0.25
["a", "b", "c"]
["a", "b", "d"]
2.0
["a", "b", "c"]
"a
b
d"
2.0
["a", "b", "c"]
{"a":0.5, "b":0.5}
1.0
str_replace_feature
Visão geral
O operador
str_replace_featuresubstitui todas as substrings correspondentes em uma string de entrada pelas substituições especificadas.Correspondências sobrepostas são substituídas de forma gulosa.
Configuração
{ "feature_name": "norm_str", "feature_type": "str_replace_feature", "expression": ["user:query"], "default_value": "", "replacements": { "brown": "box", "dogs": "jugs", "fox": "with", "jumped": "five", "over": "dozen", "quick": "my", "the": "pack", "the lazy": "liquor", "|": "", "aa": "x", "a": "X" }, "value_dimension": 1 }Parâmetro
Descrição
feature_name
Obrigatório. Nome do recurso de saída.
expression
Obrigatório. Especifique o campo de source.
default_value
Opcional. Valor padrão a ser usado se a entrada estiver vazia ou for um valor nulo.
replacements
Opcional. Este parâmetro torna-se obrigatório se
replace_filenão estiver definido. O valor é um dicionário que mapeia o texto original para o texto de substituição.replace_file
Opcional. Este parâmetro é obrigatório se você não definir
replacements. O valor deve ser um arquivo de dicionário onde cada linha está no formatooriginal text \t replacement text. O separador é um caractere de tabulação (\t).is_sequence
Opcional. Especifique se este é um recurso de sequência. O valor padrão é
false.sequence_length
Opcional. Comprimento máximo da sequência. Elementos além deste comprimento são truncados.
sequence_delim
Opcional. Separador para elementos da sequência. Este parâmetro aplica-se apenas a entradas de string.
separator
Opcional. Este parâmetro especifica o separador multivalorado para a entrada e entra em vigor apenas quando
is_sequence=true. O padrão é "\u001D".value_dimension
Opcional. Especifique a dimensão para truncamento da saída. Padrão: 0.
stub_type
Opcional. Se definido como
true, o recurso é tratado como resultado intermediário e excluído da saída do modelo. O padrão éfalse.Configure tanto
replace_filequantoreplacements. Os dicionários de substituição de ambos são mesclados, ereplacementstem prioridade mais alta.-
Este operador suporta agrupamento de recursos. Para detalhes de configuração, consulte Agrupamento de Recursos (Discretização):
hash_bucket_size: Aplica hash ao resultado da transformação do recurso e executa uma operação de módulo.vocab_list: Agrupa a entrada com base em um vocabulário e mapeia cada valor para seu índice na lista.vocab_dict: Agrupa a entrada mapeando cada valor de recurso para seu valor correspondente novocab_dict.vocab_file: Lê ovocab_listouvocab_dictde um arquivo.
Este operador suporta entradas multivaloradas do tipo
array.
Exemplo
A tabela a seguir mostra a saída para o exemplo de configuração anterior.
user:query
Saída
the quick brown fox jumped over the lazy dogs
pack my box with five dozen liquor jugs
aaa
xX
Feature
Generation
Tool
Useful
FeatureGenerationToolUseful
regex_replace_feature
Visão geral
O operador
regex_replace_featuresubstitui substrings que correspondem a uma expressão regular por uma string de substituição especificada.Configure múltiplos padrões. O operador substitui qualquer substring que corresponda a um dos padrões especificados.
Configuração
{ "feature_name": "query", "feature_type": "regex_replace_feature", "expression": ["user:query"], "regex_pattern": "\\|", "replacement": " ", "default_value": "" }Parâmetro
Descrição
feature_name
Obrigatório. Nome do recurso de saída.
expression
Obrigatório. Campo de source para o recurso.
default_value
Opcional. Valor padrão a ser usado se a entrada for nula ou vazia.
regex_pattern
Obrigatório. Expressão regular usada para encontrar substrings para substituição.
replacement
Opcional. String de substituição. Se você especificar uma string vazia, as substrings correspondentes serão removidas.
replace_all
Opcional. Especifique se deve realizar uma substituição global. O valor padrão é
true. Se este parâmetro for definido comofalse, apenas a primeira ocorrência do padrão será substituída.icase
Opcional. Especifique se a correspondência de expressão regular diferencia maiúsculas de minúsculas. O valor padrão é
false.is_sequence
Opcional. Especifique se este é um recurso de sequência. O valor padrão é
false.sequence_length
Opcional. Comprimento máximo da sequência. O operador trunca sequências que excedem este comprimento.
sequence_delim
Opcional. Separador para elementos em uma sequência. Este parâmetro é necessário apenas quando a entrada é uma string.
separator
Opcional. Este parâmetro é válido apenas quando
is_sequence=true. Especifique o separador multivalorado para a entrada. O valor padrão é "\u001D".value_dimension
Opcional. Dimensão de saída para truncar resultados. Um valor de 0 (o padrão) desativa o truncamento.
stub_type
Opcional. Se
true, o recurso é tratado como resultado intermediário e não incluído na saída do modelo. O padrão éfalse.-
Este operador suporta agrupamento de recursos. Para detalhes de configuração, consulte a documentação de agrupamento de recursos (discretização). Os seguintes parâmetros estão disponíveis:
hash_bucket_size: Aplica hash ao valor do recurso e executa uma operação de módulo.vocab_list: Agrupa o valor do recurso com base em uma lista de vocabulário e o mapeia para seu índice na lista.vocab_dict: Mapeia cada valor de recurso para um valor correspondente novocab_dict.vocab_file: Lê ovocab_listouvocab_dictde um arquivo.
Suporta entradas
arraymultivaloradas.
Exemplo
user:querySaída
alpha
beta
gamma
alpha beta gamma
feature
generation
tool
useful
feature generation tool useful
bool_mask_feature
Introdução
Filtra elementos de uma sequência usando uma máscara booleana, semelhante a
tf.boolean_mask(tensor, mask).É um tipo de
sequence feature.Configuração
{ "feature_name": "mask_feature", "feature_type": "bool_mask_feature", "value_type": "float", "expression": [ "user:click_items", "item:is_valid" ], "sequence_delim": "," }Parâmetro
Descrição
feature_name
Obrigatório. Nome do recurso, usado como prefixo para a saída final.
expression
Obrigatório. Um array que especifica os campos dependentes. O primeiro elemento é a sequência de entrada a ser filtrada, e o segundo elemento é a máscara booleana.
default_value
Opcional. Se não especificado, este parâmetro assume o padrão
0para umvalue_typenumérico.value_type
Obrigatório. Tipo de dados da saída.
sequence_length
Opcional. Comprimento máximo da sequência. Sequências mais longas são truncadas.
sequence_delim
Opcional. Separador para elementos em uma sequência. Este parâmetro é necessário para entradas de string.
separator
Opcional. Separador para entradas multivaloradas. O padrão é
\u001D.value_dimension
Opcional. Dimensão de saída, usada para truncamento. O padrão é
0.normalizer
Opcional. Método de normalização. Este parâmetro aplica-se apenas a recursos numéricos. Para detalhes, consulte RawFeature.
stub_type
Opcional. Se definido como
true, o recurso serve como resultado intermediário e não é enviado ao modelo. O padrão éfalse.Suporta agrupamento de recursos. Para detalhes de configuração, consulte Agrupamento de recursos (discretização).
Suporta entradas multivaloradas como arrays ou arrays aninhados.
Exemplos
Entrada
Máscara
Saída
"123,456,90,80"
"true,false,true,false"
["123", "90"]
"123,456,90,80"
[1, 0, 1, 0]
["123", "90"]
[1, 2, 3, 4]
[1, 0, 1, 0]
[1, 3]
[1, 2, 3, 4]
"true,false,true,false"
[1, 3]
Uso com recursos de expressão
{ "features": [ { "feature_name": "mask", "feature_type": "expr_feature", "expression": "price>100", "variables": ["item:price"], "value_dimension": 3 }, { "feature_name": "filter_list", "feature_type": "bool_mask_feature", "expression": [ "user:click_items", "feature:mask" ], "num_buckets": 10000 } ] }slice_feature
Visão geral
Fatia um array de entrada usando sintaxe de fatiamento estilo Python ou recupera um elemento em um índice específico.
Este é um tipo de
sequence feature.Configuração
{ "feature_name": "test_feature", "feature_type": "slice_feature", "value_type": "float", "expression": [ "user:click_items" ], "slice": "2:4" }Parâmetro
Obrigatório
Descrição
feature_name
Sim
Nome do recurso, usado como prefixo para a saída final.
expression
Sim
Um array de campos de source.
slice
Sim
Um único número para recuperar um elemento pelo seu índice, ou uma string de fatiamento estilo Python no formato
start:stop:step.default_value
Não
Valor a ser usado para uma entrada vazia. Se não especificado, o padrão é
0para qualquernumeric type.value_type
Sim
Tipo de saída.
sequence_length
Não
Comprimento máximo da sequência. Sequências mais longas são truncadas.
sequence_delim
Não
Separador entre elementos da sequência. Necessário apenas se a entrada for uma
string.separator
Não
Separador multivalorado para a entrada. O padrão é
"\u001D".value_dimension
Não
Especifique a dimensão para truncamento da saída. O padrão é
0.normalizer
Não
Método de normalização. Aplica-se apenas a um recurso numérico. Para detalhes, consulte RawFeature.
stub_type
Não
Padrão:
false. Se definido comotrue, o recurso serve apenas como resultado intermediário e é excluído da saída do modelo.placeholder
Não
Em um recurso de sequência, um valor especial usado para preencher posições vazias e completar dimensões. O padrão é
NaNpara um número de ponto flutuante e o valor mínimo do tipo correspondente para um inteiro. Para mais informações, consulte o parâmetro placeholder do operador de recurso personalizado.Este operador suporta agrupamento de recursos. Para detalhes de configuração, consulte agrupamento de recursos (discretização).
Este operador suporta entrada multivalorada, incluindo arrays e arrays aninhados.
Exemplo
Quando você define
sequence_delim=","evalue_dimension=1, a entrada e a saída são as seguintes:Entrada
slice
Saída
"123,456,90,80"
0
"123"
"123,456,90,80"
2
"90"
"123,456,90,80"
1:3
["456", "90"]
[1, 2, 3, 4]
:2
[1, 2]
[1, 2, 3, 4]
2:
[3, 4]
[1, 2, 3, 4]
1:4:2
[2, 4]
[1, 2, 3, 4]
::-1
[4, 3, 2, 1]
[1, 2, 3, 4]
2:-1:-1
[3, 2, 1]
[1, 2, 3, 4]
:
[1, 2, 3, 4]
-
-
-