全部产品
Search
文档中心

Artificial Intelligence Recommendation:Operator fitur bawaan

更新时间:Jan 16, 2026

id_feature

Pengenalan fungsi

Operator id_feature merepresentasikan fitur diskrit dan mendukung fitur diskrit bernilai tunggal—seperti ID pengguna dan ID item—maupun fitur diskrit bernilai ganda, seperti warna produk yang dapat memiliki beberapa nilai.

Konfigurasi

{
  "feature_type": "id_feature",
  "feature_name": "item_is_main",
  "expression": "item:is_main",
  "need_prefix": true,
  "separator": "\u001D",
  "default_value": ""
}

Nama bidang

Wajib

Deskripsi

feature_name

Ya

Awalan untuk fitur output.

expression

Ya

Bidang sumber tempat fitur bergantung.

need_prefix

Tidak

Menentukan apakah akan menambahkan feature_name sebagai awalan. Nilai yang valid:

  • true: Menggabungkan.

  • false (default): Tidak menambahkan awalan.

value_type

Tidak

Tipe data fitur output. Nilai default adalah string.

separator

Tidak

Pemisah untuk fitur input bernilai ganda. Nilai default adalah \u001D. Hanya satu karakter yang didukung.

default_value

Tidak

Nilai default yang digunakan ketika fitur input kosong.

weighted

Tidak

Menentukan apakah input dalam format kunci:nilai. Jika Anda mengatur parameter ini ke true, operator menghasilkan nilai fitur beserta bobotnya sebagai Map.

value_dimension

Tidak

Parameter ini memotong output jika fitur memiliki beberapa nilai. Nilai default adalah 0, yang berarti tidak ada pemotongan.

Jika nilainya 1, tipe skema tabel output adalah value_type. Jika tidak, tipe skema adalah array<value_type>.

stub_type

Tidak

Nilai default adalah false. Jika Anda mengatur parameter ini ke true, transformasi fitur yang dikonfigurasi hanya digunakan sebagai hasil antara dalam pipeline dan tidak dioutput ke model.

Contoh

Contoh berikut menggunakan fitur sisi-item is_main untuk menunjukkan input dan output fitur dengan konfigurasi berbeda:

Tipe

Nilai item:is_main

Fitur output

int64_t

100

item_is_main_100

double

5.2

item_is_main_5.2

string

abc

item_is_main_abc

String bernilai ganda

abc^]bcd

[item_is_main_abc, item_is_main_bcd]

Int bernilai ganda

123^]456

[item_is_main_123, item_is_main_456]

Simbol ^] merepresentasikan pemisah bernilai ganda. Ini adalah satu karakter dengan kode ASCII "\x1D", yang juga dapat ditulis sebagai "\u001d".

raw_feature

Pengenalan fungsi

Operator raw_feature merepresentasikan fitur kontinu dan mendukung tipe numerik seperti int, float, dan double, serta menangani fitur kontinu bernilai tunggal maupun bernilai ganda.

Konfigurasi

{
 "feature_type" : "raw_feature",
 "feature_name" : "ctr",
 "expression" : "item:ctr",
 "normalizer" : "method=log10"
}

Nama bidang

Wajib

Deskripsi

feature_name

Ya

Nama fitur.

expression

Ya

Bidang sumber tempat fitur bergantung. Sumber harus berupa user, item, atau context.

normalizer

Tidak

Metode normalisasi. Untuk informasi selengkapnya, lihat bagian berikut.

value_type

Tidak

Tipe data fitur output. Nilai default adalah float.

separator

Tidak

Pemisah untuk fitur input bernilai ganda. Nilai default adalah "\u001D". Hanya satu karakter yang didukung.

default_value

Tidak

Nilai default yang digunakan ketika fitur input kosong.

value_dimension

Tidak

Dimensi bidang output. Nilai default adalah 1. Anda dapat menggunakan parameter ini untuk memotong output dalam tugas offline. Jika nilainya 1, tipe skema tabel output adalah value_type. Jika tidak, tipe skema adalah array<value_type>.

stub_type

Tidak

Nilai default adalah false. Jika Anda mengatur parameter ini ke true, transformasi fitur yang dikonfigurasi hanya digunakan sebagai hasil antara dalam pipeline dan tidak dioutput ke model.

Contoh

Simbol ^] merepresentasikan pemisah bernilai ganda. Perhatikan bahwa ini adalah satu karakter dengan kode ASCII "\x1D", bukan dua karakter.

Tipe

Nilai item:ctr

Fitur output

int64_t

100

100

double

100.1

100.1

Int bernilai ganda

123^]456

[123, 456] (Bidang input harus memiliki dimensi yang sama dengan dimensi yang dikonfigurasi).

Normalizer

Operator raw_feature dan match_feature mendukung empat metode normalisasi: minmax, zscore, log10, dan expression. Konfigurasi dan metode perhitungannya sebagai berikut:

  • minmax

    Contoh konfigurasi: method=minmax,min=2.1,max=2.2

    Rumus: x = (x - min) / (max - min)

  • zscore

    Contoh konfigurasi: method=zscore,mean=0.0,standard_deviation=10.0

    Rumus: x = (x - mean) / standard_deviation

  • log10

    Contoh konfigurasi: method=log10,threshold=1e-10,default=-10

    Rumus: x = x > threshold ? log10(x) : default;

  • expression

    Contoh konfigurasi: method=expression,expr=sign(x)

    Rumus: Anda dapat mengonfigurasi fungsi atau ekspresi apa pun. Nama variabel tetap sebagai x, yang merepresentasikan input ekspresi.

expr_feature

Pengenalan fungsi

Operator expr_feature merepresentasikan fitur ekspresi dengan mengevaluasi suatu ekspresi dan menghasilkan nilai fitur bertipe float. Operator ini mendukung komputasi batch dan broadcasting.

Catatan: Saat menggunakan operator ini, semua input harus dapat dikonversi ke tipe double.

Konfigurasi

{
  "feature_type" : "expr_feature",
  "feature_name" : "ctr_sigmoid",
  "expression" : "sigmoid(pv/(1+click))",
  "variables": ["item:pv", "item:click"]
}

Jika pv = 2, click = 3, nilai fitur ekspresi adalah: 0.6224593312

Nama bidang

Wajib

Deskripsi

feature_name

Ya

Nama fitur.

expression

Ya

Menentukan isi ekspresi.

variables

Ya

Variabel yang digunakan dalam ekspresi, yaitu bidang input. Sumber harus berupa user, item, atau context.

separator

Tidak

Pemisah untuk bidang input bernilai ganda bertipe string. Nilai default adalah "\u001D". Hanya satu karakter yang didukung.

default_value

Tidak

Nilai default yang digunakan ketika fitur input kosong.

value_dimension

Tidak

Dimensi bidang output. Nilai default adalah 0. Anda dapat menggunakan ini untuk memotong atau mengisi output. Jika nilainya 1, tipe skema tabel output adalah value_type. Jika tidak, tipe skema adalah array<value_type>.

stub_type

Tidak

Nilai default adalah false. Jika Anda mengatur parameter ini ke true, transformasi fitur yang dikonfigurasi hanya digunakan sebagai hasil antara dalam pipeline dan tidak dioutput ke model.

Contoh konfigurasi

