Todos os produtos
Search
Central de documentação

:Built-in feature operators

Última atualização: Jul 09, 2026

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 feature_name deve ser adicionado como prefixo. Valores válidos:

  • true: Adiciona o prefixo.

  • false (padrão): Não adiciona o prefixo.

value_type

Não

Tipo de saída. Padrão: string.

separator

Não

Insira o separador multivalorado. O padrão é \u001D.

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 true, tanto o valor do recurso quanto o peso são gerados como um Map.

value_dimension

Não

Dimensão de truncamento da saída para recursos multivalorados. O valor padrão é 0 (sem truncamento). Se o valor for 1, o tipo do schema de saída será value_type. Caso contrário, será array<value_type>.

stub_type

Não

Se true, marca o recurso como resultado intermediário, excluindo-o da saída final do modelo. Padrão: false.

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 user, item ou context.

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: float.

separator

Não

Separador para entradas multivaloradas. Padrão: "\u001D".

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 é value_type se o valor for 1, ou array<value_type> caso contrário.

stub_type

Não

Padrão: false. Se definido como true, este recurso serve apenas como resultado intermediário e não é incluído na saída do modelo.

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 value_dimension configurado.)

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 x representa 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 expression. A source de cada variável deve ser user, item ou context.

value_type

Não

O tipo do recurso de saída pode ser float, double, int32 ou int64. O padrão é float.

separator

Não

Separador para entradas string multivaloradas. O padrão é "\u001D".

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 é value_type. Caso contrário, o tipo do schema é array<value_type>.

fill_missing

No

O padrão para preenchimento de valores ausentes é NaN. Em uma expressão, use x != x para verificar se uma entrada é NaN.

stub_type

Não

Se definido como true, o recurso é um resultado intermediário e não é incluído na saída do modelo. O padrão é false.

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=1 e b=[1, 2, 6], o resultado é [2, 3, 7].

  • Cálculo element-wise vetor-vetor

    • Quando a variável a=[3, 2, 1] e a variável b=[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 em variables.

    • 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) retorna 3.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 feature_name como prefixo. Valores válidos:

  • true: Usa o prefixo.

  • false (padrão): Não usa o prefixo.

value_type

Não

Tipo de dados de saída. O padrão é string.

separator

Não

Separador multivalorado para a entrada. O padrão é "\u001D".

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 é value_type. Caso contrário, o tipo do schema é array<value_type>.

stub_type

Não

Se definido como true, este recurso é tratado como resultado intermediário e não é incluído na saída do modelo. O padrão é false.

Exemplos

O símbolo ^] representa o separador multivalorado, que é um único caractere com código ASCII "\x1D", e não dois caracteres.

**user:age_class**

**item:item_id**

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 key pode 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âmetro key, converte-o para o tipo de chave do map e 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 map.

value_type

Não

Tipo de saída. O padrão é string.

separator

Não

Separador multivalorado para o parâmetro key se seu tipo for string. O padrão é \u001D.

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 feature_name deve ser adicionado antes do valor de saída. Valores válidos:

  • true: O feature_name é adicionado.

  • false (padrão): O feature_name não é adicionado.

need_key

Não

Defina se a key deve ser adicionada antes do valor de saída. Aplica-se apenas quando value_type é string. Valores válidos:

  • true: A chave é adicionada.

  • false (padrão): A chave não é adicionada.

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: sum (padrão), mean, max e min.

need_discrete

Não

Se definido como true, o operador gera todos os valores recuperados como um array e ignora o parâmetro combiner. O padrão é false.

value_dimension

Não

Defina a dimensão de saída. Valores válidos:

  • 0 (padrão): A saída não é truncada. O schema é array<value_type>.

  • 1: O schema de saída é value_type (um único valor), não array<value_type>.

stub_type

Não

