id_feature
Ikhtisar
Operator id_feature memproses fitur diskrit, baik bernilai tunggal seperti ID pengguna maupun bernilai ganda seperti warna yang tersedia untuk suatu item.
Konfigurasi
{
"feature_type": "id_feature",
"feature_name": "item_is_main",
"expression": "item:is_main",
"need_prefix": true,
"separator": "\u001D",
"default_value": ""
}Parameter | Wajib | Deskripsi |
feature_name | Ya | Nama fitur output. Nama ini juga digunakan sebagai awalan dalam nilai fitur yang dihasilkan. |
expression | Ya | Bidang sumber yang digunakan untuk menghasilkan fitur. |
need_prefix | Tidak | Menentukan apakah akan menambahkan
|
value_type | Tidak | Tipe data fitur output. Default-nya adalah |
separator | Tidak | Pemisah nilai ganda untuk fitur input. Default-nya adalah |
default_value | Tidak | Nilai default yang digunakan ketika fitur input kosong. |
weighted | Tidak | Menandai apakah input berada dalam format kunci:nilai. Jika diatur ke |
value_dimension | Tidak | Memotong output ketika fitur memiliki beberapa nilai. Nilai default-nya adalah Jika nilainya |
stub_type | Tidak | Jika diatur ke |
Operator ini mendukung pengelompokan fitur. Untuk detail konfigurasi, lihat Pengelompokan fitur (diskretisasi).
Operator ini mendukung input bernilai ganda bertipe
array.
Contoh
Contoh berikut menunjukkan input dan output untuk fitur item:is_main dengan konfigurasi berbeda.
Tipe | Nilai | 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 nilai ganda, yaitu satu karakter dengan kode ASCII "\x1D", yang juga dapat ditulis sebagai "\u001d".
raw_feature
Ikhtisar
Operator raw_feature memproses fitur kontinu dan mendukung tipe numerik seperti int, float, dan double, baik untuk fitur bernilai tunggal maupun bernilai ganda.
Konfigurasi
{
"feature_type" : "raw_feature",
"feature_name" : "ctr",
"expression" : "item:ctr",
"normalizer" : "method=log10"
}Parameter | Wajib | Deskripsi |
feature_name | Ya | Menentukan nama fitur. |
expression | Ya | Bidang sumber tempat fitur bergantung. Sumber yang valid adalah |
normalizer | Tidak | Metode normalisasi. Untuk detailnya, lihat bagian Normalizer. |
value_type | Tidak | Tipe data fitur output. Default: |
separator | Tidak | Pemisah untuk fitur input bernilai ganda. Default-nya adalah |
default_value | Tidak | Nilai default untuk fitur input yang kosong. |
value_dimension | Tidak | Dimensi bidang output. Default-nya adalah |
stub_type | Tidak | Default-nya adalah |
Operator ini mendukung pengelompokan fitur. Untuk detail konfigurasi, lihat Pengelompokan fitur (diskretisasi).
Operator ini mendukung input array bernilai ganda.
Contoh
^] merepresentasikan pemisah nilai ganda, yaitu satu karakter dengan encoding ASCII "\x1D", bukan dua karakter.
Tipe | Nilai | Fitur output |
int64_t | 100 | 100 |
double | 100.1 | 100.1 |
Int bernilai ganda | 123^]456 | [123, 456] (Dimensi bidang input harus sesuai dengan yang ditentukan dalam parameter |
Normalizer
Parameter raw_feature dan match_feature mendukung empat jenis normalizer: minmax, zscore, log10, expression. Konfigurasi dan metode perhitungannya sebagai berikut:
minmax
Contoh konfigurasi:
method=minmax,min=2.1,max=2.2Rumus:
x' = (x - min) / (max - min)zscore
Contoh konfigurasi:
method=zscore,mean=0.0,standard_deviation=10.0Rumus:
x' = (x - mean) / standard_deviationlog10
Contoh konfigurasi:
method=log10,threshold=1e-10,default=-10Rumus:
x' = log10(x)jikax > threshold; jika tidak,x' = defaultexpression
Contoh konfigurasi:
method=expression,expr=sign(x)Rumus: Memungkinkan Anda mendefinisikan fungsi atau ekspresi kustom. Nilai input direpresentasikan oleh variabel
x.
expr_feature
Ikhtisar
Operator expr_feature mengevaluasi ekspresi matematika dan mengembalikan hasilnya sebagai nilai fitur. Operator ini mendukung Batch Computing dan Broadcasting.
Penting: Semua input harus dapat dikonversi ke tipe data double.
Konfigurasi
{
"feature_type" : "expr_feature",
"feature_name" : "ctr_sigmoid",
"value_type": "float",
"expression" : "sigmoid(pv/(1+click))",
"variables": ["item:pv", "item:click"]
}Ketika pv = 2, click = 3, nilai fitur ekspresi di atas adalah 0.6224593312.
Parameter | Wajib | Deskripsi |
feature_name | Ya | Menentukan nama fitur output. |
expression | Ya | Menentukan ekspresi matematika yang akan dievaluasi. |
variables | Ya | Menentukan variabel, atau bidang input, yang digunakan dalam ekspresi. Sumber untuk setiap variabel harus berupa |
value_type | Tidak | Opsional. Menentukan tipe data fitur output. Nilai yang valid adalah |
separator | Tidak | Opsional. Menentukan pemisah untuk bidang input |
default_value | Tidak | Opsional. Menentukan nilai default yang digunakan ketika fitur input kosong. |
value_dimension | Tidak | Nilai default-nya adalah 0, yang merepresentasikan dimensi bidang output dan dapat digunakan untuk memotong atau mengisi output. Tipe skema tabel output adalah |
stub_type | Tidak | Opsional. Jika diatur ke |
Contoh
{
"feature_name": "expr_feat",
"feature_type": "expr_feature",
"value_type": "float",
"expression": "a+b",
"variables": ["a", "b"],
"value_dimension": 3
}Komputasi skalar dan vektor (Broadcasting)
Ketika
a=1danb=[1, 2, 6], hasilnya adalah[2, 3, 7].
Komputasi
element-wisevektor-ke-vektorKetika
a=[3, 2, 1]danb=[1, 2, 6], hasilnya adalah[4, 4, 7].
Variabel Sementara dan Ekspresi Koma
Contohnya:
x=roundp(a),(a-x)*b. Dalam contoh ini,xadalah variabel sementara dan tidak perlu dikonfigurasi dalamvariables.Ekspresi koma dievaluasi dari kiri ke kanan, dan mengembalikan nilai sub-ekspresi paling kanan sebagai hasil akhir.
Untuk mengurangi overhead memori, Anda dapat menggunakan ulang variabel yang ada sebagai variabel sementara ketika secara semantik sesuai.
Menggabungkan 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
Menghasilkan bilangan acak dalam rentang [0, 1).
sin
1
Menghitung sinus suatu bilangan.
cos
1
Menghitung cosinus suatu bilangan.
tan
1
Menghitung tangen suatu bilangan.
asin
1
Menghitung arcsinus suatu bilangan.
acos
1
Menghitung arccosinus suatu bilangan.
atan
1
Menghitung arctangen suatu bilangan.
sinh
1
Menghitung sinus hiperbolik suatu bilangan.
cosh
1
Menghitung cosinus hiperbolik suatu bilangan.
tanh
1
Menghitung tangen hiperbolik suatu bilangan.
asinh
1
Menghitung sinus hiperbolik invers suatu bilangan.
acosh
1
Menghitung cosinus hiperbolik invers suatu bilangan.
atanh
1
Menghitung tangen hiperbolik invers suatu bilangan.
log2
1
Menghitung logaritma basis-2 suatu bilangan.
log10
1
Menghitung logaritma basis-10 suatu bilangan.
log
1
Menghitung logaritma natural (basis e) suatu bilangan.
ln
1
Menghitung logaritma natural (basis e) suatu bilangan.
exp
1
Memangkatkan bilangan Euler (e) dengan pangkat suatu bilangan.
sqrt
1
Menghitung akar kuadrat suatu bilangan.
sign
1
Mengembalikan tanda suatu bilangan: -1 untuk negatif, 1 untuk positif, atau 0 untuk nol.
abs
1
Menghitung nilai absolut suatu bilangan.
rint
1
Membulatkan bilangan ke bilangan bulat terdekat.
round
1
Membulatkan bilangan ke bilangan bulat terdekat menggunakan metode 'round half away from zero'.
roundp
2
Membulatkan bilangan ke presisi tertentu. Misalnya,
roundp(3.14159, 2)mengembalikan3.14.mod
2
Menghitung sisa pembagian.
floor
1
Membulatkan bilangan ke bawah ke bilangan bulat terdekat.
ceil
1
Membulatkan bilangan ke atas ke bilangan bulat terdekat.
trunc
1
Memotong bilangan menjadi bilangan bulat dengan menghapus bagian pecahannya.
sigmoid
1
Menghitung sigmoid suatu bilangan.
sphere_dist
4
Menghitung jarak bola antara dua titik GPS. Argumen:
lng1,lat1,lng2,lat2.haversine
4
Menghitung jarak Haversine antara dua titik GPS. Argumen:
lng1,lat1,lng2,lat2.min
Variabel
Mengembalikan nilai minimum dari daftar argumen.
max
Variabel
Mengembalikan nilai maksimum dari daftar argumen.
sum
Variabel
Mengembalikan jumlah semua argumen.
avg
Variabel
Mengembalikan nilai rata-rata semua argumen.
Catatan: Fungsi bawaan ini mendukung Batch Computing dan Broadcasting.
Fungsi operasi vektor bawaan
Nama fungsi
Jumlah parameter
Deskripsi
len
1
Mengembalikan panjang (jumlah elemen) suatu vektor.
l2_norm
1
Melakukan normalisasi L2 pada suatu vektor.
squared_norm
1
Menghitung norma L2 kuadrat dari suatu vektor.
dot
2
Menghitung produk dot dua vektor.
euclid_dist
2
Menghitung jarak Euclidean antara dua vektor.
corr
2
Menghitung koefisien korelasi Pearson antara dua vektor.
std_dev
1
Menghitung deviasi standar sampel suatu vektor (membagi dengan n-1).
pop_std_dev
1
Menghitung deviasi standar populasi suatu vektor (membagi dengan n).
variance
1
Menghitung varians sampel suatu vektor (membagi dengan n-1).
pop_variance
1
Menghitung varians populasi suatu vektor (membagi dengan n).
reduce_min
1
Mengembalikan nilai minimum dalam suatu vektor.
reduce_max
1
Mengembalikan nilai maksimum dalam suatu vektor.
reduce_sum
1
Mengembalikan jumlah semua elemen dalam suatu vektor.
reduce_mean
1
Mengembalikan nilai rata-rata semua elemen dalam suatu vektor.
reduce_prod
1
Mengembalikan hasil perkalian semua elemen dalam suatu vektor.
Catatan: Jika suatu ekspresi mencakup fungsi operasi vektor bawaan, semua variabel lain dalam ekspresi tersebut harus berupa skalar.
Operator biner bawaan
Operator
Deskripsi
Prioritas
=
Penugasan. Operator khusus ini memodifikasi salah satu argumennya dan hanya berlaku untuk variabel.
0
||
OR logis
1
&&
AND logis
2
|
OR bitwise
3
&
AND bitwise
4
<=
Kurang dari atau sama dengan
5
>=
Lebih dari atau sama dengan
5
!=
Tidak sama dengan
5
==
Sama dengan
5
>
Lebih dari
5
<
Kurang dari
5
+
Penambahan
6
-
Pengurangan
6
*
Perkalian
7
/
Pembagian
7
%
Modulo
7
^
Memangkatkan x ke pangkat y
8
Operator ternary bawaan
Mendukung logika if-then-else menggunakan sintaks gaya C.
Menggunakan evaluasi malas (lazy evaluation), artinya hanya cabang ekspresi yang diperlukan yang dievaluasi.
Operator
Deskripsi
Sintaks
?:
Operator if-then-else
condition ? value_if_true : value_if_falseKonstanta bawaan
Konstanta
Deskripsi
Nilai
_pi
Konstanta matematika pi (π).
3.141592653589793
_e
Konstanta matematika e, juga dikenal sebagai bilangan Euler.
2.718281828459045
combo_feature
Ikhtisar
Operator combo_feature membuat kombinasi fitur, atau Produk Kartesius, dari beberapa bidang input atau ekspresi. Proses ini juga dikenal sebagai persilangan fitur. Anda dapat menganggap operator id_feature sebagai kasus khusus dari combo_feature di mana hanya satu bidang yang digunakan untuk persilangan. Biasanya, bidang-bidang yang terlibat dalam persilangan berasal dari sumber data yang berbeda, misalnya saat melakukan persilangan 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": ""
}
Parameter | Wajib | Deskripsi |
feature_name | Ya | Menentukan awalan untuk fitur output. |
expression | Ya | Array yang menentukan bidang sumber tempat fitur bergantung. |
need_prefix | Tidak | Menunjukkan apakah akan menambahkan
|
value_type | Tidak | Menentukan tipe data fitur output. Nilai default-nya adalah |
separator | Tidak | Menentukan pemisah nilai ganda untuk fitur input. Nilai default-nya adalah |
default_value | Tidak | Menentukan nilai default yang digunakan ketika fitur input kosong. |
value_dimension | Tidak | Nilai default-nya adalah 0, yang dapat digunakan dalam tugas offline untuk memotong output. Jika nilainya 1, tipe skema tabel output adalah |
stub_type | Tidak | Nilai default-nya adalah |
Operator ini mendukung Pengelompokan Fitur. Untuk informasi lebih lanjut, lihat Pengelompokan Fitur (Diskretisasi).
Operator ini mendukung input bernilai ganda bertipe
array.
Contoh
Simbol ^] merepresentasikan pemisah nilai ganda. Simbol ini adalah satu karakter dengan kode ASCII \x1D, bukan dua karakter terpisah.
user:age_class | 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 dihitung sebagai:
|F1| * |F2| * ... * |Fn|Di mana |Fn| merepresentasikan jumlah nilai dalam bidang input ke-n.
lookup_feature
Ikhtisar
Operator lookup_feature mirip dengan match_feature. Operator ini mengambil nilai dari sekumpulan pasangan kunci-nilai.
Operator ini memerlukan parameter map dan key:
mapadalah tipe dictionary atau bidang bertipe MultiString, di mana setiap string memiliki format "k1:v1".keydapat berupa bidang bertipe apa pun. Input bertipe array direkomendasikan untuk beberapa kunci. Untuk menghasilkan fitur, nilai kunci diambil, dikonversi ke tipe kunci darimap, 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
}Parameter | Wajib | Deskripsi |
feature_name | Ya | Menentukan awalan untuk fitur output. |
map | Ya | Menentukan dictionary yang berisi sekumpulan pasangan kunci-nilai. |
key | Ya | Menentukan kunci untuk dicari dalam dictionary. |
value_type | Tidak | Menentukan tipe data fitur output. Default-nya adalah |
separator | Tidak | Menentukan pemisah nilai ganda untuk bidang |
default_value | Tidak | Menentukan nilai default yang digunakan ketika |
need_prefix | Tidak | Mengontrol apakah akan menambahkan
|
need_key | Tidak | Mengontrol apakah akan menambahkan
|
normalizer | Tidak | Menentukan metode normalisasi. Parameter ini bekerja seperti parameter |
combiner | Tidak | Menentukan metode agregasi untuk menggabungkan nilai yang diambil dari beberapa kunci. Nilai yang valid: |
need_discrete | Tidak | Mengontrol apakah akan mengembalikan beberapa nilai sebagai array diskrit. Jika diatur ke |
value_dimension | Tidak | Menentukan dimensi fitur output. Parameter ini dapat digunakan untuk memotong output dalam tugas offline.
|
stub_type | Tidak | Jika diatur ke |
Operator ini mendukung Pengelompokan. Untuk instruksi konfigurasi, lihat Pengelompokan Fitur (Diskretisasi).
Parameter
mapmenerima objek dictionary, dan parameterkeymenerima array.
Contoh
Berdasarkan konfigurasi di atas, asumsikan data input berikut:
item_attr : "k1:v1^]k2:v2^]k3:v3"^] merepresentasikan pemisah nilai ganda. Ini adalah satu karakter dengan encoding ASCII "\x1D", bukan dua karakter. Anda dapat memasukkan karakter ini di emacs dengan menekan C-q C-5, dan di vim dengan menekan C-v C-5. Di sini, item_attr adalah string bernilai ganda.
Ketika menggunakan string untuk parameter map, beberapa pasangan kunci-nilai harus disediakan sebagai string bernilai ganda, bukan string tunggal.
item_value : "k2"Hasil transformasi fitur adalah item_match_item_k2_v2.
Contoh dengan need_prefix diatur ke true
feature_name: fg
map: {"k1:123", "k2:234", "k3:3"}
key: {"k1"}
Result: feature={"fg_123"}Contoh dengan need_prefix diatur ke false
map: {"k1:123", "k2:234", "k3:3"}
key: {"k1"}
Result: feature={123}Menggabungkan hasil
Jika Anda memberikan beberapa kunci, Anda dapat mengonfigurasi parameter combiner untuk menggabungkan nilai yang diambil. Metode agregasi yang valid meliputi sum, mean, max, dan min.
Jika Anda ingin menggunakan combiner, Anda harus mengatur need_discrete ke false. Dalam hal ini, nilai harus berupa tipe numerik atau string yang dapat dikonversi ke nilai numerik.
match_feature
Ikhtisar
Operator match_feature mentransformasikan fitur dengan mencari nilai dalam peta bersarang dua tingkat.
Konfigurasi
Konfigurasikan operator ini dalam 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: Sumber data, yang merupakan peta bersarang dua tingkat yang dikodekan sebagai string.|adalah pemisah antar item dalam peta tingkat pertama, dan^adalah pemisah antara kunci dan nilai dalam peta tingkat pertama.,adalah pemisah antar item dalam peta tingkat kedua, dan:adalah pemisah antara kunci dan nilainya.
category: Kunci utama untuk pencarian peta tingkat pertama.ALLadalah karakter wildcard yang cocok dengan semua nilai kunci pada tingkat ini.item: Kunci sekunder untuk pencarian peta tingkat kedua.ALLadalah karakter wildcard yang cocok dengan semua nilai kunci pada tingkat ini.need_discretetrue: Operator mengembalikan string komposit dari nama fitur dan kunci. Model menggunakan string ini sebagai fitur dan mengabaikan nilai yang cocok.false(default): Operator hanya mengembalikan nilai fitur yang cocok. Model menggunakan nilai ini secara langsung.
match_typehit: Mengembalikan satu fitur yang cocok. Operator menanyakan peta tingkat pertama dengan nilaicategory, lalu menanyakan peta tingkat kedua yang dihasilkan dengan nilaiitemuntuk mendapatkan satu hasil. Untuk pencocokan tingkat tunggal, Anda dapat mengatur kunci dalam peta tingkat pertama keALLdan juga mengatur parametercategorykeALL.multihit: Memungkinkan bidangcategorydanitemmenggunakan wildcardALL, yang dapat mengembalikan beberapa nilai yang cocok.
normalizerOpsional. Metode normalisasi ini memiliki arti yang sama dengan konfigurasi bernama identik di raw_feature dan hanya berlaku ketika
need_discreate=false.show_categoryMenentukan apakah akan menambahkan awalan
categoryke hasil kueri. Default-nya true ketikaneed_discrete=truedanmatch_type=hit, dan false jika tidak.show_itemMenentukan apakah akan menambahkan awalan
itemke hasil kueri. Nilai default-nya true ketikaneed_discrete=truedanmatch_type=hit. Jika tidak, nilai default-nya false.value_typeOpsional. Menentukan tipe data fitur output. Nilai default-nya adalah
string.separatorOpsional. Menentukan pemisah nilai ganda untuk bidang
keybertipe string, yang default-nya "\u001D" dan harus berupa satu karakter.default_valueOpsional. Menentukan nilai default yang digunakan ketika fitur input kosong.
value_dimensionOpsional, dengan nilai default 0. Parameter ini dapat digunakan dalam tugas offline untuk memotong output. Jika nilainya 1, tipe skema tabel output adalah
value_type. Jika tidak, tipe skemanya adalaharray<value_type>.stub_typeOpsional. Nilai default-nya adalah
false. Jika Anda mengatur parameter ini ketrue, pipeline hanya menggunakan transformasi fitur yang dikonfigurasi sebagai hasil antara dan tidak meneruskannya ke model.
Contoh
Fitur pengguna: Dictionary bersarang
Misalnya, string 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
}
}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:
Parameter | 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 |
Ketika
need_discreteadalahtrue, operator pertama-tama menanyakanuser_brand_tags_hitdengan nilaiauction_root_category(50006842), yang mengembalikan16788816:0.1,10122:0.2,29889:0.3,30068:19. Operator kemudian menanyakan hasil tersebut denganbrand_id(30068) untuk mendapatkan nilai19. Hasil akhirnya adalahbrand_hit_50006842_30068_19.Ketika
need_discreteadalahfalse, hasilnya adalah19.0.
Jika Anda hanya menggunakan pencocokan lapisan tunggal, Anda harus mengubah nilai category dalam konfigurasi di atas menjadi ALL. Asumsikan bahwa bidang memiliki nilai sebagai berikut:
Parameter | Nilai |
user_brand_tags_hit | ALL^16788816:40,10122:40,29889:20,30068:20 |
brand_id | 30068 |
Ketika
need_discreteadalahtrue, hasilnya adalahbrand_hit_ALL_30068_20.Ketika
need_discreteadalahfalse, hasilnya adalah20.0.
Dalam kasus ini, Anda juga dapat menggunakan lookup_feature atau user_brand_tags_hit, dan nilainya harus dalam format "16788816:40^]10122:40^]29889:20^]30068:20". '^]' adalah pemisah nilai ganda, yaitu karakter tak tercetak \u001d.
Karena operator lookup_feature mendukung tipe input kompleks seperti peta dan array, operator ini menawarkan kinerja yang lebih baik.
overlap_feature
Ikhtisar
Operator overlap_feature menghitung metrik pencocokan string antara dua input teks. Misalnya, dalam aplikasi pencarian, Anda dapat menggunakannya untuk menentukan apakah suatu query terdapat dalam suatu title.
Metode | Deskripsi |
query_common_ratio | Menghitung rasio istilah umum antara Mengembalikan nilai dalam rentang [0, 1]. |
title_common_ratio | Menghitung rasio istilah umum antara Mengembalikan nilai dalam rentang [0, 1]. |
is_contain | Memeriksa apakah
|
is_equal | Memeriksa apakah
|
index_of | Mengembalikan posisi awal kemunculan pertama seluruh |
proximity_min_cover | Menghitung kedekatan istilah Nilai yang dikembalikan berada dalam rentang [0, length(title)]. Nilai 0 menunjukkan bahwa setidaknya satu istilah tidak dapat dicocokkan. |
proximity_min_dist | Menghitung kedekatan istilah Nilai yang dikembalikan berada dalam rentang [0, length(title) + 1]. Nilai length(title) + 1 menunjukkan bahwa tidak ditemukan pasangan istilah yang cocok. |
proximity_max_dist | Menghitung kedekatan istilah Nilai yang dikembalikan berada dalam rentang [0, length(title) + 1]. Nilai length(title) + 1 menunjukkan bahwa tidak ditemukan pasangan istilah yang cocok. |
proximity_avg_dist | Menghitung kedekatan istilah Nilai yang dikembalikan berada dalam rentang [0, length(title) + 1]. Nilai length(title) + 1 menunjukkan bahwa tidak ditemukan pasangan istilah yang cocok. |
Metode perhitungan untuk ukuran kedekatan istilah ini didasarkan pada makalah "An Exploration of Proximity Measures in Information Retrieval".
Asumsikan bahwa urutan Term title(dokumen) adalah: t1,t2,t1,t3,t5,t4,t2,t3,t4
MinCover didefinisikan sebagai panjang segmen dokumen terpendek yang mencakup setiap istilah
querysetidaknya sekali.MinDist (Jarak pasangan minimum): Menghitung minimum dari semua jarak pasangan. Misalnya, jika jarak pasangan adalah 1, 2, dan 3, maka
MinDist = min(1, 2, 3) = 1.MaxDist (Jarak pasangan maksimum): Kebalikan dari
MinDist. Menghitung maksimum dari semua jarak pasangan. Misalnya, jika jarak pasangan adalah 1, 2, dan 3, makaMaxDist = max(1, 2, 3) = 3.AveDist (Jarak pasangan rata-rata): Menghitung rata-rata dari semua jarak pasangan. Misalnya, jika jarak pasangan adalah 1, 2, dan 3, maka
AveDist = (1 + 2 + 3) / 3 = 2.
Catatan bahwa semua operator agregat (MinDist, MaxDist, dan AveDist) didefinisikan berdasarkan jarak pasangan antara istilah query yang cocok. Ketika sebuah dokumen hanya mencocokkan satu istilah query, 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" : ""
}Parameter | Wajib | Deskripsi |
feature_type | Ya | Jenis fitur. Harus |
feature_name | Ya | Awalan untuk nama fitur output. |
query | Ya | Bidang sumber untuk |
title | Ya | Bidang sumber untuk |
method | Ya | Metode perhitungan. Nilai yang valid meliputi |
separator | Tidak | Pembatas untuk input. Jika Anda tidak menentukan nilai, default-nya adalah |
normalizer | Tidak | Metode normalisasi. Parameter ini memiliki fungsi yang sama dengan parameter |
stub_type | Tidak | Default-nya |
Operator overlap_feature mengembalikan nilai bertipe float.
Contoh 1
Diberikan query "high,high2,fiberglass,abc" dan title "high,quality,fiberglass,tube,for,golf,bag", operator mengembalikan hasil berikut:
Metode | Nilai |
query_common_ratio | 0.5 |
title_common_ratio | 0.28 |
is_contain | 0.0 |
is_equal | 0.0 |
Contoh 2
method=index_of dan title adalah the cat sat on the mat.
Query | Nilai |
the cat | 0.0 |
sat | 2.0 |
the mat | 4.0 |
cap | -1.0 |
gap | -1.0 |
sequence_feature
Ikhtisar
Riwayat perilaku pengguna adalah fitur penting. Riwayat ini biasanya direpresentasikan sebagai sekuens, seperti sekuens klik atau sekuens pembelian. Entitas yang membentuk sekuens dapat berupa item itu sendiri atau propertinya.
Cara mengonfigurasi
Misalnya, untuk memproses sekuens klik pengguna dengan panjang 50, Anda dapat mengekstraksi fitur item_id, price, dan ts untuk setiap item dalam sekuens. Dalam hal ini, ts dihitung sebagai request_time - event_time. Contoh berikut menunjukkan konfigurasinya:
{
"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. Misalnya,user:click_50_seqmenyimpan 50 ID item terbaru yang diklik pengguna. Layanan Inferensi Model menggunakan bidang ini sebagai kunci untuk menanyakanside info.Parameter permintaan untuk Layanan Inferensi Online (Prosesor EAS) harus mencakup fitur yang kuncinya adalah nilai
sequence_pk.Misalnya:
click_50_seq: 5410233389955966;1832586(pemisahnya adalah nilai konfigurasisequence_delim)Dalam contoh di atas, nilai fitur
click_50_seqadalah 5410233389955966;1832586.
Sub-fitur sisi item dari sekuens tidak wajib dalam permintaan ke Layanan Inferensi Model.
Layanan Inferensi Model menggunakan bidang ini sebagai kunci untuk menanyakan
side infoitem.Misalnya, dalam konfigurasi ini, fitur
item_id, pricedalam fitur sekuens tidak diteruskan ke layanan inferensi dalam permintaan. Sebagai gantinya, Prosesor menggunakan SDK fg untuk mengambil dan menggabungkan fitur-fitur ini dari cache item-nya. Hal ini memastikan bahwa format data konsisten dengan format yang digunakan selama pelatihan offline.
Sub-fitur sisi pengguna dari sekuens wajib dalam permintaan ke Layanan Inferensi Model.
Nama fiturnya adalah
${sequence_name}__${input_name}, misalnya:click_50_seq__ts.${input_name}biasanya dikonfigurasi dengan opsiexpression, tetapi ini dapat bervariasi untuk jenis sub-fitur yang berbeda.${input_name}tidak mencakup awalandomain input, sepertiitem:atauuser:.
features:
side infodari sekuens, termasuk informasi seperti nilai atribut statis suatu item dan informasi waktu perilaku.sequence_fields: Menentukan nama bidang dari sekuens input. Nilainya adalah
stringatau array[string].Ketika operator fitur hanya memiliki satu bidang input, isi bidang tersebut harus berupa sekuens. Dalam hal ini, Anda tidak perlu mengonfigurasi
sequence_fields.Jika operator fitur memiliki beberapa bidang input dan Anda tidak mengonfigurasi
sequence_fields, semua fitur sisi item (sepertiitem:XXX) diasumsikan sebagai bidang input sekuens.
Tabel input untuk pelatihan offline harus berisi semua kolom yang sesuai dengan sub-fitur.
Ketika kolom adalah sekuens (merujuk pada aturan untuk
sequence_fields), namanya adalah${sequence_name}__${input_name}.Misalnya, dalam konfigurasi sampel ini, tabel offline memerlukan empat kolom:
click_50_seq__item_id,click_50_seq__price,click_50_seq__ts, danclick_50_seq__clk_time_seq.Tipe yang direkomendasikan untuk kolom dalam tabel offline adalah tipe array untuk kinerja yang lebih baik. Tipe
stringyang menggunakansequence_delimsebagai pemisah elemen juga didukung.
Ketika kolom bukan sekuens, namanya adalah
${input_name}tanpa awalan.Misalnya, dalam konfigurasi ini, tabel offline memerlukan satu kolom non-sekuens:
${cur_time}
Anda dapat menggunakan konfigurasi global
input_aliasuntuk mengatur alias yang lebih pendek untuk nama kolom yang panjang (lihat contoh di bawah).
Mendukung operasi pengelompokan. Untuk metode konfigurasi, lihat Pengelompokan Fitur (Diskretisasi). Ketika pengelompokan dikonfigurasi, tipe elemen output adalah
int64, dan bentuknya ditentukan oleh konfigurasivalue_dimension.value_dimension (juga disingkat sebagai
value_dim): Menentukan dimensi setiap elemen dalam sekuens. Untuksequence_raw_feature, tipe output adalaharray<float>ketika parameter ini diatur ke1, danarray<array<float>>untuk nilai lainnya. Untuksequence_id_feature, tipe output adalaharray<string>ketika parameter ini diatur ke1, danarray<array<string>>untuk nilai lainnya. Nilai default-nya adalah 0.
Anda dapat mengonfigurasi fitur apa pun sebagai sub-fitur dari Fitur Sekuens. Contoh berikut menunjukkan konfigurasinya:
{
"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"
}
}</oov>Catatan: Parameter input_alias digunakan untuk mengonfigurasi alias untuk bidang input dalam format "origin_field": "alias_field". Hal ini memungkinkan Anda mengganti nama bidang input asli dengan nama yang lebih pendek.
Konfigurasi datar
Secara umum, Anda dapat membuat versi sekuens dengan menambahkan awalan sequence_ ke tipe fitur non-sekuens (feature_type). Perhatikan bahwa Anda umumnya harus mengonfigurasi default_value untuk fitur sekuens.
Contoh:
sequence_id_feature: Nilai output bertipe
string. Jika Anda memerlukan tipe lain, gunakanslice_featuresebagai gantinya.sequence_raw_feature: Tipe nilai output adalah
float. Jika Anda memerlukan tipe lain, gunakanslice_featuresebagai gantinya.sequence_combine_feature: Operator Fitur ini hanya memiliki versi sekuens.
Kasus khusus 1: Beberapa jenis transformasi fitur memiliki versi sekuens dan non-sekuens.
Anda dapat mengaktifkan versi yang sesuai dengan mengonfigurasi is_sequence: true/false.
Dalam hal ini, Anda tidak perlu menambahkan awalan sequence_ ke parameter feature_type.
Contoh:
Kasus khusus 2: Beberapa jenis transformasi fitur hanya memiliki versi sekuens.
Dalam hal ini, parameter feature_type tidak memerlukan awalan sequence_.
Contoh:
Untuk dua kasus khusus ini, Anda dapat menambahkan parameter opsional berikut:
sequence_length: Panjang maksimum sekuens. Elemen berlebih dipotong. Nilai default-nya adalah -1, yang menunjukkan tidak ada pemotongan.sequence_delim: Pemisah antar elemen sekuens. Nilai default-nya adalah
;.
Contoh berikut menunjukkan konfigurasinya:
{
"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. Ini bisa berupa array atau string yang elemennya dipisahkan oleh karakter yang ditentukan oleh sequence_delim.
Dengan konfigurasi ini, Layanan Inferensi Online tidak menanyakan
side info. Anda harus menyediakan input lengkap dalam permintaan.Nama bidang input untuk fitur sekuens dalam format datar tetap sama seperti yang dikonfigurasi dan tidak diawali dengan
${sequence_name}__.
Generasi fitur online
Anda dapat memperoleh sideinfo perilaku dengan dua cara. Cara pertama adalah mengambilnya dari cache item EasyRec Processor, menggunakan bidang yang ditentukan dalam sequence_pk sebagai kunci utama untuk mencari properti item. Cara kedua adalah menyediakan nilai bidang yang sesuai dalam permintaan. Misalnya, bidang "ts" dalam konfigurasi sebelumnya dihitung sebagai request_time - event_time (waktu permintaan rekomendasi dikurangi waktu perilaku pengguna). Karena nilai ini berubah seiring waktu permintaan, nilai ini harus diperoleh 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"
}
}sequence_combine_feature
Pengantar
Operator sequence_combine_feature menggabungkan beberapa nilai untuk setiap elemen dalam fitur sekuens. Operator ini mengubah sekuens bernilai ganda menjadi sekuens bernilai tunggal dengan mengagregasi beberapa nilai setiap elemen menjadi satu nilai menggunakan combiner yang ditentukan.
Kemampuan utama
Kombinasi bernilai ganda: Menggabungkan beberapa nilai setiap elemen dalam sekuens menjadi satu nilai.
Strategi kombinasi fleksibel: Mendukung beberapa strategi kombinasi, termasuk
sum,mean,max,min, dancount.Peta Nilai: Mendukung peta nilai untuk mengonversi pengenal string ke nilai numerik, yang berguna untuk memproses sekuens event perilaku.
Dukungan pemisah ganda: Mendukung konfigurasi terpisah untuk pemisah sekuens dan pemisah bernilai ganda.
Konfigurasi
Konfigurasi dasar (kombinasi numerik)
{
"feature_name": "seq_combine_feat",
"feature_type": "sequence_combine_feature",
"expression": "user:behavior_seq",
"combiner": "sum",
"separator": "|",
"sequence_delim": ";"
}Konfigurasi dengan Peta Nilai (Event Perilaku)
{
"feature_name": "behavior_score",
"feature_type": "sequence_combine_feature",
"expression": "user:action_events",
"combiner": "sum",
"separator": "|",
"sequence_delim": ";",
"value_map": {
"expo": 1,
"click": 2,
"buy": 4
}
}Peta nilai diterapkan terlebih dahulu, diikuti oleh operasi gabungan.
Parameter
Parameter | Wajib | Deskripsi |
feature_name | Ya | Nama fitur output. |
feature_type | Ya | Menentukan jenis fitur. Harus diatur ke |
expression | Ya | Sumber fitur input. |
combiner | Tidak | Strategi kombinasi. Nilai yang mungkin: |
value_map | Tidak | Peta untuk mengonversi string ke nilai numerik. Peta nilai diterapkan terlebih dahulu, diikuti oleh operasi gabungan. |
separator | Tidak | Pemisah bernilai ganda. Default: |
sequence_delim | Tidak | Pemisah sekuens untuk input string. Parameter ini tidak diperlukan untuk input array dan default-nya adalah string kosong. Hanya satu karakter yang didukung. |
default_value | Tidak | Nilai default yang digunakan ketika input kosong. |
stub_type | Tidak | Default: |
Contoh
Contoh 1: Kombinasi numerik dasar (jumlah)
Konfigurasi:
{
"feature_name": "score_sum",
"feature_type": "sequence_combine_feature",
"expression": "user:scores",
"combiner": "sum",
"separator": ",",
"sequence_delim": ";"
}Input dan output:
Input | Output | Deskripsi |
|
| Operator menghitung |
|
| Operator menghitung |
|
| Input adalah array string. |
|
| Input adalah array array. |
Contoh 2: Sekuens Event Perilaku (dengan Peta Nilai)
Konfigurasi:
{
"feature_name": "behavior_weight",
"feature_type": "sequence_combine_feature",
"expression": "user:actions",
"combiner": "sum",
"separator": "|",
"sequence_delim": ";",
"value_map": {
"expo": 1,
"click": 2,
"buy": 4
}
}Input dan output:
Input | Output | Deskripsi |
|
| Operator menghitung |
|
| Nilai yang dipetakan adalah |
|
| Operator menghitung |
|
| String input berisi beberapa record yang dipisahkan oleh ;. |
|
| Array input berisi beberapa record. |
tokenize_feature
Ikhtisar
Operator tokenize_feature melakukan tokenisasi string input. Operator ini mengembalikan string yang telah ditokenisasi atau ID token yang sesuai. Operator ini mendukung file tokenizer.json dari pustaka tokenize-cpp.
Untuk informasi lebih lanjut tentang format file kosakata, lihat sumber daya berikut:
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": ","
}
Parameter | Wajib | Deskripsi |
feature_name | Ya | Nama unik untuk fitur output. |
expression | Ya | Menentukan bidang sumber tempat fitur bergantung. Sumber harus berupa user, item, atau context. |
vocab_file | Ya | Jalur ke file kosakata. |
default_value | Tidak | Nilai default untuk string input. |
tokenizer_type | Tidak | Jenis tokenizer. Atur ke 'sentencepiece' untuk menggunakan tokenizer SentencePiece. Jika tidak ditentukan, sistem menentukan tokenizer Hugging Face yang sesuai berdasarkan isi 'vocab_file'. |
output_type | Tidak |
|
output_delim | Tidak | Pemisah untuk output |
stub_type | Tidak | Default-nya |
Contoh
Ketika output_type adalah word_id, operator mengonversi string input menjadi string ID token yang dipisahkan koma.
Tipe | item:title | Fitur output |
string | It is good today! | 1147,310,1175,3063,2 |
Contoh file kosakata
Nama file | Jenis Tokenizer | Tautan unduh |
bert-base-chinese-vocab.json | WordPiece | |
tokenizer.json | BPE | |
spiece.model | sentencepiece |
text_normalizer
Ikhtisar
Operator text_normalizer melakukan Normalisasi Teks, termasuk konversi huruf besar/kecil, konversi Tionghoa Tradisional ke Sederhana, konversi karakter lebar penuh ke setengah lebar, penyaringan karakter khusus, konversi encoding GBK dan UTF-8, serta 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
}
Parameter | Wajib | Deskripsi |
feature_name | Ya | Nama fitur. |
expression | Ya | Bidang sumber tempat fitur bergantung. Sumber harus berupa |
stop_char_file | Tidak | Menentukan jalur ke file karakter khusus yang akan dihapus. Jika dihilangkan, sistem menggunakan daftar bawaannya. |
max_length | Tidak | Jika panjang teks input melebihi nilai ini, operator melewati normalisasi dan mengembalikan teks aslinya. |
remove_space | Tidak | Menentukan apakah akan menghapus spasi. |
is_gbk_input | Tidak | Menentukan apakah input dikodekan dalam GBK. Jika false, operator mengasumsikan input dalam UTF-8. |
is_gbk_output | Tidak | Menentukan apakah output dikodekan dalam GBK. Jika false, operator mengkodekan output sebagai UTF-8. |
parameter | Tidak | Opsi normalisasi teks. |
default_value | Tidak | Nilai default yang digunakan ketika fitur input kosong. |
Catatan:
stop_char_fileharus menggunakan encoding GBK.Setiap baris dalam
stop_char_fileharus hanya berisi satu karakter untuk memastikan penyaringan berhasil.
Opsi normalisasi teks
Untuk mengonfigurasi bidang parameter, jumlahkan nilai numerik dari opsi yang diinginkan dari daftar di bawah ini.
Misalnya, 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 untuk parameter adalah 60.
#define __NORMALIZED_LOWER2UPPER__ 2 /* Convert lowercase to uppercase. */
#define __NORMALIZED_UPPER2LOWER__ 4 /* Convert uppercase to lowercase. */
#define __NORMALIZED_SBC2DBC__ 8 /* Convert full-width to half-width characters. */
#define __NORMALIZED_BIG52GBK__ 16 /* Convert Traditional Chinese to Simplified Chinese. */
#define __NORMALIZED_FILTER__ 32 /* Filter special characters. */
#define __NORMALIZED_SPLITCHARS__ 512 /* Split Chinese characters into single characters, separated by spaces. */Contoh
{
"feature_name": "txt_norm",
"feature_type": "text_normalizer",
"expression": "input_a",
"parameter": 28
}Input: ["正則生成代碼", "Html過濾工具", "正則表達式語法速查", "The Cat/"]
Output: ["正则生成代码", "html过滤工具", "正则表达式语法速查", "the cat/"]
bm25_feature
Fitur
Algoritma BM25 (Best Matching) adalah algoritma pencocokan teks utama dalam information retrieval, biasanya digunakan untuk penilaian relevansi pencarian. Algoritma ini pertama-tama mengurai query menjadi istilah
Untuk bahasa Tionghoa, Tokenisasi Query berfungsi sebagai Analisis Morfem, memperlakukan setiap Kata (Istilah) sebagai Morfem
Rumus umum untuk algoritma BM25 adalah:
Dalam rumus ini,
Kepentingan Istilah
Ada beberapa metode untuk memberi bobot relevansi istilah terhadap dokumen. Metode umum adalah Inverse Document Frequency (IDF). Rumusnya adalah:
Di mana
Definisi IDF menunjukkan bahwa untuk Koleksi Dokumen tertentu, semakin banyak dokumen yang mengandung
Relevansi istilah
Skor relevansi antara istilah
Dalam rumus ini,
Definisi
Secara ringkas, rumus skor relevansi untuk algoritma BM25 adalah sebagai berikut:
Rumus BM25 memberikan fleksibilitas yang signifikan dalam desain algoritma, memungkinkan berbagai metode untuk menghitung skor relevansi pencarian berdasarkan pendekatan yang berbeda terhadap tokenisasi, pembobotan kata kunci, dan relevansi kata kunci-dokumen.
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": ""
}Parameter | Required | Description |
feature_name | Yes | Nama fitur output. |
query | Yes | Bidang sumber untuk kueri. |
document | Yes | Bidang sumber untuk dokumen. |
term_doc_freq_file | No | Jalur file ke data frekuensi term-dokumen. File tersebut berisi satu term dan jumlah dokumennya per baris, dalam format |
term_doc_freq_dict | No | Alternatif dari |
k1 | No | Parameter algoritma BM25, biasanya antara 1,2 dan 2,0. Nilai default: 1,2. |
b | No | Parameter algoritma BM25. Nilai default: 0,75. |
separator | No | Pemisah karakter tunggal untuk fitur input bernilai ganda. Nilai default: |
normalizer | No | Metode normalisasi. Untuk detailnya, lihat konfigurasi raw_feature. |
default_value | No | Nilai yang digunakan ketika fitur input kosong. |
stub_type | No | Nilai default: false. Jika |
Parameter
term_doc_freq_filedanterm_doc_freq_dictbersifat saling eksklusif. Jika keduanya ditentukan,term_doc_freq_fileakan didahulukan.Saat menggunakan fitur ini dalam layanan online, letakkan file
term_doc_freq_filedi direktori yang sama denganfg.json.
kv_dot_product
Ikhtisar
Menghitung dot product dari dua vektor key-value atau ukuran irisan (intersection) dari dua himpunan.
Konfigurasi
{
"feature_type": "kv_dot_product",
"feature_name": "query_doc_sim",
"query": "user:query",
"document": "item:title",
"separator": "|",
"default_value": "0"
}Parameter | Wajib | Deskripsi |
feature_name | Ya | Nama fitur output. |
query | Ya | Sumber bidang query. |
document | Ya | Sumber bidang dokumen. |
separator | Tidak | Pemisah untuk fitur input multi-nilai. Nilai default-nya adalah |
kv_delimiter | Tidak | Pemisah antara pasangan kunci-nilai dalam fitur input. Nilai default-nya adalah |
normalizer | Tidak | Menentukan metode normalisasi. Untuk detailnya, lihat konfigurasi operator raw_feature. |
default_value | Tidak | Menentukan nilai yang digunakan jika fitur input kosong. |
stub_type | Tidak | Default-nya |
Operator ini mendukung tipe input kompleks seperti array dan map. Gunakan tipe kompleks untuk performa optimal.
Jika entri input tidak memiliki bagian
value, nilaivalue-nya secara default dianggap1.0. Perilaku ini dapat digunakan untuk menghitung ukuran irisan antara dua himpunan.Jika Anda tidak mengonfigurasi
default_value, nilai default-nya diatur ke 0.
Contoh
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
Ikhtisar
Operator str_replace_feature mengganti semua substring yang cocok dalam string input dengan penggantinya yang telah ditentukan.
Catatan: Pencocokan yang tumpang tindih diganti secara greedy.
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
}Parameter | Deskripsi |
feature_name | Wajib. Menentukan nama fitur output. |
expression | Wajib. Menentukan bidang sumber yang menjadi dasar fitur ini. |
default_value | Opsional. Nilai default untuk input kosong. |
replacements | Opsional. Wajib jika |
replace_file | Opsional. Parameter ini wajib jika |
is_sequence | Opsional. Menentukan apakah input merupakan fitur sekuens. Nilai default-nya adalah |
sequence_length | Opsional. Menentukan panjang maksimum sekuens. Operator akan memotong sekuens yang melebihi panjang ini. |
sequence_delim | Opsional. Menentukan pembatas elemen sekuens. Parameter ini hanya berlaku untuk input berupa string. |
separator | Opsional. Parameter ini hanya berlaku ketika |
value_dimension | Opsional. Menentukan dimensi fitur output. Dalam tugas offline, parameter ini digunakan untuk memotong output. Nilai default-nya adalah |
stub_type | Opsional. Jika diatur ke |
Anda dapat mengonfigurasi kedua parameter
replace_filedanreplacements. Kamus penggantinya akan digabungkan, danreplacementsmemiliki prioritas lebih tinggi.Operator ini mendukung operasi binning. Untuk informasi selengkapnya, lihat dokumentasi Feature Binning (Discretization).
hash_bucket_size: Melakukan hash terhadap hasil transformasi fitur lalu menjalankan operasi modulo.vocab_list: Melakukan binning input berdasarkan vocabulari dan memetakan input ke indeks dalam vocabulari tersebut.vocab_dict: Hasil binning adalah nilai dalamvocab_dictyang sesuai dengan nilai fitur.vocab_file: Membacavocab_listatauvocab_dictdari file.
Operator ini mendukung input array bernilai ganda.
Contoh
Tabel berikut menunjukkan hasil eksekusi dari konfigurasi di atas.
user:query | Output feature |
the quick brown fox jumped over the lazy dogs | pack my box with five dozen liquor jugs |
aaa | xX |
Feature|Generation|Tool|is|very|useful | FeatureGenerationToolisveryuseful |
regex_replace_feature
Ikhtisar
Operator regex_replace_feature adalah transformasi fitur yang mengganti substring yang sesuai dengan ekspresi reguler menggunakan string pengganti yang ditentukan.
Anda dapat mengonfigurasi beberapa pola. Substring yang sesuai dengan salah satu pola yang ditentukan akan diganti.
Konfigurasi
{
"feature_name": "query",
"feature_type": "regex_replace_feature",
"expression": ["user:query"],
"regex_pattern": "\\|",
"replacement": " ",
"default_value": ""
}Parameter | Deskripsi |
feature_name | Wajib. Nama fitur output. |
expression | Wajib. Bidang sumber yang menjadi dasar fitur ini. |
default_value | Opsional. Nilai default yang digunakan ketika fitur input kosong. |
regex_pattern | Wajib. Ekspresi reguler untuk mencocokkan teks yang akan diganti. |
replacement | Opsional. String pengganti. Jika parameter ini dikosongkan, teks yang cocok akan dihapus. |
replace_all | Opsional. Menentukan apakah penggantian dilakukan secara global. Nilai default-nya adalah |
icase | Opsional. Menentukan apakah pencocokan ekspresi reguler peka terhadap huruf besar/kecil. Nilai default-nya adalah |
is_sequence | Opsional. Menentukan apakah fitur merupakan fitur sekuens. Nilai default-nya adalah |
sequence_length | Opsional. Menentukan panjang maksimum sekuens. Sekuens yang lebih panjang dari nilai ini akan dipotong. |
sequence_delim | Opsional. Menentukan pemisah antar elemen sekuens. Parameter ini hanya berlaku untuk input berupa string. |
separator | Opsional. Parameter ini hanya berlaku ketika |
value_dimension | Opsional. Dalam tugas offline, parameter ini digunakan untuk memotong output. Nilai default-nya adalah |
stub_type | Opsional. Nilai default-nya adalah |
Fitur ini mendukung operasi pengelompokan (binning). Untuk detail konfigurasi, lihat dokumen Feature Binning (diskretisasi):
hash_bucket_size: Melakukan hashing dan menerapkan operasi modulo pada hasil transformasi fitur.vocab_list: Mengelompokkan input berdasarkan daftar kosakata dan memetakan input ke indeks dalam daftar tersebut.vocab_dict: Memetakan nilai fitur ke nilai yang sesuai dalam kamusvocab_dict.vocab_file: Membacavocab_listatauvocab_dictdari file.
Fitur ini mendukung input bernilai ganda dalam bentuk array.
Contoh
user:query | Fitur output |
China|People|Republic | China People Republic |
Feature|Generation|Tool|Is great | Feature Generation Tool Is great |
bool_mask_feature
Ikhtisar
Menyaring elemen menggunakan nilai boolean, mirip dengan tf.boolean_mask(tensor, mask).
Fitur ini pada dasarnya merupakan sequence feature.
Konfigurasi
{
"feature_name": "mask_feature",
"feature_type": "bool_mask_feature",
"value_type": "float",
"expression": [
"user:click_items",
"item:is_valid"
],
"sequence_delim": ","
}Parameter | Deskripsi |
feature_name | Wajib. Menentukan awalan untuk fitur output. |
expression | Wajib. Daftar bidang sumber yang digunakan oleh fitur ini. Elemen kedua dalam daftar berfungsi sebagai mask. |
default_value | Opsional. Nilai default yang digunakan ketika fitur input kosong. Jika dihilangkan, nilai default-nya adalah |
value_type | Wajib. Menentukan tipe data dari fitur output. |
sequence_length | Opsional. Panjang maksimum sequence. Sequence yang lebih panjang akan dipotong. |
sequence_delim | Opsional. Pemisah untuk elemen sequence. Parameter ini hanya diperlukan untuk input berupa string. |
separator | Opsional. Pemisah untuk input multi-nilai. Default: "\u001D". Harus berupa satu karakter. |
value_dimension | Opsional. Default: 0. Digunakan untuk memotong output dalam tugas offline. |
normalizer | Opsional. Menentukan metode normalisasi. Parameter ini hanya berlaku untuk fitur numerik. Untuk informasi selengkapnya, lihat RawFeature. |
stub_type | Opsional. Default: false. Jika diatur ke true, pipeline hanya menggunakan transformasi fitur ini sebagai hasil antara dan tidak mengeluarkannya ke model. |
Mendukung pengelompokan (binning). Untuk konfigurasi, lihat Pengelompokan fitur (diskretisasi).
Mendukung input multi-nilai berupa array atau 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
Ikhtisar
Operator ini melakukan slicing pada array input menggunakan sintaks bergaya Python atau mengambil elemen pada indeks tertentu.
Pada dasarnya, operator ini merupakan sequence feature.
Konfigurasi
{
"feature_name": "test_feature",
"feature_type": "slice_feature",
"value_type": "float",
"expression": [
"user:click_items"
],
"slice": "2:4"
}Parameter | Wajib | Deskripsi |
feature_name | Ya | Nama fitur output. |
expression | Ya | Bidang sumber untuk fitur tersebut. Input harus berupa daftar. |
slice | Ya | Angka tunggal menentukan elemen pada indeks yang sesuai dari array input, atau Anda dapat menggunakan string slice dengan sintaks yang sama seperti Python dalam format |
default_value | Tidak | Jika fitur input kosong, nilai default akan digunakan. Jika Anda tidak secara eksplisit memberikan konfigurasi, nilai default adalah |
value_type | Ya | Tipe data dari fitur output. |
sequence_length | Tidak | Panjang maksimum sequence. Sequence yang lebih panjang dari nilai ini akan dipotong. |
sequence_delim | Tidak | Pemisah untuk elemen sequence. Hanya diperlukan jika input berupa string. |
separator | Tidak | Pemisah untuk input multi-nilai. Nilai default-nya adalah |
value_dimension | Tidak | Dimensi output. Nilai default-nya adalah |
normalizer | Tidak | Metode normalisasi. Hanya berlaku untuk fitur numerik. Untuk detailnya, lihat operator |
stub_type | Tidak | Menunjukkan apakah fitur tersebut merupakan stub. Nilai default-nya adalah |
placeholder | Tidak | Nilai khusus dalam sequence feature yang digunakan untuk mengisi slot kosong dan melengkapi dimensi. Nilai default untuk bilangan titik mengambang adalah |
Operator ini mendukung pengelompokan (binning). Untuk detail konfigurasi, lihat Feature Binning (Discretization).
Operator ini mendukung input multi-nilai, termasuk array dan array bersarang.
Contoh
Saat Anda mengatur sequence_delim="," dan value_dimension=1, input dan output-nya 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] |
[1, 2, 3, 4] | : | [1, 2, 3, 4] |