{
    "feature_name": "expr_feat",
    "feature_type": "expr_feature",
    "expression": "a+b",
    "variables": ["a", "b"],
    "value_dimension": 3
}
  • Perhitungan skalar dan vektor (broadcasting)

    • Jika variabel a=1 dan variabel b=[1, 2, 6], hasilnya adalah [2, 3, 7].

  • Komputasi element-wise vektor-ke-vektor

    • Jika variabel a=[3, 2, 1] dan variabel b=[1, 2, 6], hasilnya adalah [4, 4, 7].

  • Mendukung variabel sementara dan ekspresi koma

    • Contohnya: x=roundp(a),(a-x)*b. Dalam contoh ini, x adalah variabel sementara dan tidak perlu dikonfigurasi dalam variables.

    • Ekspresi koma dievaluasi dari kiri ke kanan. Nilai sub-ekspresi paling kanan yang dikembalikan.

    • Untuk mengurangi overhead memori, gunakan kembali variabel yang ada sebagai variabel sementara jika secara semantik sesuai.

Menggabungkan fitur ekspresi dan fitur sekuens

{
  "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
        }
      ]
    }
  ]
}

Ekspresi

  • Fungsi bawaan (skalar)

    Nama fungsi

    Jumlah parameter

    Deskripsi

    rnd

    0

    Hasilkan bilangan acak antara 0 dan 1

    sin

    1

    fungsi sinus

    cos

    1

    fungsi cosinus

    tan

    1

    fungsi tangen

    asin

    1

    fungsi arcus sinus

    acos

    1

    fungsi arcus cosinus

    atan

    1

    fungsi arcus tangen

    sinh

    1

    fungsi sinus hiperbolik

    cosh

    1

    cosinus hiperbolik

    tanh

    1

    fungsi tangen hiperbolik

    asinh

    1

    fungsi arcus sinus hiperbolik

    acosh

    1

    fungsi arcus tangen hiperbolik

    atanh

    1

    fungsi arcus tangen hiperbolik

    log2

    1

    logaritma basis 2

    log10

    1

    logaritma basis 10

    log

    1

    logaritma basis e (2.71828...)

    ln

    1

    logaritma basis e (2.71828...)

    exp

    1

    e dipangkatkan x

    sqrt

    1

    akar kuadrat dari suatu nilai

    sign

    1

    fungsi sign -1 jika x<0; 1 jika x>0

    abs

    1

    nilai absolut

    rint

    1

    pembulatan ke bilangan bulat terdekat

    round

    1

    Membulatkan ke bilangan bulat terdekat. Selalu membulatkan setengah menjauhi nol.

    roundp

    1

    Membulatkan ke presisi khusus. Contohnya, roundp(3.14159,2)=3.14.

    mod

    2

    Operasi modulo

    floor

    1

    Membulatkan ke bawah ke bilangan bulat terdekat.

    ceil

    1

    Membulatkan ke atas ke bilangan bulat terdekat.

    trunc

    1

    Memotong ke bilangan bulat dengan menghapus bagian desimal.

    sigmoid

    1

    fungsi sigmoid

    sphere_dist

    4

    jarak bola antara dua titik gps, argumen(lng1, lat1, lng2, lat2)

    haversine

    4

    jarak haversine antara dua titik gps, argumen(lng1, lat1, lng2, lat2)

    min

    var.

    minimum dari semua argumen

    max

    var.

    maksimum dari semua argumen

    sum

    var.

    jumlah dari semua argumen

    avg

    var.

    nilai rata-rata dari semua argumen

    Catatan: Fungsi bawaan di atas mendukung komputasi batch dan broadcasting.

  • Fungsi operasi vektor bawaan

    Nama fungsi

    Jumlah parameter

    Deskripsi

    len

    1

    panjang vektor

    l2_norm

    1

    normalisasi l2 dari vektor

    squared_norm

    1

    Normalisasi kuadrat suatu vektor

    dot

    2

    hasil kali titik dua vektor

    euclid_dist

    2

    jarak Euclidean antara dua vektor

    corr

    2

    Koefisien Korelasi Pearson dari dua vektor

    std_dev

    1

    deviasi standar vektor, bagi n

    pop_std_dev

    1

    simpangan baku populasi vektor, bagi n-1

    variance

    1

    varians sampel vektor, bagi n

    pop_variance

    1

    varians populasi vektor, bagi n-1

    reduce_min

    1

    reduce minimum vektor

    reduce_max

    1

    reduce maksimum vektor

    reduce_sum

    1

    reduce jumlah vektor

    reduce_mean

    1

    reduksi rata-rata suatu vektor

    reduce_prod

    1

    reduce perkalian vektor

    Catatan: Jika ekspresi berisi fungsi operasi vektor bawaan di atas, variabel lain yang bukan parameter fungsi vektor harus berupa skalar.

  • Operator biner bawaan

    Operator

    Deskripsi

    Prioritas

    =

    penugasan *

    0

    ||

    logis atau

    1

    &&

    dan logis

    2

    |

    bitwise or

    3

    &

    bitwise and

    4

    <=

    kurang dari atau sama dengan

    5

    >=

    lebih dari atau sama dengan

    5

    !=

    tidak sama dengan

    5

    ==

    sama dengan

    5

    >

    lebih besar dari

    5

    <

    kurang dari

    5

    +

    penambahan

    6

    -

    pengurangan

    6

    *

    perkalian

    7

    /

    pembagian

    7

    %

    modulo

    7

    ^

    pangkat x ke y

    8

    Operator penugasan bersifat khusus karena memodifikasi salah satu argumennya dan hanya dapat diterapkan pada variabel.

  • Operator ternary bawaan

    Mendukung sintaks if-else.

    Menggunakan evaluasi malas untuk memastikan hanya cabang ekspresi yang diperlukan yang dievaluasi.

    Operator

    Deskripsi

    Prioritas

    ?:

    operator if then else

    sintaks gaya C++

  • Konstanta bawaan

    Operator

    Deskripsi

    Prioritas

    _pi

    Bilangan pi yang satu-satunya.

    3.141592653589793238462643

    _e

    Bilangan Euler.

    2.718281828459045235360287

combo_feature

Pengenalan fungsi

Operator combo_feature membuat kombinasi (Produk Kartesius) dari beberapa bidang atau ekspresi. Operator id_feature dapat dianggap sebagai kasus khusus combo_feature di mana hanya satu bidang yang digunakan untuk perkalian silang. Biasanya, bidang yang terlibat dalam perkalian silang berasal dari tabel berbeda, seperti menggabungkan fitur pengguna dengan fitur item.

Konfigurasi

{
  "feature_type" : "combo_feature",
  "feature_name" : "comb_age_item",
  "expression" : ["user:age_class", "item:item_id"],
  "need_prefix": true,
  "separator": "\u001D",
  "default_value": ""
}

Nama bidang

Wajib

Deskripsi

feature_name

Ya

Awalan untuk fitur output.

expression

Ya

Daftar yang menentukan bidang sumber tempat fitur bergantung.

need_prefix

Tidak

Menentukan apakah akan menambahkan feature_name sebagai awalan. Nilai yang valid:

  • true: Menggabungkan nilai-nilainya.

  • false (default): Tidak menambahkan awalan.

value_type

Tidak

Tipe data fitur output. Nilai default adalah string.

separator

Tidak

Pemisah untuk fitur input bernilai ganda. Nilai default adalah "\u001D". Hanya satu karakter yang didukung.

default_value

Tidak

Nilai default yang digunakan ketika fitur input kosong.

value_dimension

Tidak

Nilai default adalah 0. Anda dapat menggunakan parameter ini untuk memotong output dalam tugas offline. Jika nilainya 1, tipe skema tabel output adalah value_type. Jika tidak, tipe skema adalah array<value_type>.

stub_type

Tidak

Nilai default adalah false. Jika Anda mengatur parameter ini ke true, transformasi fitur yang dikonfigurasi hanya digunakan sebagai hasil antara dalam pipeline dan tidak dioutput ke model.

Contoh

