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 | いいえ | `feature_name` をプレフィックスとして追加するかどうかを指定します。有効な値は次のとおりです:
|
value_type | いいえ | 出力特徴のデータ型です。デフォルト値は string です。 |
separator | いいえ | 複数値入力特徴のセパレーターです。デフォルト値は |
default_value | いいえ | 入力特徴が空の場合に使用するデフォルト値です。 |
weighted | いいえ | 入力が `key:value` 形式であるかどうかを指定します。このパラメーターを |
value_dimension | いいえ | このパラメーターは、特徴が複数の値を持つ場合に出力を切り捨てます。デフォルト値は 値が |
stub_type | いいえ | デフォルト値は false です。このパラメーターを true に設定すると、設定された特徴変換はパイプラインの中間結果としてのみ使用され、モデルには出力されません。 |
このオペレーターはビニングをサポートしています。詳細については、「特徴のビニング (離散化)」をご参照ください。
このオペレーターは、配列型の複数値入力をサポートしています。
例
以下の例では、アイテム側の特徴 `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 |
複数値の文字列 | 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 | はい | 特徴が依存するソースフィールドです。ソースは user、item、または context である必要があります。 |
normalizer | いいえ | 正規化メソッドです。詳細については、以下のセクションをご参照ください。 |
value_type | いいえ | 出力特徴のデータ型です。デフォルト値は float です。 |
separator | いいえ | 複数値入力特徴のセパレーターです。デフォルト値は「\u001D」です。単一の文字のみがサポートされます。 |
default_value | いいえ | 入力特徴が空の場合に使用するデフォルト値です。 |
value_dimension | いいえ | 出力フィールドのディメンションです。デフォルト値は 1 です。このパラメーターを使用して、オフラインタスクで出力を切り捨てることができます。値が 1 の場合、出力テーブルのスキーマ型は |
stub_type | いいえ | デフォルト値は false です。このパラメーターを true に設定すると、設定された特徴変換はパイプラインの中間結果としてのみ使用され、モデルには出力されません。 |
このオペレーターはビニングをサポートしています。詳細については、「特徴のビニング (離散化)」をご参照ください。
このオペレーターは、配列型の複数値入力をサポートしています。
例
記号 ^] は複数値のセパレーターを表します。これは 2 文字ではなく、ASCII コード "\x1D" の単一文字であることに注意してください。
型 | item:ctr の値 | 出力特徴 |
int64_t | 100 | 100 |
double | 100.1 | 100.1 |
複数値の int | 123^]456 | [123, 456] (入力フィールドは、設定されたディメンションと同じディメンションを持つ必要があります)。 |
Normalizer
`raw_feature` および `match_feature` オペレーターは、minmax、zscore、log10、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 型に変換可能でなければなりません。
設定
{
"feature_type" : "expr_feature",
"feature_name" : "ctr_sigmoid",
"expression" : "sigmoid(pv/(1+click))",
"variables": ["item:pv", "item:click"]
}pv = 2, click = 3 の場合、式特徴の値は 0.6224593312 です。
フィールド名 | 必須 | 説明 |
feature_name | はい | 特徴名です。 |
expression | はい | 式の内容を指定します。 |
variables | はい | 式で使用される変数で、入力フィールドです。ソースは user、item、または context である必要があります。 |
separator | いいえ | string 型の複数値入力フィールドのセパレーターです。デフォルト値は「\u001D」です。単一の文字のみがサポートされます。 |
default_value | いいえ | 入力特徴が空の場合に使用するデフォルト値です。 |
value_dimension | いいえ | 出力フィールドのディメンションです。デフォルト値は 0 です。これを使用して出力を切り捨てるか、パディングすることができます。値が 1 の場合、出力テーブルのスキーマ型は |
stub_type | いいえ | デフォルト値は false です。このパラメーターを true に設定すると、設定された特徴変換はパイプラインの中間結果としてのみ使用され、モデルには出力されません。 |
設定例
{
"feature_name": "expr_feat",
"feature_type": "expr_feature",
"expression": "a+b",
"variables": ["a", "b"],
"value_dimension": 3
}スカラーとベクトルの計算 (ブロードキャスト)
変数
a=1と変数b=[1, 2, 6]の場合、結果は[2, 3, 7]です。
ベクトル対ベクトルの
element-wise計算変数
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 の間の乱数を生成します
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 (2.71828...) を底とする対数
ln
1
e (2.71828...) を底とする対数
exp
1
e の x 乗
sqrt
1
値の平方根
sign
1
符号関数 (-1 if x<0; 1 if x>0)
abs
1
絶対値
rint
1
最も近い整数に丸める
round
1
最も近い整数に丸めます。常に 0 から遠い方に丸めます。
roundp
1
カスタム精度に丸めます。例: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
var.
全引数の最小値
max
var.
全引数の最大値
sum
var.
全引数の合計
avg
var.
全引数の平均値
注意:前述の組み込み関数は、バッチコンピューティングとブロードキャストをサポートしています。
組み込みベクトル演算関数
関数名
パラメーター数
説明
len
1
ベクトルの長さ
l2_norm
1
ベクトルの L2 正規化
squared_norm
1
ベクトルの二乗正規化
dot
2
2 つのベクトルの内積
euclid_dist
2
2 つのベクトル間のユークリッド距離
corr
2
2 つのベクトルのピアソン相関係数
std_dev
1
ベクトルの標準偏差、n で割る
pop_std_dev
1
ベクトルの母集団標準偏差、n-1 で割る
variance
1
ベクトルの標本分散、n で割る
pop_variance
1
ベクトルの母集団分散、n-1 で割る
reduce_min
1
ベクトルの最小値
reduce_max
1
ベクターの最大値の縮約
reduce_sum
1
ベクターの要素の合計
reduce_mean
1
ベクトルの平均
reduce_prod
1
ベクトルの積
注意:式に前述の組み込みベクトル演算関数が含まれている場合、ベクトル関数のパラメーターではない他の変数はスカラーでなければなりません。
組み込み二項演算子
オペレーター
説明
優先度
=
代入 *
0
||
論理和
1
&&
論理積
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 演算子
C++ スタイルの構文
組み込み定数
オペレーター
説明
優先度
_pi
唯一無二の円周率。
3.141592653589793238462643
_e
オイラー数。
2.718281828459045235360287
combo_feature
機能紹介
`combo_feature` オペレーターは、複数のフィールドまたは式の組み合わせ (デカルト積) を作成します。`id_feature` オペレーターは、クロス積に 1 つのフィールドのみが使用される `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 | いいえ | `feature_name` をプレフィックスとして追加するかどうかを指定します。有効な値は次のとおりです:
|
value_type | いいえ | 出力特徴のデータ型です。デフォルト値は string です。 |
separator | いいえ | 複数値入力特徴のセパレーターです。デフォルト値は「\u001D」です。単一の文字のみがサポートされます。 |
default_value | いいえ | 入力特徴が空の場合に使用するデフォルト値です。 |
value_dimension | いいえ | デフォルト値は 0 です。このパラメーターを使用して、オフラインタスクで出力を切り捨てることができます。値が 1 の場合、出力テーブルのスキーマ型は |
stub_type | いいえ | デフォルト値は false です。このパラメーターを true に設定すると、設定された特徴変換はパイプラインの中間結果としてのみ使用され、モデルには出力されません。 |
このオペレーターはビニングをサポートしています。詳細については、「特徴のビニング (離散化)」をご参照ください。
このオペレーターは、配列型の複数値入力をサポートしています。
例
^] 記号は複数値のセパレーターを表します。これは 2 文字ではなく、ASCII コード「\x1D」の単一文字であることに注意してください。
user:age_class の値 | item:item_id の値 | 出力特徴 |
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` オペレーターは、キーと値のペアのセットから必要な結果を照合して取得します。
`lookup_feature` オペレーターは、`map` と `key` の 2 つのフィールドに依存します。
mapは辞書または複数値の文字列 (MultiString) フィールドで、各文字列は「k1:v1」などの形式です。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 | いいえ | 出力特徴のデータ型です。デフォルト値は string です。 |
separator | いいえ | string 型の複数値 |
default_value | いいえ | 入力特徴が空の場合に使用するデフォルト値です。 |
need_prefix | いいえ | `feature_name` をプレフィックスとして追加するかどうかを指定します。有効な値は次のとおりです:
|
need_key | いいえ | キーをプレフィックスとして追加するかどうかを指定します。このパラメーターは、`value_type` が string に設定されている場合にのみ有効です。有効な値は次のとおりです:
|
normalizer | いいえ | 正規化メソッドです。このパラメーターは、raw_feature の同名のパラメーターと同じ意味を持ちます。 |
combiner | いいえ | 複数のキーによって取得された複数の値をマージする方法を指定します。有効な値:sum (デフォルト)、avg/mean、max、min。 |
need_discrete | いいえ | true:コンバイナを実行せず、複数の値を直接出力します。デフォルト値は false です。 |
value_dimension | いいえ | 有効な値は次のとおりです:
|
stub_type | いいえ | デフォルト値は false です。このパラメーターを true に設定すると、設定された特徴変換はパイプラインの中間結果としてのみ使用され、モデルには出力されません。 |
このオペレーターはビニングをサポートしています。詳細については、「特徴のビニング (離散化)」をご参照ください。
辞書はマップ型の入力をサポートし、キーは配列型の入力をサポートします。
例
上記の設定について、特定のドキュメントに対して次のように仮定します:
item_attr : "k1:v1^]k2:v2^]k3:v3"記号 ^] は複数値のセパレーターを表します。これは 2 文字ではなく、ASCII コード "\x1D" の単一文字です。emacs では C-q C-5 を押すことで、vim では C-v C-5 を押すことでこの文字を入力できます。ここで、item_attr は複数値の文字列です。
マップが複数のキーと値のペアを表す場合、それは単一の文字列ではなく、複数値の文字列です。
item_value : "k2"特徴変換の結果は item_match_item_k2_v2 です。
need_prefix == true
feature_name: fg
map: {"k1:123", "k2:234", "k3:3"}
key: {"k1"}
結果: feature={"fg_123"}need_prefix == false
map: {"k1:123", "k2:234", "k3:3"}
key: {"k1"}
結果: feature={123}クエリ結果のマージ
複数のキーがある場合、コンバイナを設定して複数の取得値を結合できます。可能な設定は sum、mean、max、min です。
コンバイナを使用するには、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:ネストされた辞書 (nested_dict) で、辞書の辞書です。
user フィールドは、2 段階のマップを記述するために文字列を使用します。
|文字は、第 1 レベルのマップの項目間のセパレーターです。^文字は、第 1 レベルのマップのキーと値の間のセパレーターです。,文字は、第 2 レベルのマップの項目間のセパレーターです。:文字は、第 2 レベルのマップのキーと値の間のセパレーターです。
category:プライマリキーで、第 1 レベルのマップで検索するためのキーです。
ALLは、このレベルのすべてのキーがマッチングできることを示すワイルドカード文字です。item:セカンダリキーで、第 2 レベルのマップで検索するためのキーです。
ALLは、このレベルのすべてのキーがマッチングできることを示すワイルドカード文字です。need_discrete
true:モデルは `match_feature` によって出力された特徴名を使用し、特徴値を無視します。デフォルト値は false です。
false:モデルは `match_feature` によって出力された特徴値を使用し、特徴名を無視します。
match_type
hit:マッチした特徴を出力します。オペレーターは category の値を使用して第 1 レベルのマップを検索し、次に item の値を使用して第 2 レベルのマップを検索して結果を取得します。2 段階ではなく 1 段階のマッチングのみが必要な場合は、マップの第 1 レベルのキーを ALL に設定し、特徴生成設定の category パラメーターも「ALL」に設定できます。
multihit:category および item フィールドを MATCH_WILDCARD オプションである「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
オプション。string 型の複数値
keyフィールドのセパレーターです。デフォルト値は「\u001D」です。単一の文字のみがサポートされます。default_value
オプション。入力特徴が空の場合に使用するデフォルト値です。
value_dimension
オプション。デフォルト値は 0 です。このパラメーターを使用して、オフラインタスクで出力を切り捨てることができます。値が 1 の場合、出力テーブルのスキーマ型は
value_typeです。それ以外の場合、スキーマ型はarray<value_type>です。stub_type
オプション。デフォルト値は false です。このパラメーターを true に設定すると、設定された特徴変換はパイプラインの中間結果としてのみ使用され、モデルには出力されません。
例
ユーザー側特徴の例 (ネストされた辞書)
たとえば、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 の場合、オペレーターはまず auction_root_category の値 50006842 を使用して user_brand_tags_hit をクエリし、16788816:0.1,10122:0.2,29889:0.3,30068:19 を返します。次に、30068 を使用してこの結果をクエリし、値 19 を返します。最終的な結果は brand_hit_50006842_30068_19 です。
need_discrete=false の場合、結果は 19.0 です。
1 段階のマッチングのみを使用する場合は、上記の設定で 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` オペレーターは、マップや配列などの複雑な入力タイプをサポートしているため、より優れたパフォーマンスを提供します。
overlap_feature
機能紹介
文字列と単語のマッチング情報を含む特徴を出力します。たとえば、検索シナリオでは、検索クエリが商品タイトルに含まれているかどうかを計算します。
メソッド | 説明 |
query_common_ratio | クエリとタイトルの間の共通の用語の比率を、クエリ内の総用語数に対して計算します。 値の範囲は [0, 1] です。 |
title_common_ratio | クエリとタイトルの間の共通の用語の比率を、タイトル内の総用語数に対して計算します。 値の範囲は [0, 1] です。 |
is_contain | クエリ全体がタイトルに含まれているかどうかを、順序を保持して計算します。有効な値は次のとおりです:
|
is_equal | クエリがタイトルと同一であるかどうかを計算します。有効な値は次のとおりです:
|
index_of | タイトル内でクエリ全体が最初に現れる位置を計算します。見つからない場合は -1.0 を返します。 |
proximity_min_cover | タイトル内のクエリ用語の近接性を計算します。 値の範囲は [0, length(title)] です。値 0 は、マッチできない用語があることを示します。 |
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」で説明されています。
タイトル (ドキュメント) の用語シーケンスが次のようであると仮定します:t1,t2,t1,t3,t5,t4,t2,t3,t4
MinCover は、ドキュメント内で各クエリ用語を少なくとも 1 回カバーする最短のドキュメントセグメントの長さとして定義されます。
MinDist (最小ペア距離):すべてのペアワイズ最小距離の最小値を計算します。たとえば、Q=t1,t2,t3 の場合、MinDist=min(1,2,3)=1 です。
MaxDist (最大ペア距離):MinDist の逆です。最大値を見つけます。たとえば、Q=t1,t2,t3 の場合、MaxDist=max(1,2,3)=3 です。
AveDist (平均ペア距離):すべてのペアワイズ最小距離の平均を計算します。たとえば、Q=t1,t2,t3 の場合、AveDist=(1+2+3)/3=2 です。
すべての集約オペレーター (MinDist、MaxDist、AveDist) は、マッチングする検索クエリ用語間のペアワイズ距離に基づいて定義されることに注意してください。ドキュメントが 1 つの検索クエリ用語にしかマッチしない場合、MinDist、AveDist、MaxDist はすべてドキュメントの長さとして定義されます。
設定
{
"feature_type" : "overlap_feature",
"feature_name" : "is_contain",
"query" : "user:attr1",
"title" : "item:attr2",
"method" : "is_contain",
"separator" : " ",
"normalizer" : ""
}フィールド名 | 必須 | 説明 |
feature_type | はい | 特徴のタイプです。 |
feature_name | はい | 出力特徴のプレフィックスです。 |
query | はい | クエリが依存するテーブルです。attr1 は複数値の文字列です。 |
title | はい | タイトルが依存するテーブルです。attr2 は複数値の文字列です。 |
method | はい | 有効な値には、query_common_ratio、title_common_ratio、is_contain、is_equal が含まれます。 |
separator | - | 入力のセパレーター文字です。指定しない場合、デフォルトは |
normalizer | いいえ | 正規化メソッドです。このパラメーターは、raw_feature の同名のパラメーターと同じ意味を持ちます。 |
stub_type | いいえ | デフォルト値は false です。このパラメーターを true に設定すると、設定された特徴変換はパイプラインの中間結果としてのみ使用され、モデルには出力されません。 |
重複特徴の出力は float 型です。
例 1
クエリは「high,high2,fiberglass,abc」で、タイトルは「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、タイトルは the cat sat on the mat です。
クエリ | 特徴 |
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 件のアイテム ID を格納します。モデル推論サービスはこのフィールドをキーとして使用して
サイド情報をクエリします。オンライン推論サービス (EAS Processor) のリクエストパラメーターには、キーが
sequence_pkの値である特徴を含める必要があります。例:
click_50_seq: 5410233389955966;1832586(セパレーターはsequence_delimに設定された値です)。上記の例では、
click_50_seq特徴の値は 5410233389955966;1832586 です。
シーケンスのアイテム側サブ特徴は、リクエストパラメーターでモデル推論サービスに渡す必要はありません。
モデル推論サービスは、このフィールドをキーとして使用して、アイテムの
サイド情報をクエリします。たとえば、この設定では、シーケンス特徴内の
item_id, price特徴はリクエストで推論サービスに渡す必要はありません。代わりに、Processor のアイテムキャッシュから読み取られ、Processor 内の特徴生成 (FG) SDK によって連結され、オフライン学習中に使用された形式と一致することが保証されます。
シーケンスのユーザー側サブ特徴は、リクエストパラメーターでモデル推論サービスに渡す必要があります。
特徴名は
${sequence_name}__${input_name}です (例:click_50_seq__ts)。${input_name}は通常、expression設定項目を使用して設定されますが、設定はサブ特徴のタイプによって異なる場合があり、${input_name}には入力ドメインプレフィックス (item:またはuser:) は含まれません。
features:シーケンスの
サイド情報で、アイテムの静的プロパティ値と行動時間情報が含まれます。sequence_fields:入力シーケンスのフィールド名を指定します。値は
stringまたは[string]配列です。特徴オペレーターに 1 つの入力フィールドしかない場合、そのフィールドの内容はシーケンスでなければなりません。この場合、
sequence_fieldsを設定する必要はありません。特徴オペレーターに複数の入力フィールドがある場合、
sequence_fieldsを設定しないと、すべてのアイテム側特徴 (item:XXX) がシーケンス入力フィールドであると見なされます。
オフラインタスクで使用される FG 入力テーブルには、すべてのサブ特徴に対応する列が含まれている必要があります。
列がシーケンスである場合 (
sequence_fieldsルールに基づく)、名前を${sequence_name}__${input_name}とします。たとえば、この設定では、オフラインテーブルには
click_50_seq__item_id、click_50_seq__price、click_50_seq__ts、click_50_seq__clk_time_seqの 4 つの列が必要です。パフォーマンス向上のため、オフラインテーブルの列タイプは配列にすることを推奨します。
sequence_delimを要素セパレーターとするstring型もサポートされています。
列がシーケンスでない場合、プレフィックスなしで
${input_name}と名前を付けます。たとえば、この設定では、オフラインテーブルには 1 つの非シーケンス列
${cur_time}が必要です。
グローバルに
input_aliasを設定して、長い列名に短いエイリアスを設定できます (以下の例を参照)。
このオペレーターはビニングをサポートしています。詳細については、「特徴のビニング (離散化)」をご参照ください。ビニングが設定されている場合、出力要素の型は
int64であり、形状は以下のvalue_dimension設定によって決まります。value_dimension (
value_dimと省略可能):シーケンス内の各要素のディメンションです。sequence_raw_featureの場合、これを1に設定すると、出力型はarray<float>になります。他の値に設定すると、出力型は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
sequence_raw_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) は sideinfo をクエリしません。ユーザーは完全な入力を提供する必要があります。
タイル化されたシーケンス特徴の入力フィールド名は、設定どおりのままであり、
${sequence_name}__のプレフィックスは付きません。
オンライン特徴生成
行動のサイド情報を取得するには 2 つの方法があります。1 つは、EasyRec Processor のアイテムキャッシュからサイド情報を取得する方法です。sequence_pk で設定されたフィールドをプライマリキーとして使用し、アイテムキャッシュからアイテムのプロパティ情報を見つけます。もう 1 つの方法は、ユーザーがリクエストに対応するフィールド値を提供する方法です。たとえば、上記の設定の「ts」フィールドは (request_time - event_time) を意味します。この値はリクエスト時間によって変化するため、リクエストから取得する必要があります:
user_features {
key: "click_50_seq"
value {
string_feature: "9008721;34926279;22487529;73379;840804;911247;31999202;7421440;4911004;40866551"
}
}
user_features {
key: "click__ts"
value {
string_feature: "23;113;401363;401369;401375;401405;486678;486803;486922;486969"
}
}tokenize_feature
機能紹介
`tokenize_feature` オペレーターは、入力文字列をトークン化し、トークン化された文字列またはトークン ID を返します。tokenize-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 | はい | 特徴が依存するソースフィールドです。ソースは user、item、または context である必要があります。 |
vocab_file | はい | 語彙ファイルへのパスです。 |
default_value | - | 入力文字列のデフォルト値です。 |
tokenizer_type | - | オプション。トークナイザーのタイプです。これを `sentencepiece` に設定するか、未設定のままにすると、vocab_file の JSON コンテンツによって使用する Hugging Face トークナイザーが決まります。 |
output_type | - |
|
output_delim | - | 出力 |
stub_type | いいえ | オプション。デフォルト値は false です。このパラメーターを true に設定すると、設定された特徴変換はパイプラインの中間結果としてのみ使用され、モデルには出力されません。 |
例
output_type=word_id の場合、オペレーターは文字列を入力として受け取り、トークン 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
機能紹介
テキスト正規化を実行します。機能には、大文字/小文字変換、繁体字から簡体字への変換、全角から半角への文字変換、特殊文字フィルタリング、GBK/UTF8 エンコーディング変換、中国語の文字分割が含まれます。
設定
{
"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 | はい | 特徴が依存するソースフィールドです。ソースは user、item、または context である必要があります。 |
stop_char_file | いいえ | 削除する特殊文字を格納するファイルへのパスです。このファイルは GBK エンコーディングを使用する必要があります。設定されていない場合、システムの組み込み特殊文字リストが使用されます。 |
max_length | - | 入力テキストの長さがこの値を超えた場合、テキスト正規化は実行されず、入力値がそのまま出力されます。 |
remove_space | - | スペースを削除するかどうかを指定します。 |
is_gbk_input | いいえ | 入力が GBK エンコードされているかどうかを指定します。false は、入力が UTF-8 エンコードされていることを示します。 |
is_gbk_output | いいえ | 出力に GBK エンコーディングを使用するかどうかを指定します。false は、出力が UTF-8 エンコーディングを使用することを示します。 |
parameter | - | テキスト正規化オプションです。 |
default_value | いいえ | 入力特徴が空の場合に使用するデフォルト値です。 |
注意:
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 cheat sheet", "The Cat/"]
outputs=["regular expression code generator", "html filtering tool", "regular expression syntax cheat sheet", "the cat/"]
bm25_feature
機能紹介
BM25 (Best Matching) アルゴリズムは、情報検索の分野で主流のテキストマッチングアルゴリズムであり、通常、検索関連性スコアリングに使用されます。クエリを形態素
中国語のテキストの場合、クエリを形態素解析としてトークン化し、各単語 (用語) を形態素
BM25 アルゴリズムの一般的な数式は次のとおりです:
ここで、
用語の重要性
用語のドキュメントへの関連性の重みを決定する方法は複数あります。一般的に使用される方法は、逆文書頻度 (IDF) です。IDF の数式は次のとおりです:
ここで、
IDF の定義から、特定のドキュメントコレクションに対して、
用語の関連性
用語
この数式において、
まとめると、BM25 アルゴリズムの関連度スコアの数式は次のとおりです。
BM25 数式は、トークン化、term の重み付け、および term とドキュメントの関連性を決定するためのさまざまなメソッドを使用することで、異なる検索関連度スコア計算メソッドを導出できることを示しています。これにより、アルゴリズム設計に大きな柔軟性がもたらされます。
設定方法
{
"feature_type": "bm25_feature",
"feature_name": "query_doc_relevance",
"query": "user:query",
"document": "item:title",
"term_doc_freq_file": "term_doc_freq.txt",
"avg_doc_length": 100.0,
"k1": 1.2,
"b": 0.75,
"separator": "\u001D",
"default_value": ""
}フィールド名 | 必須 | 説明 |
feature_name | はい | 最終的な出力特徴量の名前。 |
query | はい | 特徴量が使用するクエリフィールドのソース。 |
document | はい | 特徴量が使用するドキュメントフィールドのソース。 |
term_doc_freq_file | いいえ | タームと各タームを含むドキュメント数を含むファイルへのパス。各行には 1 つのレコードが含まれ、タームとそのドキュメント数は空白文字で区切られます。 |
term_doc_freq_dict | いいえ | コンテンツは |
k1 | いいえ | BM25 アルゴリズムのパラメーター。デフォルト値は 1.2 です。一般的な値には 1.2 と 2.0 があります。 |
b | いいえ | BM25 アルゴリズムのパラメーター。デフォルト値は 0.75 です。 |
separator | いいえ | 複数値の入力特徴量の区切り文字。デフォルトは |
normalizer | いいえ | 正規化メソッド。詳細については、raw_feature の構成をご参照ください。 |
default_value | いいえ | 入力特徴量が空の場合に使用するデフォルト値。 |
stub_type | いいえ | デフォルト値は false です。true に設定した場合、構成された特徴量変換はパイプラインの中間結果としてのみ使用され、モデルへの最終出力には含まれません。 |
term_doc_freq_fileまたはterm_doc_freq_dictのいずれかを使用します。前者の優先度が高く、両方が設定されている場合はシステムは前者を使用します。オンラインサービスでこの機能を使用するには、
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」です。セパレーターは 1 文字である必要があります。 |
kv_delimiter | いいえ | 入力特徴内のキーと値のペア間のデリミタを指定します。デフォルト値は「:」です。デリミタは 1 文字である必要があります。 |
normalizer | いいえ | 正規化メソッド。詳細については、raw_feature の設定をご参照ください。 |
default_value | いいえ | 入力特徴が空の場合に使用するデフォルト値。デフォルト値は 0 です。 |
stub_type | いいえ | デフォルト値は `false` です。このパラメーターが `true` に設定されている場合、設定された特徴変換はパイプラインの中間結果としてのみ使用され、モデルには出力されません。 |
この特徴は、配列やマップなどの複雑な入力タイプをサポートしています。可能な場合は、複雑なタイプを使用することを推奨します。
入力に
value部分がない場合、デフォルトのvalueは 1.0 です。この動作を利用して、2 つのセットの積集合のサイズを計算します。default_valueが設定されていない場合、デフォルト値は 0 に設定されます。
例
query | document | output |
"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 は文字列置換機能です。一致したすべての部分文字列を、指定された部分文字列に置き換えます。
重複するマッチは貪欲法で置き換えられます。
設定方法
{
"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 | 任意。入力特徴量が Empty の場合に使用するデフォルト値です。 |
replacements | 任意。 |
replace_file | オプションです。 |
is_sequence | 任意。特徴量がシーケンス特徴量であるかどうかを示します。デフォルト値は |
sequence_length | 任意。シーケンスの最大長です。この長さを超えるシーケンスは切り捨てられます。 |
sequence_delim | 任意。シーケンス要素間の区切り文字です。入力が文字列の場合にのみ設定してください。 |
separator | 任意。このパラメーターは |
value_dimension | 任意。デフォルト値は 0 です。オフラインタスクで出力を切り捨てるために使用できます。 |
stub_type | 任意。デフォルト値は false です。true に設定すると、設定された特徴量変換はパイプラインの中間結果としてのみ使用され、モデルには出力されません。 |
replace_fileとreplacementsの両方を設定できます。置き換え辞書はマージされます。replacements辞書が優先されます。ビニング操作がサポートされています。設定方法については、「特徴量のビニング (離散化)」操作のドキュメントをご参照ください。
hash_bucket_size:特徴量変換の結果をハッシュ化し、剰余演算を実行します。
vocab_list:ボキャブラリーリストに基づいて入力をビニングし、入力をボキャブラリー内のインデックスにマップします。
vocab_dict:ビニング結果は、特徴量値に対応する vocab_dict 辞書の値です。
vocab_file:ファイルから vocab_list または vocab_dict を読み取ります。
配列型の複数値の入力がサポートされています。
例
上記の設定の実行結果は次のとおりです。
user:query の値 | 出力特徴量 |
the quick brown fox jumped over the lazy dogs | pack my box with five dozen liquor jugs |
aaa | xX |
Feature|Generation|Tool|Very useful | Feature Generation Tool Very useful |
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 | 任意。入力特徴量が空の場合に使用されるデフォルト値です。 |
regex_pattern | 必須。正規表現です。一致したテキストセグメントが置き換えられます。 |
replacement | 任意。置換後のテキストです。このパラメーターが空の場合、一致したテキストセグメントは削除されます。 |
replace_all | 任意。グローバル置換を実行するかどうかを指定します。デフォルト値は |
icase | 任意。正規表現のマッチングで大文字と小文字を区別するかどうかを指定します。デフォルト値は |
is_sequence | 任意。特徴量がシーケンス特徴量であるかどうかをマークします。デフォルト値は |
sequence_length | 任意。シーケンスの最大長です。シーケンスがこの値を超えた場合、切り捨てられます。 |
sequence_delim | 任意。シーケンス要素間の区切り文字です。入力が文字列の場合にのみ、このパラメーターを設定します。 |
separator | 任意。このパラメーターは |
value_dimension | 任意。デフォルト値は 0 です。オフラインタスクでこのパラメーターを使用して出力を切り捨てることができます。 |
stub_type | 任意。デフォルト値は false です。このパラメーターを true に設定すると、設定された特徴量変換はパイプラインの中間結果としてのみ使用され、モデルへの最終出力には含まれません。 |
この特徴量はビニング操作をサポートしています。設定の詳細については、「特徴量のビニング (離散化)」をご参照ください。
hash_bucket_size:特徴量変換の結果に対してハッシュ演算と剰余演算を実行します。
vocab_list:ボキャブラリーリストに基づいてデータをビニングし、入力をリスト内のインデックスにマッピングします。
vocab_dict:ビニング結果は、特徴量値に対応する vocab_dict 辞書の値になります。
vocab_file:ファイルから vocab_list または vocab_dict を読み取ります。
この特徴量は、配列型の複数値の入力をサポートしています。
例
user:query の値 | 出力特徴量 |
China|People|Republic | People's Republic of China |
Feature|Generation|Tool|Is great | Feature Generation Tool Is great |
bool_mask_feature (クリックして詳細を展開)
機能紹介
ブール値を使用して要素をフィルターします。これは tf.boolean_mask(tensor, mask) に似ています。
これは シーケンス特徴 です。
構成
{
"feature_name": "mask_feature",
"feature_type": "bool_mask_feature",
"value_type": "float",
"expression": [
"user:click_items",
"item:is_valid"
],
"sequence_delim": ","
}フィールド名 | 意味 |
feature_name | 必須。`feature_name` は、最終的な出力特徴のプレフィックスです。 |
expression | 必須。リスト形式です。`expression` は特徴のソースフィールドを記述します。2 番目のフィールドはマスクです。 |
default_value | 任意。入力特徴量が空の場合に使用するデフォルト値です。このパラメーターが設定されていない場合、 |
value_type | 必須。出力特徴のデータの型です。 |
sequence_length | 任意。シーケンスの最大長です。シーケンスがこの長さを超える場合、切り捨てられます。 |
sequence_delim | 任意。シーケンス要素間のセパレーターです。このパラメーターは、入力が文字列の場合にのみ必須です。 |
separator | 任意。入力用の複数値のセパレーターです。デフォルト値は `\u001D` です。セパレーターは単一の文字である必要があります。 |
value_dimension | 任意。デフォルト値は 0 です。このパラメーターは、オフラインタスクで出力を切り捨てるために使用されます。 |
normalizer | 任意。正規化メソッドです。このパラメーターは数値特徴にのみ適用されます。詳細については、「RawFeature」をご参照ください。 |
stub_type | 任意。デフォルト値は false です。true に設定した場合、特徴変換はパイプラインの中間結果としてのみ使用されます。モデルへの最終出力には含まれません。 |
ビニング操作をサポートしています。構成の詳細については、「特徴のビニング (離散化)」をご参照ください。
配列型およびネストされた配列型で表現される複数値入力をサポートしています。
例
入力 | マスク | 出力 |
"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 風の構文を使用して入力配列をスライスするか、特定のインデックスから要素を取得します。
これは sequence feature の一種です。
設定
{
"feature_name": "test_feature",
"feature_type": "slice_feature",
"value_type": "float",
"expression": [
"user:click_items"
],
"slice": "2:4"
}フィールド名 | 説明 |
feature_name | 必須。`feature_name` は、最終的な出力特徴のプレフィックスとして使用されます。 |
expression | 必須。リスト形式。この式は、特徴が依存するソースフィールドを記述します。2 番目のフィールドはマスクを表します。 |
default_value | オプション。入力フィーチャーが空の場合に使用するデフォルト値です。指定されていない場合、 |
value_type | 必須。出力特徴の型を指定します。 |
sequence_length | シーケンスの最大長。長さがこの値を超えた場合、シーケンスは切り捨てられます。 |
sequence_delim | シーケンス要素間のセパレーター。入力が文字列の場合にのみ、このパラメーターを設定します。 |
separator | 任意。複数値入力のセパレーター。デフォルトは「\u001D」です。1 文字のみ使用できます。 |
value_dimension | 任意。デフォルト値は 0 です。このパラメーターは、オフラインタスクで出力を切り捨てるために使用できます。 |
normalizer | 任意。正規化メソッド。これは数値特徴に対してのみ有効です。詳細については、RawFeature をご参照ください。 |
stub_type | 任意。デフォルト値は false です。true に設定した場合、設定された特徴変換はパイプラインの中間結果としてのみ使用され、モデルへの最終出力には含まれません。 |
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] |