O objeto FeatureConfs controla quais recursos de usuário e item a etapa de classificação fina carrega e como esses recursos são transformados antes da pontuação. Ele mapeia nomes de cenários para configurações de carregamento de recursos, permitindo que diferentes cenários utilizem conjuntos de recursos distintos.
{
"FeatureConfs": {
"<scene_name>": { ... }
}
}
Conceitos principais
|
Termo |
Descrição |
|
|
Mapa de nível superior. A chave é o nome do cenário; o valor é um objeto de configuração de carregamento de recursos. |
|
|
Lista de tarefas de carregamento de recursos dentro de um cenário. Cada tarefa extrai recursos de uma única fonte de dados. |
|
|
Configuração de acesso a dados para uma única tarefa de carregamento — especifica o tipo de fonte de dados, a conexão e a seleção de campos. |
|
|
Chave de consulta. Formato: |
|
|
Local de armazenamento dos recursos recuperados. Valores válidos: |
|
|
Quando definido como |
Escolha uma fonte de dados
É possível carregar recursos do Hologres, PAI-FeatureStore, Tablestore (OTS) e Redis. A tabela abaixo resume as principais diferenças.
|
Capacidade |
Hologres |
PAI-FeatureStore |
Tablestore (OTS) |
Redis |
|
Valor de |
|
|
|
|
|
Seleção de campos ( |
Sim |
Sim (com visualização de recurso) |
Sim |
Sim (apenas formato HASH) |
|
Cache local ( |
Sim |
Sim |
Sim |
Sim |
|
Seleção de visualização de recurso |
Não |
Sim |
Não |
Não |
|
Opções de formato de dados |
— |
— |
— |
|
Hologres
Cada entrada em FeatureLoadConfs carrega dados de uma tabela do Hologres. Configure entradas separadas para recursos de usuário e de item.
{
"FeatureConfs": {
"scene_name": {
"AsynLoadFeature": true,
"FeatureLoadConfs": [
{
"FeatureDaoConf": {
"AdapterType": "hologres",
"HologresName": "holo-pai",
"FeatureKey": "user:uid",
"UserFeatureKeyName": "user_id",
"HologresTableName": "recom_user_features_processed_holo_online",
"UserSelectFields": "rids_count,sex,alladdfriendnum,allpayrosenum",
"FeatureStore": "user"
},
"Features": []
},
{
"FeatureDaoConf": {
"AdapterType": "hologres",
"HologresName": "holo-pai",
"ItemFeatureKeyName": "item_id",
"FeatureKey": "item:id",
"HologresTableName": "recom_user_features_processed_holo_online",
"ItemSelectFields": "rids_count as rids2_count,sex as guestsex,alladdfriendnum as alladdfriendnum2",
"FeatureStore": "item"
},
"Features": []
}
]
}
}
}
Parâmetros de FeatureLoadConfs/FeatureDaoConf
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Defina como |
|
|
string |
Sim |
Nome da instância do Hologres conforme definido em |
|
|
string |
Sim |
Chave de consulta. Por exemplo, |
|
|
string |
Sim |
Campo de chave primária da tabela de recursos de usuário. |
|
|
string |
Sim |
Campo de chave primária da tabela de recursos de item. |
|
|
string |
Sim |
Nome da tabela de recursos no Hologres. |
|
|
string |
Não |
Recursos de usuário a serem recuperados. Use |
|
|
string |
Não |
Recursos de item a serem recuperados. Use |
|
|
string |
Sim |
Local de armazenamento dos recursos recuperados. Valores válidos: |
|
|
integer |
Não |
Número de entradas de recursos para armazenar em cache localmente. Padrão: |
|
|
integer |
Não |
Tempo de expiração das entradas em cache, em segundos. Entra em vigor apenas quando |
PAI-FeatureStore
Para instruções de configuração, consulte Visão geral do FeatureStore.
Carregar todos os recursos de uma entidade
A configuração a seguir recupera todos os recursos da entidade user do modelo rank_v1:
{
"FeatureConfs": {
"scene_name": {
"AsynLoadFeature": true,
"FeatureLoadConfs": [
{
"FeatureDaoConf": {
"AdapterType": "featurestore",
"FeatureStoreName": "pairec-fs",
"FeatureKey": "user:uid",
"FeatureStoreModelName": "rank_v1",
"FeatureStoreEntityName": "user",
"FeatureStore": "user"
}
}
]
}
}
}
Para carregar recursos de item, defina FeatureKey como item:id, FeatureStoreEntityName como item e FeatureStore como item.
Parâmetros de FeatureLoadConfs/FeatureDaoConf
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Defina como |
|
|
string |
Sim |
Nome da instância do FeatureStore conforme definido em |
|
|
string |
Sim |
Chave de consulta. Por exemplo, |
|
|
string |
Sim |
Nome do recurso do modelo no PAI-FeatureStore. |
|
|
string |
Sim |
Nome da entidade no PAI-FeatureStore. |
|
|
string |
Sim |
Local de armazenamento dos recursos recuperados. Valores válidos: |
|
|
integer |
Não |
Número de entradas de recursos para armazenar em cache localmente. Padrão: |
|
|
integer |
Não |
Tempo de expiração das entradas em cache, em segundos. Entra em vigor apenas quando |
Carregar recursos de uma visualização de recurso específica
Para recuperar recursos de uma visualização de recurso nomeada em vez de uma entidade inteira, utilize FeatureStoreViewName. O exemplo a seguir recupera todos os recursos de usuário da visualização user_table_preprocess_all_feature_v1 e um subconjunto de recursos de item da visualização item_table_preprocess_all_feature_v1:
{
"FeatureConfs": {
"scene_name": {
"AsynLoadFeature": true,
"FeatureLoadConfs": [
{
"FeatureDaoConf": {
"AdapterType": "featurestore",
"FeatureStoreName": "pairec-fs",
"FeatureKey": "user:uid",
"FeatureStoreViewName": "user_table_preprocess_all_feature_v1",
"UserSelectFields": "*",
"FeatureStore": "user"
}
},
{
"FeatureDaoConf": {
"AdapterType": "featurestore",
"FeatureStoreName": "pairec-fs",
"FeatureKey": "item:id",
"FeatureStoreViewName": "item_table_preprocess_all_feature_v1",
"ItemSelectFields": "author,duration,category",
"FeatureStore": "item"
}
}
]
}
}
}
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Nome da visualização de recurso. |
|
|
string |
Não |
Recursos de usuário a serem recuperados. Use |
|
|
string |
Não |
Recursos de item a serem recuperados. Use |
Tablestore (OTS)
{
"FeatureConfs": {
"scene_name": {
"AsynLoadFeature": true,
"FeatureLoadConfs": [
{
"FeatureDaoConf": {
"AdapterType": "tablestore",
"TableStoreName": "tablestore_info",
"FeatureKey": "user:uid",
"UserFeatureKeyName": "uid",
"TableStoreTableName": "",
"UserSelectFields": "*",
"FeatureStore": "user"
},
"Features": []
},
{
"FeatureDaoConf": {
"AdapterType": "tablestore",
"TableStoreName": "tablestore_info",
"FeatureKey": "item:id",
"ItemFeatureKeyName": "item_id",
"TableStoreTableName": "",
"ItemSelectFields": "*",
"FeatureStore": "item"
},
"Features": []
}
]
}
}
}
Parâmetros de FeatureLoadConfs/FeatureDaoConf
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Defina como |
|
|
string |
Sim |
Nome da instância do Tablestore conforme definido em |
|
|
string |
Sim |
Chave de consulta. Por exemplo, |
|
|
string |
Não |
Campo de chave primária da tabela de recursos de usuário. |
|
|
string |
Não |
Campo de chave primária da tabela de recursos de item. |
|
|
string |
Sim |
Nome da tabela de recursos no Tablestore. |
|
|
string |
Não |
Recursos de usuário a serem recuperados. Use |
|
|
string |
Não |
Recursos de item a serem recuperados. Use |
|
|
string |
Sim |
Local de armazenamento dos recursos recuperados. Valores válidos: |
|
|
integer |
Não |
Número de entradas de recursos para armazenar em cache localmente. Padrão: |
|
|
integer |
Não |
Tempo de expiração das entradas em cache, em segundos. Entra em vigor apenas quando |
Redis
O Redis suporta dois formatos de armazenamento: chave-valor (KV) e HASH.
KV format: O valor pode ser CSV (com delimitador configurável) ou JSON.
Formato HASH: Recupera todos os campos ou campos selecionados por nome usando
UserSelectFieldsouItemSelectFields.
Formato KV
Neste exemplo, os recursos de usuário são armazenados como CSV e os recursos de item como JSON. O parâmetro RedisValueDelimeter especifica o separador CSV.
{
"FeatureConfs": {
"scene_name": {
"AsynLoadFeature": true,
"FeatureLoadConfs": [
{
"FeatureDaoConf": {
"AdapterType": "redis",
"RedisName": "user_redis",
"RedisPrefix": "UF_V2_",
"FeatureKey": "user:uid",
"FeatureStore": "user",
"RedisDataType": "string",
"RedisFieldType": "csv",
"RedisValueDelimeter": ","
},
"Features": []
},
{
"FeatureDaoConf": {
"AdapterType": "redis",
"RedisName": "item_redis",
"RedisPrefix": "IF_V2_FM_",
"FeatureKey": "item:id",
"FeatureStore": "item",
"RedisDataType": "string",
"RedisFieldType": "json"
},
"Features": []
}
]
}
}
}
Formato HASH
{
"FeatureConfs": {
"scene_name": {
"AsynLoadFeature": true,
"FeatureLoadConfs": [
{
"FeatureDaoConf": {
"AdapterType": "redis",
"RedisName": "user_redis",
"RedisPrefix": "UF_V2_",
"FeatureKey": "user:uid",
"FeatureStore": "user",
"RedisDataType": "hash",
"UserSelectFields": "*"
},
"Features": []
},
{
"FeatureDaoConf": {
"AdapterType": "redis",
"RedisName": "item_redis",
"RedisPrefix": "IF_V2_FM_",
"FeatureKey": "item:id",
"FeatureStore": "item",
"RedisDataType": "hash",
"ItemSelectFields": "city,author,duration"
},
"Features": []
}
]
}
}
}
Parâmetros de FeatureLoadConfs/FeatureDaoConf
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Defina como |
|
|
string |
Sim |
Nome da instância do Redis conforme definido em |
|
|
string |
Sim |
Prefixo da chave. |
|
|
string |
Sim |
Chave de consulta. Por exemplo, |
|
|
string |
Sim |
Local de armazenamento dos recursos recuperados. Valores válidos: |
|
|
string |
Sim |
Formato de armazenamento de dados. Valores válidos: |
|
|
string |
Não |
Formato do campo quando |
|
|
string |
Não |
Separador CSV. Entra em vigor apenas quando |
|
|
string |
Não |
Recursos de usuário a serem recuperados. Use |
|
|
string |
Não |
Recursos de item a serem recuperados. Use |
|
|
integer |
Não |
Número de entradas de recursos para armazenar em cache localmente. Padrão: |
|
|
integer |
Não |
Tempo de expiração das entradas em cache, em segundos. Entra em vigor apenas quando |
Transformação de recursos
Após o carregamento dos recursos, é possível derivar novos recursos ou recombinar os existentes usando três tipos de transformação:
|
** |
Descrição |
|
|
Gera um novo recurso do zero ou a partir de uma expressão. |
|
|
Crie uma cópia renomeada de um recurso existente. |
|
|
Combina vários recursos existentes em um único recurso composto. |
As configurações de transformação de recursos são definidas diretamente em cada entrada FeatureLoadConf, juntamente com FeatureDaoConf.
new_feature
Utilize new_feature para gerar recursos inexistentes na fonte de dados — valores baseados em tempo, números aleatórios, constantes ou resultados de expressões.
Valores de tempo e aleatórios
{ "FeatureType": "new_feature", "FeatureName": "day_h", "Normalizer": "hour_in_day", "FeatureStore": "user" }
{ "FeatureType": "new_feature", "FeatureName": "week_day", "Normalizer": "weekday", "FeatureStore": "user" }
{ "FeatureType": "new_feature", "FeatureName": "rand_int_v", "Normalizer": "random", "FeatureStore": "user" }
Os normalizadores hour_in_day e weekday geram valores em tempo real com base na hora atual do sistema. O normalizador random gera um número inteiro no intervalo [0, 100).
Valor constante
O exemplo a seguir gera um recurso chamado alg com o valor estático ALRC:
{
"FeatureType": "new_feature",
"FeatureStore": "user",
"Normalizer": "const_value",
"FeatureValue": "ALRC",
"FeatureName": "alg"
}
Expressão (recomendado)
Use Normalizer: "expr" para recursos baseados em expressão. Este método utiliza a biblioteca expr e oferece sintaxe mais flexível e melhor desempenho do que o método expression mais antigo.
Referencie recursos do lado do item com o prefixo item. e recursos do lado do usuário com o prefixo user.. Utilize currentTime para obter o timestamp Unix atual em segundos.
O exemplo a seguir gera um recurso booleano is_retarget (representado como 1 ou 0):
{
"FeatureType": "new_feature",
"FeatureStore": "item",
"Normalizer": "expr",
"Expression": "item.recall_name in ['retarget_u2i','realtime_retarget_click']",
"FeatureName": "is_retarget"
}
Para combinar recursos do lado do usuário e do lado do item na mesma expressão:
{
"FeatureType": "new_feature",
"FeatureStore": "item",
"Normalizer": "expr",
"Expression": "user.user_index - item.index",
"FeatureName": "index_delta"
}
Para consultar a sintaxe da expressão, consulte a definição da linguagem expr.
Expressão (legado)
O parâmetro Normalizer: "expression" utiliza a biblioteca govaluate. Utilize FeatureSource para especificar qual valor de recurso passar para a expressão. Se a expressão referenciar múltiplas propriedades do item, omita FeatureSource — todas as propriedades do item são passadas automaticamente.
{
"FeatureType": "new_feature",
"FeatureStore": "item",
"FeatureSource": "item:recall_name",
"Normalizer": "expression",
"Expression": "recall_name in ('retarget_u2i','realtime_retarget_click')",
"FeatureName": "is_retarget"
}
Para consultar a sintaxe da expressão, consulte o manual do govaluate.
raw_feature
O tipo raw_feature copia um recurso existente sob um novo nome. Defina RemoveFeatureSource como true para excluir o original após a cópia.
O exemplo a seguir renomeia o recurso age do usuário para age_v2:
{
"FeatureType": "raw_feature",
"FeatureStore": "user",
"FeatureSource": "user:age",
"RemoveFeatureSource": true,
"FeatureName": "age_v2"
}
Utilize o prefixo user: para recursos do lado do usuário e o prefixo item: para recursos do lado do item em FeatureSource.
compose_feature
O tipo compose_feature une vários valores de recursos com um sublinhado (_) para criar um recurso composto.
O exemplo a seguir cria item_author unindo user:category e item:author. Se user:category for category1 e item:author for author1, o resultado será category1_author1:
{
"FeatureType": "compose_feature",
"FeatureStore": "item",
"FeatureSource": "user:category,item:author",
"FeatureName": "item_author"
}
O métodoexprparanew_featureoferece uma alternativa mais flexível para construir recursos compostos.
Funções de expressão integradas
As funções a seguir estão disponíveis tanto nas expressões expression quanto nas expr.
Funções de string
|
Função |
Assinatura |
Descrição |
Exemplo |
|
|
|
Retorna |
|
|
|
|
Remove todos os caracteres iniciais e finais presentes em |
|
|
|
|
Remove os caracteres iniciais presentes em |
|
|
|
|
Substitui todas as ocorrências de |
|
Funções matemáticas
|
Função |
Assinatura |
Descrição |
Exemplo |
|
|
|
Arredonda para o número inteiro mais próximo. |
|
|
|
|
Trunca para o número especificado de casas decimais. |
|
|
|
|
Calcula um hash de 32 bits usando murmur3.Sum32. |
|
|
|
|
Logaritmo natural (base e). |
|
|
|
|
Logaritmo comum (base 10). |
|
|
|
|
Logaritmo binário (base 2). |
|
|
|
|
Eleva |
|
Funções geoespaciais
|
Função |
Assinatura |
Descrição |
|
|
|
Retorna o S2 Cell ID ( |
|
|
|
Retorna uma lista de S2 Cell IDs ( |
|
|
|
Codifica coordenadas como uma string Geohash. Precisão padrão: |
|
|
|
Retorna strings Geohash para as coordenadas fornecidas e todas as 8 áreas adjacentes — 9 strings no total. |
|
|
|
Calcula a distância esférica entre dois pontos usando a fórmula de Haversine. Retorna |
|
|
|
Calcula a distância esférica entre dois pontos usando a lei esférica dos cossenos. Retorna |