Simbol ^] merepresentasikan pemisah bernilai ganda. Perhatikan bahwa ini adalah satu karakter dengan kode ASCII "\x1D", bukan dua karakter.

Nilai user:age_class

Nilai item:item_id

Fitur output

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]

Jumlah fitur output adalah:

|F1| * |F2| * ... * |Fn|

Fn mengacu pada jumlah nilai dalam bidang dependen ke-n.

lookup_feature

Pengenalan fungsi

Seperti match_feature, operator lookup_feature mencocokkan dan mengambil hasil yang diperlukan dari sekumpulan pasangan kunci-nilai.

Operator ini bergantung pada dua bidang: map dan key.

  • map adalah bidang dictionary atau string bernilai ganda (MultiString) dengan setiap string berformat "k1:v1".

  • key dapat berupa bidang bertipe apa pun. Jika Anda memiliki beberapa kunci, disarankan menggunakan input bertipe array. Saat fitur dihasilkan, nilai kunci diambil, diubah menjadi tipe kunci-nilai dari map, lalu dicocokkan dengan pasangan kunci-nilai dalam bidang map untuk mendapatkan fitur akhir.

Konfigurasi

{
  "feature_type": "lookup_feature",
  "feature_name": "item_match_item",
  "map": "item:item_attr",
  "key": "item:item_value",
  "need_discrete": true,
  "need_key": true
}

Nama bidang

Wajib

Deskripsi

feature_name

Ya

Awalan untuk fitur output.

map

Ya

Isi dictionary, yaitu sekumpulan pasangan kunci-nilai.

key

Ya

Kunci untuk mencari di dictionary.

value_type

Tidak

Tipe data fitur output. Nilai default adalah string.

separator

Tidak

Pemisah untuk bidang key bernilai ganda bertipe string. Nilai default adalah "\u001D". Hanya satu karakter yang didukung.

default_value

Tidak

Nilai default yang digunakan ketika fitur input kosong.

need_prefix

Tidak

Menentukan apakah akan menambahkan feature_name sebagai awalan. Nilai yang valid:

  • true: Melakukan penggabungan.

  • false (default): Tidak melakukan penggabungan.

need_key

Tidak

Menentukan apakah akan menambahkan kunci sebagai awalan. Parameter ini hanya berlaku ketika value_type diatur ke string. Nilai yang valid:

  • true: Mengaktifkan penggabungan.

  • false (default): Tidak menambahkan awalan.

normalizer

Tidak

Metode normalisasi. Parameter ini memiliki makna yang sama dengan parameter dengan nama yang sama untuk raw_feature.

combiner

Tidak

Menentukan cara menggabungkan beberapa nilai yang diambil oleh beberapa kunci. Nilai yang valid: sum (default), avg/mean, max, dan min.

need_discrete

Tidak

true: Tidak menjalankan combiner dan langsung menghasilkan beberapa nilai. Nilai default adalah false.

value_dimension

Tidak

Nilai yang valid:

  • 0 (default): Output dapat dipotong dalam tugas offline.

  • 1: Tipe skema tabel output adalah value_type. Jika tidak, tipe skema adalah array<value_type>.

stub_type

Tidak

Nilai default adalah false. Jika Anda mengatur parameter ini ke true, transformasi fitur yang dikonfigurasi hanya digunakan sebagai hasil antara dalam pipeline dan tidak dioutput ke model.

  • Operator ini mendukung Pengelompokan. Untuk informasi selengkapnya, lihat Pengelompokan fitur (diskretisasi).

  • Dictionary mendukung input bertipe map, dan kunci mendukung input bertipe array.

Contoh

Untuk konfigurasi di atas, asumsikan untuk dokumen tertentu:

item_attr : "k1:v1^]k2:v2^]k3:v3"

Simbol ^] merepresentasikan pemisah bernilai ganda. Ini adalah satu karakter dengan kode ASCII "\x1D", bukan dua karakter. Anda dapat memasukkan karakter ini di emacs dengan menekan C-q C-5, atau di vim dengan menekan C-v C-5. Di sini, item_attr adalah string bernilai ganda.

Ketika map merepresentasikan beberapa pasangan kunci-nilai, itu adalah string bernilai ganda, bukan string tunggal.

item_value : "k2"

Hasil transformasi fitur adalah item_match_item_k2_v2.

need_prefix == true

feature_name: fg
map: {"k1:123", "k2:234", "k3:3"}
key: {"k1"}
Result: feature={"fg_123"}

need_prefix == false

map: {"k1:123", "k2:234", "k3:3"}
key: {"k1"}
Result: feature={123}

Menggabungkan hasil kueri

Jika terdapat beberapa kunci, Anda dapat mengonfigurasi combiner untuk menggabungkan beberapa nilai yang diambil. Konfigurasi yang mungkin adalah sum, mean, max, dan min.

Untuk menggunakan combiner, atur need_discrete ke false. Dalam hal ini, nilai harus bertipe numerik atau string yang dapat dikonversi ke tipe numerik.

match_feature

Pengenalan fungsi

Operator match_feature biasanya digunakan untuk mendefinisikan hubungan pencocokan antar fitur dan mengimplementasikan proses pencocokan peta dua tingkat.

Konfigurasi

File konfigurasi menggunakan format JSON.

{
  "feature_name": "user__l1_ctr_1",
  "feature_type": "match_feature",
  "category": "ALL",
  "need_discrete": false,
  "item": "item:category_level1",
  "user": "user:l1_ctr_1",
  "match_type": "hit"
}
  • user: Dictionary bersarang (nested_dict), yaitu dict of dicts.

    • Bidang user menggunakan string untuk menggambarkan peta dua tingkat.

    • Karakter | adalah pemisah antar item di peta tingkat pertama. Karakter ^ adalah pemisah antara kunci dan nilai di peta tingkat pertama.

    • Karakter , adalah pemisah antar item di peta tingkat kedua. Karakter : adalah pemisah antara kunci dan nilai di peta tingkat kedua.

  • category: Kunci utama, yaitu kunci untuk mencari di peta tingkat pertama.

    ALL adalah karakter wildcard yang menunjukkan bahwa semua kunci di tingkat ini dapat dicocokkan.

  • item: Kunci sekunder, yaitu kunci untuk mencari di peta tingkat kedua.

    ALL adalah karakter wildcard yang menunjukkan bahwa semua kunci di tingkat ini dapat dicocokkan.

  • need_discrete

    • true: Model menggunakan nama fitur yang dioutput oleh match_feature dan mengabaikan nilai fitur. Nilai default adalah false.

    • false: Model menggunakan nilai fitur yang dioutput oleh match_feature dan mengabaikan nama fitur.

  • match_type

    • hit: Menghasilkan fitur yang cocok. Operator menggunakan nilai category untuk mencari di peta tingkat pertama, lalu menggunakan nilai item untuk mencari di peta tingkat kedua guna mendapatkan hasil. Jika Anda hanya membutuhkan pencocokan satu tingkat alih-alih dua tingkat, Anda dapat mengatur kunci di tingkat pertama peta ke ALL dan juga mengatur parameter category dalam konfigurasi pembuatan fitur ke "ALL".

    • multihit: Memungkinkan bidang category dan item diatur ke opsi MATCH_WILDCARD, yaitu "ALL", untuk mencocokkan beberapa nilai.

  • normalizer

    Opsional. Metode normalisasi. Parameter ini memiliki makna yang sama dengan parameter dengan nama yang sama untuk raw_feature. Parameter ini hanya berlaku ketika need_discrete=false.

  • show_category

    Menentukan apakah akan menambahkan awalan category ke hasil kueri. Nilai default-nya adalah true jika need_discrete=true dan match_type=hit; jika tidak, nilai default-nya adalah false.

  • show_item

    Menentukan apakah akan menambahkan awalan item ke hasil kueri. Nilai default-nya adalah true jika need_discrete=true dan match_type=hit; jika tidak, nilai default-nya adalah false.

  • value_type

    Opsional. Tipe data fitur output. Nilai default adalah string.

  • separator

    Opsional. Pemisah untuk bidang key bertipe string dengan nilai ganda. Nilai default-nya adalah "\u001D". Hanya satu karakter yang didukung.

  • default_value

    Opsional. Nilai default yang digunakan ketika fitur input kosong.

  • value_dimension

    Opsional. Nilai default adalah 0. Anda dapat menggunakan parameter ini untuk memotong output dalam tugas offline. Jika nilainya 1, tipe skema tabel output adalah value_type. Jika tidak, tipe skema adalah array<value_type>.

  • stub_type

    Opsional. Nilai default adalah false. Jika Anda mengatur parameter ini ke true, transformasi fitur yang dikonfigurasi hanya digunakan sebagai hasil antara dalam pipeline dan tidak dioutput ke model.