Se definido como true, o recurso é tratado como resultado intermediário e não é incluído na saída do modelo. O padrão é false.

  • Suporta operações de agrupamento (binning). Para o método de configuração, consulte agrupamento de recursos (discretização).

  • O parâmetro map suporta entradas do tipo dicionário, e o parâmetro key suporta 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 user usa 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>, onde K pode ser dos tipos string,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_discrete

    • true: 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_type

    • hit: Gera um único recurso correspondente. O operador primeiro consulta o mapa de primeiro nível usando o valor de category e, em seguida, consulta o mapa de segundo nível resultante usando o valor de item para recuperar o valor final. Para realizar correspondência de nível único, defina a chave do mapa de primeiro nível como ALL e defina o parâmetro category na configuração de geração de recursos (FG) como "ALL".

    • multihit: Corresponde e gera múltiplos valores quando o caractere curinga ALL é usado nos campos category e item.

  • normalizer

    Mé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_category

    Defina se o valor de category deve ser adicionado como prefixo na saída. O padrão é true se need_discrete=true e match_type=hit, e false caso contrário.

  • show_item

    Defina se o valor de item deve ser adicionado como prefixo na saída. O padrão é true se need_discrete=true e match_type=hit, e false caso contrário.

  • value_type

    Tipo de dados de saída. O padrão é string.

  • separator

    Opcional. Separador multivalorado para o campo key do tipo string. O padrão é "\u001D".

  • default_value

    Opcional. Valor padrão para entradas nulas.

  • value_dimension

    Opcional. 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 tipo array<value_type>.

  • stub_type

    Opcional. 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 de auction_root_category (50006842) para consultar user_brand_tags_hit, que retorna o mapa interno 16788816:0.1,10122:0.2,29889:0.3,30068:19. Em seguida, consulta esse mapa interno com o brand_id (30068) para recuperar o valor 19. 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_hit també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 query.

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 title.

O valor está no intervalo [0.0, 1.0].

is_contain

Verifica se a query está totalmente contida no title, preservando a ordem dos termos. Valores possíveis:

  • 0: Não contido

  • 1: Contido

is_equal

Verifica se a query e o title são idênticos. Valores possíveis:

  • 0: Não idêntico

  • 1: Idêntico

index_of

Calcula o índice inicial da primeira ocorrência de toda a query dentro do title. Retorna -1.0 se não for encontrado.

proximity_min_cover

Calcula a proximity dos terms da query dentro do title.

O valor está no intervalo [0, length(title)]. Um valor de 0 indica que pelo menos um term não pode ser correspondido.

proximity_min_dist

Calcula a proximity dos terms da query no title com base na distância mínima entre pares.

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 proximity dos terms da query no title com base na distância máxima entre pares.

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 proximity dos terms da query no title com base na distância média entre pares.

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 document que cobre cada query term pelo menos uma vez.

  • MinDist (Distância mínima entre pares): A distância mínima encontrada entre qualquer par de query term s correspondentes. Por exemplo, se uma query Q=t1,t2,t3 tiver distâncias entre pares de 1, 2 e 3 em um document, 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 term s 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 term s 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 overlap_feature.

feature_name

Sim

Nome do feature gerado.

query

Sim

Campo de source para o texto da query, especificado no formato table:field. O campo deve conter uma string multivalorada.

title

Sim

Campo de source para o texto do title, especificado no formato table:field. O campo deve conter uma string multivalorada.

method

Sim

Método de cálculo. Os valores válidos são query_common_ratio, title_common_ratio, is_contain, is_equal e os métodos de proximidade.

separator

-

Insira o separador. Se nenhum valor for inserido, o padrão é chr(29).

normalizer

Não

O normalization method a ser aplicado à saída. Este parâmetro funciona da mesma forma que o normalizer no operador raw_feature.

stub_type

Não

