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:
|
value_type | Tidak | Tipe data fitur output. Nilai default adalah string. |
separator | Tidak | Pemisah untuk fitur input bernilai ganda. Nilai default adalah |
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 |
value_dimension | Tidak | Parameter ini memotong output jika fitur memiliki beberapa nilai. Nilai default adalah Jika nilainya |
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).
Operator ini mendukung input bernilai ganda bertipe array.
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 |
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).
Operator ini mendukung input bernilai ganda bertipe array.
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 |
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=1dan variabelb=[1, 2, 6], hasilnya adalah[2, 3, 7].
Komputasi
element-wisevektor-ke-vektorJika variabel
a=[3, 2, 1]dan variabelb=[1, 2, 6], hasilnya adalah[4, 4, 7].
Mendukung 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. 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:
|
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 |
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).
Operator ini mendukung input bernilai ganda bertipe array.
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.
mapadalah bidang dictionary atau string bernilai ganda (MultiString) dengan setiap string berformat "k1:v1".keydapat 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 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
}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 |
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:
|
need_key | Tidak | Menentukan apakah akan menambahkan kunci sebagai awalan. Parameter ini hanya berlaku ketika value_type diatur ke string. Nilai yang valid:
|
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:
|
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.
ALLadalah karakter wildcard yang menunjukkan bahwa semua kunci di tingkat ini dapat dicocokkan.item: Kunci sekunder, yaitu kunci untuk mencari di peta tingkat kedua.
ALLadalah 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
categoryke hasil kueri. Nilai default-nya adalah true jikaneed_discrete=truedanmatch_type=hit; jika tidak, nilai default-nya adalah false.show_item
Menentukan apakah akan menambahkan awalan
itemke hasil kueri. Nilai default-nya adalah true jikaneed_discrete=truedanmatch_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
keybertipe 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 adalaharray<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:
|
is_equal | Menghitung apakah kueri identik dengan judul. Nilai yang valid:
|
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 |
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 untuksequence_delim).Pada contoh sebelumnya, nilai fitur
click_50_seqadalah 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 infoitem.Sebagai contoh, dalam konfigurasi ini, fitur
item_id, pricedalam 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}, seperticlick_50_seq__ts.${input_name}umumnya dikonfigurasi menggunakan item konfigurasiexpression, tetapi konfigurasi dapat bervariasi untuk tipe sub-fitur yang berbeda, dan${input_name}tidak menyertakan awalandomain input(item:atauuser:).
features:
side infodari sequence, yang mencakup nilai properti statis item dan informasi waktu perilaku.sequence_fields: Menentukan nama bidang dari input sequence. Nilainya berupa
stringatau 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, danclick_50_seq__clk_time_seq.Kami menyarankan agar tipe kolom dalam tabel offline berupa array untuk performa yang lebih baik. Tipe
stringdengansequence_delimsebagai 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_aliassecara 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 konfigurasivalue_dimensiondi bawah ini.value_dimension (dapat disingkat menjadi
value_dim): Dimensi setiap elemen dalam sequence. Untuksequence_raw_feature, jika diatur ke1, tipe output-nya adalaharray<float>; jika diatur ke nilai lain, tipe output-nya adalaharray<array<float>>. Untuksequence_id_feature, jika diatur ke1, tipe output-nya adalaharray<string>; jika diatur ke nilai lain, tipe output-nya adalaharray<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:
sequence_id_feature
sequence_raw_feature
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 | - |
|
output_delim | - | Pemisah untuk |
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 | |
tokenizer.json | BPE | |
spiece.model | sentencepiece |
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_fileharus menggunakan pengkodean GBK.Setiap baris dalam file
stop_char_filehanya 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
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,
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,
Definisi IDF menunjukkan bahwa untuk koleksi dokumen tertentu, semakin banyak dokumen yang berisi
Relevansi istilah
Skor relevansi antara istilah
Dalam rumus ini,
Definisi
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 |
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 |
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_fileatauterm_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_filedanfg.jsondalam 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 defaultvalueadalah 1,0. Gunakan perilaku ini untuk menghitung ukuran irisan dua himpunan.Jika
default_valuetidak 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 | Opsional. Parameter ini menjadi wajib jika |
is_sequence | Opsional. Menandai apakah fitur merupakan fitur sekuens. Nilai default adalah |
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 |
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_filedanreplacements. Dictionary penggantian digabungkan. Dictionaryreplacementsmemiliki 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 |
icase | Opsional. Menentukan apakah pencocokan ekspresi reguler peka huruf besar/kecil. Nilai default adalah |
is_sequence | Opsional. Menandai apakah fitur merupakan fitur sekuens. Nilai default adalah |
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 |
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 |
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 |
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 |
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] |