Contoh

Contoh fitur sisi-pengguna (dictionary bersarang)

Sebagai contoh, string seperti 50011740^50011740:0.2,36806676:0.3,122572685:0.5|50006842^16788:0.1 dikonversi menjadi peta dua tingkat sebagai berikut:

{
  "50011740": {
    "50011740": 0.2,
    "36806676": 0.3,
    "122572685": 0.5
  },
  "50006842": {
    "16788": 0.1
  }
}

hit

Contoh konfigurasi untuk tipe pencocokan 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"
}

Asumsikan nilai bidang sebagai berikut:

Bidang

Nilai

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

  • Jika need_discrete=true, operator pertama-tama menggunakan nilai auction_root_category 50006842 untuk mengkueri user_brand_tags_hit, yang mengembalikan 16788816:0.1,10122:0.2,29889:0.3,30068:19. Kemudian, operator menggunakan 30068 untuk mengkueri hasil ini, yang mengembalikan nilai 19. Hasil akhirnya adalah: brand_hit_50006842_30068_19.

  • Jika need_discrete=false, hasilnya adalah: 19.0.

Jika Anda hanya menggunakan pencocokan satu tingkat, ubah nilai category dalam konfigurasi di atas menjadi ALL. Asumsikan nilai bidang sebagai berikut:

Bidang

Nilai

user_brand_tags_hit

ALL^16788816:40,10122:40,29889:20,30068:20

brand_id

30068

  • Jika need_discrete=true, hasilnya adalah: brand_hit_ALL_30068_20.

  • Jika need_discrete=false, hasilnya adalah: 20.0.

Dalam kasus ini, Anda juga dapat menggunakan operator lookup_feature. Format nilai dalam user_brand_tags_hit perlu diubah menjadi: "16788816:40^]10122:40^]29889:20^]30068:20". Simbol '^]' adalah pemisah bernilai ganda \u001d, yaitu karakter tak tercetak.

Operator lookup_feature mendukung tipe input kompleks seperti map dan array, sehingga memberikan performa yang lebih baik.

overlap_feature

Pengenalan fungsi

Operator ini menghasilkan fitur yang berisi informasi pencocokan string dan kata. Sebagai contoh, dalam skenario pencarian, operator ini menghitung apakah kueri pencarian terdapat dalam judul produk.

Metode

Deskripsi

query_common_ratio

Menghitung rasio istilah umum antara kueri dan judul terhadap jumlah total istilah dalam kueri.

Nilainya berada dalam rentang [0, 1].

title_common_ratio

Menghitung rasio istilah umum antara kueri dan judul terhadap jumlah total istilah dalam judul.

Nilainya berada dalam rentang [0, 1].

is_contain

Menghitung apakah seluruh kueri terdapat dalam judul, mempertahankan urutan. Nilai yang valid:

  • 0: Tidak terdapat.

  • 1: Terdapat.

is_equal

Menghitung apakah kueri identik dengan judul. Nilai yang valid:

  • 0: Tidak identik.

  • 1: Identik.

index_of

Menghitung posisi kemunculan pertama seluruh kueri dalam judul. Mengembalikan -1.0 jika tidak ditemukan.

proximity_min_cover

Menghitung kedekatan istilah kueri dalam judul.

Nilainya berada dalam rentang [0, length(title)]. Nilai 0 menunjukkan bahwa ada istilah yang tidak dapat dicocokkan.

proximity_min_dist

Menghitung kedekatan istilah kueri dalam judul (jarak pasangan minimum).

Nilainya berada dalam rentang [0, length(title)+1]. Nilai length(title)+1 menunjukkan bahwa tidak ada istilah yang cocok.

proximity_max_dist

Menghitung kedekatan istilah kueri dalam judul (jarak pasangan maksimum).

Nilainya berada dalam rentang [0, length(title)+1]. Nilai length(title)+1 menunjukkan bahwa tidak ada istilah yang cocok.

proximity_avg_dist

Menghitung kedekatan istilah kueri dalam judul (jarak pasangan rata-rata).

Nilainya berada dalam rentang [0, length(title)+1]. Nilai length(title)+1 menunjukkan bahwa tidak ada istilah yang cocok.

Metode perhitungan untuk fitur Ukuran Kedekatan Istilah dijelaskan dalam makalah "An Exploration of Proximity Measures in Information Retrieval".

Asumsikan urutan istilah judul (dokumen) adalah: t1,t2,t1,t3,t5,t4,t2,t3,t4

  • MinCover didefinisikan sebagai panjang segmen dokumen terpendek yang mencakup setiap istilah kueri setidaknya sekali dalam dokumen.

  • MinDist (Jarak pasangan minimum): Menghitung minimum dari semua jarak pasangan minimum. Misalnya, jika Q=t1,t2,t3, maka MinDist=min(1,2,3)=1.

  • MaxDist (Jarak pasangan maksimum): Kebalikan dari MinDist. Menemukan nilai maksimum. Misalnya, jika Q=t1,t2,t3, maka MaxDist=max(1,2,3)=3.

  • AveDist (Jarak pasangan rata-rata): Menghitung rata-rata dari semua jarak pasangan minimum. Misalnya, jika Q=t1,t2,t3, maka AveDist=(1+2+3)/3=2.

Catatan bahwa semua operator agregat (MinDist, MaxDist, dan AveDist) didefinisikan berdasarkan jarak pasangan antara istilah kueri pencarian yang cocok. Ketika dokumen hanya mencocokkan satu istilah kueri pencarian, MinDist, AveDist, dan MaxDist semuanya didefinisikan sebagai panjang dokumen.

Konfigurasi

{
  "feature_type" : "overlap_feature",
  "feature_name" : "is_contain",
  "query" : "user:attr1",
  "title" : "item:attr2",
  "method" : "is_contain",
  "separator" : " ",
  "normalizer" : ""
}

Nama bidang

Wajib

Deskripsi

feature_type

Ya

Jenis fitur.

feature_name

Ya

Awalan untuk fitur output.

query

Ya

Tabel tempat kueri bergantung. attr1 adalah string bernilai ganda.

title

Ya

Tabel tempat judul bergantung. attr2 adalah string bernilai ganda.

method

Ya

Nilai yang valid meliputi query_common_ratio, title_common_ratio, is_contain, dan is_equal.

separator

-

Karakter pemisah dalam input. Jika tidak ditentukan, nilai default adalah chr(29).

normalizer

Tidak

Metode normalisasi. Parameter ini memiliki makna yang sama dengan parameter dengan nama yang sama untuk raw_feature.

stub_type

Tidak

Nilai default adalah false. Jika Anda mengatur parameter ini ke true, transformasi fitur yang dikonfigurasi hanya digunakan sebagai hasil antara dalam pipeline dan tidak dioutput ke model.

