このトピックでは、id_feature、raw_feature、expr_feature を含む 17 種類のビルトイン特徴量オペレーターの構成方法について説明します。
id_feature
概要
id_feature は離散特徴です。これには、ユーザー ID やアイテム ID などの単一値特徴と、アイテムの色などの多値特徴が含まれます。
構成
{
"feature_type": "id_feature",
"feature_name": "item_is_main",
"expression": "item:is_main",
"need_prefix": true,
"separator": "\u001D",
"default_value": ""
}パラメーター | 必須 | 説明 |
feature_name | はい | 出力時のプレフィックスとして使用される特徴量名です。 |
expression | はい | ソースフィールドです。 |
need_prefix | いいえ |
|
value_type | いいえ | 出力タイプです。デフォルトは |
separator | いいえ | 多値区切り文字を入力します。デフォルトは |
default_value | いいえ | ソースフィールドが空の場合に使用されるデフォルト値です。 |
weighted | いいえ | 入力が key:value 形式かどうかを指定します。 |
value_dimension | いいえ | 多値特徴量の出力次元を切り詰めるための値です。デフォルト値は |
stub_type | いいえ |
|
特徴量ビニングをサポートしています。詳細については、「特徴量ビニング(離散化)」をご参照ください。
多値特徴量に対して
array型をサポートしています。
例
以下の例は、異なる構成に基づく item:is_main 特徴量の入力と出力を示しています。
タイプ | 入力 (item:is_main) | 出力特徴量 |
int64_t | 100 | item_is_main_100 |
double | 5.2 | item_is_main_5.2 |
string | abc | item_is_main_abc |
多値 string | abc^]bcd | [item_is_main_abc, item_is_main_bcd] |
多値 int | 123^]456 | [item_is_main_123, item_is_main_456] |
^] は多値区切り文字を表し、ASCII コードが "\x1D" の記号であり、"\u001d" とも記述できます。
raw_feature
概要
raw_feature オペレーターは連続特徴量を処理します。int、float、double などの数値型をサポートしています。
構成
{
"feature_type" : "raw_feature",
"feature_name" : "ctr",
"expression" : "item:ctr",
"normalizer" : "method=log10"
}パラメーター | 必須 | 説明 |
feature_name | はい | 機能名。 |
expression | はい | ソースフィールドです。 |
normalizer | いいえ | 正規化方法です。詳細については、「正規化子」セクションをご参照ください。 |
value_type | いいえ | 出力タイプです。デフォルトは |
separator | いいえ | 多値入力の区切り文字です。デフォルトは |
default_value | いいえ | null または空の入力に対するデフォルト値です。 |
value_dimension | いいえ | 出力フィールドの次元を指定して出力を切り詰めます。デフォルト値は 1 です。値が 1 の場合、スキーマタイプは |
stub_type | いいえ | デフォルトは |
このオペレーターは特徴量ビニング/離散化をサポートしています。構成の詳細については、「特徴量ビニング(離散化)」をご参照ください。
このオペレーターは
array型の多値入力をサポートしています。
例
^] は多値区切り文字を表します。これは ASCII コードが "\x1D" の単一文字であり、2 文字ではありません。
タイプ | 値 | 出力 |
int64_t | 100 | 100 |
double | 100.1 | 100.1 |
多値 int | 123^]456 | [123, 456](入力ディメンションは構成された |
正規化子
raw_feature と match_feature の両方は、minmax, zscore, log10, and expression の 4 種類の正規化手法をサポートしています。これらの構成と計算方法は次のとおりです。
minmax
例:method=minmax,min=2.1,max=2.2
数式:x = (x - min) / (max - min)
zscore
例:method=zscore,mean=0.0,standard_deviation=10.0
数式:x = (x - mean) / standard_deviation
log10
例:method=log10,threshold=1e-10,default=-10
数式:x = x > threshold ? log10(x) : default;
expression
例:method=expression,expr=sign(x)
数式:任意の関数または式を構成できます。変数
xは入力値を表します。
expr_feature
概要
expr_feature は式を評価し、結果を float、double、int32、または int64 などの指定された型で出力します。バッチ計算とブロードキャストをサポートしています。
注:この特徴量オペレーターを使用する場合、すべての入力は double 型に変換可能である必要があります。
構成
{
"feature_type" : "expr_feature",
"feature_name" : "ctr_sigmoid",
"value_type": "float",
"expression" : "sigmoid(pv/(1+click))",
"variables": ["item:pv", "item:click"]
}pv = 2, click = 3 のとき、式特徴量の値は 0.6224593312 です。
パラメーター | 必須 | 説明 |
feature_name | はい | 機能名。 |
expression | はい | 評価する式です。 |
variables | はい |
|
value_type | いいえ | 出力特徴量の型は、 |
separator | いいえ | 多値 |
default_value | いいえ | 式の評価中にエラー(null 値の検出など)が発生した場合に返されるデフォルト値です。 |
value_dimension | いいえ | デフォルト値は 0 で、出力の切り詰めまたはパディングに使用される出力ディメンションを表します。値が 1 の場合、スキーマタイプは |
fill_missing | いいえ | 欠損値補完のデフォルトは |
stub_type | いいえ |
|
例
{
"feature_name": "expr_feat",
"feature_type": "expr_feature",
"value_type": "float",
"expression": "a+b",
"variables": ["a", "b"],
"value_dimension": 3
}スカラーとベクターの計算(ブロードキャスト)
a=1かつb=[1, 2, 6]のとき、結果は[2, 3, 7]です。
ベクター同士の
要素ごとの計算変数
a=[3, 2, 1]かつ変数b=[1, 2, 6]のとき、結果は[4, 4, 7]です。
一時変数とカンマ式
例:
x=roundp(a),(a-x)*b。この例では、xは一時変数であり、variablesに構成する必要はありません。カンマ式は左から右に評価され、最も右側のサブ式の値を返します。
メモリーオーバーヘッドを削減するために、セマンティクスが許す範囲で既存の変数を一時変数として再利用してください。
式とシーケンス特徴量の組み合わせ
{
"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
}
]
}
]
}式
ビルトイン関数(スカラー)
関数名
パラメーター数
説明
rnd
0
[0, 1) の範囲で乱数を生成します。
isnan
1
入力が NaN の場合に 1.0 を返し、それ以外の場合は 0.0 を返します。この関数にはバージョン 1.0.5 以降が必要です。
sin
1
数値の正弦を返します。
cos
1
数値の余弦を返します。
tan
1
数値の正接を返します。
asin
1
数値の逆正弦を返します。
acos
1
数値の逆余弦を返します。
atan
1
数値の逆正接を返します。
sinh
1
数値の双曲線正弦を返します。
cosh
1
数値の双曲線余弦を返します。
tanh
1
数値の双曲線正接を返します。
asinh
1
数値の逆双曲線正弦を返します。
acosh
1
数値の逆双曲線余弦を返します。
atanh
1
数値の逆双曲線正接を返します。
log2
1
数値の底 2 の対数を返します。
log10
1
数値の底 10 の対数を返します。
log
1
数値の自然対数(底 e)を返します。
ln
1
数値の自然対数(底 e)を返します。
exp
1
オイラー数(e)を数値のべき乗にします。
sqrt
1
数値の平方根を返します。
sign
1
数値の符号を返します。負の場合は -1、正の場合は 1、ゼロの場合は 0 です。
abs
1
数値の絶対値を返します。
rint
1
数値を最も近い整数に丸めます。
round
1
「ゼロから遠ざかる方向への丸め」方式を使用して、数値を最も近い整数に丸めます。
roundp
2
数値を指定された精度に丸めます。例:
roundp(3.14159, 2)は3.14を返します。mod
2
除算の余りを返します。
floor
1
数値を下方向へ最も近い整数に丸めます。
ceil
1
数値を上方向へ最も近い整数に丸めます。
trunc
1
小数部分を削除して数値を切り捨てます。
sigmoid
1
数値のシグモイドを返します。
sphere_dist
4
2 つの GPS ポイント間の球面距離を返します。引数:
lng1、lat1、lng2、lat2。haversine
4
2 つの GPS ポイント間のハーバーサイン距離を返します。引数:
lng1、lat1、lng2、lat2。min
可変
引数リストから最小値を返します。
max
可変
引数リストから最大値を返します。
sum
可変
すべての引数の合計を返します。
avg
可変
すべての引数の平均値を返します。
注:これらのビルトイン関数はバッチ計算とブロードキャストをサポートしています。
ビルトインベクトル演算関数
関数名
パラメーター数
説明
len
1
ベクターの長さ(要素数)を返します。
l2_norm
1
L2 正規化されたベクターを返します。
squared_norm
1
ベクターの L2 ノルムの二乗を返します。
dot
2
2 つのベクターの内積を返します。
euclid_dist
2
2 つのベクター間のユークリッド距離を返します。
corr
2
2 つのベクター間のピアソン相関係数を返します。
std_dev
1
ベクターの標本標準偏差(n-1 で除算)を返します。
pop_std_dev
1
ベクターの母集団標準偏差(n で除算)を返します。
variance
1
ベクターの標本分散(n-1 で除算)を返します。
pop_variance
1
ベクターの母集団分散(n で除算)を返します。
reduce_min
1
ベクター内の最小値を返します。
reduce_max
1
ベクター内の最大値を返します。
reduce_sum
1
ベクター内のすべての要素の合計を返します。
reduce_mean
1
ベクター内のすべての要素の平均値を返します。
reduce_prod
1
ベクター内のすべての要素の積を返します。
注:式にこれらのビルトインベクトル演算関数のいずれかが含まれている場合、式内の他のすべての変数はスカラーである必要があります。
ビルトイン二項演算子
演算子
説明
優先度
=
代入 *
0
||
論理 OR
1
&&
論理 AND
2
|
ビット単位の OR
3
&
ビット単位の AND
4
<=
以下
5
>=
以上
5
!=
等しくない
5
==
等しい
5
>
より大きい
5
<
より小さい
5
+
加算
6
-
減算
6
*
乗算
7
/
部門
7
%
剰余
7
^
x を y 乗します。
8
* 代入演算子は特殊です。引数の 1 つを変更し、変数にのみ適用されます。
ビルトイン三項演算子
この演算子は if-else 機能を提供します。
遅延評価により、式の必要な分岐のみが評価されます。
演算子
説明
構文
?:
if-then-else 演算子
condition ? value_if_true : value_if_falseビルトイン定数
定数
説明
値
_pi
数学定数 π(パイ)。
3.141592653589793
_e
数学定数 e(オイラー数)。
2.718281828459045
combo_feature
概要
combo_feature オペレーターは、複数のソースフィールドの直積を計算して合成特徴を作成します。このプロセスは特徴クロスとしても知られています。id_feature オペレーターは、単一のソースフィールドのみを含む combo_feature の特殊なケースです。通常、特徴クロスのソースフィールドは異なるテーブルに由来します(例:ユーザー特徴量とアイテム特徴量の組み合わせ)。
構成
{
"feature_type" : "combo_feature",
"feature_name" : "comb_age_item",
"expression" : ["user:age_class", "item:item_id"],
"need_prefix": true,
"separator": "\u001D",
"default_value": ""
}
パラメーター | 必須 | 説明 |
feature_name | はい | 機能名。 |
expression | はい | 結合するソースフィールドの配列です。 |
need_prefix | いいえ | 出力値に
|
value_type | いいえ | 出力データ型です。デフォルトは |
separator | いいえ | 入力の多値区切り文字です。デフォルトは |
default_value | いいえ | 空または null の入力に使用するデフォルト値です。 |
value_dimension | いいえ | デフォルト値は 0 です。このパラメーターは出力の切り詰めに使用されます。値が 1 の場合、スキーマタイプは |
stub_type | いいえ |
|
特徴量ビニングをサポートしています。構成手順については、「特徴量ビニング(離散化)」をご参照ください。
array型の多値入力をサポートしています。
例
^] 記号は多値区切り文字を表し、ASCII コードが "\x1D" の単一文字であり、2 文字ではありません。
|
| 出力 |
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] |
出力値の数は次のように計算されます。
|F1| * |F2| * ... * |Fn|ここで、|Fn| は n 番目のソースフィールドの値の数を表します。
lookup_feature
概要
match_feature と同様に、lookup_feature オペレーターはキーと値のペアのセット内でキーを検索し、対応する値を返します。
このオペレーターは map と key の 2 つのパラメーターに依存します。
mapパラメーターは辞書または多値文字列です。多値文字列では、各要素は "k1:v1" 形式のキーと値のペアです。keyパラメーターは任意のデータ型にすることができます。複数のキーがある場合は、配列型の入力が推奨されます。特徴量を生成する際、オペレーターはkeyパラメーターの値を取得し、それをmapのキー型に変換してから、マップ内で対応する値を見つけます。
構成
{
"feature_type": "lookup_feature",
"feature_name": "item_match_item",
"map": "item:item_attr",
"key": "item:item_value",
"need_discrete": true,
"need_key": true
}パラメーター | 必須 | 説明 |
feature_name | はい | 特徴量名のプレフィックスです。 |
map | はい | キーと値のペアを含むソース辞書です。 |
key | はい |
|
value_type | いいえ | 出力タイプです。デフォルトは |
separator | いいえ |
|
default_value | いいえ | キーが見つからない場合や入力が null の場合に返されるデフォルト値です。 |
need_prefix | いいえ | 出力値の前に
|
need_key | いいえ |
|
normalizer | いいえ | 正規化方法です。このパラメーターは raw_feature オペレーターの normalizer パラメーターと同じように機能します。 |
combiner | いいえ | 複数のキーから取得した値を結合するための集計方法です。有効な値: |
need_discrete | いいえ |
|
value_dimension | いいえ | 出力ディメンションを指定します。有効な値:
|
stub_type | いいえ |
|
ビニング操作をサポートしています。構成方法については、「特徴量ビニング(離散化)」をご参照ください。
mapパラメーターは辞書型入力をサポートし、keyパラメーターは配列型入力をサポートします。
例
上記の構成について、ドキュメントに次のデータがあると仮定します。
item_attr : "k1:v1^]k2:v2^]k3:v3"記号 ^] は複数値の区切り文字を表します。これは、ASCII コード "\x1D" を持つ 1 文字であり、2 文字ではありません。emacs では C-q C-5 を、vim では C-v C-5 を押してこの文字を入力します。ここで、item_attr は複数値の文字列です。
map パラメーターが文字列として複数のキーと値のペアを表す場合、それは標準文字列ではなく多値文字列である必要があります。
item_value : "k2"結果の特徴量は 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 パラメーターを使用して取得した値を集計できます。
combiner を使用するには、need_discrete を false に設定する必要があります。この場合、検索された値は数値または数値に変換可能な文字列である必要があります。
match_feature
概要
match_feature オペレーターは通常、特徴量間のマッチングに使用されます。本質的には、2 段階のマップ検索を実行します。
構成
構成ファイルは 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:ネストされた辞書。userフィールドは、2 段階のマップを表す文字列を使用します。第 1 段階のマップでは、
|が項目間の区切り文字であり、^がキーとその値の間の区切り文字です。第 2 段階のマップでは、
,が項目間の区切り文字であり、:がキーとその値の間の区切り文字です。第 1 段階の辞書は
Map<K, string>入力もサポートしており、Kはstring,int32,int64型にすることができます。マップの値は内部辞書を表す文字列であり、同じ区切り文字を使用します。
category:第 1 段階のマップ検索の主キーです。ALLはワイルドカードで、このレベルのすべてのキーに一致します。item:第 2 段階のマップ検索のセカンダリキーです。ALLはワイルドカードで、このレベルのすべてのキーに一致します。need_discretetrue:モデルは出力から生成された特徴量名を使用し、特徴量値を無視します。デフォルトでは、このパラメーターはfalseです。false:モデルは出力からマッチした特徴量値を使用し、特徴量名を無視します。
match_typehit:単一のマッチした特徴量を出力します。オペレーターはまずcategory値を使用して第 1 段階のマップをクエリし、次に結果の第 2 段階のマップをitem値でクエリして最終値を取得します。単一レベルのマッチングを実行するには、第 1 段階のマップキーをALLに設定し、特徴量生成(FG)構成のcategoryパラメーターを "ALL" に設定します。multihit:categoryおよびitemフィールドでALLワイルドカードを使用した場合に、複数の値をマッチして出力します。
normalizer正規化方法です。このパラメーターは raw_feature オペレーターのものと同じ意味を持ち、
need_discrete=falseの場合にのみ有効です。show_category出力の前に
category値を付加するかどうかを指定します。need_discrete=trueかつmatch_type=hitの場合はデフォルトでtrue、それ以外の場合はfalseになります。show_item出力の前に
item値を付加するかどうかを指定します。need_discrete=trueかつmatch_type=hitの場合はデフォルトでtrue、それ以外の場合はfalseになります。value_type出力データ型です。デフォルトは
stringです。separatorオプション。文字列型の
keyフィールドの多値区切り文字です。デフォルトは"\u001D"です。default_valueオプション。null 入力に対するデフォルト値です。
value_dimensionオプション。出力のデータ構造を定義します。デフォルトは 0 です。1 に設定すると、出力は
value_type型の単一値になります。それ以外の場合は、array<value_type>型の配列になります。stub_typeオプション。
trueに設定すると、出力は中間結果として扱われ、モデルに送信されません。デフォルトはfalseです。
例
ユーザー特徴量の例(ネストされた辞書)
たとえば、文字列 50011740^50011740:0.2,36806676:0.3,122572685:0.5|50006842^16788:0.1 は次の 2 段階のマップに変換されます。
{
"50011740": {
"50011740": 0.2,
"36806676": 0.3,
"122572685": 0.5
},
"50006842": {
"16788": 0.1
}
}Hit
これは 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"
}次のフィールド値があるとします。
フィールド | 値 |
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 |
need_discrete=trueの場合、オペレーターは 2 段階の検索を実行します。まず、auction_root_category値(50006842)を使用してuser_brand_tags_hitをクエリし、内部マップ16788816:0.1,10122:0.2,29889:0.3,30068:19を返します。次に、この内部マップをbrand_id(30068)でクエリして値19を取得します。その後、特徴量名brand_hit_50006842_30068_19を生成します。need_discrete=falseの場合、結果は19.0です。user_brand_tags_hitフィールドは Map 型にもできます。例:{"50011740": "107287172:0.2,36806676:0.3,122572685:0.5", "50006842": "16788816:0.1,10122:0.2,29889:0.3,30068:19"}。
単一レベルのマッチングを実行するには、構成の category 値を ALL に変更します。フィールドに次の値があると仮定します。
フィールド | 値 |
user_brand_tags_hit | ALL^16788816:40,10122:40,29889:20,30068:20 |
brand_id | 30068 |
need_discrete=trueの場合、結果はbrand_hit_ALL_30068_20です。need_discrete=falseの場合、結果は20.0です。
あるいは、このシナリオでは lookup_feature オペレーターを使用することもできます。これには、user_brand_tags_hit 値の形式を "16788816:40^]10122:40^]29889:20^]30068:20" に変更する必要があります。'^]' 文字列は、非表示文字である多値区切り文字 \u001d を表します。
lookup_feature オペレーターは map や array などの複雑な入力型をサポートしているため、より優れたパフォーマンスを提供します。
overlap_feature
概要
2 つの文字列間の用語一致に関する情報を出力します。たとえば、query がアイテムの title に含まれているかどうかを判断するためにこの特徴量を使用できます。
メソッド | 説明 |
query_common_ratio |
返される値は [0.0, 1.0] の範囲です。 |
title_common_ratio |
値は [0.0, 1.0] の範囲です。 |
is_contain |
|
is_equal |
|
index_of |
|
proximity_min_cover |
値は [0, length(title)] の範囲です。値が 0 の場合、少なくとも 1 つの |
proximity_min_dist |
値は [0, length(title)+1] の範囲です。length(title)+1 の値は、マッチする用語がないことを示します。 |
proximity_max_dist |
値は [0, length(title)+1] の範囲です。length(title)+1 の値は、マッチする用語がないことを示します。 |
proximity_avg_dist |
値は [0, length(title)+1] の範囲です。length(title)+1 の値は、マッチする用語がないことを示します。 |
「An Exploration of Proximity Measures in Information Retrieval」という論文では、これらの特徴量の計算方法について説明されています。
title(document)の term シーケンスが次のようになっていると仮定します:t1,t2,t1,t3,t5,t4,t2,t3,t4
MinCover は、各
query termを少なくとも 1 回カバーする最短のdocumentセグメントの長さを測定します。MinDist(最小ペアワイズ距離):
query termのマッチングペア間で見つかった最小距離です。たとえば、クエリ Q=t1,t2,t3 がドキュメント内でペアワイズ距離 1、2、3 を持つ場合、MinDist は min(1,2,3)=1 です。MaxDist(最大ペアワイズ距離):
query termのマッチングペア間で見つかった最大距離です。同じ例では、MaxDist=max(1,2,3)=3 です。AveDist(平均ペアワイズ距離):
query termのマッチングペア間のペアワイズ距離の平均です。同じ例では、AveDist=(1+2+3)/3=2 です。
MinDist、MaxDist、AveDist のすべての集約演算子は、マッチング query term 間のペアワイズ距離に基づいて定義されることに注意してください。document にマッチング query term が 1 つしかない場合、MinDist、AveDist、MaxDist の値は document の長さになります。
構成
{
"feature_type" : "overlap_feature",
"feature_name" : "is_contain",
"query" : "user:attr1",
"title" : "item:attr2",
"method" : "is_contain",
"separator" : " ",
"normalizer" : ""
}パラメーター | 必須 | 説明 |
feature_type | はい | 特徴量タイプです。これは |
feature_name | はい | 生成される |
query | はい |
|
title | はい |
|
method | はい | 計算方法です。有効な値は |
separator | - | 区切り文字を入力します。値を入力しない場合、デフォルトは |
normalizer | いいえ | 出力に適用する |
stub_type | いいえ | デフォルトは |
overlap_feature は float 値を返します。
例 1
query が "high,high2,fiberglass,abc"、title が "high,quality,fiberglass,tube,for,golf,bag" の場合:
メソッド | 値 |
query_common_ratio | 0.5 |
title_common_ratio | 0.28 |
is_contain | 0 |
is_equal | 0 |
例 2
method=index_of、title=the cat sat on the mat。
Query | 値 |
the cat | 0 |
sat | 2 |
the mat | 4 |
cap | -1 |
gap | -1 |
sequence_feature
概要
ユーザーの過去の行動は重要な特徴量です。この行動は通常、クリックや購入などのシーケンスとして表現されます。シーケンスを構成するエンティティは、アイテム自体またはその属性です。
構成
たとえば、最大長 50 のユーザーのクリックシーケンスを処理する場合、各アイテムについて item_id、price、ts の特徴量を抽出できます。ここで、ts はリクエスト時間(request_time)とイベント時間(event_time)の差です。以下の例はその構成を示しています。
{
"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:シーケンスの名前です。sequence_length:シーケンスの最大長です。sequence_delim:シーケンス内の要素を区切るデリミタです。sequence_pk:シーケンスのプライマリキーです。例:
user:click_50_seqは、ユーザーが最近クリックした上位 50 件の itemID を格納します。モデル推論サービスはこのフィールドをキーとしてside infoをクエリします。オンライン推論サービス(EAS Processor)のリクエストパラメーターには、キーが
sequence_pkである特徴量を含める必要があります。例:
click_50_seq: 5410233389955966;1832586(区切り文字はsequence_delimで指定された値)上記の例では、
click_50_seq特徴量の値は 5410233389955966;1832586 です。
シーケンスのアイテム側サブ特徴量は、モデル推論サービスへのリクエストに含める必要はありません。
モデル推論サービスはこのフィールドをキーとしてアイテムの
side infoをクエリします。たとえば、この構成では、
item_id, priceシーケンス特徴量は推論サービスへのリクエストに含める必要がありません。代わりに、Processor のアイテムキャッシュから取得され、fg SDK を使用して連結されます。このプロセスにより、オフライントレーニング時に使用されたフォーマットと一貫性が保たれます。
シーケンスのユーザー側サブ特徴量は、モデル推論サービスへのリクエストに含める必要があります。
特徴量名は
${sequence_name}__${input_name}です。例:click_50_seq__ts。${input_name}は通常expressionオプションで構成されますが、サブ特徴量タイプによって構成が異なる場合があります。${input_name}にはinput domainプレフィックス(item:やuser:など)は含まれません。
Features:
side infoはシーケンスの情報で、アイテムの静的属性値や行動時間情報などが含まれます。sequence_fields:入力シーケンスのフィールド名を指定します。値は
stringまたは[string]配列です。特徴量オペレーターが 1 つの入力フィールドのみを持つ場合、そのフィールドの内容はシーケンスである必要があります。この場合、
sequence_fieldsを構成する必要はありません。特徴量オペレーターが複数の入力フィールドを持つ場合、
sequence_fieldsを構成しないと、すべてのアイテム側特徴量(例:item:XXX)がシーケンス入力フィールドであるとみなされます。
オフラインタスクの入力テーブルには、すべてのサブ特徴量に対応する列を含める必要があります。
列がシーケンスの場合(
sequence_fieldsのルールを参照)、列名は${sequence_name}__${input_name}になります。たとえば、この構成では、オフラインテーブルに 4 つの列が必要です:
click_50_seq__item_id、click_50_seq__price、click_50_seq__ts、およびclick_50_seq__clk_time_seq。オフラインテーブルの列には array 型(パフォーマンス向上のため推奨)を使用できますが、
string型でsequence_delimを要素の区切り文字として使用することもサポートされています。
列がシーケンスでない場合、列名は
${input_name}にプレフィックスを付けずに命名します。たとえば、この構成では、オフラインテーブルに 1 つの非シーケンス列が必要です:
${cur_time}
input_aliasグローバル構成を使用して、長い列名に短いエイリアスを設定できます(以下の例を参照)。
特徴量ビニングをサポートしています。詳細については、「特徴量ビニング(離散化)」をご参照ください。ビニングが構成されている場合、出力要素タイプは
int64になり、形状はvalue_dimension構成によって決定されます。value_dimension(または
value_dim):シーケンス内の各要素のディメンションです。sequence_raw_featureの場合、このパラメーターがarray<float>のときに出力タイプは1になり、それ以外の値の場合はarray<array<float>>になります。sequence_id_featureの場合、このパラメーターが1のときに出力タイプはarray<string>になり、それ以外の値の場合はarray<array<string>>になります。デフォルト値は 0 です。
任意の特徴量タイプをシーケンスサブ特徴量として構成できます。以下に例を示します。
{
"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"
}
}注:input_alias パラメーターは入力フィールドのエイリアスを指定します。形式は "origin_field": "alias_field" で、元の入力フィールド名を置き換えるために短い名前を使用できます。
フラット化フォーマット
通常、非シーケンス特徴量タイプ(feature_type)に sequence_ プレフィックスを追加することで、シーケンスバージョンを取得できます。シーケンス特徴量の場合、一般に default_value を構成する必要があります。
例:
sequence_id_feature:出力値は常に
stringです。別の型が必要な場合は、代わりにslice_featureを使用してください。sequence_raw_feature:出力値タイプは
floatに固定されています。他の型が必要な場合は、代わりにslice_featureを使用してください。
特殊ケース 1:一部の特徴量変換タイプには、シーケンス版と非シーケンス版の両方があります。
対応するバージョンを有効にするには、is_sequence: true/false を設定します。
この場合、feature_type パラメーターには sequence_ プレフィックスを付ける必要はありません。
例:
特殊ケース 2:一部の特徴量変換タイプにはシーケンス版しかありません。
この場合、feature_type パラメーターには sequence_ プレフィックスを付ける必要はありません。
例:
これらの 2 つの特殊ケースでは、次のオプションパラメーターを追加できます。
sequence_length:シーケンスの最大長です。この長さを超える要素は切り捨てられます。デフォルト値は -1 で、シーケンスは切り捨てられません。sequence_delim:シーケンス要素間の区切り文字です。デフォルト値は
;です。
以下のコードは構成例を示しています。
{
"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
}上記の例では、入力フィールド clk_item_seq および clk_item_prices はシーケンスである必要があります。これは、配列または sequence_delim で構成された文字を区切り文字とする文字列です。
この構成では、オンラインサービス(Processor)は side info をクエリしません。完全な入力を提供する必要があります。
フラット化フォーマットのシーケンス特徴量の入力フィールド名は、構成された名前と同じであり、
${sequence_name}__というプレフィックスは付きません。
オンライン特徴量生成
行動 sideinfo は 2 つの方法で取得できます。1 つは EasyRec Processor のアイテムキャッシュから sideinfo を取得する方法です。sequence_pk で指定されたフィールドがプライマリキーとして使用され、アイテムキャッシュ内でアイテム属性情報を検索します。もう 1 つの方法は、対応するフィールド値をリクエストに設定する方法です。たとえば、上記の構成の "ts" フィールドは(リクエスト時間 - イベント時間)を表し、これは推薦リクエスト時間からユーザー行動時間を引いたものです。この値は各リクエストで変化するため、リクエストから取得する必要があります。
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
概要
combine_feature オペレーターは、指定された結合戦略(combiner)を使用して、入力特徴量から複数の値を単一の値に集約します。
そのシーケンス版である sequence_combine_feature は、シーケンス特徴量の各要素内の複数の値を単一の値に集約し、多値シーケンスを単一値シーケンスに変換します。
主要な機能
多値結合:特徴量から複数の値を単一の値に集約します。
柔軟な結合戦略:
sum、mean、max、min、countなどのさまざまな戦略をサポートしています。値マッピング:文字列識別子を数値に変換し、行動イベントシーケンスの処理に最適です。
二重区切り文字サポート:シーケンスデリミタと多値区切り文字の両方を構成できます。
構成
基本構成(数値結合)
{
"feature_name": "combine_feat",
"feature_type": "combine_feature",
"expression": "user:behavior_seq",
"combiner": "sum",
"separator": "|"
}シーケンス版は 2 つの方法で構成できます。
feature_typeパラメーターをsequence_combine_featureに設定します。"is_sequence": trueパラメーターを追加します。
{
"feature_name": "seq_combine_feat",
"feature_type": "sequence_combine_feature",
"expression": "user:behavior_seq",
"combiner": "sum",
"separator": "|",
"sequence_delim": ";"
}または:
{
"feature_name": "seq_combine_feat",
"feature_type": "combine_feature",
"expression": "user:behavior_seq",
"combiner": "sum",
"is_sequence": true,
"separator": "|",
"sequence_delim": ";"
}値マッピング構成(行動イベント)
{
"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
}
}オペレーターはまず値マッピングを適用し、その後値を結合します。
パラメーター
パラメーター | 必須 | 説明 |
feature_name | はい | 出力特徴量の名前です。 |
feature_type | はい | オペレータータイプを指定します。例: |
expression | はい | 入力特徴量です。 |
combiner | いいえ | 結合戦略です。サポートされる値: |
value_map | いいえ | 結合前に文字列値を数値に変換するための値マッピングです。 |
is_sequence | いいえ | 入力がシーケンス特徴量かどうかを指定します。 |
separator | いいえ | 多値区切り文字です。デフォルトは |
sequence_delim | いいえ | シーケンスデリミタです。デフォルトは空の文字列です。 |
default_value | いいえ | null または空の入力に使用するデフォルト値です。 |
stub_type | いいえ |
|
例
例 1:基本的な数値結合(合計)
構成:
{
"feature_name": "score_sum",
"feature_type": "sequence_combine_feature",
"expression": "user:scores",
"combiner": "sum",
"separator": ",",
"sequence_delim": ";"
}入力と出力:
入力 | 出力 | 説明 |
|
| 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 |
例 2:行動イベントシーケンス(値マッピングあり)
構成:
{
"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
}
}入力と出力:
入力 | 出力 | 説明 |
|
| オペレーターはイベントを値にマッピングしてから合計します:1+2+4=7。 |
|
| マッピングされた値は 2 です。 |
|
| 1+2=3 |
|
| 入力文字列にはシーケンスデリミタ(;)で区切られた複数の要素が含まれています。 |
|
| 入力配列には複数の要素が含まれています。 |
tokenize_feature
概要
tokenize_feature オペレーターは入力文字列をトークン化し、トークン化された文字列または対応するトークン ID を返します。このオペレーターは、tokenizers-cpp ライブラリの tokenizer.json 形式の語彙ファイルをサポートしています。
語彙ファイル形式の詳細については、以下のリソースをご参照ください。
1. https://github.com/huggingface/tokenizers
2. https://github.com/mlc-ai/tokenizers-cpp
構成
{
"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": ","
}
パラメーター | 必須 | 説明 |
feature_name | はい | 作成する特徴量の名前です。 |
expression | はい | ソースフィールドを指定します。ソースは |
vocab_file | はい | 語彙ファイルのパスです。 |
default_value | いいえ | 入力に対するデフォルト値です。 |
tokenizer_type | いいえ | トークナイザータイプです。有効な値: |
output_type | いいえ |
|
output_delim | いいえ |
|
stub_type | いいえ |
|
例
output_type が word_id の場合、オペレーターは output_delim で指定された文字で区切られたトークン ID の文字列を返します。
タイプ | item:title | 出力 |
string | It is good today! | 1147,310,1175,3063,2 |
語彙の例
ファイル名 | トークナイザータイプ | ダウンロードリンク |
bert-base-chinese-vocab.json | WordPiece | |
tokenizer.json | BPE | |
spiece.model | sentencepiece |
text_normalizer
概要
text_normalizer オペレーターはテキスト正規化を実行します。その機能には、大文字小文字の変換、繁体字から簡体字への変換、全角文字から半角文字への変換、特殊文字のフィルタリング、GBK/UTF-8 エンコーディングの変換、漢字の分割が含まれます。
構成
{
"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
}
パラメーター | 必須 | 説明 |
feature_name | はい | 機能名。 |
expression | はい | ソースフィールドを指定します。ソースは |
stop_char_file | いいえ | 削除する特殊文字を含むファイルへのパスです。このファイルは GBK エンコードされている必要があります。このパラメーターを省略すると、オペレーターは組み込みリストを使用します。 |
max_length | いいえ | 入力テキストの長さがこの値を超える場合、オペレーターはテキスト正規化をスキップして元の値を返します。 |
remove_space | - | スペースを削除するかどうか。 |
is_gbk_input | いいえ | 入力が GBK エンコードされているかどうか。 |
is_gbk_output | いいえ | 出力を GBK エンコードするかどうかを指定します。 |
parameter | - | 実行する正規化操作を指定するビットマスクです。 |
default_value | いいえ | ソースフィールドが null または空の場合に返されるデフォルト値です。 |
注:
stop_char_fileファイルは GBK エンコードを使用する必要があります。stop_char_fileファイルの各行には 1 文字のみを含めることができます。そうでない場合、フィルタリングは失敗します。
テキスト正規化オプション
parameter パラメーターは、以下の数値の 1 つ以上の合計を指定します。
たとえば、大文字から小文字への変換、全角から半角への変換、繁体字から簡体字への変換、特殊文字のフィルタリングが必要な場合、parameter=4+8+16+32=60 となります。
parameter パラメーターのデフォルト値は 60 です。
#define __NORMALIZED_LOWER2UPPER__ 2 /* 小文字を大文字に変換 */
#define __NORMALIZED_UPPER2LOWER__ 4 /* 大文字を小文字に変換 */
#define __NORMALIZED_SBC2DBC__ 8 /* 全角文字を半角文字に変換 */
#define __NORMALIZED_BIG52GBK__ 16 /* 繁体字を簡体字に変換 */
#define __NORMALIZED_FILTER__ 32 /* 特殊文字をフィルター */
#define __NORMALIZED_SPLITCHARS__ 512 /* 中国語の文字をスペースで区切られた単一文字に分割 */例
{
"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/"]
BM25 特徴量
機能
BM25(Best Matching)アルゴリズムは、情報検索における主要なテキストマッチングアルゴリズムであり、検索関連性スコアを計算するために使用されます。このアルゴリズムはまずクエリを用語
中国語の場合、クエリのトークン化を形態素解析として扱い、各用語を形態素
BM25 アルゴリズムの一般的な数式は次のとおりです。
ここで、
用語の重要度
ドキュメントに対する term の関連性を判断するためのメソッドはいくつかあります。最も一般的なものの 1 つは、逆文書頻度(IDF)です。数式は次のとおりです。
ここで、
IDF の定義によると、特定のドキュメントコレクションにおいて、項
用語の関連性
BM25 において、クエリ項
BM25 アルゴリズムの関連スコアの数式は、次のように要約できます。
BM25 数式は、形態素解析、語の重み付け、および語とドキュメントの関連性の決定に異なる手法を使用することで、さまざまな検索関連性スコアリング手法を生み出すことができ、アルゴリズム設計に大きな柔軟性をもたらすことを示しています。
設定
{
"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": ""
}パラメーター | 必須 | 説明 |
feature_name | はい | 出力特徴量の名前です。 |
query | はい | クエリのソースフィールドです。 |
document | はい | ドキュメントのソースフィールドです。 |
term_doc_freq_file | いいえ | 単語-ドキュメント頻度データへのファイルパスです。各行には、単語とそのドキュメント出現数が空白文字で区切られて記述されています。 |
term_doc_freq_dict | いいえ |
|
document_number | はい | ドキュメントの総数です。これは数式中の |
k1 | いいえ | BM25 アルゴリズム用の調整パラメーターです。一般的な値の範囲は 1.2 ~ 2.0 です。デフォルト値は 1.2 です。 |
b | いいえ | BM25 アルゴリズム用の調整パラメーターです。デフォルト値は 0.75 です。 |
separator | いいえ | 複数値入力の区切り文字です。デフォルト値は |
normalizer | いいえ | 正規化方法です。詳細については、「raw_feature」の構成をご参照ください。 |
default_value | いいえ | null 入力に対するデフォルト値です。 |
stub_type | いいえ | true に設定すると、この特徴量は中間結果としてのみ機能し、モデル出力から除外されます。デフォルト値は false です。 |
term_doc_freq_file または
term_doc_freq_dictのいずれかを指定します。両方を指定した場合は、term_doc_freq_fileが優先され、使用されます。この機能をオンラインサービスで使用する場合、
term_doc_freq_fileファイルとfg.jsonを同じディレクトリに配置します。
kv_dot_product
概要
2 つの key-value インデックスのベクターのドット積を計算するか、2 つのセットの共通要素数(交差のサイズ)を求めます。
構成
{
"feature_type": "kv_dot_product",
"feature_name": "query_doc_sim",
"query": "user:query",
"document": "item:title",
"separator": "|",
"default_value": "0"
}パラメーター | 必須 | 説明 |
feature_name | はい | 出力特徴量の名前です。 |
query | はい | クエリのソースフィールドを指定します。 |
document | はい | ドキュメントのソースフィールドを指定します。 |
separator | いいえ | 複数値入力時の区切り文字です。デフォルトは "\u001D" です。 |
kv_delimiter | いいえ | キーと値のペアの区切り文字(デリミタ)です。デフォルトは ":" です。 |
normalizer | いいえ | 正規化方法です。詳細については、「raw_feature」の構成をご参照ください。 |
default_value | いいえ | 空の入力に対して返される値です。デフォルトは 0 です。 |
stub_type | いいえ | デフォルトは false です。true に設定すると、その特徴量は中間結果としてのみ機能し、モデルの出力には含まれません。 |
この特徴量は、
配列やマップなどの複合型をサポートしています。パフォーマンスを最適化するには、複合型を使用してください。入力に
値部分が含まれない場合、デフォルトの値は 1.0 になります。このプロパティを利用して、2 つのセットの共通要素数を求めることができます。default_valueを構成しない場合、デフォルト値は 0 に設定されます。
例
クエリ | ドキュメント | 出力 |
"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
概要
str_replace_feature オペレーターは、入力文字列内で一致したすべての部分文字列を指定された置き換え文字列に置き換えます。
重複する一致部分は、貪欲に(greedily)置き換えられます。
構成
{
"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
}パラメーター | 説明 |
feature_name | 必須です。出力特徴量の名前を指定します。 |
expression | 必須です。ソースフィールドを指定します。 |
default_value | 省略可能です。入力が空または null 値の場合に使用するデフォルト値を指定します。 |
replacements | 省略可能です。 |
replace_file | 省略可能です。 |
is_sequence | 省略可能です。シーケンス特徴量かどうかを指定します。デフォルト値は |
sequence_length | 省略可能です。シーケンスの最大長を指定します。この長さを超える要素は切り捨てられます。 |
sequence_delim | 省略可能です。シーケンス要素の区切り文字を指定します。このパラメーターは文字列入力に対してのみ適用されます。 |
separator | 省略可能です。このパラメーターは、入力の複数値の区切り文字を指定し、 |
value_dimension | 省略可能です。出力の切り捨てに使用するディメンションを指定します。デフォルト値は 0 です。 |
stub_type | 省略可能です。 |
replace_fileとreplacementsの両方を設定できます。両方の置き換え辞書はマージされ、replacementsの方が優先度が高くなります。このオペレーターは特徴量ビニングをサポートしています。構成の詳細については、「Feature Binning (Discretization)」をご参照ください。
hash_bucket_size:特徴量変換結果をハッシュ化し、剰余演算を適用します。vocab_list:語彙リストに基づいて入力をビン分けし、各値をリスト内のインデックスにマッピングします。vocab_dict:各特徴量値をvocab_dict内の対応する値にマッピングすることで入力をビン分けします。vocab_file:vocab_listまたはvocab_dictをファイルから読み込みます。
このオペレーターは
array型の複数値入力をサポートしています。
例
次の表は、前述の構成例に対する出力を示しています。
user:query | 出力 |
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
概要
regex_replace_feature オペレーターは、正規表現に一致する部分文字列を指定された置換文字列で置き換えます。
複数のパターンを設定できます。オペレーターは、指定されたいずれかのパターンに一致する部分文字列を置き換えます。
構成
{
"feature_name": "query",
"feature_type": "regex_replace_feature",
"expression": ["user:query"],
"regex_pattern": "\\|",
"replacement": " ",
"default_value": ""
}パラメーター | 説明 |
feature_name | 必須です。出力特徴量の名前を指定します。 |
expression | 必須です。特徴量のソースフィールドを指定します。 |
default_value | 任意です。入力が null または空の場合に使用するデフォルト値を指定します。 |
regex_pattern | 必須です。置換対象の部分文字列を検索するために使用する正規表現を指定します。 |
replacement | 任意です。置換文字列を指定します。空文字列を指定した場合、一致した部分文字列は削除されます。 |
replace_all | 任意です。グローバル置換を行うかどうかを指定します。デフォルト値は |
icase | 任意です。正規表現マッチングを大文字と小文字を区別せずに実行するかどうかを指定します。デフォルト値は |
is_sequence | 任意です。これがシーケンス特徴量であるかどうかを指定します。デフォルト値は |
sequence_length | 任意です。シーケンスの最大長を指定します。この長さを超えるシーケンスは切り捨てられます。 |
sequence_delim | 任意です。シーケンス内の要素の区切り文字を指定します。このパラメーターは、入力が文字列の場合にのみ必要です。 |
separator | 任意です。このパラメーターは |
value_dimension | 任意です。結果を切り捨てる際の出力ディメンションを指定します。0(デフォルト値)を指定すると、切り捨ては無効になります。 |
stub_type | 任意です。 |
このオペレーターは特徴量ビニングをサポートしています。構成の詳細については、「特徴量ビニング (離散化)」ドキュメントをご参照ください。以下のパラメーターが利用可能です。
hash_bucket_size:特徴量の値をハッシュし、剰余演算を適用します。vocab_list:語彙リストに基づいて特徴量の値をビン分けし、リスト内のインデックスにマップします。vocab_dict:各特徴量の値をvocab_dict内の対応する値にマップします。vocab_file:vocab_listまたはvocab_dictをファイルから読み込みます。
多値の
array入力をサポートしています。
例
| 出力 |
alpha|beta|gamma | alpha beta gamma |
feature|generation|tool|useful | feature generation tool useful |
bool_mask_feature
概要
ブールマスクを使用してシーケンスから要素をフィルターします。tf.boolean_mask(tensor, mask) と同様の動作をします。
これは sequence feature の一種です。
構成
{
"feature_name": "mask_feature",
"feature_type": "bool_mask_feature",
"value_type": "float",
"expression": [
"user:click_items",
"item:is_valid"
],
"sequence_delim": ","
}パラメーター | 説明 |
feature_name | 必須。特徴量名。最終出力のプレフィックスとして使用されます。 |
expression | 必須。依存フィールドを指定する配列。最初の要素はフィルター対象の入力シーケンス、2 番目の要素はブールマスクです。 |
default_value | 任意。未指定の場合、数値型の |
value_type | 必須。出力のデータの型。 |
sequence_length | 任意。シーケンスの最大長。この長さを超えるシーケンスは切り捨てられます。 |
sequence_delim | 任意。シーケンス内の要素の区切り文字。文字列入力にはこのパラメーターが必要です。 |
separator | 任意。複数値入力の区切り文字。デフォルトは |
value_dimension | 任意。出力ディメンション。切り捨てに使用されます。デフォルトは |
normalizer | 任意。正規化方法。このパラメーターは数値特徴量にのみ適用されます。詳細については、「RawFeature」をご参照ください。 |
stub_type | 任意。 |
特徴量ビニングをサポートしています。構成の詳細については、「特徴量ビニング (離散化)」をご参照ください。
配列またはネストされた配列形式の複数値入力をサポートしています。
使用例
入力 | マスク | 出力 |
"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] |
式特徴量との併用
{
"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
概要
Python スタイルのスライス構文を使用して入力配列をスライスするか、特定のインデックスにある要素を取得します。
これは シーケンス特徴量 の一種です。
構成
{
"feature_name": "test_feature",
"feature_type": "slice_feature",
"value_type": "float",
"expression": [
"user:click_items"
],
"slice": "2:4"
}パラメーター | 必須 | 説明 |
feature_name | はい | 最終出力のプレフィックスとして使用される特徴量名です。 |
expression | はい | ソースフィールドの配列です。 |
slice | はい | インデックスで要素を取得するための単一の数値、または |
default_value | いいえ | 空の入力に対して使用する値です。指定しない場合、 |
value_type | はい | 出力タイプです。 |
sequence_length | いいえ | シーケンスの最大長です。これより長いシーケンスは切り捨てられます。 |
sequence_delim | いいえ | シーケンス要素間の区切り文字です。入力が |
separator | いいえ | 入力の複数値の区切り文字です。デフォルトは |
value_dimension | いいえ | 出力の切り捨てに使用するディメンションを指定します。デフォルトは |
normalizer | いいえ | 正規化方法です。数値特徴量にのみ適用されます。詳細については、RawFeature をご参照ください。 |
stub_type | いいえ | デフォルト: |
placeholder | いいえ | シーケンス特徴量において、空の位置やディメンションのパディングに使用される特殊な値です。浮動小数点数の場合は |
このオペレーターは特徴量ビニングをサポートしています。構成の詳細については、「特徴量ビニング (離散化)」をご参照ください。
このオペレーターは配列やネストされた配列を含む複数値入力をサポートしています。
例
sequence_delim="," および value_dimension=1 を設定した場合の入力と出力は次のとおりです。
入力 | slice | 出力 |
"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] |