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 | 是 | 最終輸出的feature的首碼。 |
expression | 是 | 描述該feature所依賴的欄位來源。 |
need_prefix | 否 | 是否拼接feature_name作為首碼。取值如下:
|
value_type | 否 | 指定輸出特徵的類型,預設為string。 |
separator | 否 | 指定輸入特徵的多值分隔字元,預設為 |
default_value | 否 | 輸入特徵為空白時,用預設值代替。 |
weighted | 否 | 標記輸入是否為 key:value 的格式; 設定為 |
value_dimension | 否 | 特徵有多個值時,用來截斷輸出;預設值為 值為 |
stub_type | 否 | 預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)。 |
支援分箱操作,配置方法請參見特徵分箱(離散化)。
支援array類型的多值輸入。
樣本
下面以item側的特徵is_main作為案例來說明在不同配置下特徵的輸入和輸出:
類型 | item:is_main的取值 | 輸出的feature |
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 | 是 | 描述該feature所依賴的欄位來源(必須是user、item、context中的一種)。 |
normalizer | 否 | 歸一化方法,詳見後文。 |
value_type | 否 | 指定輸出特徵的類型,預設為float。 |
separator | 否 | 指定輸入特徵的多值分隔字元,預設為 "\u001D",只能是單個符號。 |
default_value | 否 | 輸入特徵為空白時,用預設值代替。 |
value_dimension | 否 | 預設值為1,表示輸出的欄位的維度,可以在離線任務中用來截斷輸出;值為1時輸出表的schema類型為 |
stub_type | 否 | 預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)。 |
支援分箱操作,配置方法請參見特徵分箱(離散化)。
支援array類型的多值輸入。
樣本
^]表示多值分隔字元,注意這是一個符號,其ASCII編碼是"\x1D",而不是兩個符號。
類型 | item:ctr的取值 | 輸出的feature |
int64_t | 100 | 100 |
double | 100.1 | 100.1 |
多值int | 123^]456 | [123, 456] (輸入欄位必須與配置的dimension維度一致)。 |
Normalizer
raw_feature和match_feature支援normalizer,共四種,minmax、zscore、log10、expression配置和計算方法如下:
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 | 是 | expression描述運算式本身。 |
variables | 是 | 指定expression中使用的變數,即輸入欄位, 來源必須是user、item、context中的一種。 |
separator | 否 | 指定string類型的輸入欄位的多值分隔字元,預設為 "\u001D",只能是單個符號 |
default_value | 否 | 輸入特徵為空白時,用預設值代替。 |
value_dimension | 否 | 預設值為0,表示輸出的欄位的維度,可以用來截斷或padding輸出;值為1時輸出表的schema類型為 |
stub_type | 否 | 預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)。 |
配置樣本
{
"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
}
]
}
]
}運算式
內建函數(scalar)
函數名
參數數量
解釋
rnd
0
Generate a random number between 0 and 1
sin
1
sine function
cos
1
cosine function
tan
1
tangens function
asin
1
arcus sine function
acos
1
arcus cosine function
atan
1
arcus tangens function
sinh
1
hyperbolic sine function
cosh
1
hyperbolic cosine
tanh
1
hyperbolic tangens function
asinh
1
hyperbolic arcus sine function
acosh
1
hyperbolic arcus tangens function
atanh
1
hyperbolic arcur tangens function
log2
1
logarithm to the base 2
log10
1
logarithm to the base 10
log
1
logarithm to base e (2.71828...)
ln
1
logarithm to base e (2.71828...)
exp
1
e raised to the power of x
sqrt
1
square root of a value
sign
1
sign function -1 if x<0; 1 if x>0
abs
1
absolute value
rint
1
round to nearest integer
round
1
四捨五入,總是使用"遠離零"的舍入方式(round half away from zero)
roundp
1
自訂精度取整函數, e.g. roundp(3.14159,2)=3.14
mod
2
取餘數
floor
1
向下取整
ceil
1
向上取整
trunc
1
截斷取整(直接去掉小數部分)
sigmoid
1
sigmoid function
sphere_dist
4
sphere distance between two gps points, args(lng1, lat1, lng2, lat2)
haversine
4
haversine distance between two gps points, args(lng1, lat1, lng2, lat2)
min
var.
min of all arguments
max
var.
max of all arguments
sum
var.
sum of all arguments
avg
var.
mean value of all arguments
備忘:上述內建函數支援批次運算和廣播機制
內建向量運算函數
函數名
參數數量
解釋
len
1
the length of a vector
l2_norm
1
l2 normalize of a vector
squared_norm
1
squared normalize of a vector
dot
2
dot product of two vectors
euclid_dist
2
euclidean distance between two vectors
corr
2
Pearson Correlation Coefficient of two vectors
std_dev
1
standard deviation of a vector, divide n
pop_std_dev
1
population standard deviation of a vector, divide n-1
variance
1
sample variance of a vector, divide n
pop_variance
1
population variance of a vector, divide n-1
reduce_min
1
reduce min of a vector
reduce_max
1
reduce max of a vector
reduce_sum
1
reduce sum of a vector
reduce_mean
1
reduce mean of a vector
reduce_prod
1
reduce product of a vector
備忘:當運算式包含上述內建向量運算函數時,非向量函數參數的其他變數只能是單實值型別(scalar)。
內建二元操作符
操作符
描述
優先順序
=
assignement *
0
||
logical or
1
&&
logical and
2
|
bitwise or
3
&
bitwise and
4
<=
less or equal
5
>=
greater or equal
5
!=
not equal
5
==
equal
5
>
greater than
5
<
less than
5
+
addition
6
-
subtraction
6
*
multiplication
7
/
division
7
%
modulo
7
^
raise x to the power of y
8
The assignment operator is special since it changes one of its arguments and can only by applied to variables.
內建三元操作符
支援 if-else 文法
It uses lazy evaluation in order to make sure only the necessary branch of the expression is evaluated.
操作符
描述
優先順序
?:
if then else operator
C++ style syntax
內建常量
操作符
描述
優先順序
_pi
The one and only pi.
3.141592653589793238462643
_e
Euler's number.
2.718281828459045235360287
combo_feature(單擊展開查看詳情)
功能介紹
combo_feature是多個欄位(或運算式)的組合(即笛卡爾積),id_feature可以看成是一種特殊的combo_feature,即參與交叉欄位只有一個的combo_feature。一般來講,參與交叉的各個欄位來自不同的表(比如user特徵和item特徵進行交叉)。
配置方法
{
"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 | 是 | 最終輸出的feature的首碼。 |
expression | 是 | 清單類型,expression描述該feature所依賴的欄位來源。 |
need_prefix | 否 | 是否拼接feature_name作為首碼。取值如下:
|
value_type | 否 | 指定輸出特徵的類型,預設為string。 |
separator | 否 | 指定輸入特徵的多值分隔字元,預設為"\u001D",只能是單個符號。 |
default_value | 否 | 輸入特徵為空白時,用預設值代替。 |
value_dimension | 否 | 預設值為0,可以在離線任務中用來截斷輸出;值為1時輸出表的schema類型為 |
stub_type | 否 | 預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)。 |
支援分箱操作,配置方法請參見特徵分箱(離散化)。
支援array類型的多值輸入。
樣本
^]表示多值分隔字元,注意這是一個符號,其ASCII編碼是"\x1D",而不是兩個符號
user:age_class的取值 | item:item_id的取值 | 輸出的feature |
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] |
輸出的feature個數等於:
|F1| * |F2| * ... * |Fn|其中Fn指依賴的第n個欄位的值的個數。
lookup_feature(單擊展開查看詳情)
功能介紹
lookup_feature和match_feature類似,是從一組kv中匹配到自己需要的結果。
lookup_feature依賴map和key兩個欄位:
map是一個字典類型;或者是多值string(MultiString)類型的欄位,其中每一個string的樣子如"k1:v1"。key可以是一個任意類型的欄位。有多個key時推薦使用array類型的輸入;產生特徵時,先是取出key的值,將其轉換成map的索引值類型,然後在map欄位所持有的kv對中進行匹配,擷取最終的特徵。
配置方法
{
"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 | 是 | 最終輸出的feature的首碼。 |
map | 是 | 字典的內容,一組key-value對。 |
key | 是 | 查詢字典的key。 |
value_type | 否 | 指定輸出特徵的類型,預設為string。 |
separator | 否 | 指定string類型的 |
default_value | 否 | 輸入特徵為空白時,用預設值代替。 |
need_prefix | 否 | 是否拼接feature_name作為首碼。取值如下:
|
need_key | 否 | 是否拼接key作為首碼,只在value_type為string時生效。取值如下:
|
normalizer | 否 | 歸一化方法,與raw_feature的同名配置含義相同。 |
combiner | 否 | 指定由多個key查詢到的多個value的合并方式,可選:sum(預設)、avg/mean、max、min。 |
need_discrete | 否 | true表示不執行combiner,直接輸出多個值,預設為false。 |
value_dimension | 否 | 取值如下:
|
stub_type | 否 | 預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)。 |
支援分箱操作,配置方法請參見特徵分箱(離散化)。
字典支援map類型的輸入,key支援array類型的輸入。
樣本
對於上面的配置,假設對於某個 doc:
item_attr : "k1:v1^]k2:v2^]k3:v3"^]表示多值分隔字元,這是一個符號,其ASCII編碼是"\x1D",而不是兩個符號。該字元在emacs中的輸入方式是C-q C-5,在vim中的輸入方式是C-v C-5。這裡item_attr是個多值string。
當map用來表徵多個kv對時,是個多值string,而不是string。
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}合并查詢結果
如果存在多個key時,可以通過配置combiner來組合多個查到的值。可能的配置有sum、mean、max、min。
如果要使用combiner的話需要將need_discrete設定為false,這種情況下value必須是數值型,或者是能夠轉換為數值的字串。
match_feature(單擊展開查看詳情)
功能介紹
match_feature一般用來做特徵之間的匹配關係,本質是一個兩層map的匹配。
配置方法
設定檔使用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),即dict of dict。
user欄位使用string的方式描述了一個兩層map。
|為第一層map的item之間的分隔字元,^為第一層map的key與value之間的分隔字元。,為第二層map的item之間的分隔字元,:第二層map的key與value之間的分隔字元。
category:primary key,即查詢第一層map的key值
ALL為萬用字元,表示這一層所有的key值都能夠匹配上。item:secondary key,即查詢第二層map的key值
ALL為萬用字元,表示這一層所有的key值都能夠匹配上。need_discrete
true:模型使用match_feature輸出的特徵名,忽略特徵值。預設為false。
false:模型取match_feature輸出的特徵值,而忽略特徵名。
match_type
hit:輸出命中的feature;用category的值在第一層map中尋找,然後使用item的值在第二層map中尋找,最終得到一個結果。如果不需要使用兩層匹配,只需要一層匹配,則可以在map的第一層key中填入ALL,然後在fg配置的category一項中也填成"ALL"即可。
multihit:允許category和item欄位的值為MATCH_WILDCARD選項,即"ALL",可以匹配出多個值。
normalizer
可選項,歸一化方法,與raw_feature的同名配置含義相同,只有在
need_discreate=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時輸出表的schema類型為
value_type,否則為array<value_type>。stub_type
可選項,預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)。
樣本
user 側特徵案例(nested dict)
例如,對於50011740^50011740:0.2,36806676:0.3,122572685:0.5|50006842^16788:0.1這樣的一個string,轉化為二層map如下:
{
"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",
"matchType": "hit"
}假設各欄位的值如下:
Field | Value |
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
如果只使用一層匹配,則需要將上面配置裡的category的值改為ALL。假設各欄位的值如下:
Field | Value |
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(單擊展開查看詳情)
功能介紹
用來輸出一些字串詞匹配資訊的feature。例如在搜尋情境中,計算搜尋字詞(query)是否包含在商品標題(title)中。
方式 | 描述 |
query_common_ratio | 計算query與title間重複term數佔query中term比例。 取值為[0,1]。 |
title_common_ratio | 計算query與title間重複term數佔title中term比例。 取值為[0,1]。 |
is_contain | 計算query是否全部包含在title中,保持順序。取值如下:
|
is_equal | 計算query是否與title完全相同。取值如下:
|
index_of | 計算query作為整體第一次出現在title中的位置,沒有出現返回-1.0 |
proximity_min_cover | 計算query term在title中的鄰近度。 取值為[0, length(title),0表示存在不能匹配的term。 |
proximity_min_dist | 計算query term在title中的鄰近度(minimum pairwise distance)。 取值為[0, length(title)+1],length(title)+1表示沒有匹配的term。 |
proximity_max_dist | 計算query term在title中的鄰近度 (maximum pairwise distance)。 取值為[0, length(title)+1],length(title)+1表示沒有匹配的term。 |
proximity_avg_dist | 計算query term在title中的鄰近度 (average pairwise distance)。 取值為[0, length(title)+1],length(title)+1表示沒有匹配的term |
Term Proximity Measures特徵的計算方法參考論文《An Exploration of Proximity Measures in Information Retrieval》。
假設title(document)的term序列為:t1,t2,t1,t3,t5,t4,t2,t3,t4
MinCover is defined as the length of the shortest document segment that covers each query term at least once in a document.
MinDist(Minimum pair distance):計算所有pair的最小距離的最小值。比如Q=t1,t2,t3,則MinDist=min(1,2,3)=1。
MaxDist(Maximum pair distance):與 MinDist 正好相反,它是求最大值。比如Q=t1,t2,t3,則MaxDist=max(1,2,3)=3。
AveDist(Average pair distance):計算所有pair的最小距離的平均值,比如Q=t1,t2,t3,則 AveDist=(1+2+3)/3=2。
請注意,所有彙總操作符(MinDist、MaxDist、AveDist)都是基於匹配查詢詞之間的成對距離來定義的。當文檔僅匹配一個查詢詞時,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的類型。 |
feature_name | 是 | 最終輸出的feature的首碼。 |
query | 是 | query依賴的表,attr1是一個多值string。 |
title | 是 | title依賴的表,attr2是一個多值string。 |
method | 是 | 可填query_common_ratio、title_common_ratio、is_contain、is_equal等。 |
separator | - | 輸入中的分割字元,不填寫預設為 |
normalizer | 否 | 歸一化方法,與raw_feature的同名配置含義相同。 |
stub_type | 否 | 預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)。 |
overlap feature 的輸出為float類型。
樣本1
query為"high,high2,fiberglass,abc",title為"high,quality,fiberglass,tube,for,golf,bag"。
method | feature |
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 | feature |
the cat | 0 |
sat | 2 |
the mat | 4 |
cap | -1 |
gap | -1 |
sequence_feature(單擊展開查看詳情)
功能介紹
使用者的歷史行為也是一個很重要的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名稱。
sequence_length:sequence的最大長度。
sequence_delim:sequence元素之間的分隔字元。
sequence_pk:sequence primary key,主鍵,如user:click_50_seq,裡面儲存了user點擊的最近的50個itemId,模型推理服務中會使用這個欄位作為key去查詢
side info。線上推理服務(EAS Processor)的請求參數中需要包括以
sequence_pk的值為key的特徵例如:
click_50_seq: 5410233389955966;1832586(分隔字元為sequence_delim配置的值)上面的例子中,
click_50_seq特徵的值是5410233389955966;1832586
item-side的sequence的子特徵不需要在請求參數中傳遞給模型推理服務
模型推理服務中會使用這個欄位作為key去查詢item的
side info例如該配置中,序列特徵中的
item_id, price特徵不需要請求傳入給推理服務,而是在Processor內部通過fg SDK從Processor的物品緩衝中讀取並拼接,保證和離線訓練時的格式一致。
user-side的sequence的子特徵需要在請求參數中傳遞給模型推理服務
特徵名為
${sequence_name}__${input_name}, 如:click_50_seq__ts${input_name}一般用expression配置項來配置,但不同的子特徵類型可能會不同;${input_name}不包含輸入欄位首碼(item:oruser:)
features:sequence的
side info,包含item的靜態屬性值和行為時間資訊等。sequence_fields:指定輸入序列的欄位名,值是
string或者[string]數組當特徵運算元只有一個輸入欄位時,該欄位的內容必須是一個序列;此時可以不用配置
sequence_fields當特徵運算元有多個輸入欄位時,如果不配置
sequence_fields,則假設所有item側的特徵(item:XXX)是序列輸入欄位
離線任務中使用的FG輸入表需要包含所有子特徵對應的column,
當column是一個序列時(參考
sequence_fields的規則),命名為${sequence_name}__${input_name}例如,該配置的例子中,離線表需要4個column:
click_50_seq__item_id,click_50_seq__price,click_50_seq__ts,click_50_seq__clk_time_seq離線表中column的類型建議為array類型(效能更佳),也支援用
sequence_delim為元素分隔字元的string類型
當column不是一個序列時,命名為
${input_name},不需要加首碼例如,該配置的例子中,離線表需要1個非序列column:
${cur_time}
可以通過全域配置
input_alias,為長的column名稱設定一個更短的別名(參考下面的樣本)
支援分箱操作,配置方法請參見特徵分箱(離散化),配置了分箱時輸出的元素類型為
int64,shape由下面的value_dimension配置決定。value_dimension(也可簡寫為
value_dim):Sequence的每個元素的維度,對於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_首碼。
例如:
這兩種特殊情況都可以增加如下可選配置:
sequence_length: sequence的最大長度,超出部分會被截斷;預設值為-1,表示不做截斷
sequence_delim: sequence元素之間的分隔字元,預設值為
;
配置樣本:
{
"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序列,可以是array類型;也可以是字串類型,由sequence_delim配置的字元分隔元素值。
這種配置方式線上服務(Processor)不會查詢sideinfo,需要使用者提供完整的輸入。
平鋪形式的序列特徵輸入欄位名保持與配置相同,不會增加
${sequence_name}__首碼。
線上FG
支援兩種方式擷取行為sideinfo資訊,一種是從EasyRec Processor的item cache擷取sideinfo資訊,以sequence_pk配置的欄位為主鍵,從item cache中尋找item的屬性資訊;另一種是使用者在請求中填充對應的欄位值,如上述配置中的"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 | 是 | expression描述該feature所依賴的欄位來源,來源必須是user、item、context中的一種。 |
vocab_file | 是 | 詞典檔案路徑。 |
default_value | - | 輸入字串預設值。 |
tokenizer_type | - | 可選項,分詞類型,設定為`sentencepiece`,或者不設定時由vocab_file的json內容決定使用哪種huggingface分詞器 |
output_type | - |
|
output_delim | - | 輸出 |
stub_type | 否 | 可選項,預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型) |
樣本
output_type=word_id,輸入一個字串,當輸出是分詞ID時,用逗號分隔組合為字串。
類型 | item:title | 輸出的feature |
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 | 是 | expression描述該feature所依賴的欄位來源,來源必須是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檔案內每行只能有一個字元,否則會過濾失敗。
文本歸一化選項
parameter參數從下面的數字中選擇一個,或者多個進行求和。
例如,需要的功能為:大寫轉換成小寫、全形到半形、繁體到簡體、去特殊符號;則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=["正則產生代碼", "Html過濾工具", "正則表達式語法速查", "The Cat/"]
outputs=["正則產生代碼", "html過濾工具", "Regex文法速查", "the cat/"]
bm25_feature(單擊展開查看詳情)
功能介紹
BM25(Best Matching)演算法是當前資訊檢索領域主流的文本匹配演算法,通常用來作為搜尋相關性評分。即對Query進行語素解析,產生語素
對中文而言,可以把對Query的分詞作為語素分析,把每個詞(term)看成語素
BM25演算法的一般性公式如下:
其中,
Term 重要度
判斷一個詞與一個文檔的相關性的權重,方法有多種,較常用的是IDF。這裡以IDF為例,公式如下:
其中,
根據IDF的定義可以看出,對於給定的文檔集合,包含了
Term 相關性
再來看term
其中,
從
綜上,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",
"avg_doc_length": 100.0,
"k1": 1.2,
"b": 0.75,
"separator": "\u001D",
"default_value": ""
}欄位名 | 是否必選 | 含義 |
feature_name | 是 | 最終輸出的feature的名字。 |
query | 是 | 描述該feature所依賴的query欄位來源。 |
document | 是 | 描述該feature所依賴的document欄位來源。 |
term_doc_freq_file | 否 | 檔案路徑,檔案內容為詞與包含該詞的文檔數,格式為:qin(qi),每行一條記錄,用空白符分隔。 |
term_doc_freq_dict | 否 | 與 |
k1 | 否 | 預設值為1.2,BM25演算法的參數,一般取值為1.2、2.0等。 |
b | 否 | 預設值為0.75,BM25演算法的參數。 |
separator | 否 | 指定輸入特徵的多值分隔字元,預設為 |
normalizer | 否 | 歸一化方法,詳見raw_feature的配置。 |
default_value | 否 | 輸入特徵為空白時,用預設值代替。 |
stub_type | 否 | 預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)。 |
term_doc_freq_file和term_doc_freq_dict二選一,優先使用前者,當兩者都配置時,使用前者。線上服務中使用該特徵時,
term_doc_freq_file檔案與fg.json放在同一個目錄下。
kv_dot_product(單擊展開查看詳情)
功能介紹
計算兩個key-value索引的向量的點積,或兩個集合的交集的大小。
配置方法
{
"feature_type": "kv_dot_product",
"feature_name": "query_doc_sim",
"query": "user:query",
"document": "item:title",
"separator": "|",
"default_value": "0"
}欄位名 | 是否必選 | 含義 |
feature_name | 是 | 最終輸出的feature的名字。 |
query | 是 | 描述該feature所依賴的query欄位來源。 |
document | 是 | 描述該feature所依賴的document欄位來源。 |
separator | 否 | 指定輸入特徵的多值分隔字元,預設為"\u001D",只能是單個符號。 |
kv_delimiter | 否 | 指定輸入特徵中的kv對之間的分隔字元,預設為":",只能是單個符號。 |
normalizer | 否 | 歸一化方法,詳見raw_feature的配置。 |
default_value | 否 | 輸入特徵為空白時,用預設值代替;預設值為0。 |
stub_type | 否 | 預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)。 |
支援複雜類型輸入(array,map),推薦優先使用複雜類型。
當輸入沒有
value部分時,預設value為1.0;可以利用此性質求兩個集合的交集大小。如果不配置
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 表示字串替換特徵,將匹配上的所有子串替換為指定的對應子串。
Overlapping matches are replaced 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 | 必選項,expression描述該feature所依賴的欄位來源 |
default_value | 可選項,輸入特徵為空白時,用預設值代替 |
replacements | 可選項,如果不設定 |
replace_file | 可選項,如果不設定 |
is_sequence | 可選項,標記是否是序列特徵,預設值為 |
sequence_length | 可選項,sequence的最大長度,超過該值時會截斷 |
sequence_delim | 可選項,sequence元素之間的分隔字元,僅在輸入為string類型時才需要設定 |
separator | 可選項,只在 |
value_dimension | 可選項,預設值為0,可以在離線任務中用來截斷輸出 |
stub_type | 可選項,預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型) |
可以同時配置
replace_file和replacements,兩者配置的替換字典會進行合并,replacements的優先順序更高支援分箱操作,配置方法請查看特徵分箱(離散化)操作文檔:
hash_bucket_size: 對特徵變換結果進行hash和模數
vocab_list: 根據詞彙表分箱,把輸入映射到詞彙表的索引
vocab_dict: 分箱結果為特徵值對應的vocab_dict字典的值
vocab_file: 從檔案讀入vocab_list或vocab_dict
支援array類型的多值輸入
樣本
上述配置的執行結果如下:
user:query 的取值 | 輸出的feature |
the quick brown fox jumped over the lazy dogs | pack my box with five dozen liquor jugs |
aaa | xX |
特徵|產生|工具|真好用 | 特徵產生工具真好用 |
regex_replace_feature(單擊展開查看詳情)
功能介紹
regex_replace_feature表示Regex替換特徵,將匹配上的子字串替換為指定的子字串。
可配置多個 pattern,匹配任意 pattern 的子字串將會被替換。
配置方法
{
"feature_name": "query",
"feature_type": "regex_replace_feature",
"expression": ["user:query"],
"regex_pattern": "\\|",
"replacement": " ",
"default_value": ""
}欄位名 | 含義 |
feature_name | 必選項,輸出特徵名 |
expression | 必選項,expression描述該feature所依賴的欄位來源 |
default_value | 可選項,輸入特徵為空白時,用預設值代替 |
regex_pattern | 必選項,Regex,匹配的文本片段將會被替換 |
replacement | 可選項,替換文本; 如果為空白,則刪除匹配的文本片段 |
replace_all | 可選項,是否全域替換,預設值為 |
icase | 可選項,Regex匹配時是否大小寫敏感,預設值為 |
is_sequence | 可選項,標記是否是序列特徵,預設值為 |
sequence_length | 可選項,sequence的最大長度,超過該值時會截斷 |
sequence_delim | 可選項,sequence元素之間的分隔字元,僅在輸入為string類型時才需要設定 |
separator | 可選項,只在 |
value_dimension | 可選項,預設值為0,可以在離線任務中用來截斷輸出 |
stub_type | 可選項,預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型) |
支援分箱操作,配置方法請查看特徵分箱(離散化)文檔:
hash_bucket_size: 對特徵變換結果進行hash和模數
vocab_list: 根據詞彙表分箱,把輸入映射到詞彙表的索引
vocab_dict: 分箱結果為特徵值對應的vocab_dict字典的值
vocab_file: 從檔案讀入vocab_list或vocab_dict
支援array類型的多值輸入
樣本
user:query 的取值 | 輸出的feature |
中華|人民|共和國 | 中華 人民 共和國 |
特徵|產生|工具|真好用 | 特徵 產生 工具 真好用 |
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會被當作最終輸出的feature的首碼 |
expression | 必選項,列表,expression描述該feature所依賴的欄位來源, 第二個欄位表示Mask |
default_value | 可選項,輸入特徵為空白時,用預設值代替;如果不顯式配置,當 |
value_type | 必選項,指定輸出特徵的類型 |
sequence_length | 可選項,sequence的最大長度,超過該值時會截斷 |
sequence_delim | 可選項,sequence元素之間的分隔字元,僅在輸入為string類型時才需要設定 |
separator | 可選項,指定輸入的多值分隔字元,預設為 "\u001D",只能是單個符號 |
value_dimension | 可選項,預設值為0,可以在離線任務中用來截斷輸出 |
normalizer | 可選項,歸一化方法,僅針對數值型特徵有效,詳見RawFeature |
stub_type | 可選項,預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型) |
支援分箱操作,配置方法請查看文檔特徵分箱(離散化)
支援array類型和嵌套的array類型表示的多值輸入
樣本
輸入 | Mask | 輸出 |
"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文法的slice操作),或者擷取數組單個索引位置的元素。
本質上是一種序列特徵。
配置方法
{
"feature_name": "test_feature",
"feature_type": "slice_feature",
"value_type": "float",
"expression": [
"user:click_items"
],
"slice": "2:4"
}欄位名 | 含義 |
feature_name | 必選項,feature_name會被當作最終輸出的feature的首碼 |
expression | 必選項,列表,expression描述該feature所依賴的欄位來源, 第二個欄位表示Mask |
default_value | 可選項,輸入特徵為空白時,用預設值代替;如果不顯式配置,當 |
value_type | 必選項,指定輸出特徵的類型 |
sequence_length | sequence的最大長度,超過該值時會截斷 |
sequence_delim | sequence元素之間的分隔字元,僅在輸入為string類型時才需要設定 |
separator | 可選項,指定輸入的多值分隔字元,預設為 "\u001D",只能是單個符號 |
value_dimension | 可選項,預設值為0,可以在離線任務中用來截斷輸出 |
normalizer | 可選項,歸一化方法,僅針對數值型特徵有效,詳見RawFeature |
stub_type | 可選項,預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型) |
placeholder | 在序列特徵中,用來填充空位、補齊維度特殊值;浮點數預設值為 |
支援分箱操作,配置方法請查看文檔特徵分箱(離散化)
支援array類型和嵌套的array類型表示多值輸入
樣本
在配置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] |