Output fitur overlap bertipe float.

Contoh 1

Kuerinya adalah "high,high2,fiberglass,abc", dan judulnya adalah "high,quality,fiberglass,tube,for,golf,bag".

metode

fitur

query_common_ratio

0.5

title_common_ratio

0.28

is_contain

0

is_equal

0

Contoh 2

method=index_of, dan judulnya adalah the cat sat on the mat.

kueri

fitur

the cat

0

sat

2

the mat

4

cap

-1

gap

-1

sequence_feature

Pengenalan fungsi

Perilaku historis pengguna merupakan fitur penting. Perilaku historis biasanya berupa sekuens, seperti sekuens klik atau sekuens pembelian. Entitas yang membentuk sekuens dapat berupa item itu sendiri atau properti item tersebut.

Konfigurasi

Sebagai contoh, untuk memproses sekuens klik pengguna dengan panjang 50, Anda dapat mengekstraksi fitur item_id, price, dan ts untuk setiap sekuens. Di sini, ts = request_time - event_time. Konfigurasinya sebagai berikut:

{
  "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: Nama sekuens.

  • sequence_length: Panjang maksimum sekuens.

  • sequence_delim: Pemisah antar elemen dalam sekuens.

  • sequence_pk: Kunci utama sekuens, seperti user:click_50_seq. Menyimpan 50 ID item terbaru yang diklik pengguna. Layanan inferensi model menggunakan bidang ini sebagai kunci untuk mengkueri side info.

    • Parameter permintaan untuk layanan inferensi online (EAS Processor) harus menyertakan fitur yang kuncinya adalah nilai sequence_pk.

      • Contohnya: click_50_seq: 5410233389955966;1832586 (Pemisahnya adalah nilai yang dikonfigurasi untuk sequence_delim).

        • Pada contoh sebelumnya, nilai fitur click_50_seq adalah 5.410.233.389.955.966;1.832.586.

    • Sub-fitur sisi-item dari sekuens tidak perlu dikirimkan ke layanan inferensi model dalam parameter permintaan.

      • Layanan inferensi model menggunakan bidang ini sebagai kunci untuk mengkueri side info item.

      • Sebagai contoh, dalam konfigurasi ini, fitur item_id, price dalam fitur sekuens tidak perlu dikirimkan ke layanan inferensi dalam permintaan. Sebaliknya, fitur-fitur tersebut dibaca dari cache item Processor dan digabungkan oleh SDK pembuatan fitur (FG) dalam Processor untuk memastikan formatnya konsisten dengan yang digunakan selama pelatihan offline.

    • Sub-fitur sisi-pengguna dari sekuens harus dikirimkan ke layanan inferensi model dalam parameter permintaan.

      • Nama fiturnya adalah ${sequence_name}__${input_name}, seperti click_50_seq__ts.

      • ${input_name} umumnya dikonfigurasi menggunakan item konfigurasi expression, tetapi konfigurasi dapat bervariasi untuk tipe sub-fitur yang berbeda, dan ${input_name} tidak menyertakan awalan domain input (item: atau user:).

  • features: side info dari sequence, yang mencakup nilai properti statis item dan informasi waktu perilaku.

    • sequence_fields: Menentukan nama bidang dari input sequence. Nilainya berupa string atau array [string].

      • Ketika operator fitur hanya memiliki satu bidang input, konten bidang tersebut harus berupa sequence. Dalam kasus ini, Anda tidak perlu mengonfigurasi sequence_fields.

      • Ketika operator fitur memiliki beberapa bidang input, jika Anda tidak mengonfigurasi sequence_fields, semua fitur sisi item (item:XXX) diasumsikan sebagai bidang input sequence.

    • Tabel input FG yang digunakan dalam Tugas offline harus berisi kolom yang sesuai dengan semua sub-fitur.

      • Jika suatu kolom merupakan sequence (berdasarkan aturan sequence_fields), beri nama kolom tersebut ${sequence_name}__${input_name}.

        • Sebagai contoh, dalam konfigurasi ini, tabel offline memerlukan empat kolom: click_50_seq__item_id, click_50_seq__price, click_50_seq__ts, dan click_50_seq__clk_time_seq.

        • Kami menyarankan agar tipe kolom dalam tabel offline berupa array untuk performa yang lebih baik. Tipe string dengan sequence_delim sebagai pemisah elemen juga didukung.

      • Jika suatu kolom bukan sequence, beri nama ${input_name} tanpa awalan.

        • Sebagai contoh, dalam konfigurasi ini, tabel offline memerlukan satu kolom non-sequence: ${cur_time}.

      • Anda dapat mengonfigurasi input_alias secara global untuk menetapkan alias yang lebih pendek bagi nama kolom yang panjang (lihat contoh di bawah).

    • Operator ini mendukung Pengelompokan. Untuk informasi selengkapnya, lihat Feature binning (discretization). Ketika Pengelompokan dikonfigurasi, tipe elemen output adalah int64, dan bentuknya ditentukan oleh konfigurasi value_dimension di bawah ini.

    • value_dimension (dapat disingkat menjadi value_dim): Dimensi setiap elemen dalam sequence. Untuk sequence_raw_feature, jika diatur ke 1, tipe output-nya adalah array<float>; jika diatur ke nilai lain, tipe output-nya adalah array<array<float>>. Untuk sequence_id_feature, jika diatur ke 1, tipe output-nya adalah array<string>; jika diatur ke nilai lain, tipe output-nya adalah array<array<string>>. Nilai default-nya adalah 0.

Fitur apa pun dapat dikonfigurasi sebagai sub-fitur fitur sekuens, seperti yang ditunjukkan dalam contoh berikut:

{
  "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"
  }
}

Catatan: Parameter input_alias mengonfigurasi alias untuk bidang input. Formatnya adalah "origin_field": "alias_field". Anda dapat menggunakan nama yang lebih pendek untuk menggantikan nama bidang input asli.

Konfigurasi berbasis ubin

Dalam kebanyakan kasus, Anda dapat membuat versi sekuens dari fitur non-sekuens dengan menambahkan awalan sequence_ ke feature_type-nya. Perhatikan bahwa Anda biasanya harus mengonfigurasi default_value untuk versi sekuens fitur.

Contoh:

Kasus khusus 1: Beberapa jenis transformasi fitur memiliki versi sekuens dan non-sekuens.

Dalam kasus ini, Anda dapat mengaktifkan versi yang sesuai dengan mengatur is_sequence: true/false.

Dalam kasus ini, item konfigurasi feature_type tidak perlu awalan sequence_.

Contoh:

Kasus khusus 2: Beberapa jenis transformasi fitur hanya memiliki versi sekuens, bukan versi non-sekuens.

Dalam kasus ini, item konfigurasi feature_type tidak perlu awalan sequence_.

Contoh:

Untuk dua kasus khusus ini, Anda dapat menambahkan konfigurasi opsional berikut:

  • sequence_length: Panjang maksimum sekuens. Kelebihan akan dipotong. Nilai default adalah -1, yang berarti tidak ada pemotongan.

  • sequence_delim: Pemisah antar elemen dalam sekuens. Nilai default adalah ;.

Contoh konfigurasi:

{
  "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
}

Dalam contoh di atas, bidang input clk_item_seq dan clk_item_prices harus berupa sekuens. Bidang-bidang tersebut dapat bertipe array atau string, dengan nilai elemen dipisahkan oleh karakter yang dikonfigurasi dalam sequence_delim.

  • Dengan metode konfigurasi ini, layanan online (Processor) tidak mengkueri sideinfo. Pengguna harus menyediakan input lengkap.

  • Nama bidang input untuk fitur sekuens berbasis ubin tetap sama seperti yang dikonfigurasi dan tidak diberi awalan ${sequence_name}__.

