O EasyRec organiza a engenharia de features em três camadas: campos de dados (colunas de entrada bruta), campos de features (interpretação dessas colunas pelos modelos) e **features do Feature Generator (FG)** (transformações executadas de forma idêntica offline e online, garantindo consistência entre os ambientes). Essa separação permite alterar a interpretação ou a transformação de uma coluna bruta sem modificar as demais camadas.

Função do FG no treinamento offline e na inferência online do EasyRec
Conceitos principais
FeatureStore: Ferramenta de gerenciamento de features do Platform for AI (PAI) para armazenamento e gestão em sistemas offline e online. Para mais informações, consulte Visão geral do FeatureStore.
Feature Generator (FG): Componente que garante a consistência entre o processamento de features offline e online. O FG gera features de ID, features brutas, features combinadas, features de lookup, features de correspondência, features de sequência e features de sobreposição. As features de lookup e de sequência são as mais utilizadas. Para mais informações, consulte RTP FG.
Processador EasyRec: Serviço de pontuação implantado no Elastic Algorithm Service (EAS) do PAI. Ele carrega modelos de deep learning do EasyRec e otimiza o desempenho de modelos de recomendação, publicidade e busca. Para mais informações, consulte Processador EasyRec.
easyrec.conf: Arquivo de configuração do EasyRec que descreve os campos de dados, os tipos de features e as estruturas de rede do modelo.
fg.json: Descreve o processo de transformação de features. Sistemas offline e online executam o mesmo código deste arquivo, garantindo a consistência entre os ambientes.
PAI-Rec: Motor de recomendação que lê features de usuário por meio do SDK do FeatureStore.
Funcionamento dos pipelines
Pipeline offline
O FeatureStore utiliza UserViews (visualizações de features do usuário), ItemViews (visualizações de features do item) e uma Label Table (tabelas do MaxCompute com rótulos de treinamento) para construir a tabela de amostras de treinamento.
O FG transforma a tabela de amostras de treinamento na tabela de resultados
rank_sample_fg_encodedusando o pacotefg_on_odps-1.3.59-jar-with-dependencies.jare o arquivofg.json.O PAI treina o modelo com base no
easyrec.conf, exporta-o e o armazena no Object Storage Service (OSS).
Pipeline online
O motor PAI-Rec busca as features do usuário e os IDs dos itens para pontuação.
O motor solicita ao processador EasyRec a montagem das features, combinando as features de usuário das requisições com as features de item em cache para geração.
O processador EasyRec executa o FG online para transformar as features seguindo a mesma lógica do
fg.jsondo pipeline offline, assegurando a consistência entre os ambientes.O processador EasyRec pontua os IDs dos itens e retorna os resultados.
Campos de dados e campos de features no easyrec.conf
O EasyRec separa a descrição dos dados brutos da interpretação do modelo em dois blocos de configuração: data_config e feature_config.
data_config — descrição da entrada bruta
O bloco data_config define nomes, tipos e valores padrão para dados ausentes nas colunas de entrada bruta. Os tipos de valor aceitos são int, double e string. Os dados podem vir de arquivos CSV, tabelas do MaxCompute ou fluxos de dados do Apache Kafka.
Para referência completa, consulte Campos de dados no EasyRec.
Exemplo: campo de par chave-valor com imputação de valores ausentes
input_fields: {
input_name: "prop_kv"
input_type: STRING
default_val: "-1024:0"
}
O default_val definido como -1024:0 é um par chave-valor usado para imputar valores ausentes. Durante o treinamento, o sistema substitui os valores ausentes por esse padrão ao ler os dados. Na inferência online, a imputação deve ocorrer antes da execução. Se você usar o FG, configure a imputação de valores ausentes no fg.json, pois essa configuração se aplica aos sistemas offline e online.
feature_config — interpretação dos campos para o modelo
O bloco feature_config especifica como o modelo analisa e utiliza cada campo de dado. Um único campo STRING pode ser interpretado como feature de ID, feature de tag ou feature de sequência. A interpretação depende inteiramente do feature_type definido aqui.
Para referência completa, consulte feature_config.
Feature de ID
Use IdFeature para identificadores categóricos, como IDs de usuário ou de item.
features {
input_names: "user_id"
feature_type: IdFeature
embedding_dim: 32
hash_bucket_size: 100000
}
O sistema mapeia os valores de user_id via hash para 100.000 buckets. Durante o treinamento do modelo, cada ID de bucket é mapeado para um vetor de embedding de 32 dimensões.
Feature bruta
Use RawFeature para valores numéricos contínuos, como taxas de cliques. Features brutas são divididas em buckets com base em limites antes do mapeamento para vetores de embedding.
features {
input_names: "ctr"
feature_type: RawFeature
boundaries: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
embedding_dim: 8
}
Os valores de boundaries particionam a feature em intervalos discretos. Para ctr, isso gera 11 intervalos: (-inf, 0.1), [0.1, 0.2), ..., [0.9, 1.0). Cada intervalo recebe um ID de bucket, posteriormente mapeado para um vetor de embedding de 8 dimensões.
Obtenha os limites pelo componente Binning do PAI, que calcula pontos de divisão estatisticamente significativos a partir dos dados de treinamento. Após configurar boundaries, defina embedding_dim para converter os IDs dos intervalos em vetores.
Feature de tag
Use TagFeature para campos categóricos multivalorados, nos quais um único registro pode conter múltiplos valores separados por delimitador.
features : {
input_names: "tags"
feature_type: TagFeature
separator: "|"
hash_bucket_size: 100000
embedding_dim: 24
}
Por exemplo, um artigo com as tags Entertainment|Funny|Popular é dividido no caractere | em três valores. Cada valor passa por hash-embedding para um vetor de 24 dimensões. Em seguida, o average pooling produz um único vetor de embedding médio para o campo.
Transformação de feature de lookup no FG
O FG oferece suporte a diversos tipos de transformação de features. A transformação de feature de lookup é uma das mais comuns: ela consulta um mapa do lado do usuário usando uma chave do lado do item para gerar uma feature cruzada.
Exemplo: contagem de cliques do usuário na marca do item atual
{
"map": "user:map_brand_click_kv",
"key": "item:brand",
"feature_name": "map_brand_click_count",
"feature_type": "lookup_feature",
"needDiscrete": false
}
Essa configuração usa item:brand como chave de lookup para consultar user:map_brand_click_kv (contagens de cliques do usuário em diferentes marcas) e gera map_brand_click_count, que representa o número de vezes que o usuário clicou em itens da marca do item atual.
Offline: O pacote
fg_on_odps-1.3.59-jar-with-dependencies.jarexecuta essa transformação como um job MapReduce.Online: O processador EasyRec executa o FG para calcular
map_brand_click_counte envia o valor ao modelo TensorFlow para inferência.
Perguntas frequentes
Qual a origem dos valores de boundaries?
Execute o componente Binning do PAI nos dados de treinamento para calcular os pontos de divisão. O componente realiza a discretização e gera um conjunto de valores de limite que refletem a distribuição dos dados.
Após obter os limites, adicione-os a feature_configs no easyrec.conf:
feature_configs: {
input_names: "CTR"
feature_type: RawFeature
boundaries: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
embedding_dim: 8
}
Os limites criam 11 intervalos — (-inf, 0.1), [0.1, 0.2), até [0.9, 1.0) — e cada intervalo é convertido em um vetor de embedding usando embedding_dim.
Como o FG mantém a consistência das transformações de features offline e online?
O job MapReduce offline e o processador EasyRec online leem o mesmo arquivo fg.json e executam o mesmo código de transformação. Não existem implementações separadas para offline e online; a consistência resulta do uso de um único caminho de código.
Onde configuro a imputação de valores ausentes?
Se você não usar o FG, defina o parâmetro default_val para cada campo em data_config no easyrec.conf. O sistema substitui os valores ausentes por esse padrão ao ler os dados durante o treinamento. Na inferência online, a imputação deve ocorrer antes da execução.
Se você usar o FG, configure a imputação de valores ausentes no fg.json. Essa configuração única se aplica aos sistemas offline e online.