全部產品
Search
文件中心

Artificial Intelligence Recommendation:內建特徵運算元

更新時間:Jan 15, 2026

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作為首碼。取值如下:

  • true:拼接

  • false(預設):不拼接

value_type

指定輸出特徵的類型,預設為string。

separator

指定輸入特徵的多值分隔字元,預設為\u001D,只能是單個符號。

default_value

輸入特徵為空白時,用預設值代替。

weighted

標記輸入是否為 key:value 的格式; 設定為true會同時輸出特徵值和權重 (Map類型)

value_dimension

特徵有多個值時,用來截斷輸出;預設值為0,表示不截斷;

值為1時輸出表的schema類型為value_type,否則為array<value_type>

stub_type

預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)。

樣本

下面以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類型為value_type,否則為array<value_type>

stub_type

預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)。

樣本

^]表示多值分隔字元,注意這是一個符號,其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類型為value_type,否則為array<value_type>

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作為首碼。取值如下:

  • true:拼接

  • false(預設):不拼接

value_type

指定輸出特徵的類型,預設為string。

separator

指定輸入特徵的多值分隔字元,預設為"\u001D",只能是單個符號。

default_value

輸入特徵為空白時,用預設值代替。

value_dimension

預設值為0,可以在離線任務中用來截斷輸出;值為1時輸出表的schema類型為value_type,否則為array<value_type>

stub_type

預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)。

樣本

^]表示多值分隔字元,注意這是一個符號,其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類型的key欄位的多值分隔字元,預設為 "\u001D",只能是單個符號。

default_value

輸入特徵為空白時,用預設值代替。

need_prefix

是否拼接feature_name作為首碼。取值如下:

  • true:拼接

  • false(預設):不拼接

need_key

是否拼接key作為首碼,只在value_type為string時生效。取值如下:

  • true:拼接

  • false(預設):不拼接

normalizer

歸一化方法,與raw_feature的同名配置含義相同。

combiner

指定由多個key查詢到的多個value的合并方式,可選:sum(預設)、avg/mean、max、min。

need_discrete

true表示不執行combiner,直接輸出多個值,預設為false。

value_dimension

取值如下:

  • 0(預設值):可以在離線任務中用來截斷輸出。

  • 1:輸出表的schema類型為value_type,否則為array<value_type>

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中,保持順序。取值如下:

  • 0:未包含

  • 1:表示包含

is_equal

計算query是否與title完全相同。取值如下:

  • 0:不完全相同

  • 1:完全相同

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

-

輸入中的分割字元,不填寫預設為chr(29)

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: or user:

  • 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的。

例如:

特殊情況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_seqclk_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

-

  • word_id:輸出id。

  • word:表示輸出分詞之後的字串。

output_delim

-

輸出word_id或者word的分隔字元,只在離線任務中使用。

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進行語素解析,產生語素;然後,對於每個搜尋結果D,計算每個語素D的相關性得分;最後,將相對於D的相關性得分進行加權求和,從而得到Query與D的相關性得分。

對中文而言,可以把對Query的分詞作為語素分析,把每個詞(term)看成語素

BM25演算法的一般性公式如下:

其中,表示某個query,表示query中的第個term,表示某個文檔,表示的權重,R(qi,d)表示與文檔的相關性得分。

Term 重要度

判斷一個詞與一個文檔的相關性的權重,方法有多種,較常用的是IDF。這裡以IDF為例,公式如下:

其中,表示語料庫中的文檔總數,表示語料庫中包含qi的文檔總數。

根據IDF的定義可以看出,對於給定的文檔集合,包含了的文檔數越多,的權重則越低。也就是說,當很多文檔都包含了時,的區分度就不高,因此使用來判斷相關性時的重要度就較低。

Term 相關性

再來看term 與文檔的相關性得分。首先來看BM25中相關性得分的一般形式:

其中,為調節因子,通常根據經驗設定,一般中的出現頻率,在Query中的出現頻率。為文檔的長度,為所有文檔的平均長度。由於絕大部分情況下,在query中只會出現一次,即,因此公式可以簡化為:

的定義中可以看到,參數的作用是調整文檔長度對相關性影響的大小。越大,文檔長度的對相關性得分的影響越大,反之越小。而文檔的相對長度越長,值將越大,則相關性得分會越小。可以理解為,當文檔較長時,包含的機會越大,因此,同等的情況下,長文檔與的相關性應該比短文檔與相關性弱。

綜上,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

term_doc_freq_file內容相同,為dict格式,key為詞,value為包含該詞的文檔數。

k1

預設值為1.2,BM25演算法的參數,一般取值為1.2、2.0等。

b

預設值為0.75,BM25演算法的參數。

separator

指定輸入特徵的多值分隔字元,預設為\u001D,只能是單個符號。

normalizer

歸一化方法,詳見raw_feature的配置。

default_value

輸入特徵為空白時,用預設值代替。

stub_type

預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)。

  • term_doc_freq_fileterm_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則升級為必選項;Dict類型,原始文本 --> 替換文本 映射關係

replace_file

可選項,如果不設定replacements則升級為必選項;Dict檔案,每行一個 原始文本 \t 替換文本;分隔字元為 Tab(\t)

is_sequence

可選項,標記是否是序列特徵,預設值為false

sequence_length

可選項,sequence的最大長度,超過該值時會截斷

sequence_delim

可選項,sequence元素之間的分隔字元,僅在輸入為string類型時才需要設定

separator

可選項,只在is_sequence=true時有效,指定輸入的多值分隔字元,預設為 "\u001D",只能是單個符號

value_dimension

可選項,預設值為0,可以在離線任務中用來截斷輸出

stub_type

可選項,預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)

  • 可以同時配置replace_filereplacements,兩者配置的替換字典會進行合并,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

可選項,是否全域替換,預設值為true;設定成false,則只替換第一次出現的 pattern

icase

可選項,Regex匹配時是否大小寫敏感,預設值為false

is_sequence

可選項,標記是否是序列特徵,預設值為false

sequence_length

可選項,sequence的最大長度,超過該值時會截斷

sequence_delim

可選項,sequence元素之間的分隔字元,僅在輸入為string類型時才需要設定

separator

可選項,只在is_sequence=true時有效,指定輸入的多值分隔字元,預設為 "\u001D",只能是單個符號

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為數實值型別時預設為0

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為數實值型別時預設為0

value_type

必選項,指定輸出特徵的類型

sequence_length

sequence的最大長度,超過該值時會截斷

sequence_delim

sequence元素之間的分隔字元,僅在輸入為string類型時才需要設定

separator

可選項,指定輸入的多值分隔字元,預設為 "\u001D",只能是單個符號

value_dimension

可選項,預設值為0,可以在離線任務中用來截斷輸出

normalizer

可選項,歸一化方法,僅針對數值型特徵有效,詳見RawFeature

stub_type

可選項,預設值為false,當值為true時,當前配置的特徵變換僅用作pipeline的中間結果,最終不會輸出(給模型)

placeholder

在序列特徵中,用來填充空位、補齊維度特殊值;浮點數預設值為NaN;整型預設為對應類型最小的值;參考自訂特徵運算元的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]