Pembuatan fitur online

Ada dua cara untuk mendapatkan side info perilaku. Pertama, mengambil side info dari cache item EasyRec Processor, yang menggunakan bidang yang dikonfigurasi dalam sequence_pk sebagai kunci utama untuk menemukan informasi properti item dari cache tersebut. Kedua, pengguna menyediakan nilai bidang yang sesuai dalam permintaan. Sebagai contoh, bidang "ts" dalam konfigurasi di atas merepresentasikan (request_time - event_time). Karena nilainya berubah seiring waktu permintaan, nilai tersebut harus diperoleh langsung dari permintaan:

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

Pengenalan fungsi

Operator tokenize_feature melakukan tokenisasi string input dan mengembalikan string yang telah ditokenisasi atau ID token-nya. Operator ini mendukung file tokenizer.json dari tokenize-cpp.

Format kamus tokenisasi:

1. https://github.com/huggingface/tokenizers

2. https://github.com/mlc-ai/tokenizers-cpp

Konfigurasi

{
    "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": ","
}

Nama bidang

Wajib

Deskripsi

feature_name

Ya

Nama fitur.

expression

Ya

Bidang sumber tempat fitur bergantung. Sumber harus berupa user, item, atau context.

vocab_file

Ya

Jalur ke file kosakata.

default_value

-

Nilai default untuk string input.

tokenizer_type

-

Opsional. Jenis tokenizer. Jika Anda mengaturnya ke `sentencepiece` atau membiarkannya tidak diatur, konten JSON vocab_file menentukan tokenizer Hugging Face mana yang digunakan.

output_type

-

  • word_id: Menghasilkan ID.

  • word: Menghasilkan string yang telah ditokenisasi.

output_delim

-

Pemisah untuk word_id atau word output. Ini hanya digunakan dalam tugas offline.

stub_type

Tidak

Opsional. Nilai default adalah false. Jika Anda mengatur parameter ini ke true, transformasi fitur yang dikonfigurasi hanya digunakan sebagai hasil antara dalam pipeline dan tidak dioutput ke model.

Contoh

Jika output_type=word_id, operator mengambil string sebagai input dan menghasilkan string ID token yang dipisahkan koma.

Tipe

item:title

Fitur output

string

It is good today!

1147,310,1175,3063,2

Contoh file konfigurasi

Nama file

Jenis Tokenizer

Tautan unduhan

bert-base-chinese-vocab.json

WordPiece

Tautan unduhan

tokenizer.json

BPE

Tautan unduhan

spiece.model

sentencepiece

Tautan unduhan

text_normalizer

Pengenalan fungsi

Operator ini menjalankan normalisasi teks, termasuk konversi huruf besar/kecil, konversi Tionghoa tradisional ke sederhana, konversi karakter lebar penuh ke setengah lebar, penyaringan karakter khusus, konversi pengkodean GBK/UTF8, dan pemisahan karakter Tionghoa.

Konfigurasi

{
    "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
}

Nama bidang

Wajib

Deskripsi

feature_name

Ya

Nama fitur.

expression

Ya

Bidang sumber tempat fitur bergantung. Sumber harus berupa user, item, atau context.

stop_char_file

Tidak

Jalur ke file yang menyimpan karakter khusus yang akan dihapus. File ini harus menggunakan pengkodean GBK. Jika tidak dikonfigurasi, sistem menggunakan daftar bawaan karakter khusus.

max_length

-

Jika panjang teks input melebihi nilai ini, normalisasi teks tidak dilakukan, dan nilai input dioutputkan apa adanya.

remove_space

-

Menentukan apakah spasi akan dihapus.

is_gbk_input

Tidak

Menentukan apakah input berkode GBK. false menunjukkan bahwa input berkode UTF-8.

is_gbk_output

Tidak

Menentukan apakah output menggunakan pengkodean GBK. false menunjukkan bahwa output menggunakan pengkodean UTF-8.

parameter

-

Opsi normalisasi teks.

default_value

Tidak

Nilai default yang digunakan ketika fitur input kosong.

Catatan:

  • File stop_char_file harus menggunakan pengkodean GBK.

  • Setiap baris dalam file stop_char_file hanya boleh berisi satu karakter. Jika tidak, penyaringan akan gagal.

Opsi normalisasi teks

Untuk parameter, pilih satu atau beberapa nilai numerik berikut dan jumlahkan.

Sebagai contoh, untuk mengonversi huruf besar ke kecil, lebar penuh ke setengah lebar, Tionghoa tradisional ke sederhana, dan menyaring karakter khusus, atur parameter=4+8+16+32=60.

Nilai default parameter adalah 60.

#define __NORMALIZED_LOWER2UPPER__ 		2 			/*Mengonversi huruf kecil ke besar*/
#define __NORMALIZED_UPPER2LOWER__ 		4 			/*Mengonversi huruf besar ke kecil*/
#define __NORMALIZED_SBC2DBC__ 			8 			/*Mengonversi lebar penuh ke setengah lebar*/
#define __NORMALIZED_BIG52GBK__			16 			/*Mengonversi Tionghoa tradisional ke sederhana*/
#define __NORMALIZED_FILTER__ 			32 			/*Menyaring karakter khusus*/
#define __NORMALIZED_SPLITCHARS__		512 		/*Memisahkan karakter Tionghoa menjadi karakter tunggal (dipisahkan spasi)*/

Contoh

