Cette rubrique décrit la configuration des 17 opérateurs de fonctionnalités intégrés, notamment id_feature, raw_feature et expr_feature.
id_feature
Présentation
L'opérateur id_feature gère une fonctionnalité discrète. Il s'agit notamment des fonctionnalités à valeur unique, telles que les ID utilisateur et les ID d'élément, ainsi que des fonctionnalités à valeurs multiples, comme les couleurs d'un article.
Configuration
{
"feature_type": "id_feature",
"feature_name": "item_is_main",
"expression": "item:is_main",
"need_prefix": true,
"separator": "\u001D",
"default_value": ""
}
Paramètre | Obligatoire | Description |
feature_name | Oui | Nom de la fonctionnalité, utilisé comme préfixe pour la sortie. |
expression | Oui | Champ source. |
need_prefix | Non | Indique s'il faut ajouter le
|
value_type | Non | Type de sortie. Par défaut : |
separator | Non | Saisissez le séparateur de valeurs multiples. La valeur par défaut est |
default_value | Non | Valeur par défaut utilisée lorsque le champ source est vide. |
weighted | Non | Spécifie si l'entrée est au format clé:valeur. Si ce paramètre est défini sur |
value_dimension | Non | Dimension de sortie tronquée pour une fonctionnalité à valeurs multiples. La valeur par défaut est |
stub_type | Non | Si la valeur est |
Prend en charge le regroupement de fonctionnalités. Pour plus d'informations, consultez la section Regroupement de fonctionnalités (discrétisation).
Prend en charge le type
arraypour les fonctionnalités à valeurs multiples.
Exemples
Les exemples suivants illustrent l'entrée et la sortie pour la fonctionnalité item:is_main selon différentes configurations.
|
Type |
Entrée (item:is_main) |
Fonctionnalité de sortie |
|
int64_t |
100 |
item_is_main_100 |
|
double |
5,2 |
item_is_main_5,2 |
|
string |
abc |
item_is_main_abc |
|
chaîne à valeurs multiples |
abc^]bcd |
[item_is_main_abc, item_is_main_bcd] |
|
entier à valeurs multiples |
123^]456 |
[item_is_main_123, item_is_main_456] |
Le symbole ^] représente le séparateur de valeurs multiples. Son code ASCII est "\x1D" ; il peut également s'écrire "\u001d".
raw_feature
Aperçu
L'opérateur raw_feature traite une fonctionnalité continue. Il prend en charge les types numériques tels que int, float et double.
Configuration
{
"feature_type" : "raw_feature",
"feature_name" : "ctr",
"expression" : "item:ctr",
"normalizer" : "method=log10"
}
|
Paramètre |
Obligatoire |
Description |
|
feature_name |
Oui |
Nom de la fonctionnalité. |
|
expression |
Oui |
Champ source. Il doit provenir de |
|
normalizer |
Non |
Méthode de normalisation. Consultez la section Normaliseur pour plus de détails. |
|
value_type |
Non |
Type de sortie. Par défaut : |
|
separator |
Non |
Séparateur pour les entrées à valeurs multiples. Par défaut : |
|
default_value |
Non |
Valeur par défaut pour les entrées nulles ou vides. |
|
value_dimension |
Non |
Spécifie la dimension du champ de sortie pour la troncature de la sortie. La valeur par défaut est 1. Le type du schéma est |
|
stub_type |
Non |
Par défaut : |
Cet opérateur prend en charge le regroupement/discrétisation des fonctionnalités. Pour plus de détails sur la configuration, consultez la section Regroupement de fonctionnalités (discrétisation).
Cet opérateur prend en charge les entrées à valeurs multiples de type
array.
Exemple
Le symbole ^] représente le séparateur de valeurs multiples. Notez qu'il s'agit d'un seul caractère dont le code ASCII est "\x1D", et non de deux caractères.
|
Type |
Valeur |
Sortie |
|
int64_t |
100 |
100 |
|
double |
100,1 |
100.1 |
|
Entier à valeurs multiples |
123^]456 |
[123, 456] (la dimension d'entrée doit correspondre à la valeur |
Normaliseur
Les opérateurs raw_feature et match_feature prennent en charge quatre types de normaliseurs : minmax, zscore, log10, and expression. Leur configuration et leurs méthodes de calcul sont les suivantes :
-
minmax
Exemple : method=minmax,min=2,1,max=2,2
Formule : x = (x - min) / (max - min)
-
zscore
Exemple : method=zscore,mean=0,0,standard_deviation=10,0
Formule : x = (x - mean) / standard_deviation
-
log10
Exemple : method=log10,threshold=1e-10,default=-10
Formule : x = x > threshold ? log10(x) : default;
-
expression
Exemple : method=expression,expr=sign(x)
Formule : vous pouvez configurer n'importe quelle fonction ou expression. La variable
xreprésente la valeur d'entrée.
expr_feature
Présentation
L'opérateur expr_feature évalue une expression et renvoie le résultat dans un type spécifié, tel que float, double, int32 ou int64. Il prend en charge le calcul par lots et la diffusion (broadcasting).
Remarque : lorsque vous utilisez cet opérateur de fonctionnalité, **toutes les entrées doivent être convertibles au type double**.
Configuration
{
"feature_type" : "expr_feature",
"feature_name" : "ctr_sigmoid",
"value_type": "float",
"expression" : "sigmoid(pv/(1+click))",
"variables": ["item:pv", "item:click"]
}
Lorsque pv = 2, click = 3, la valeur de la fonctionnalité d'expression est 0.6224593312.
|
Paramètre |
Obligatoire |
Description |
|
feature_name |
Oui |
Nom de la fonctionnalité. |
|
expression |
Oui |
Expression à évaluer. |
|
variables |
Oui |
Variables (également appelées champs d'entrée) utilisées dans l' |
|
value_type |
Non |
Le type de la fonctionnalité de sortie peut être |
|
separator |
Non |
Séparateur pour les entrées |
|
default_value |
Non |
Valeur par défaut renvoyée en cas d'erreur lors de l'évaluation de l'expression, par exemple lorsqu'une valeur nulle est rencontrée. |
|
value_dimension |
Non |
La valeur par défaut est 0, ce qui représente la dimension de sortie utilisée pour la troncature ou le remplissage de la sortie. Si la valeur est 1, le type du schéma est |
|
fill_missing |
Non |
La valeur par défaut pour le remplissage des valeurs manquantes est |
|
stub_type |
Non |
Si la valeur est définie sur |
Exemples
{
"feature_name": "expr_feat",
"feature_type": "expr_feature",
"value_type": "float",
"expression": "a+b",
"variables": ["a", "b"],
"value_dimension": 3
}
-
Calcul scalaire et vectoriel (diffusion)
Lorsque
a=1etb=[1, 2, 6], le résultat est[2, 3, 7].
-
Calcul
element-wisevecteur-vecteurLorsque la variable
a=[3, 2, 1]et la variableb=[1, 2, 6], le résultat est[4, 4, 7].
-
Variables temporaires et expressions avec virgules
Par exemple :
x=roundp(a),(a-x)*b. Dans cet exemple,xest une variable temporaire et ne doit pas être configurée dansvariables.Une expression avec virgules est évaluée de gauche à droite et renvoie la valeur de sa sous-expression la plus à droite.
Pour réduire la consommation de mémoire, réutilisez les variables existantes en tant que variables temporaires lorsque la sémantique le permet.
Combiner des fonctionnalités d'expression et de séquence
{
"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
}
]
}
]
}
Expressions
-
Fonctions intégrées (scalaire)
Nom de la fonction
Nombre de paramètres
Description
rnd
0
Génère un nombre aléatoire dans l'intervalle [0, 1).
isnan
1
Renvoie 1,0 si l'entrée est NaN et 0,0 dans le cas contraire. Cette fonction nécessite la version 1.0.5 ou ultérieure.
sin
1
Renvoie le sinus d'un nombre.
cos
1
Renvoie le cosinus d'un nombre.
tan
1
Renvoie la tangente d'un nombre.
asin
1
Renvoie l'arcsinus d'un nombre.
acos
1
Renvoie l'arccosinus d'un nombre.
atan
1
Renvoie l'arctangente d'un nombre.
sinh
1
Renvoie le sinus hyperbolique d'un nombre.
cosh
1
Renvoie le cosinus hyperbolique d'un nombre.
tanh
1
Renvoie la tangente hyperbolique d'un nombre.
asinh
1
Renvoie le sinus hyperbolique inverse d'un nombre.
acosh
1
Renvoie le cosinus hyperbolique inverse d'un nombre.
atanh
1
Renvoie la tangente hyperbolique inverse d'un nombre.
log2
1
Renvoie le logarithme en base 2 d'un nombre.
log10
1
Renvoie le logarithme en base 10 d'un nombre.
log
1
Renvoie le logarithme naturel (base e) d'un nombre.
ln
1
Renvoie le logarithme naturel (base e) d'un nombre.
exp
1
Élève le nombre d'Euler (e) à la puissance d'un nombre.
sqrt
1
Renvoie la racine carrée d'un nombre.
sign
1
Renvoie le signe d'un nombre : -1 pour les nombres négatifs, 1 pour les nombres positifs et 0 pour zéro.
abs
1
Renvoie la valeur absolue d'un nombre.
rint
1
Arrondit un nombre à l'entier le plus proche.
round
1
Arrondit un nombre à l'entier le plus proche en utilisant la méthode « round half away from zero ».
roundp
2
Arrondit un nombre avec une précision spécifiée. Par exemple,
roundp(3.14159, 2)renvoie3.14.mod
2
Renvoie le reste d'une division.
floor
1
Arrondit un nombre à l'entier inférieur le plus proche.
ceil
1
Arrondit un nombre à l'entier supérieur le plus proche.
trunc
1
Tronque un nombre en supprimant sa partie fractionnaire.
sigmoid
1
Renvoie la sigmoïde d'un nombre.
sphere_dist
4
Renvoie la distance sphérique entre deux points GPS. Arguments :
lng1,lat1,lng2,lat2.haversine
4
Renvoie la distance haversine entre deux points GPS. Arguments :
lng1,lat1,lng2,lat2.min
Variable
Renvoie la valeur minimale d'une liste d'arguments.
max
Variable
Renvoie la valeur maximale d'une liste d'arguments.
sum
Variable
Renvoie la somme de tous les arguments.
avg
Variable
Renvoie la valeur moyenne de tous les arguments.
Remarque : ces fonctions intégrées prennent en charge le calcul par lots et la diffusion (broadcasting).
-
Fonctions intégrées d'opération vectorielle
Nom de la fonction
Nombre de paramètres
Description
len
1
Renvoie la longueur (nombre d'éléments) d'un vecteur.
l2_norm
1
Renvoie le vecteur normalisé L2.
squared_norm
1
Renvoie la norme L2 au carré d'un vecteur.
dot
2
Renvoie le produit scalaire de deux vecteurs.
euclid_dist
2
Renvoie la distance euclidienne entre deux vecteurs.
corr
2
Renvoie le coefficient de corrélation de Pearson entre deux vecteurs.
std_dev
1
Renvoie l'écart type d'échantillon d'un vecteur (division par n-1).
pop_std_dev
1
Renvoie l'écart type de population d'un vecteur (division par n).
variance
1
Renvoie la variance d'échantillon d'un vecteur (division par n-1).
pop_variance
1
Renvoie la variance de population d'un vecteur (division par n).
reduce_min
1
Renvoie la valeur minimale d'un vecteur.
reduce_max
1
Renvoie la valeur maximale d'un vecteur.
reduce_sum
1
Renvoie la somme de tous les éléments d'un vecteur.
reduce_mean
1
Renvoie la valeur moyenne de tous les éléments d'un vecteur.
reduce_prod
1
Renvoie le produit de tous les éléments d'un vecteur.
Remarque : si une expression contient l'une de ces fonctions intégrées d'opération vectorielle, toutes les autres variables de l'expression doivent être des scalaires.
-
Opérateurs binaires intégrés
Opérateur
Description
Priorité
=
Affectation *
0
\
\
OU logique
1
&&
ET logique
2
\
OU binaire
3
&
ET binaire
4
<=
Inférieur ou égal à
5
>=
Supérieur ou égal à
5
!=
Différent de
5
==
Égal à
5
>
Supérieur à
5
<
Inférieur à
5
+
Addition
6
-
Soustraction
6
*
Multiplication
7
/
Division
7
%
Modulo
7
^
Élève x à la puissance y.
8
* L'opérateur d'affectation est spécial : il modifie l'un de ses arguments et s'applique uniquement aux variables.
-
Opérateur ternaire intégré
Cet opérateur fournit une fonctionnalité de type if-else.
L'évaluation paresseuse évalue uniquement la branche requise d'une expression.
Opérateur
Description
Syntaxe
?:
Opérateur if-then-else
condition ? value_if_true : value_if_false -
Constantes intégrées
Constante
Description
Valeur
_pi
La constante mathématique pi (π).
3.141592653589793
_e
La constante mathématique e, également connue sous le nom de nombre d'Euler.
2.718281828459045
combo_feature
Présentation
L'opérateur combo_feature crée une caractéristique synthétique en calculant le produit cartésien de plusieurs champs source. Ce processus est également connu sous le nom de croisement de caractéristiques (feature crossing). L'opérateur id_feature est un cas particulier de combo_feature qui n'implique qu'un seul champ source. Généralement, les champs source pour le croisement de caractéristiques proviennent de tables différentes, comme la combinaison d'une caractéristique utilisateur avec une caractéristique d'article.
Configuration
{
"feature_type" : "combo_feature",
"feature_name" : "comb_age_item",
"expression" : ["user:age_class", "item:item_id"],
"need_prefix": true,
"separator": "\u001D",
"default_value": ""
}
Paramètre | Obligatoire | Description |
feature_name | Oui | Le nom de la fonctionnalité. |
expression | Oui | Un tableau des champs source à combiner. |
need_prefix | Non | Indique si les valeurs de sortie doivent être préfixées par le
|
value_type | Non | Le type de données de sortie. La valeur par défaut est |
separator | Non | Le séparateur de valeurs multiples pour l'entrée. La valeur par défaut est |
default_value | Non | La valeur par défaut à utiliser pour les entrées vides ou nulles. |
value_dimension | Non | La valeur par défaut est 0. Ce paramètre sert à tronquer la sortie. Si la valeur est 1, le type de schéma est |
stub_type | Non | Si ce paramètre est défini sur |
Prend en charge le regroupement de fonctionnalités (binning). Pour les instructions de configuration, consultez regroupement de fonctionnalités (discrétisation).
Prend en charge les entrées à valeurs multiples de type
array.
Exemples
Le symbole ^] représente le séparateur de valeurs multiples. Il s'agit d'un seul caractère dont le code ASCII est "\x1D", et non de deux caractères.
|
** |
** |
Sortie |
|
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] |
Le nombre de valeurs de sortie se calcule comme suit :
|F1| * |F2| * ... * |Fn|
Où |Fn| représente le nombre de valeurs dans le nième champ source.
lookup_feature
Présentation
À l'instar de match_feature, l'opérateur lookup_feature recherche une clé au sein d'un ensemble de paires clé-valeur et renvoie la valeur correspondante.
Cet opérateur dépend de deux paramètres : map et key.
Le paramètre
mapest un dictionnaire ou une chaîne à valeurs multiples. Dans une chaîne à valeurs multiples, chaque élément est une paire clé-valeur au format « k1:v1 ».Le paramètre
keypeut être de n'importe quel type de données. Pour plusieurs clés, il est recommandé d'utiliser un tableau en entrée. Pour générer une fonctionnalité, l'opérateur récupère la valeur du paramètrekey, la convertit dans le type de clé de lamap, puis recherche la valeur correspondante dans la map.
Configuration
{
"feature_type": "lookup_feature",
"feature_name": "item_match_item",
"map": "item:item_attr",
"key": "item:item_value",
"need_discrete": true,
"need_key": true
}
Paramètre | Obligatoire | Description |
feature_name | Oui | Le préfixe du nom de la fonctionnalité. |
map | Oui | Le dictionnaire source contenant les paires clé-valeur. |
key | Oui | La clé à rechercher dans la |
value_type | Non | Le type de sortie. La valeur par défaut est |
separator | Non | Le séparateur de valeurs multiples pour le paramètre |
default_value | Non | La valeur par défaut à renvoyer si une clé est introuvable ou si l'entrée est nulle. |
need_prefix | Non | Indique si le
|
need_key | Non | Indique si la
|
normalizer | Non | La méthode de normalisation. Ce paramètre fonctionne comme le paramètre normalizer de l'opérateur raw_feature. |
combiner | Non | La méthode d'agrégation utilisée pour combiner les valeurs récupérées à partir de plusieurs clés. Valeurs possibles : |
need_discrete | Non | Si ce paramètre est défini sur |
value_dimension | Non | Spécifie la dimension de sortie. Valeurs possibles :
|
stub_type | Non | Si ce paramètre est défini sur |
Prend en charge les opérations de regroupement (binning). Pour la méthode de configuration, consultez regroupement de fonctionnalités (discrétisation).
Le paramètre
mapprend en charge les entrées de type dictionnaire, et le paramètrekeyprend en charge les entrées de type tableau.
Exemple
Pour la configuration ci-dessus, supposons qu'un document contienne les données suivantes :
item_attr : "k1:v1^]k2:v2^]k3:v3"
Le symbole ^] représente le séparateur de valeurs multiples. Il s'agit d'un seul caractère dont le code ASCII est "\x1D", et non de deux caractères. Pour saisir ce caractère, appuyez sur C-q C-5 dans emacs ou sur C-v C-5 dans vim. Ici, item_attr est une chaîne à valeurs multiples.
Lorsque le paramètre map représente plusieurs paires clé-valeur sous forme de chaîne, il doit s'agir d'une chaîne à valeurs multiples, et non d'une chaîne standard.
item_value : "k2"
La fonctionnalité résultante est 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}
Combiner les résultats de recherche
Lorsque vous fournissez plusieurs clés, vous pouvez utiliser le paramètre combiner pour agréger les valeurs récupérées.
Pour utiliser le combiner, vous devez définir need_discrete sur false. Dans ce cas, les valeurs recherchées doivent être numériques ou être des chaînes convertibles en nombres.
match_feature
Présentation
L'opérateur match_feature est généralement utilisé pour la mise en correspondance de fonctionnalités. Au cœur de son fonctionnement, il effectue une recherche de map à deux niveaux.
Configuration
Le fichier de configuration utilise le format 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: Un dictionnaire imbriqué.Le champ
userutilise une chaîne pour représenter la map à deux niveaux.Pour la map de premier niveau,
|est le séparateur entre les éléments, et^est le séparateur entre une clé et sa valeur.Pour la map de second niveau,
,est le séparateur entre les éléments, et:est le séparateur entre une clé et sa valeur.Le dictionnaire de premier niveau prend également en charge une entrée
Map<K, string>, oùKpeut être de typestring,int32,int64. La valeur de la map est une chaîne qui représente le dictionnaire interne et utilise les mêmes séparateurs.
-
category: La clé primaire pour la recherche dans la map de premier niveau.ALLest un caractère générique qui correspond à toutes les clés à ce niveau. -
item: La clé secondaire pour la recherche dans la map de second niveau.ALLest un caractère générique qui correspond à toutes les clés à ce niveau. -
need_discretetrue: Le modèle utilise le nom de fonctionnalité généré à partir de la sortie et ignore la valeur de la fonctionnalité. Par défaut, ce paramètre estfalse.false: Le modèle utilise la valeur de fonctionnalité correspondante issue de la sortie et ignore le nom de la fonctionnalité.
-
match_typehit: Sort une seule fonctionnalité correspondante. L'opérateur interroge d'abord la map de premier niveau en utilisant la valeurcategory, puis interroge la map de second niveau résultante en utilisant la valeuritempour récupérer la valeur finale. Pour effectuer une correspondance à un seul niveau, définissez la clé de la map de premier niveau surALLet définissez le paramètrecategorydans la configuration de génération de fonctionnalités (FG) sur « ALL ».multihit: Correspond et sort plusieurs valeurs lorsque le caractère génériqueALLest utilisé dans les champscategoryetitem.
-
normalizerLa méthode de normalisation. Ce paramètre a la même signification que dans l'opérateur raw_feature et n'agit que lorsque
need_discrete=false. -
show_categoryIndique si la valeur
categorydoit être ajoutée en préfixe à la sortie. La valeur par défaut esttruesineed_discrete=trueetmatch_type=hit, etfalsedans les autres cas. -
show_itemIndique si la valeur
itemdoit être ajoutée en préfixe à la sortie. La valeur par défaut esttruesineed_discrete=trueetmatch_type=hit, etfalsedans les autres cas. -
value_typeLe type de données de sortie. La valeur par défaut est
string. -
separatorFacultatif. Le séparateur de valeurs multiples pour le champ
keyde type chaîne. La valeur par défaut est"\u001D". -
default_valueFacultatif. La valeur par défaut pour les entrées nulles.
-
value_dimensionFacultatif. Définit la structure de données de la sortie. La valeur par défaut est 0. Si elle est définie sur 1, la sortie est une valeur unique de type
value_type; sinon, il s'agit d'un tableau de typearray<value_type>. -
stub_typeFacultatif. Si ce paramètre est défini sur
true, la sortie est traitée comme un résultat intermédiaire et n'est pas envoyée au modèle. Valeur par défaut :false.
Exemples
Hit
Cet exemple présente une configuration pour le type de correspondance 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"
}
Avec les valeurs de champ suivantes :
|
Champ |
Valeur |
|
|
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 |
Si
need_discrete=true, l'opérateur effectue une recherche en deux étapes. Il utilise d'abord la valeurauction_root_category(50006842) pour interrogeruser_brand_tags_hit, ce qui renvoie la carte interne16788816:0.1,10122:0.2,29889:0.3,30068:19. Ensuite, il interroge cette carte interne avec lebrand_id(30068) pour récupérer la valeur19. L'opération génère alors le nom de fonctionnalité suivant :brand_hit_50006842_30068_19.Si
need_discrete=false, le résultat est19.0.Le champ
user_brand_tags_hitpeut également être de type Map, par exemple :{"50011740": "107287172:0.2,36806676:0.3,122572685:0.5", "50006842": "16788816:0.1,10122:0.2,29889:0.3,30068:19"}.
Pour effectuer une correspondance à un seul niveau, modifiez la valeur category dans la configuration en la définissant sur ALL. Supposons que les champs aient les valeurs suivantes :
|
Champ |
Valeur |
|
user_brand_tags_hit |
ALL^16788816:40,10122:40,29889:20,30068:20 |
|
brand_id |
30068 |
Si
need_discrete=true, le résultat estbrand_hit_ALL_30068_20.Si
need_discrete=false, le résultat est20.0.
Vous pouvez également utiliser l'opérateur lookup_feature dans ce scénario. Cela nécessite de modifier le format de la valeur user_brand_tags_hit en "16788816:40^]10122:40^]29889:20^]30068:20". La chaîne '^]' représente le séparateur de valeurs multiples \u001d, qui est un caractère non imprimable.
L'opérateur lookup_feature prend en charge des types d'entrée complexes, tels que map et array, et offre donc de meilleures performances.
overlap_feature
Présentation
Renvoie des informations sur les correspondances de termes entre deux chaînes. Par exemple, vous pouvez utiliser cette fonctionnalité pour déterminer si une query figure dans le title d'un élément.
Méthode | Description |
query_common_ratio | Calcule le rapport entre les termes chevauchants et le nombre total de termes dans la La valeur renvoyée se situe dans la plage [0,0 ; 1,0]. |
title_common_ratio | Calcule le rapport entre les termes chevauchants et le nombre total de termes dans le La valeur se situe dans la plage [0,0 ; 1,0]. |
is_contain | Vérifie si la
|
is_equal | Vérifie si la
|
index_of | Calcule l'index de départ de la première occurrence de la |
proximity_min_cover | Calcule la La valeur se situe dans la plage [0, length(title)]. Une valeur de 0 indique qu'au moins un |
proximity_min_dist | Calcule la La valeur se situe dans la plage [0, length(title)+1]. Une valeur égale à length(title)+1 indique l'absence de termes correspondants. |
proximity_max_dist | Calcule la La valeur se situe dans la plage [0, length(title)+1]. Une valeur égale à length(title)+1 indique l'absence de termes correspondants. |
proximity_avg_dist | Calcule la La valeur se situe dans la plage [0, length(title)+1]. Une valeur égale à length(title)+1 indique l'absence de termes correspondants. |
L'article « An Exploration of Proximity Measures in Information Retrieval » décrit les méthodes de calcul de ces fonctionnalités.
Supposons que la séquence de term d'un title (document) soit : t1,t2,t1,t3,t5,t4,t2,t3,t4
MinCover mesure la longueur du segment de
documentle plus court couvrant chaquequery termau moins une fois.MinDist (distance minimale par paire) : la distance minimale trouvée entre toute paire de
query terms correspondants. Par exemple, si unequeryQ=t1,t2,t3 présente des distances par paire de 1, 2 et 3 dans undocument, la MinDist est min(1,2,3)=1.MaxDist (distance maximale par paire) : la distance maximale trouvée entre toute paire de
query terms correspondants. Pour le même exemple, MaxDist=max(1,2,3)=3.AveDist (distance moyenne par paire) : la moyenne des distances par paire entre tous les
query terms correspondants. Pour le même exemple, AveDist=(1+2+3)/3=2.
Notez que tous les opérateurs d'agrégation (MinDist, MaxDist et AveDist) sont définis sur la base des distances par paire entre les query term s correspondants. Si un document ne contient qu'un seul query term correspondant, la valeur de MinDist, AveDist et MaxDist correspond à la longueur du document.
Configuration
{
"feature_type" : "overlap_feature",
"feature_name" : "is_contain",
"query" : "user:attr1",
"title" : "item:attr2",
"method" : "is_contain",
"separator" : " ",
"normalizer" : ""
}
|
Paramètre |
Obligatoire |
Description |
|
feature_type |
Oui |
Type de fonctionnalité. Doit être |
|
feature_name |
Oui |
Nom de la |
|
query |
Oui |
Champ source du texte de la |
|
title |
Oui |
Champ source du texte du |
|
method |
Oui |
Méthode de calcul. Les valeurs valides sont |
|
separator |
- |
Saisissez le séparateur. Si vous ne saisissez aucune valeur, la valeur par défaut est |
|
normalizer |
Non |
|
|
stub_type |
Non |
Par défaut sur |
L'opérateur overlap_feature renvoie une valeur flottante.
Exemple 1
Étant donné une query « high,high2,fiberglass,abc » et un title « high,quality,fiberglass,tube,for,golf,bag » :
|
Méthode |
Valeur |
|
query_common_ratio |
0,5 |
|
title_common_ratio |
0,28 |
|
is_contain |
0 |
|
is_equal |
0 |
Exemple 2
method=index_of, title=the cat sat on the mat.
|
Requête |
Valeur |
|
the cat |
0 |
|
sat |
2 |
|
the mat |
4 |
|
cap |
-1 |
|
gap |
-1 |
sequence_feature
Présentation
L'historique des comportements d'un utilisateur constitue une caractéristique essentielle. Ces comportements sont généralement représentés sous forme de séquence, comme une série de clics ou d'achats. Les entités composant la séquence peuvent être les éléments eux-mêmes ou leurs attributs.
Configuration
Par exemple, pour traiter une séquence de clics utilisateur d'une longueur maximale de 50, vous pouvez extraire les fonctionnalités item_id, price et ts pour chaque élément. Ici, ts correspond à la différence entre l'heure de la requête (request_time) et l'heure de l'événement (event_time). L'exemple suivant illustre la configuration.
{
"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: nom de la séquence.sequence_length: longueur maximale de la séquence.sequence_delim: délimiteur séparant les éléments de la séquence.-
sequence_pk : clé primaire de la séquence. Par exemple,
user:click_50_seqstocke les 50 derniers itemID sur lesquels un utilisateur a cliqué. Le service d'inférence de modèle utilise ce champ comme clé pour interroger lesside info.-
Les paramètres de requête du service Online Inference Service (processeur EAS) doivent inclure une fonctionnalité dont la clé est
sequence_pk.-
Par exemple :
click_50_seq: 5410233389955966;1832586(le séparateur correspond à la valeur spécifiée poursequence_delim)Dans l'exemple ci-dessus, la valeur de la fonctionnalité
click_50_seqest 5410233389955966;1832586
-
-
Les sous-fonctionnalités côté élément de la séquence ne doivent pas être incluses dans la requête adressée au service d'inférence de modèle.
Le service d'inférence de modèle utilise ce champ comme clé pour interroger les
side infode l'élément.Par exemple, dans cette configuration, les fonctionnalités de séquence
item_id, pricene sont pas requises dans la requête adressée au service d'inférence. Elles sont plutôt récupérées depuis le cache d'éléments du processeur et concaténées à l'aide du SDK fg. Ce processus garantit que le format reste cohérent avec celui utilisé lors de l'entraînement hors ligne.
-
Les sous-fonctionnalités côté utilisateur de la séquence doivent être incluses dans la requête adressée au service d'inférence de modèle.
Le nom de la fonctionnalité est
${sequence_name}__${input_name}, par exemple :click_50_seq__ts.${input_name}est généralement configuré avec l'optionexpression, mais la configuration peut varier selon les types de sous-fonctionnalités.${input_name}n'inclut pas de préfixeinput domain(tel queitem:ouuser:).
-
-
Fonctionnalités : les
side infod'une séquence, qui incluent des informations telles que les valeurs d'attributs statiques d'un élément et les informations temporelles comportementales.-
sequence_fields : spécifie les noms de champs de la séquence d'entrée. La valeur est une
stringou un tableau[string].Lorsqu'un opérateur de fonctionnalité ne possède qu'un seul champ d'entrée, le contenu de ce champ doit être une séquence. Dans ce cas, il n'est pas nécessaire de configurer
sequence_fields.Lorsqu'un opérateur de fonctionnalité possède plusieurs champs d'entrée, si vous ne configurez pas
sequence_fields, toutes les fonctionnalités côté élément (telles que item:XXX) sont considérées comme des champs d'entrée de séquence.
-
La table d'entrée d'une tâche hors ligne doit inclure des colonnes correspondant à toutes les sous-fonctionnalités.
-
Lorsque la colonne est une séquence (voir les règles pour
sequence_fields), elle est nommée${sequence_name}__${input_name}.Par exemple, dans cette configuration, la table hors ligne nécessite 4 colonnes :
click_50_seq__item_id,click_50_seq__price,click_50_seq__tsetclick_50_seq__clk_time_seq.Le type recommandé pour une colonne dans une table hors ligne est array (pour de meilleures performances), tandis que le type
stringutilisantsequence_delimcomme séparateur d'éléments est également pris en charge.
-
Si la colonne n'est pas une séquence, nommez-la
${input_name}sans préfixe.Par exemple, dans cette configuration, la table hors ligne nécessite une colonne non séquentielle :
${cur_time}
Vous pouvez utiliser la configuration globale
input_aliaspour définir un alias plus court pour un nom de colonne long (voir l'exemple ci-dessous).
-
Le regroupement de fonctionnalités (binning) est pris en charge. Pour plus de détails sur la configuration, consultez Regroupement de fonctionnalités (discrétisation). Lorsque le regroupement est configuré, le type d'élément de sortie est
int64et la forme est déterminée par la configurationvalue_dimension.value_dimension (ou
value_dim) : dimension de chaque élément de la séquence. Pour unesequence_raw_feature, le type de sortie est1lorsque ce paramètre est défini surarray<float>etarray<array<float>>pour les autres valeurs. Pour unesequence_id_feature, le type de sortie estarray<string>lorsque ce paramètre est défini sur1etarray<array<string>>pour les autres valeurs. La valeur par défaut est 0.
-
Tout type de fonctionnalité peut être configuré en tant que sous-fonctionnalité de séquence. Voici un exemple :
{
"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"
}
}
Remarque : le paramètre input_alias spécifie un alias pour un champ d'entrée. Le format est "origin_field": "alias_field", ce qui permet d'utiliser un nom plus court pour remplacer le nom du champ d'entrée d'origine.
Format aplati
Généralement, vous pouvez obtenir la version séquence en ajoutant le préfixe sequence_ à un type de fonctionnalité non séquentiel (feature_type). Notez que pour les fonctionnalités de séquence, vous devez généralement configurer une default_value.
Exemples :
sequence_id_feature : la valeur de sortie est toujours une
string. Si vous avez besoin d'un autre type, utilisez plutôtslice_feature.sequence_raw_feature : le type de valeur de sortie est fixé à
float. Si vous avez besoin d'autres types, utilisez plutôtslice_feature.
Cas particulier 1 : certains types de transformation de fonctionnalités disposent à la fois d'une version séquence et d'une version non séquence.
Pour activer la version correspondante, définissez is_sequence: true/false.
Dans ce cas, le paramètre feature_type ne nécessite pas le préfixe sequence_.
Exemples :
Cas particulier 2 : certains types de transformation de fonctionnalités ne disposent que d'une version séquence.
Dans ce cas, le paramètre feature_type ne nécessite pas le préfixe sequence_.
Exemples :
Pour ces deux cas particuliers, vous pouvez ajouter les paramètres facultatifs suivants :
sequence_length: longueur maximale de la séquence. Les éléments dépassant cette longueur sont tronqués. La valeur par défaut est -1, ce qui signifie que la séquence n'est pas tronquée.sequence_delim : séparateur entre les éléments de la séquence. La valeur par défaut est
;.
Le code suivant fournit un exemple de configuration.
{
"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
}
Dans l'exemple précédent, les champs d'entrée clk_item_seq et clk_item_prices doivent être une séquence, qui peut être un tableau ou une chaîne dont les éléments sont séparés par le caractère configuré par sequence_delim.
Avec cette configuration, le service en ligne (processeur) n'interroge pas les side info. Vous devez fournir l'entrée complète.
Le nom du champ d'entrée pour une fonctionnalité de séquence au format aplati est identique au nom configuré et n'est pas précédé de
${sequence_name}__.
Génération de fonctionnalités en ligne
Vous pouvez obtenir les sideinfo comportementaux de deux manières. La première consiste à récupérer les sideinfo depuis le cache d'éléments du processeur EasyRec. Le champ spécifié par sequence_pk est utilisé comme clé primaire pour rechercher les informations d'attribut de l'élément dans le cache d'éléments. La seconde consiste à renseigner les valeurs de champ correspondantes dans la requête. Par exemple, le champ « ts » dans la configuration précédente représente (request_time - event_time), c'est-à-dire l'heure de la requête de recommandation moins l'heure du comportement utilisateur. Cette valeur changeant à chaque requête, elle doit donc être obtenue à partir de la requête.
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
Présentation
L'opérateur combine_feature agrège plusieurs valeurs d'une fonctionnalité d'entrée en une seule valeur à l'aide d'une stratégie de combinaison spécifiée (combiner).
Sa version séquence, sequence_combine_feature, agrège les valeurs au sein de chaque élément d'une fonctionnalité de séquence, transformant ainsi une séquence multivaleur en une séquence monovaleur.
Fonctionnalités clés
Combinaison multivaleur : agrège plusieurs valeurs d'une fonctionnalité en une seule valeur.
Stratégie de combinaison flexible : prend en charge diverses stratégies, telles que
sum,mean,max,minetcount.Map de valeurs : convertit les identifiants de chaîne en valeurs numériques, idéal pour le traitement d'une séquence d'événements comportementaux.
Prise en charge des doubles séparateurs : vous permet de configurer à la fois un délimiteur de séquence et un séparateur multivaleur.
Configuration
Configuration de base (combinaison numérique)
{
"feature_name": "combine_feat",
"feature_type": "combine_feature",
"expression": "user:behavior_seq",
"combiner": "sum",
"separator": "|"
}
Vous pouvez configurer la version séquence de deux manières :
Définissez le paramètre
feature_typesursequence_combine_feature.Ajoutez le paramètre
"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": ";"
}
Configuration de map de valeurs (événements comportementaux)
{
"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
}
}
L'opérateur applique d'abord la map de valeurs, puis combine les valeurs résultantes.
Paramètres
|
Paramètre |
Obligatoire |
Description |
|
feature_name |
Oui |
Nom de la fonctionnalité de sortie. |
|
feature_type |
Oui |
Spécifie le type d'opérateur. Par exemple, |
|
expression |
Oui |
Fonctionnalité d'entrée. |
|
combiner |
Non |
Stratégie de combinaison. Valeurs prises en charge : |
|
value_map |
Non |
Table de correspondance des valeurs pour convertir les chaînes en valeurs numériques avant la combinaison. |
|
is_sequence |
Non |
Indique si l'entrée est une fonctionnalité de séquence. |
|
separator |
Non |
Séparateur de valeurs multiples. La valeur par défaut est |
|
sequence_delim |
Non |
Délimiteur de séquence. La valeur par défaut est une chaîne vide. |
|
default_value |
Non |
Valeur par défaut utilisée pour les entrées nulles ou vides. |
|
stub_type |
Non |
Si la valeur est définie sur |
Exemples
Exemple 1 : Combinaison numérique de base (somme)
Configuration :
{
"feature_name": "score_sum",
"feature_type": "sequence_combine_feature",
"expression": "user:scores",
"combiner": "sum",
"separator": ",",
"sequence_delim": ";"
}
Entrée et sortie :
|
Entrée |
Sortie |
Description |
|
|
|
1+2+3=6, 4+5=9, 6=6 |
|
|
|
10=10, 20+30=50 |
|
|
|
1+2+3=6, 4+5=9, 6=6 |
|
|
|
1+2+3=6, 4+5=9, 6=6 |
Exemple 2 : Séquence d'événements comportementaux (avec table de correspondance des valeurs)
Configuration :
{
"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
}
}
Entrée et sortie :
|
Entrée |
Sortie |
Description |
||
|
|
click |
buy"` |
|
L'opérateur mappe les événements à leurs valeurs, puis calcule la somme : 1+2+4=7. |
|
|
|
La valeur mappée est 2. |
||
|
|
click"` |
|
1+2=3 |
|
|
|
click |
buy;expo;click"` |
|
La chaîne d'entrée contient plusieurs éléments séparés par le délimiteur de séquence (;). |
|
|
click", "expo", "click |
buy"]` |
|
Le tableau d'entrée contient plusieurs éléments. |
tokenize_feature
Présentation
L'opérateur tokenize_feature tokenize une chaîne d'entrée et renvoie soit la chaîne tokenisée, soit les ID de jetons correspondants. Cet opérateur prend en charge les fichiers de vocabulaire au format tokenizer.json de la bibliothèque tokenizers-cpp.
Pour plus d'informations sur le format des fichiers de vocabulaire, consultez les ressources suivantes :
1. https://github.com/huggingface/tokenizers
2. https://github.com/mlc-ai/tokenizers-cpp
Configuration
{
"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": ","
}
Paramètre | Obligatoire | Description |
feature_name | Oui | Nom de la fonctionnalité à créer. |
expression | Oui | Spécifie le champ source. La source doit être |
vocab_file | Oui | Chemin d'accès au fichier de vocabulaire. |
default_value | Non | Valeur par défaut pour l'entrée. |
tokenizer_type | Non | Type de tokenizer. Valeur valide : |
output_type | Non |
|
output_delim | Non | Séparateur utilisé pour la sortie de |
stub_type | Non | Lorsque la valeur est définie sur |
Exemple
Lorsque output_type est défini sur word_id, l'opérateur renvoie une chaîne d'ID de jetons, séparés par le caractère spécifié dans output_delim.
|
Type |
item:title |
Sortie |
|
string |
It is good today! |
1147,310,1175,3063,2 |
Exemples de vocabulaires
|
Nom de fichier |
Type de tokenizer |
Lien de téléchargement |
|
bert-base-chinese-vocab.json |
WordPiece |
|
|
tokenizer.json |
BPE |
|
|
spiece.model |
sentencepiece |
text_normalizer
Présentation
L'opérateur text_normalizer effectue la normalisation du texte. Ses fonctionnalités incluent la conversion de la casse, la conversion du chinois traditionnel en chinois simplifié, la conversion des caractères pleine largeur en demi-largeur, le filtrage des caractères spéciaux, la conversion d'encodage GBK/UTF-8 et la segmentation des caractères chinois.
Configuration
{
"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
}
|
Paramètre |
Obligatoire |
Description |
|
feature_name |
Oui |
Nom de la fonctionnalité. |
|
expression |
Oui |
Champ source. La source doit être |
|
stop_char_file |
Non |
Chemin d'accès au fichier contenant les caractères spéciaux à supprimer. Ce fichier doit être encodé en GBK. Si vous omettez ce paramètre, l'opérateur utilise une liste intégrée. |
|
max_length |
Non |
Si la longueur du texte d'entrée dépasse cette valeur, l'opérateur ignore la normalisation du texte et renvoie la valeur d'origine. |
|
remove_space |
- |
Indique s'il faut supprimer les espaces. |
|
is_gbk_input |
Non |
Indique si l'entrée est encodée en GBK. Si la valeur est |
|
is_gbk_output |
Non |
Indique si la sortie doit être encodée en GBK. Si la valeur est |
|
parameter |
- |
Masque de bits spécifiant les opérations de normalisation à effectuer. |
|
default_value |
Non |
Valeur par défaut à renvoyer si le champ source est nul ou vide. |
Remarque :
Le fichier
stop_char_filedoit utiliser l'encodage GBK.Chaque ligne du fichier
stop_char_filene peut contenir qu'un seul caractère. Dans le cas contraire, le filtrage échouera.
Options de normalisation du texte
Le paramètre parameter spécifie la somme d'un ou plusieurs des nombres suivants.
Par exemple, si les fonctions requises sont la conversion des majuscules en minuscules, la conversion des caractères pleine largeur en demi-largeur, la conversion du chinois traditionnel en chinois simplifié et le filtrage des caractères spéciaux, alors parameter=4+8+16+32=60.
La valeur par défaut du paramètre parameter est 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. */
Exemple
{
"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/"]
Fonctionnalité BM25
Fonctionnalités
L'algorithme BM25 (Best Matching) est un algorithme de correspondance de texte de premier plan en recherche d'information, utilisé pour calculer les scores de pertinence de recherche. L'algorithme commence par analyser une requête en termes
Pour le chinois, vous pouvez aborder la tokenisation des requêtes comme une analyse morphologique, en traitant chaque terme comme un morphème
La formule générale de l'algorithme BM25 est la suivante :
Où
Importance des termes
Il existe plusieurs méthodes pour déterminer la pertinence d'un terme par rapport à un document. L'une des plus courantes est la fréquence inverse de document (IDF). La formule est la suivante :
Ici,
Selon la définition de l'IDF, pour une collection de documents donnée, plus il y a de documents contenant le terme
Pertinence des termes
Dans BM25, le score de pertinence entre un terme
D'après la définition de
La formule du score de pertinence de l'algorithme BM25 peut être résumée comme suit :
La formule BM25 démontre que l'utilisation de différentes méthodes de tokenisation, de pondération des termes et de détermination de la pertinence terme-document peut produire diverses méthodes de scoring de pertinence de recherche, offrant ainsi une grande flexibilité pour la conception d'algorithmes.
Configuration
{
"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": ""
}
Paramètre | Obligatoire | Description |
feature_name | Oui | Nom de la fonctionnalité de sortie. |
query | Oui | Champ source pour la requête. |
document | Oui | Champ source pour le document. |
term_doc_freq_file | Non | Chemin d'accès au fichier de données de fréquence terme-document. Chaque ligne contient un terme et son nombre de documents, séparés par un espace blanc. |
term_doc_freq_dict | Non | Alternative à |
document_number | Oui | Nombre total de documents, qui correspond à |
k1 | Non | Paramètre de réglage pour l'algorithme BM25. Les valeurs typiques vont de 1,2 à 2,0. La valeur par défaut est 1,2. |
b | Non | Paramètre de réglage pour l'algorithme BM25. La valeur par défaut est 0,75. |
separator | Non | Séparateur pour les entrées à valeurs multiples. La valeur par défaut est |
normalizer | Non | Méthode de normalisation. Pour plus de détails, consultez la configuration raw_feature. |
default_value | Non | Valeur par défaut pour les entrées nulles. |
stub_type | Non | Si la valeur est true, cette fonctionnalité sert uniquement de résultat intermédiaire et est exclue de la sortie du modèle. La valeur par défaut est false. |
Spécifiez soit
term_doc_freq_file, soitterm_doc_freq_dict. Le premier a la priorité et est utilisé si les deux sont spécifiés.Lorsque vous utilisez cette fonctionnalité dans le service en ligne, placez le fichier
term_doc_freq_fileetfg.jsondans le même répertoire.
kv_dot_product
Présentation
Calcule le produit scalaire des vecteurs de deux index key-value, ou la taille de l'intersection de deux ensembles.
Configuration
{
"feature_type": "kv_dot_product",
"feature_name": "query_doc_sim",
"query": "user:query",
"document": "item:title",
"separator": "|",
"default_value": "0"
}
|
Paramètre |
Obligatoire |
Description |
|
feature_name |
Oui |
Nom de la fonctionnalité de sortie. |
|
query |
Oui |
Spécifie le champ source pour la requête. |
|
document |
Oui |
Spécifie le champ source pour le document. |
|
separator |
Non |
Séparateur pour les entrées à valeurs multiples. La valeur par défaut est « \u001D ». |
|
kv_delimiter |
Non |
Séparateur pour les paires clé-valeur. La valeur par défaut est « : ». |
|
normalizer |
Non |
Méthode de normalisation. Pour plus d'informations, consultez la configuration raw_feature. |
|
default_value |
Non |
Valeur renvoyée en cas d'entrée vide. La valeur par défaut est 0. |
|
stub_type |
Non |
La valeur par défaut est false. Si ce paramètre est défini sur true, la fonctionnalité sert uniquement de résultat intermédiaire et n'est pas incluse dans la sortie du modèle. |
Cette fonctionnalité prend en charge les types complexes, tels que
arrayetmap. Utilisez des types complexes pour des performances optimales.Lorsque l'entrée ne contient pas de partie
value, la valeurvaluepar défaut est 1,0. Vous pouvez utiliser cette propriété pour déterminer la taille de l'intersection de deux ensembles.Si vous ne configurez pas
default_value, la valeur par défaut est définie sur 0.
Exemples
|
Requête |
Document |
Sortie |
||
|
"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
Présentation
L'opérateur str_replace_feature remplace toutes les sous-chaînes correspondantes dans une chaîne d'entrée par les remplacements spécifiés.
Les correspondances qui se chevauchent sont remplacées de manière gloutonne.
Configuration
{
"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
}
|
Paramètre |
Description |
|
feature_name |
Obligatoire. Nom de la fonctionnalité de sortie. |
|
expression |
Obligatoire. Spécifie le champ source. |
|
default_value |
Facultatif. Valeur par défaut à utiliser si l'entrée est vide ou nulle. |
|
replacements |
Facultatif. Ce paramètre devient obligatoire si |
|
replace_file |
Facultatif. Ce paramètre est requis si vous ne définissez pas |
|
is_sequence |
Facultatif. Indique s'il s'agit d'une fonctionnalité de séquence. La valeur par défaut est |
|
sequence_length |
Facultatif. Longueur maximale de la séquence. Les éléments dépassant cette longueur sont tronqués. |
|
sequence_delim |
Facultatif. Séparateur pour les éléments de la séquence. Ce paramètre s'applique uniquement aux entrées de type chaîne. |
|
separator |
Facultatif. Ce paramètre spécifie le séparateur multivaleur pour l'entrée et prend effet uniquement lorsque |
|
value_dimension |
Facultatif. Spécifie la dimension pour la troncature de la sortie. Valeur par défaut : 0. |
|
stub_type |
Facultatif. Si la valeur est définie sur |
Vous pouvez configurer à la fois
replace_fileetreplacements. Les dictionnaires de remplacement des deux sources sont fusionnés, etreplacementsa une priorité plus élevée.-
Cet opérateur prend en charge le regroupement de fonctionnalités (binning). Pour plus de détails sur la configuration, consultez la section Regroupement de fonctionnalités (discrétisation) :
hash_bucket_size: hache le résultat de la transformation de la fonctionnalité et applique une opération modulo.vocab_list: regroupe l'entrée en fonction d'un vocabulaire et mappe chaque valeur à son index dans la liste.vocab_dict: regroupe l'entrée en mappant chaque valeur de fonctionnalité à sa valeur correspondante dans levocab_dict.vocab_file: lit levocab_listou levocab_dictà partir d'un fichier.
Cet opérateur prend en charge les entrées multivalues de type
array.
Exemple
Le tableau suivant présente la sortie pour l'exemple de configuration précédent.
|
user:query |
Sortie |
|||
|
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
Présentation
L'opérateur regex_replace_feature remplace les sous-chaînes correspondant à une expression régulière par une chaîne de remplacement spécifiée.
Vous pouvez configurer plusieurs motifs. L'opérateur remplace toute sous-chaîne correspondant à l'un des motifs spécifiés.
Configuration
{
"feature_name": "query",
"feature_type": "regex_replace_feature",
"expression": ["user:query"],
"regex_pattern": "\\|",
"replacement": " ",
"default_value": ""
}
|
Paramètre |
Description |
|
feature_name |
Obligatoire. Nom de la fonctionnalité de sortie. |
|
expression |
Obligatoire. Champ source de la fonctionnalité. |
|
default_value |
Facultatif. Valeur par défaut à utiliser si l'entrée est nulle ou vide. |
|
regex_pattern |
Obligatoire. Expression régulière utilisée pour trouver les sous-chaînes à remplacer. |
|
replacement |
Facultatif. Chaîne de remplacement. Si vous spécifiez une chaîne vide, les sous-chaînes correspondantes sont supprimées. |
|
replace_all |
Facultatif. Indique s'il faut effectuer un remplacement global. La valeur par défaut est |
|
icase |
Facultatif. Indique si la correspondance de l'expression régulière est sensible à la casse. La valeur par défaut est |
|
is_sequence |
Facultatif. Indique s'il s'agit d'une fonctionnalité de séquence. La valeur par défaut est |
|
sequence_length |
Facultatif. Longueur maximale de la séquence. L'opérateur tronque les séquences dépassant cette longueur. |
|
sequence_delim |
Facultatif. Séparateur pour les éléments d'une séquence. Ce paramètre est requis uniquement lorsque l'entrée est une chaîne. |
|
separator |
Facultatif. Ce paramètre est valide uniquement lorsque |
|
value_dimension |
Facultatif. Dimension de sortie pour la troncature des résultats. Une valeur de 0 (par défaut) désactive la troncature. |
|
stub_type |
Facultatif. Si la valeur est |
-
Cet opérateur prend en charge le regroupement de fonctionnalités. Pour plus de détails sur la configuration, consultez la documentation sur le regroupement de fonctionnalités (discrétisation). Les paramètres suivants sont disponibles :
hash_bucket_size: hache la valeur de la fonctionnalité et applique une opération modulo.vocab_list: regroupe la valeur de la fonctionnalité en fonction d'une liste de vocabulaire et la mappe à son index dans la liste.vocab_dict: mappe chaque valeur de fonctionnalité à une valeur correspondante dans levocab_dict.vocab_file: lit levocab_listou levocab_dictà partir d'un fichier.
Prend en charge les entrées
arraymultivalues.
Exemple
|
|
Sortie |
|||
|
alpha |
beta |
gamma |
alpha beta gamma |
|
|
feature |
generation |
tool |
useful |
feature generation tool useful |
bool_mask_feature
Introduction
Filtre les éléments d'une séquence à l'aide d'un masque booléen, de manière similaire à tf.boolean_mask(tensor, mask).
Il s'agit d'un type de sequence feature.
Configuration
{
"feature_name": "mask_feature",
"feature_type": "bool_mask_feature",
"value_type": "float",
"expression": [
"user:click_items",
"item:is_valid"
],
"sequence_delim": ","
}
|
Paramètre |
Description |
|
feature_name |
Obligatoire. Nom de la fonctionnalité, utilisé comme préfixe pour la sortie finale. |
|
expression |
Obligatoire. Tableau spécifiant les champs dépendants. Le premier élément est la séquence d'entrée à filtrer et le second est le masque booléen. |
|
default_value |
Facultatif. Si non spécifié, ce paramètre prend par défaut la valeur |
|
value_type |
Obligatoire. Type de données de la sortie. |
|
sequence_length |
Facultatif. Longueur maximale de la séquence. Les séquences plus longues sont tronquées. |
|
sequence_delim |
Facultatif. Séparateur pour les éléments d'une séquence. Ce paramètre est requis pour les entrées de type chaîne. |
|
separator |
Facultatif. Séparateur pour les entrées multivalues. La valeur par défaut est |
|
value_dimension |
Facultatif. Dimension de sortie, utilisée pour la troncature. La valeur par défaut est |
|
normalizer |
Facultatif. Méthode de normalisation. Ce paramètre s'applique uniquement aux fonctionnalités numériques. Pour plus de détails, consultez RawFeature. |
|
stub_type |
Facultatif. Si la valeur est définie sur |
Prend en charge le regroupement de fonctionnalités. Pour plus de détails sur la configuration, consultez la section Regroupement de fonctionnalités (discrétisation).
Prend en charge les entrées multivalues sous forme de tableaux ou de tableaux imbriqués.
Exemples
|
Entrée |
Masque |
Sortie |
|
"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] |
Utilisation avec les fonctionnalités d'expression
{
"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
Présentation
Découpe un tableau d'entrée à l'aide de la syntaxe de découpage de style Python ou récupère un élément à un index spécifique.
Il s'agit d'un type de sequence feature.
Configuration
{
"feature_name": "test_feature",
"feature_type": "slice_feature",
"value_type": "float",
"expression": [
"user:click_items"
],
"slice": "2:4"
}
|
Paramètre |
Obligatoire |
Description |
|
feature_name |
Oui |
Nom de la fonctionnalité, utilisé comme préfixe pour la sortie finale. |
|
expression |
Oui |
Tableau de champs source. |
|
slice |
Oui |
Nombre unique permettant de récupérer un élément par son index, ou chaîne de découpage au format Python |
|
default_value |
Non |
Valeur à utiliser pour une entrée vide. Si ce paramètre n'est pas spécifié, la valeur par défaut est |
|
value_type |
Oui |
Type de sortie. |
|
sequence_length |
Non |
Longueur maximale de la séquence. Les séquences plus longues sont tronquées. |
|
sequence_delim |
Non |
Séparateur entre les éléments de la séquence. Requis uniquement si l'entrée est une |
|
separator |
Non |
Séparateur de valeurs multiples pour l'entrée. La valeur par défaut est |
|
value_dimension |
Non |
Spécifie la dimension pour la troncature de la sortie. La valeur par défaut est |
|
normalizer |
Non |
Méthode de normalisation. S'applique uniquement aux fonctionnalités numériques. Pour plus d'informations, consultez RawFeature. |
|
stub_type |
Non |
Valeur par défaut : |
|
placeholder |
Non |
Dans une fonctionnalité de séquence, valeur spéciale utilisée pour remplir les positions vides et compléter les dimensions. La valeur par défaut est |
Cet opérateur prend en charge le binning des fonctionnalités. Pour obtenir des détails sur la configuration, consultez binning des fonctionnalités (discrétisation).
Cet opérateur prend en charge les entrées à valeurs multiples, y compris les tableaux et les tableaux imbriqués.
Exemple
Lorsque vous définissez sequence_delim="," et value_dimension=1, l'entrée et la sortie sont les suivantes :
|
Entrée |
slice |
Sortie |
|
"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] |
Exemple de fonctionnalité utilisateur (dictionnaire imbriqué)
Par exemple, la chaîne 50011740^50011740:0.2,36806676:0.3,122572685:0.5|50006842^16788:0.1 est convertie en la carte à deux niveaux suivante :
{
"50011740": {
"50011740": 0.2,
"36806676": 0.3,
"122572685": 0.5
},
"50006842": {
"16788": 0.1
}
}