O padrão é false. Se definido como true, o feature é usado apenas como intermediate result e não é enviado para o model.

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 consultar side 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 para sequence_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 info do item.

      • Por exemplo, nesta configuração, os recursos de sequência item_id, price nã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ção expression, mas a configuração pode variar para diferentes tipos de sub-recursos. ${input_name} não inclui um prefixo de input domain (como item: ou user:).

    • Features: As side info de 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 string ou 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__ts e click_50_seq__clk_time_seq.

          • O tipo recomendado para uma coluna em uma tabela offline é array (para melhor desempenho), embora o tipo string usando sequence_delim como 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_alias para 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ção value_dimension.

        • value_dimension (ou value_dim): A dimensão de cada elemento na Sequência. Para um sequence_raw_feature, o tipo de saída é 1 quando este parâmetro é definido como array<float>, e array<array<float>> para outros valores. Para um sequence_id_feature, o tipo de saída é array<string> quando este parâmetro é definido como 1, e array<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_alias especifica 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 um default_value.

        Exemplos:

        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_type não requer o prefixo sequence_.

        Exemplos:

        Caso especial 2: Alguns tipos de transformação de recursos possuem apenas uma versão sequencial.

        Neste caso, o parâmetro feature_type não requer o prefixo sequence_.

        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_seq e clk_item_prices devem ser uma Sequência, que pode ser um array ou uma string com elementos separados pelo caractere configurado por sequence_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_feature agrega 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, min e count.

        • 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_type como sequence_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, min e count. 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

        `"expo

        click

        buy"`

        [7]

        O operador mapeia eventos para seus valores e depois os soma: 1+2+4=7.

        "click"

        [2]

        O valor mapeado é 2.

        `"expo

        click"`

        [3]

        1+2=3

        `"expo

        click

        buy;expo;click"`

        [7, 1, 2]

        A string de entrada contém múltiplos elementos separados pelo delimitador de sequência (;).

        `["expo

        click", "expo", "click

        buy"]`

        [3, 1, 6]

        O array de entrada contém múltiplos elementos.

        tokenize_feature

        Visão geral

        O operador tokenize_feature tokeniza uma string de entrada, retornando a string tokenizada ou os IDs de token correspondentes. Este operador suporta arquivos de vocabulário no formato tokenizer.json da biblioteca tokenizers-cpp.

        Para mais informações sobre o formato do arquivo de vocabulário, consulte os seguintes recursos:

        1. https://github.com/huggingface/tokenizers

        2. 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, item ou context.

        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 do vocab_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_id ou word é 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 em output_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

        Baixar

        tokenizer.json

        BPE

        Baixar

        spiece.model

        sentencepiece

        Baixar

        text_normalizer

        Visão geral

        O operador text_normalizer realiza 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, item ou context.

        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_file deve usar codificação GBK.

        • Cada linha no arquivo stop_char_file pode conter apenas um caractere. Caso contrário, a filtragem falhará.

        Opções de normalização de texto

        O parâmetro parameter especifica 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 termo q_i para D. Finalmente, calcula uma soma ponderada das pontuações de relevância de cada termo q_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 é:

        Onde Q representa uma consulta, q_i é o i-ésimo termo da consulta, d é um documento, w_i é o peso de q_i, e R(q_i, d) é a pontuação de relevância de q_i para o documento d.

        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:

        Aqui, N representa o número total de documentos no corpus, e n(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 de q_i. Em outras palavras, quando muitos documentos contêm q_i, o poder discriminativo de q_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 documento d, denotada por R(q_i,d), é:

        k_1, k_2, b são fatores de ajuste, tipicamente definidos com base na experiência. Valores comuns são k_1=1.2, b=0.75, k_2=0. f_i é a frequência do termo q_i no documento d, e qf_i é a frequência do termo q_i na consulta. dl é o comprimento do documento d, e avgdl é o comprimento médio do documento em todos os documentos. Como um termo q_i tipicamente aparece apenas uma vez em uma consulta (qf_i=1), a fórmula simplifica para:

        Pela definição de K, observa-se que o parâmetro b ajusta o impacto do comprimento do documento na relevância. Quanto maior o valor de b, 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 de K, o que reduz a pontuação de relevância. Isso ocorre porque um documento mais longo tem maior probabilidade de conter q_i. Portanto, para o mesmo valor de f_i, a relevância de um documento longo para q_i é mais fraca do que a relevância de um documento curto para q_i.

        A fórmula de pontuação de relevância do algoritmo BM25 pode ser resumida da seguinte forma:

        A fórmula BM25 demonstra 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 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_file ou term_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_file e fg.json no 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 array e map. Para desempenho ideal, use tipos complexos.

        • Quando a entrada não possui uma parte value, o value padrã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_feature substitui 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_file nã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 formato original 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_file quanto replacements. Os dicionários de substituição de ambos são mesclados, e replacements tem 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 no vocab_dict.

          • vocab_file: Lê o vocab_list ou vocab_dict de 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_feature substitui 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 como false, 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 no vocab_dict.

          • vocab_file: Lê o vocab_list ou vocab_dict de um arquivo.

        • Suporta entradas array multivaloradas.

        Exemplo

        user:query

        Saí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 0 para um value_type numé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.

        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 é 0 para qualquer numeric 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 como true, 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 é NaN para 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="," e value_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]