{
  "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

Pengenalan fungsi

Algoritma BM25 (Best Matching) adalah algoritma pencocokan teks utama di bidang temu balik informasi, biasanya digunakan untuk penilaian relevansi pencarian. Algoritma ini mengurai kueri menjadi morfem . Kemudian, untuk setiap hasil pencarian D, algoritma menghitung skor relevansi setiap morfem dengan D. Akhirnya, algoritma menghitung jumlah tertimbang dari skor relevansi relatif terhadap D untuk mendapatkan skor relevansi antara kueri dan D.

Untuk teks Tionghoa, Anda dapat melakukan tokenisasi kueri sebagai analisis morfem, memperlakukan setiap kata (istilah) sebagai morfem .

Rumus umum algoritma BM25 adalah sebagai berikut:

Di sini, merepresentasikan kueri, merepresentasikan istilah ke- dalam kueri, merepresentasikan dokumen, merepresentasikan bobot , dan R(qi,d) merepresentasikan skor relevansi terhadap dokumen .

Importansi istilah

Ada beberapa metode untuk menentukan bobot relevansi istilah terhadap dokumen. Metode yang umum digunakan adalah Inverse Document Frequency (IDF). Rumus IDF adalah sebagai berikut:

Di sini, merepresentasikan jumlah total dokumen dalam korpus, dan merepresentasikan jumlah total dokumen dalam korpus yang berisi qi.

Definisi IDF menunjukkan bahwa untuk koleksi dokumen tertentu, semakin banyak dokumen yang berisi , semakin rendah bobotnya. Dengan kata lain, ketika banyak dokumen berisi , istilah tersebut tidak membedakan dengan baik di antara mereka. Oleh karena itu, kurang penting untuk menentukan relevansi.

Relevansi istilah

Skor relevansi antara istilah dan dokumen adalah . Bentuk umum skor relevansi dalam BM25 adalah sebagai berikut:

Dalam rumus ini, adalah faktor penyesuaian. Faktor-faktor ini biasanya diatur berdasarkan pengalaman, dengan nilai umum . adalah frekuensi dalam , dan adalah frekuensi dalam kueri. adalah panjang dokumen , dan adalah panjang rata-rata semua dokumen. Karena biasanya hanya muncul sekali dalam kebanyakan kueri, . Oleh karena itu, rumus dapat disederhanakan sebagai berikut:

Definisi K menunjukkan bahwa parameter menyesuaikan efek panjang dokumen terhadap relevansi. Semakin besar nilai , semakin besar pengaruh panjang dokumen terhadap skor relevansi, dan sebaliknya. Dokumen yang lebih panjang menghasilkan nilai yang lebih besar dan skor relevansi yang lebih kecil. Dokumen yang lebih panjang memiliki peluang lebih besar untuk berisi . Oleh karena itu, untuk nilai yang sama, dokumen panjang dianggap kurang relevan terhadap dibandingkan dokumen pendek terhadap .

Secara ringkas, rumus skor relevansi untuk algoritma BM25 adalah sebagai berikut:

Rumus BM25 menunjukkan bahwa berbagai metode perhitungan skor relevansi pencarian dapat diturunkan menggunakan berbagai metode untuk tokenisasi, pembobotan istilah, dan penentuan relevansi antara istilah dan dokumen. Hal ini memberikan fleksibilitas signifikan untuk desain algoritma.

Metode konfigurasi

{
  "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": ""
}

Nama bidang

Wajib

Deskripsi

feature_name

Ya

Nama fitur output akhir.

query

Ya

Sumber bidang kueri yang digunakan fitur.

document

Ya

Sumber bidang dokumen yang digunakan fitur.

term_doc_freq_file

Tidak

Jalur ke file yang berisi istilah dan jumlah dokumen yang berisi setiap istilah. Setiap baris berisi satu catatan, dengan istilah dan jumlah dokumennya dipisahkan oleh karakter spasi putih.

term_doc_freq_dict

Tidak

Isinya sama seperti term_doc_freq_file tetapi dalam format dictionary. Kuncinya adalah istilah dan nilainya adalah jumlah dokumen yang berisi istilah tersebut.

k1

Tidak

Parameter untuk algoritma BM25. Nilai default adalah 1.2. Nilai umum meliputi 1.2 dan 2.0.

b

Tidak

Parameter untuk algoritma BM25. Nilai default adalah 0.75.

separator

Tidak

Pemisah untuk fitur input bernilai ganda. Nilai default adalah \u001D. Pemisah harus berupa satu karakter.

normalizer

Tidak

Metode normalisasi. Untuk informasi selengkapnya, lihat konfigurasi raw_feature.

default_value

Tidak

Nilai default yang digunakan jika fitur input kosong.

stub_type

Tidak

Nilai default adalah false. Jika diatur ke true, transformasi fitur yang dikonfigurasi hanya digunakan sebagai hasil antara dalam pipeline dan tidak disertakan dalam output akhir ke model.

  • Gunakan salah satu dari term_doc_freq_file atau term_doc_freq_dict. Yang pertama memiliki prioritas, dan sistem menggunakannya jika keduanya dikonfigurasi.

  • Untuk menggunakan fitur ini untuk layanan online, letakkan file term_doc_freq_file dan fg.json dalam folder yang sama.

kv_dot_product

Pengenalan fungsi

Menghitung hasil kali titik dua vektor indeks key-value atau ukuran irisan dua himpunan.

Metode konfigurasi

{
  "feature_type": "kv_dot_product",
  "feature_name": "query_doc_sim",
  "query": "user:query",
  "document": "item:title",
  "separator": "|",
  "default_value": "0"
}

Nama bidang

Wajib

Deskripsi

feature_name

Ya

Nama fitur output.

query

Ya

Sumber bidang kueri tempat fitur bergantung.

document

Ya

Sumber bidang dokumen tempat fitur bergantung.

separator

Tidak

Menentukan pemisah untuk fitur input bernilai ganda. Nilai default adalah "\u001D". Pemisah harus berupa satu karakter.

kv_delimiter

Tidak

Menentukan pemisah antara pasangan kunci-nilai dalam fitur input. Nilai default adalah ":". Pemisah harus berupa satu karakter.

normalizer

Tidak

Metode normalisasi. Untuk informasi selengkapnya, lihat konfigurasi raw_feature.

default_value

Tidak

Nilai default yang digunakan jika fitur input kosong. Nilai default adalah 0.

stub_type

Tidak

Nilai default adalah `false`. Jika parameter ini diatur ke `true`, transformasi fitur yang dikonfigurasi hanya digunakan sebagai hasil antara dalam pipeline dan tidak dioutput ke model.

  • Fitur ini mendukung tipe input kompleks, seperti array dan map. Gunakan tipe kompleks bila memungkinkan.

  • Jika input tidak memiliki bagian value, nilai default value adalah 1,0. Gunakan perilaku ini untuk menghitung ukuran irisan dua himpunan.

  • Jika default_value tidak dikonfigurasi, nilai default-nya diatur ke 0.

Contoh

kueri

dokumen

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(Klik untuk memperluas detail)

Pengenalan fungsi

str_replace_feature adalah fitur penggantian string yang mengganti semua substring yang cocok dengan substring yang ditentukan.

Pencocokan yang tumpang tindih diganti secara rakus.

Metode konfigurasi

{
  "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
}

Nama bidang

Deskripsi

feature_name

Wajib. Nama fitur output.

expression

Wajib. Ekspresi menjelaskan bidang sumber tempat fitur bergantung.

default_value

Opsional. Nilai default yang digunakan jika fitur input kosong.

replacements

Opsional. Parameter ini menjadi wajib jika replace_file tidak diatur. Dictionary yang memetakan teks asli ke teks pengganti.

replace_file

Opsional. Parameter ini menjadi wajib jika replacements tidak diatur. File dictionary di mana setiap baris berisi pasangan teks asli \t teks pengganti. Pemisahnya adalah karakter tab (\t).

is_sequence

Opsional. Menandai apakah fitur merupakan fitur sekuens. Nilai default adalah false.

sequence_length

Opsional. Panjang maksimum sekuens. Sekuens dipotong jika melebihi panjang ini.

sequence_delim

Opsional. Pemisah antar elemen sekuens. Atur ini hanya ketika input berupa string.

separator

Opsional. Parameter ini hanya berlaku ketika is_sequence=true. Menentukan pemisah untuk input bernilai ganda. Nilai default adalah "\u001D". Pemisah harus berupa satu karakter.

value_dimension

Opsional. Nilai default adalah 0. Ini dapat digunakan dalam tugas offline untuk memotong output.

stub_type

Opsional. Nilai default adalah false. Jika diatur ke true, transformasi fitur yang dikonfigurasi hanya digunakan sebagai hasil antara dalam pipeline dan tidak dioutput ke model.

  • Anda dapat mengonfigurasi kedua replace_file dan replacements. Dictionary penggantian digabungkan. Dictionary replacements memiliki prioritas lebih tinggi.

  • Operasi Pengelompokan didukung. Untuk metode konfigurasi, lihat dokumentasi operasi Pengelompokan Fitur (Diskretisasi):

    • hash_bucket_size: Melakukan hash pada hasil transformasi fitur dan melakukan operasi modulo.

    • vocab_list: Mengelompokkan input berdasarkan daftar kosakata dan memetakan input ke indeks dalam kosakata.

    • vocab_dict: Hasil pengelompokan adalah nilai dari dictionary vocab_dict yang sesuai dengan nilai fitur.

    • vocab_file: Membaca vocab_list atau vocab_dict dari file.

  • Input bernilai ganda bertipe array didukung.

Contoh

Hasil eksekusi konfigurasi di atas adalah sebagai berikut:

Nilai user:query

Fitur output

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(Klik untuk memperluas detail)

Pengenalan fungsi

Fitur regex_replace_feature mengganti substring yang cocok dengan substring yang ditentukan.

Anda dapat mengonfigurasi beberapa pola. Substring apa pun yang cocok dengan salah satu pola akan diganti.

Metode konfigurasi

{
  "feature_name": "query",
  "feature_type": "regex_replace_feature",
  "expression": ["user:query"],
  "regex_pattern": "\\|",
  "replacement": " ",
  "default_value": ""
}

Nama bidang

Deskripsi

feature_name

Wajib. Nama fitur output.

expression

Wajib. Ekspresi menjelaskan bidang sumber tempat fitur bergantung.

default_value

Opsional. Nilai default yang digunakan jika fitur input kosong.

regex_pattern

Wajib. Ekspresi reguler. Segmen teks yang cocok akan diganti.

replacement

Opsional. Teks pengganti. Jika parameter ini kosong, segmen teks yang cocok akan dihapus.

replace_all

Opsional. Menentukan apakah akan melakukan penggantian global. Nilai default adalah true. Jika Anda mengatur parameter ini ke false, hanya kemunculan pertama pola yang diganti.

icase

Opsional. Menentukan apakah pencocokan ekspresi reguler peka huruf besar/kecil. Nilai default adalah false.

is_sequence

Opsional. Menandai apakah fitur merupakan fitur sekuens. Nilai default adalah false.

sequence_length

Opsional. Panjang maksimum sekuens. Sekuens dipotong jika melebihi nilai ini.

sequence_delim

Opsional. Pemisah antar elemen sekuens. Atur parameter ini hanya ketika input berupa string.

separator

Opsional. Parameter ini hanya berlaku ketika is_sequence=true. Menentukan pemisah untuk input bernilai ganda. Nilai default adalah "\u001D". Hanya satu karakter yang didukung.

value_dimension

Opsional. Nilai default adalah 0. Anda dapat menggunakan parameter ini dalam tugas offline untuk memotong output.

stub_type

Opsional. Nilai default adalah false. Jika parameter ini diatur ke true, transformasi fitur yang dikonfigurasi hanya digunakan sebagai hasil antara dalam pipeline dan tidak disertakan dalam output akhir ke model.

  • Fitur ini mendukung operasi pengelompokan. Untuk informasi lebih lanjut tentang konfigurasi, lihat dokumen Pengelompokan fitur (diskretisasi):

    • hash_bucket_size: Melakukan hash dan operasi modulo pada hasil transformasi fitur.

    • vocab_list: Mengelompokkan data berdasarkan daftar kosakata dan memetakan input ke indeks dalam daftar.

    • vocab_dict: Hasil pengelompokan adalah nilai dari dictionary vocab_dict yang sesuai dengan nilai fitur.

    • vocab_file: Membaca vocab_list atau vocab_dict dari file.

  • Fitur ini mendukung input bernilai ganda bertipe array.

Contoh

Nilai user:query

Fitur output

China|People|Republic

People's Republic of China

Feature|Generation|Tool|Is great

Feature Generation Tool Is great

bool_mask_feature (Klik untuk memperluas detail)

Pengenalan fungsi

Menyaring elemen menggunakan nilai Boolean. Ini mirip dengan tf.boolean_mask(tensor, mask).

Ini adalah fitur sekuens.

Konfigurasi

{
  "feature_name": "mask_feature",
  "feature_type": "bool_mask_feature",
  "value_type": "float",
  "expression": [
    "user:click_items",
    "item:is_valid"
  ],
  "sequence_delim": ","
}

Nama bidang

Makna

feature_name

Wajib. `feature_name` adalah awalan untuk fitur output akhir.

expression

Wajib. Daftar. `expression` menjelaskan bidang sumber untuk fitur. Bidang kedua adalah mask.

default_value

Opsional. Nilai default yang digunakan ketika fitur input kosong. Jika parameter ini tidak diatur, nilai default adalah 0 ketika value_type bertipe numerik.

value_type

Wajib. Tipe data fitur output.

sequence_length

Opsional. Panjang maksimum sekuens. Sekuens dipotong jika melebihi panjang ini.

sequence_delim

Opsional. Pemisah antar elemen sekuens. Parameter ini wajib hanya jika input berupa string.

separator

Opsional. Pemisah bernilai ganda untuk input. Nilai default adalah "\u001D". Pemisah harus berupa satu karakter.

value_dimension

Opsional. Nilai default adalah 0. Parameter ini digunakan dalam tugas offline untuk memotong output.

normalizer

Opsional. Metode normalisasi. Parameter ini hanya berlaku untuk fitur numerik. Untuk informasi selengkapnya, lihat RawFeature.

stub_type

Opsional. Nilai default adalah false. Jika diatur ke true, transformasi fitur hanya digunakan sebagai hasil antara dalam pipeline. Fitur ini tidak disertakan dalam output akhir ke model.

  • Mendukung operasi pengelompokan. Untuk informasi lebih lanjut tentang konfigurasi, lihat Pengelompokan fitur (diskretisasi).

  • Mendukung input bernilai ganda yang direpresentasikan oleh tipe array dan tipe array bersarang.

Contoh

Input

Mask

Output

"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]

Penggunaan dengan fitur ekspresi

{
  "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

Pengenalan fungsi

Memotong array input menggunakan sintaks mirip Python atau mendapatkan elemen dari indeks tertentu.

Ini adalah jenis fitur sekuens.

Konfigurasi

{
  "feature_name": "test_feature",
  "feature_type": "slice_feature",
  "value_type": "float",
  "expression": [
    "user:click_items"
  ],
  "slice": "2:4"
}

Nama bidang

Deskripsi

feature_name

Wajib. feature_name digunakan sebagai awalan untuk fitur output akhir.

expression

Wajib. Daftar. expression menjelaskan bidang sumber tempat fitur bergantung. Bidang kedua merepresentasikan Mask.

default_value

Opsional. Nilai default yang digunakan jika fitur input kosong. Jika tidak ditentukan, nilai default adalah 0 ketika value_type bertipe numerik.

value_type

Wajib. Menentukan tipe fitur output.

sequence_length

Panjang maksimum sekuens. Jika panjangnya melebihi nilai ini, sekuens dipotong.

sequence_delim

Pemisah antar elemen sekuens. Atur parameter ini hanya jika input berupa string.

separator

Opsional. Pemisah untuk input bernilai ganda. Nilai default adalah "\u001D". Hanya satu karakter yang diperbolehkan.

value_dimension

Opsional. Nilai default adalah 0. Parameter ini dapat digunakan dalam tugas offline untuk memotong output.

normalizer

Opsional. Metode normalisasi. Ini hanya berlaku untuk fitur numerik. Untuk informasi selengkapnya, lihat RawFeature.

stub_type

Opsional. Nilai default adalah false. Jika diatur ke true, transformasi fitur yang dikonfigurasi hanya digunakan sebagai hasil antara dalam pipeline dan tidak disertakan dalam output akhir ke model.

placeholder

Nilai khusus yang digunakan dalam fitur sekuens untuk mengisi posisi kosong dan melengkapi dimensi. Nilai default untuk bilangan titik mengambang adalah NaN. Nilai default untuk bilangan bulat adalah nilai minimum dari tipe yang sesuai. Untuk informasi selengkapnya, lihat item konfigurasi placeholder untuk operator fitur kustom.

  • Mendukung operasi pengelompokan. Untuk informasi selengkapnya, lihat Pengelompokan fitur (diskretisasi).

  • Mendukung input bernilai ganda menggunakan tipe array dan tipe array bersarang.

Contoh

Ketika sequence_delim="," dan value_dimension=1, input dan output adalah sebagai berikut:

Input

slice

Output

"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]