Topik ini menjelaskan cara mengonfigurasi 17 operator fitur bawaan, termasuk id_feature, raw_feature, dan expr_feature.
id_feature
Pendahuluan
id_feature adalah fitur diskrit yang mencakup fitur bernilai tunggal, seperti ID pengguna dan ID item, serta fitur bernilai ganda, seperti warna 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, yang digunakan sebagai awalan untuk output. |
expression | Ya | Bidang sumber. |
need_prefix | Tidak | Menunjukkan apakah akan menambahkan
|
value_type | Tidak | Tipe output. Default: |
separator | Tidak | Masukkan pemisah nilai ganda. Nilai default adalah |
default_value | Tidak | Nilai default yang digunakan ketika bidang sumber kosong. |
weighted | Tidak | Menentukan apakah input berada dalam format kunci:nilai. Jika parameter ini diatur ke |
value_dimension | Tidak | Dimensi output pemotongan untuk fitur bernilai ganda. Nilai default adalah |
stub_type | Tidak | Jika |
Mendukung pengelompokan fitur. Lihat Pengelompokan fitur (diskretisasi) untuk detailnya.
Mendukung tipe
arrayuntuk fitur bernilai ganda.
Contoh
Contoh berikut menunjukkan input dan output untuk fitur item:is_main berdasarkan konfigurasi yang berbeda.
Tipe | Input (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] |
^] merepresentasikan pemisah nilai ganda, yaitu simbol dengan kode ASCII "\x1D" dan juga dapat ditulis sebagai "\u001d".
raw_feature
Ikhtisar
Operator raw_feature memproses fitur kontinu dan mendukung tipe numerik seperti int, float, dan double.
Konfigurasi
{
"feature_type" : "raw_feature",
"feature_name" : "ctr",
"expression" : "item:ctr",
"normalizer" : "method=log10"
}Parameter | Wajib | Deskripsi |
feature_name | Ya | Nama fitur. |
expression | Ya | Bidang sumber. Harus salah satu dari |
normalizer | Tidak | Metode normalisasi. Lihat bagian Normalizer untuk detailnya. |
value_type | Tidak | Tipe output. Default: |
separator | Tidak | Pemisah untuk input bernilai ganda. Default: |
default_value | Tidak | Nilai default untuk input null atau kosong. |
value_dimension | Tidak | Menentukan dimensi bidang output untuk pemotongan output. Nilai default adalah 1. Tipe skema adalah |
stub_type | Tidak | Default: |
Operator ini mendukung pengelompokan/diskretisasi fitur. Untuk detail konfigurasi, lihat Pengelompokan fitur (diskretisasi).
Operator ini mendukung input bernilai ganda bertipe
array.
Contoh
^] merepresentasikan pemisah nilai ganda. Perhatikan bahwa ini adalah satu karakter dengan kode ASCII "\x1D", bukan dua karakter.
Tipe | Nilai | Output |
int64_t | 100 | 100 |
double | 100.1 | 100.1 |
Int bernilai ganda | 123^]456 | [123, 456] (Dimensi input harus sesuai dengan |
Normalizer
Baik raw_feature maupun match_feature mendukung empat jenis normalizer: minmax, zscore, log10, dan expression. Konfigurasi dan metode perhitungannya sebagai berikut:
minmax
Contoh: method=minmax,min=2.1,max=2.2
Rumus: x = (x - min) / (max - min)
zscore
Contoh: method=zscore,mean=0.0,standard_deviation=10.0
Rumus: x = (x - mean) / standard_deviation
log10
Contoh: method=log10,threshold=1e-10,default=-10
Rumus: x = x > threshold ? log10(x) : default;
expression
Contoh: method=expression,expr=sign(x)
Rumus: Anda dapat mengonfigurasi fungsi atau ekspresi apa pun. Variabel
xmerepresentasikan nilai input.
expr_feature
Ikhtisar
expr_feature mengevaluasi suatu ekspresi dan mengeluarkan hasilnya sebagai tipe yang ditentukan, seperti float, double, int32, atau int64. Operator ini mendukung komputasi batch dan broadcasting.
Catatan: Saat menggunakan operator fitur ini, semua input harus dapat dikonversi ke tipe double.
Konfigurasi
{
"feature_type" : "expr_feature",
"feature_name" : "ctr_sigmoid",
"value_type": "float",
"expression" : "sigmoid(pv/(1+click))",
"variables": ["item:pv", "item:click"]
}Saat pv = 2, click = 3, nilai fitur ekspresi adalah 0.6224593312.
Parameter | Wajib | Deskripsi |
feature_name | Ya | Nama fitur. |
expression | Ya | Ekspresi yang akan dievaluasi. |
variables | Ya | Variabel (juga dikenal sebagai bidang input) yang digunakan dalam |
value_type | Tidak | Tipe fitur output dapat berupa |
separator | Tidak | Pemisah untuk input |
default_value | Tidak | Nilai default yang dikembalikan jika terjadi error selama evaluasi ekspresi, misalnya saat ditemukan nilai null. |
value_dimension | Tidak | Nilai default adalah 0, yang merepresentasikan dimensi output yang digunakan untuk pemotongan atau padding output. Jika nilainya 1, tipe skema adalah |
fill_missing | Tidak | Default untuk pengisian nilai yang hilang adalah |
stub_type | Tidak | 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)
Saat
a=1danb=[1, 2, 6], hasilnya adalah[2, 3, 7].
Perhitungan
element-wisevektor-vektorSaat variabel
a=[3, 2, 1]dan variabelb=[1, 2, 6], hasilnya adalah[4, 4, 7].
Variabel sementara dan ekspresi koma
Contoh:
x=roundp(a),(a-x)*b. Dalam contoh ini,xadalah variabel sementara dan tidak perlu dikonfigurasi divariables.Ekspresi koma dievaluasi dari kiri ke kanan dan mengembalikan nilai sub-ekspresi paling kanan.
Untuk mengurangi overhead memori, gunakan kembali variabel yang ada sebagai variabel sementara di mana semantiknya memungkinkan.
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).
isnan
1
Mengembalikan 1.0 jika input adalah NaN, dan 0.0 jika tidak. Fungsi ini memerlukan versi 1.0.5 atau lebih baru.
sin
1
Mengembalikan sinus suatu bilangan.
cos
1
Mengembalikan cosinus suatu bilangan.
tan
1
Mengembalikan tangen suatu bilangan.
asin
1
Mengembalikan arcsinus suatu bilangan.
acos
1
Mengembalikan arccosinus suatu bilangan.
atan
1
Mengembalikan arctangen suatu bilangan.
sinh
1
Mengembalikan sinus hiperbolik suatu bilangan.
cosh
1
Mengembalikan cosinus hiperbolik suatu bilangan.
tanh
1
Mengembalikan tangen hiperbolik suatu bilangan.
asinh
1
Mengembalikan sinus hiperbolik invers suatu bilangan.
acosh
1
Mengembalikan cosinus hiperbolik invers suatu bilangan.
atanh
1
Mengembalikan tangen hiperbolik invers suatu bilangan.
log2
1
Mengembalikan logaritma basis-2 suatu bilangan.
log10
1
Mengembalikan logaritma basis-10 suatu bilangan.
log
1
Mengembalikan logaritma natural (basis e) suatu bilangan.
ln
1
Mengembalikan logaritma natural (basis e) suatu bilangan.
exp
1
Memangkatkan bilangan Euler (e) ke pangkat suatu bilangan.
sqrt
1
Mengembalikan akar kuadrat suatu bilangan.
sign
1
Mengembalikan tanda suatu bilangan: -1 untuk negatif, 1 untuk positif, atau 0 untuk nol.
abs
1
Mengembalikan 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
Mengembalikan 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 dengan menghapus bagian pecahannya.
sigmoid
1
Mengembalikan sigmoid suatu bilangan.
sphere_dist
4
Mengembalikan jarak bola antara dua titik GPS. Argumen:
lng1,lat1,lng2,lat2.haversine
4
Mengembalikan 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 komputasi batch dan broadcasting.
Fungsi operasi vektor bawaan
Nama fungsi
Jumlah parameter
Deskripsi
len
1
Mengembalikan panjang (jumlah elemen) suatu vektor.
l2_norm
1
Mengembalikan vektor yang dinormalisasi-L2.
squared_norm
1
Mengembalikan norma L2 kuadrat dari suatu vektor.
dot
2
Mengembalikan produk dot dua vektor.
euclid_dist
2
Mengembalikan jarak Euclidean antara dua vektor.
corr
2
Mengembalikan koefisien korelasi Pearson antara dua vektor.
std_dev
1
Mengembalikan deviasi standar sampel suatu vektor (membagi dengan n-1).
pop_std_dev
1
Mengembalikan deviasi standar populasi suatu vektor (membagi dengan n).
variance
1
Mengembalikan varians sampel suatu vektor (membagi dengan n-1).
pop_variance
1
Mengembalikan 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 produk semua elemen dalam suatu vektor.
Catatan: Jika suatu ekspresi mengandung salah satu fungsi operasi vektor bawaan ini, semua variabel lain dalam ekspresi tersebut harus berupa skalar.
Operator biner bawaan
Operator
Deskripsi
Prioritas
=
Assignment *
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 assignment bersifat khusus: ia memodifikasi salah satu argumennya dan hanya berlaku untuk variabel.
Operator ternary bawaan
Operator ini menyediakan fungsionalitas if-else.
Evaluasi malas hanya mengevaluasi cabang ekspresi yang diperlukan.
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 fitur sintetis dengan menghitung produk kartesius dari beberapa bidang sumber. Proses ini juga dikenal sebagai persilangan fitur. Operator id_feature adalah kasus khusus dari combo_feature yang hanya melibatkan satu bidang sumber. Biasanya, bidang sumber untuk persilangan fitur berasal dari tabel yang 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": ""
}
Parameter | Wajib | Deskripsi |
feature_name | Ya | Nama fitur. |
expression | Ya | Array bidang sumber yang akan digabungkan. |
need_prefix | Tidak | Menentukan apakah akan menambahkan awalan
|
value_type | Tidak | Tipe data output. Default adalah |
separator | Tidak | Pemisah nilai ganda untuk input. Default adalah |
default_value | Tidak | Nilai default yang digunakan untuk input kosong atau null. |
value_dimension | Tidak | Nilai default adalah 0. Parameter ini digunakan untuk pemotongan output. Jika nilainya 1, tipe skema adalah |
stub_type | Tidak | Jika diatur ke |
Mendukung pengelompokan fitur. Untuk instruksi konfigurasi, lihat pengelompokan fitur (diskretisasi).
Mendukung input bernilai ganda bertipe
array.
Contoh
Simbol ^] merepresentasikan pemisah nilai ganda, yaitu satu karakter dengan kode ASCII "\x1D", bukan dua karakter.
|
| 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 nilai output dihitung sebagai berikut:
|F1| * |F2| * ... * |Fn|Di mana |Fn| merepresentasikan jumlah nilai dalam bidang sumber ke-n.
lookup_feature
Ikhtisar
Seperti match_feature, operator lookup_feature menemukan kunci dalam sekumpulan pasangan kunci-nilai dan mengembalikan nilai yang sesuai.
Operator ini bergantung pada dua parameter: map dan key.
Parameter
mapadalah kamus atau string bernilai ganda. Dalam string bernilai ganda, setiap elemen adalah pasangan kunci-nilai dalam format "k1:v1".Parameter
keydapat berupa tipe data apa pun. Untuk beberapa kunci, array adalah tipe input yang direkomendasikan. Untuk menghasilkan fitur, operator mengambil nilai untuk parameterkey, mengonversinya ke tipe kunci darimap, lalu menemukan nilai yang sesuai dalam map tersebut.
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 | Awalan nama fitur. |
map | Ya | Kamus sumber yang berisi pasangan kunci-nilai. |
key | Ya | Kunci yang akan dicari di |
value_type | Tidak | Tipe output. Default adalah |
separator | Tidak | Pemisah nilai ganda untuk parameter |
default_value | Tidak | Nilai default yang dikembalikan jika kunci tidak ditemukan atau input null. |
need_prefix | Tidak | Menentukan apakah akan menambahkan
|
need_key | Tidak | Menentukan apakah akan menambahkan
|
normalizer | Tidak | Metode normalisasi. Parameter ini berfungsi seperti parameter normalizer untuk operator raw_feature. |
combiner | Tidak | Metode agregasi yang digunakan untuk menggabungkan nilai yang diambil dari beberapa kunci. Nilai yang valid: |
need_discrete | Tidak | Jika diatur ke |
value_dimension | Tidak | Menentukan dimensi output. Nilai yang valid:
|
stub_type | Tidak | Jika diatur ke |
Mendukung operasi pengelompokan. Untuk metode konfigurasi, lihat pengelompokan fitur (diskretisasi).
Parameter
mapmendukung input bertipe kamus, dan parameterkeymendukung input bertipe array.
Contoh
Untuk konfigurasi di atas, asumsikan dokumen memiliki data berikut:
item_attr : "k1:v1^]k2:v2^]k3:v3"Simbol ^] merepresentasikan pemisah nilai ganda. Ini adalah satu karakter dengan kode ASCII "\x1D", bukan dua karakter. Untuk memasukkan karakter ini, tekan C-q C-5 di emacs atau C-v C-5 di vim. Di sini, item_attr adalah string bernilai ganda.
Saat parameter map merepresentasikan beberapa pasangan kunci-nilai sebagai string, itu harus berupa string bernilai ganda, bukan string standar.
item_value : "k2"Fitur yang dihasilkan 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 pencarian
Saat Anda memberikan beberapa kunci, Anda dapat menggunakan parameter combiner untuk mengagregasi nilai yang diambil.
Untuk menggunakan combiner, Anda harus mengatur need_discrete ke false. Dalam hal ini, nilai yang dicari harus berupa angka atau string yang dapat dikonversi ke angka.
match_feature
Ikhtisar
Operator match_feature biasanya digunakan untuk pencocokan fitur-ke-fitur. Intinya, operator ini melakukan pencarian map 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: Kamus bersarang.Bidang
usermenggunakan string untuk merepresentasikan map dua tingkat.Untuk map tingkat pertama,
|adalah pemisah antar item, dan^adalah pemisah antara kunci dan nilainya.Untuk map tingkat kedua,
,adalah pemisah antar item, dan:adalah pemisah antara kunci dan nilainya.Kamus tingkat pertama juga mendukung input
Map<K, string>, di manaKdapat bertipestring,int32,int64. Nilai map adalah string yang merepresentasikan kamus dalam dan menggunakan pemisah yang sama.
category: Kunci utama untuk pencarian map tingkat pertama.ALLadalah karakter wildcard yang cocok dengan semua kunci di tingkat ini.item: Kunci sekunder untuk pencarian map tingkat kedua.ALLadalah karakter wildcard yang cocok dengan semua kunci di tingkat ini.need_discretetrue: Model menggunakan nama fitur yang dihasilkan dari output dan mengabaikan nilai fitur. Secara default, parameter ini adalahfalse.false: Model menggunakan nilai fitur yang cocok dari output dan mengabaikan nama fitur.
match_typehit: Mengeluarkan satu fitur yang cocok. Operator pertama-tama menanyakan map tingkat pertama menggunakan nilaicategory, lalu menanyakan map tingkat kedua yang dihasilkan menggunakan nilaiitemuntuk mengambil nilai akhir. Untuk melakukan pencocokan satu tingkat, atur kunci map tingkat pertama keALLdan atur parametercategorydalam konfigurasi pembuatan fitur (FG) ke "ALL".multihit: Mencocokkan dan mengeluarkan beberapa nilai ketika karakter wildcardALLdigunakan di bidangcategorydanitem.
normalizerMetode normalisasi. Parameter ini memiliki arti yang sama seperti pada operator raw_feature dan hanya berlaku ketika
need_discrete=false.show_categoryMenentukan apakah akan menambahkan awalan output dengan nilai
category. Default ketruejikaneed_discrete=truedanmatch_type=hit, danfalsejika tidak.show_itemMenentukan apakah akan menambahkan awalan output dengan nilai
item. Default ketruejikaneed_discrete=truedanmatch_type=hit, danfalsejika tidak.value_typeTipe data output. Default ke
string.separatorOpsional. Pemisah nilai ganda untuk bidang
keybertipe string. Default ke"\u001D".default_valueOpsional. Nilai default untuk input null.
value_dimensionOpsional. Mendefinisikan struktur data output. Default ke 0. Jika diatur ke 1, output adalah nilai tunggal bertipe
value_type; jika tidak, output adalah array bertipearray<value_type>.stub_typeOpsional. Jika diatur ke
true, output dianggap sebagai hasil antara dan tidak dikirim ke model. Default:false.
Contoh
Contoh fitur pengguna (kamus bersarang)
Sebagai contoh, string 50011740^50011740:0.2,36806676:0.3,122572685:0.5|50006842^16788:0.1 dikonversi ke map dua tingkat berikut:
{
"50011740": {
"50011740": 0.2,
"36806676": 0.3,
"122572685": 0.5
},
"50006842": {
"16788": 0.1
}
}Hit
Contoh ini menunjukkan 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"
}Dengan nilai bidang 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 melakukan pencarian dua langkah. Pertama, menggunakan nilaiauction_root_category(50006842) untuk menanyakanuser_brand_tags_hit, yang mengembalikan map dalam16788816:0.1,10122:0.2,29889:0.3,30068:19. Kemudian, menanyakan map dalam ini denganbrand_id(30068) untuk mengambil nilai19. Operasi kemudian menghasilkan nama fitur:brand_hit_50006842_30068_19.Jika
need_discrete=false, hasilnya adalah19.0.Bidang
user_brand_tags_hitjuga dapat bertipe Map, misalnya:{"50011740": "107287172:0.2,36806676:0.3,122572685:0.5", "50006842": "16788816:0.1,10122:0.2,29889:0.3,30068:19"}.
Untuk melakukan pencocokan satu tingkat, ubah nilai category dalam konfigurasi ke ALL. Asumsikan bidang memiliki nilai berikut:
Bidang | Nilai |
user_brand_tags_hit | ALL^16788816:40,10122:40,29889:20,30068:20 |
brand_id | 30068 |
Jika
need_discrete=true, hasilnya adalahbrand_hit_ALL_30068_20.Jika
need_discrete=false, hasilnya adalah20.0.
Atau, Anda dapat menggunakan operator lookup_feature dalam skenario ini. Ini memerlukan perubahan format nilai user_brand_tags_hit menjadi "16788816:40^]10122:40^]29889:20^]30068:20". String '^]' merepresentasikan pemisah nilai ganda \u001d, yaitu karakter tak tercetak.
Operator lookup_feature mendukung tipe input kompleks, seperti map dan array, sehingga menawarkan kinerja yang lebih baik.
overlap_feature
Ikhtisar
Mengeluarkan informasi tentang kecocokan istilah antara dua string. Sebagai contoh, Anda dapat menggunakan fitur ini untuk menentukan apakah query ada dalam title suatu item.
Metode | Deskripsi |
query_common_ratio | Menghitung rasio istilah yang tumpang tindih terhadap jumlah total istilah dalam Nilai yang dikembalikan berada dalam rentang [0.0, 1.0]. |
title_common_ratio | Menghitung rasio istilah yang tumpang tindih terhadap jumlah total istilah dalam Nilainya berada dalam rentang [0.0, 1.0]. |
is_contain | Memeriksa apakah
|
is_equal | Memeriksa apakah
|
index_of | Menghitung indeks awal kemunculan pertama seluruh |
proximity_min_cover | Menghitung Nilainya berada dalam rentang [0, length(title)]. Nilai 0 menunjukkan bahwa setidaknya satu |
proximity_min_dist | Menghitung Nilainya berada dalam rentang [0, length(title)+1]. Nilai length(title)+1 menunjukkan tidak ada istilah yang cocok. |
proximity_max_dist | Menghitung Nilainya berada dalam rentang [0, length(title)+1]. Nilai length(title)+1 menunjukkan tidak ada istilah yang cocok. |
proximity_avg_dist | Menghitung Nilainya berada dalam rentang [0, length(title)+1]. Nilai length(title)+1 menunjukkan tidak ada istilah yang cocok. |
Makalah "An Exploration of Proximity Measures in Information Retrieval" menjelaskan metode perhitungan untuk fitur-fitur ini.
Asumsikan urutan term dari title (document) adalah: t1,t2,t1,t3,t5,t4,t2,t3,t4
MinCover mengukur panjang segmen
documentterpendek yang mencakup setiapquery termsetidaknya sekali.MinDist (Jarak pasangan minimum): Jarak minimum yang ditemukan antara pasangan
query termyang cocok. Misalnya, jikaqueryQ=t1,t2,t3 memiliki jarak pasangan 1, 2, dan 3 dalamdocument, MinDist-nya adalah min(1,2,3)=1.MaxDist (Jarak pasangan maksimum): Jarak maksimum yang ditemukan antara pasangan
query termyang cocok. Untuk contoh yang sama, MaxDist=max(1,2,3)=3.AveDist (Jarak pasangan rata-rata): Rata-rata jarak pasangan antara semua
query termyang cocok. Untuk contoh yang sama, AveDist=(1+2+3)/3=2.
Perhatikan bahwa semua operator agregat (MinDist, MaxDist, dan AveDist) didefinisikan berdasarkan jarak pasangan antara query term yang cocok. Jika document hanya berisi satu query term yang cocok, nilai MinDist, AveDist, dan MaxDist adalah panjang document.
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 | Tipe fitur. Harus |
feature_name | Ya | Nama |
query | Ya | Bidang sumber untuk teks |
title | Ya | Bidang sumber untuk teks |
method | Ya | Metode perhitungan. Nilai yang valid adalah |
separator | - | Masukkan pemisah. Jika Anda tidak memasukkan nilai, default adalah |
normalizer | Tidak |
|
stub_type | Tidak | Default ke |
overlap_feature mengembalikan nilai float.
Contoh 1
Diberikan query "high,high2,fiberglass,abc" dan title "high,quality,fiberglass,tube,for,golf,bag":
Metode | Nilai |
query_common_ratio | 0.5 |
title_common_ratio | 0.28 |
is_contain | 0 |
is_equal | 0 |
Contoh 2
method=index_of, title=the cat sat on the mat.
Query | Nilai |
the cat | 0 |
sat | 2 |
the mat | 4 |
cap | -1 |
gap | -1 |
sequence_feature
Ikhtisar
Perilaku historis pengguna merupakan fitur penting. Perilaku ini biasanya direpresentasikan sebagai sekuens, seperti rangkaian klik atau pembelian. Entitas yang membentuk sekuens dapat berupa item itu sendiri atau atributnya.
Konfigurasi
Sebagai contoh, untuk memproses sekuens klik pengguna dengan panjang maksimum 50, Anda dapat mengekstrak fitur item_id, price, dan ts untuk setiap item. Di sini, ts adalah selisih antara waktu permintaan (request_time) dan waktu event (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: Pembatas yang memisahkan elemen dalam sekuens.sequence_pk: Kunci utama sekuens. Contohnya adalah
user:click_50_seq, yang menyimpan 50 itemID terbaru yang diklik pengguna. Layanan inferensi model menggunakan bidang ini sebagai kunci untuk menanyakanside info.Parameter permintaan untuk Layanan Inferensi Online (EAS Processor) harus menyertakan fitur yang kuncinya adalah
sequence_pk.Contoh:
click_50_seq: 5410233389955966;1832586(Pembatasnya adalah nilai yang ditentukan untuksequence_delim)Dalam contoh di atas, nilai fitur
click_50_seqadalah 5410233389955966;1832586
Sub-fitur sisi item dari sekuens tidak perlu disertakan dalam permintaan ke layanan inferensi model.
Layanan inferensi model menggunakan bidang ini sebagai kunci untuk menanyakan
side infoitem.Sebagai contoh, dalam konfigurasi ini, fitur sekuens
item_id, pricetidak diperlukan dalam permintaan ke layanan inferensi. Sebaliknya, fitur-fitur tersebut diambil dari cache item Processor dan digabungkan menggunakan SDK fg. Proses ini memastikan formatnya konsisten dengan yang digunakan selama pelatihan offline.
Sub-fitur sisi pengguna dari sekuens harus disertakan 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 konfigurasi dapat bervariasi untuk tipe sub-fitur yang berbeda.${input_name}tidak menyertakan awalandomain input(sepertiitem:atauuser:).
Features:
side infodari sekuens, yang mencakup informasi seperti nilai atribut statis item dan informasi waktu perilaku.sequence_fields: Menentukan nama bidang dari input sekuens. Nilainya adalah
stringatau array[string].Saat operator fitur hanya memiliki satu bidang input, konten bidang tersebut harus berupa sekuens. Dalam hal ini, Anda tidak perlu mengonfigurasi
sequence_fields.Saat operator fitur memiliki beberapa bidang input, jika Anda tidak mengonfigurasi
sequence_fields, semua fitur sisi item (seperti item:XXX) diasumsikan sebagai bidang input sekuens.
Tabel input untuk tugas offline harus menyertakan kolom yang sesuai dengan semua sub-fitur.
Saat kolom berupa sekuens (lihat aturan untuk
sequence_fields), namanya adalah${sequence_name}__${input_name}.Sebagai contoh, dalam konfigurasi ini, tabel offline memerlukan 4 kolom:
click_50_seq__item_id,click_50_seq__price,click_50_seq__ts, danclick_50_seq__clk_time_seq.Tipe kolom yang direkomendasikan untuk tabel offline adalah array (untuk kinerja yang lebih baik), sedangkan tipe
stringyang menggunakansequence_delimsebagai pembatas elemen juga didukung.
Jika kolom bukan sekuens, beri nama
${input_name}tanpa awalan.Sebagai contoh, dalam konfigurasi ini, tabel offline memerlukan satu kolom non-sekuens:
${cur_time}
Anda dapat menggunakan konfigurasi global
input_aliasuntuk menetapkan alias yang lebih pendek untuk nama kolom yang panjang (lihat contoh di bawah).
Mendukung pengelompokan fitur. Untuk detail konfigurasi, lihat Pengelompokan Fitur (Diskretisasi). Saat pengelompokan dikonfigurasi, tipe elemen output adalah
int64, dan bentuknya ditentukan oleh konfigurasivalue_dimension.value_dimension (atau
value_dim): Dimensi setiap elemen dalam Sekuens. Untuksequence_raw_feature, tipe output adalah1saat parameter ini diatur kearray<float>, danarray<array<float>>untuk nilai lainnya. Untuksequence_id_feature, tipe output adalaharray<string>saat parameter ini diatur ke1, danarray<array<string>>untuk nilai lainnya. Nilai default adalah 0.
Tipe fitur apa pun dapat dikonfigurasi sebagai sub-fitur sekuens. Berikut adalah contohnya:
{
"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 menentukan alias untuk bidang input. Formatnya adalah "origin_field": "alias_field", yang memungkinkan Anda menggunakan nama yang lebih pendek untuk menggantikan nama bidang input asli.
Format diratakan
Umumnya, Anda dapat memperoleh versi sekuens dengan menambahkan awalan sequence_ ke tipe fitur non-sekuens (feature_type). Perhatikan bahwa untuk fitur sekuens, Anda umumnya harus mengonfigurasi default_value.
Contoh:
sequence_id_feature: Nilai output selalu berupa
string. Jika Anda memerlukan tipe lain, gunakanslice_featuresebagai gantinya.sequence_raw_feature: Tipe nilai output tetap
float. Jika Anda memerlukan tipe lain, gunakanslice_featuresebagai gantinya.
Kasus khusus 1: Beberapa tipe transformasi fitur memiliki versi sekuens dan non-sekuens.
Untuk mengaktifkan versi yang sesuai, atur is_sequence: true/false.
Dalam hal ini, parameter feature_type tidak memerlukan awalan sequence_.
Contoh:
Kasus khusus 2: Beberapa tipe 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 yang melebihi panjang ini dipotong. Nilai default adalah -1, yang berarti sekuens tidak dipotong.sequence_delim: Pembatas antar elemen sekuens. Nilai default adalah
;.
Kode berikut memberikan 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, yang dapat berupa array atau string dengan elemen dipisahkan oleh karakter yang dikonfigurasi oleh sequence_delim.
Dengan konfigurasi ini, layanan online (Processor) tidak menanyakan side info. Anda harus menyediakan input lengkap.
Nama bidang input untuk fitur sekuens dalam format diratakan sama dengan nama yang dikonfigurasi dan tidak diawali dengan
${sequence_name}__.
Pembuatan fitur online
Anda dapat memperoleh sideinfo perilaku dengan dua cara. Salah satunya adalah mengambil sideinfo dari cache item EasyRec Processor. Bidang yang ditentukan oleh sequence_pk digunakan sebagai kunci utama untuk mencari informasi atribut item dalam cache item. Cara lainnya adalah mengisi nilai bidang yang sesuai dalam permintaan. Sebagai contoh, bidang "ts" dalam konfigurasi di atas merepresentasikan (request_time - event_time), yaitu waktu permintaan rekomendasi dikurangi waktu perilaku pengguna. Nilai ini berubah pada setiap permintaan dan karenanya 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_50_seq__ts"
value {
string_feature: "23;113;401363;401369;401375;401405;486678;486803;486922;486969"
}
}combine_feature
Pendahuluan
Operator combine_feature mengagregasi beberapa nilai dari fitur input menjadi satu nilai menggunakan strategi kombinasi yang ditentukan (combiner).
Versi sekuensnya, sequence_combine_feature, mengagregasi nilai dalam setiap elemen fitur sekuens, mengubah sekuens bernilai ganda menjadi sekuens bernilai tunggal.
Kemampuan utama
Kombinasi bernilai ganda: Mengagregasi beberapa nilai dari fitur menjadi satu nilai.
Strategi kombinasi fleksibel: Mendukung berbagai strategi, seperti
sum,mean,max,min, dancount.Pemetaan nilai: Mengonversi pengenal string ke nilai numerik, ideal untuk memproses sekuens event perilaku.
Dukungan pemisah ganda: Memungkinkan Anda mengonfigurasi pembatas sekuens dan pemisah bernilai ganda.
Konfigurasi
Konfigurasi dasar (kombinasi numerik)
{
"feature_name": "combine_feat",
"feature_type": "combine_feature",
"expression": "user:behavior_seq",
"combiner": "sum",
"separator": "|"
}Anda dapat mengonfigurasi versi sekuens dengan dua cara:
Atur parameter
feature_typekesequence_combine_feature.Tambahkan parameter
"is_sequence": true.
{
"feature_name": "seq_combine_feat",
"feature_type": "sequence_combine_feature",
"expression": "user:behavior_seq",
"combiner": "sum",
"separator": "|",
"sequence_delim": ";"
}Atau:
{
"feature_name": "seq_combine_feat",
"feature_type": "combine_feature",
"expression": "user:behavior_seq",
"combiner": "sum",
"is_sequence": true,
"separator": "|",
"sequence_delim": ";"
}Konfigurasi pemetaan 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
}
}Operator pertama-tama menerapkan pemetaan nilai, lalu menggabungkan nilai yang dihasilkan.
Parameter
Parameter | Wajib | Deskripsi |
feature_name | Ya | Nama fitur output. |
feature_type | Ya | Menentukan tipe operator. Misalnya, |
expression | Ya | Fitur input. |
combiner | Tidak | Strategi kombinasi. Nilai yang didukung: |
value_map | Tidak | Peta nilai untuk mengonversi nilai string ke nilai numerik sebelum dikombinasikan. |
is_sequence | Tidak | Menentukan apakah input adalah fitur sekuens. |
separator | Tidak | Pemisah bernilai ganda. Default adalah |
sequence_delim | Tidak | Pembatas sekuens. Default ke string kosong. |
default_value | Tidak | Nilai default yang digunakan untuk input null atau kosong. |
stub_type | Tidak | Jika diatur ke |
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 |
|
| 1+2+3=6, 4+5=9, 6=6 |
|
| 10=10, 20+30=50 |
|
| 1+2+3=6, 4+5=9, 6=6 |
|
| 1+2+3=6, 4+5=9, 6=6 |
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 memetakan event ke nilainya lalu menjumlahkannya: 1+2+4=7. |
|
| Nilai yang dipetakan adalah 2. |
|
| 1+2=3 |
|
| String input berisi beberapa elemen yang dipisahkan oleh pembatas sekuens (;). |
|
| Array input berisi beberapa elemen. |
tokenize_feature
Ikhtisar
Operator tokenize_feature melakukan tokenisasi string input, mengembalikan string yang telah ditokenisasi atau ID token yang sesuai. Operator ini mendukung file kosakata dalam format tokenizer.json dari pustaka tokenizers-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 fitur yang akan dibuat. |
expression | Ya | Menentukan bidang sumber. Sumber harus |
vocab_file | Ya | Jalur file kosakata. |
default_value | Tidak | Nilai default untuk input. |
tokenizer_type | Tidak | Tipe tokenizer. Nilai yang valid: |
output_type | Tidak |
|
output_delim | Tidak | Pembatas untuk output |
stub_type | Tidak | Saat diatur ke |
Contoh
Saat output_type adalah word_id, operator mengembalikan string ID token, dipisahkan oleh karakter yang ditentukan dalam output_delim.
Tipe | item:title | Output |
string | It is good today! | 1147,310,1175,3063,2 |
Contoh kosakata
Nama file | Tipe Tokenizer | Tautan unduh |
bert-base-chinese-vocab.json | WordPiece | |
tokenizer.json | BPE | |
spiece.model | sentencepiece |
text_normalizer
Ikhtisar
Operator text_normalizer melakukan normalisasi teks. Fiturnya mencakup konversi huruf besar/kecil, konversi Tionghoa Tradisional ke Sederhana, konversi karakter lebar penuh ke setengah lebar, penyaringan karakter khusus, konversi pengkodean GBK/UTF-8, 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
}
Parameter | Wajib | Deskripsi |
feature_name | Ya | Nama fitur. |
expression | Ya | Bidang sumber. Sumber harus |
stop_char_file | Tidak | Jalur ke file yang berisi karakter khusus yang akan dihapus. File ini harus dikodekan dalam GBK. Jika Anda menghilangkan parameter ini, operator menggunakan daftar bawaan. |
max_length | Tidak | Jika panjang teks input melebihi nilai ini, operator melewati normalisasi teks dan mengembalikan nilai aslinya. |
remove_space | - | Apakah akan menghapus spasi. |
is_gbk_input | Tidak | Apakah input dikodekan dalam GBK. Jika |
is_gbk_output | Tidak | Apakah output harus dikodekan dalam GBK. Jika |
parameter | - | Bitmask yang menentukan operasi normalisasi yang akan dilakukan. |
default_value | Tidak | Nilai default yang dikembalikan jika bidang sumber null atau 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
Parameter parameter menentukan jumlah satu atau lebih angka berikut.
Sebagai contoh, jika fungsi yang diperlukan adalah konversi huruf besar ke kecil, konversi lebar penuh ke setengah lebar, konversi Tionghoa Tradisional ke Sederhana, dan penyaringan karakter khusus, maka parameter=4+8+16+32=60.
Nilai default parameter 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 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
}inputs=["Regular Expression Code Generator", "HTML Filtering Tool", "Regular Expression Syntax Cheatsheet", "The Cat/"]
outputs=["regex code generator", "HTML filtering tool", "regular expression syntax quick reference", "the cat/"]
Fitur Bm25
Fitur
Algoritma BM25 (Best Matching) adalah algoritma pencocokan teks terkemuka dalam temu balik informasi, digunakan untuk menghitung skor relevansi pencarian. Algoritma ini pertama-tama mengurai query menjadi istilah
Untuk bahasa Tionghoa, Anda dapat mendekati tokenisasi query sebagai analisis morfem, memperlakukan setiap istilah sebagai morfem
Rumus umum algoritma BM25 adalah:
Di mana
Pentingnya Istilah
Ada beberapa metode untuk menentukan relevansi istilah terhadap dokumen. Salah satu yang paling umum adalah frekuensi dokumen invers (IDF). Rumusnya sebagai berikut:
Di sini,
Sesuai definisi IDF, untuk koleksi dokumen tertentu, semakin banyak dokumen yang berisi istilah
Relevansi istilah
Dalam BM25, skor relevansi antara istilah
Dari definisi
Rumus skor relevansi algoritma BM25 dapat dirangkum sebagai berikut:
Rumus BM25 menunjukkan bahwa penggunaan metode yang berbeda untuk tokenisasi, pembobotan kata kunci, dan penentuan relevansi kata kunci-dokumen dapat menghasilkan berbagai metode penilaian relevansi pencarian, sehingga memberikan fleksibilitas tinggi dalam desain algoritma.
Konfigurasi
{
"feature_type": "bm25_feature",
"feature_name": "query_doc_relevance",
"query": "user:query",
"document": "item:title",
"term_doc_freq_file": "term_doc_freq.txt",
"document_number": 1000,
"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. Setiap baris berisi sebuah term dan jumlah dokumennya, dipisahkan oleh spasi putih (whitespace). |
term_doc_freq_dict | No | Alternatif dari |
document_number | Yes | Jumlah total dokumen, yang sesuai dengan |
k1 | No | Parameter penyetelan untuk algoritma BM25. Nilai tipikal berkisar antara 1,2 hingga 2,0. Nilai default-nya adalah 1,2. |
b | No | Parameter penyetelan untuk algoritma BM25. Nilai default-nya adalah 0,75. |
separator | No | Pemisah untuk input bernilai ganda. Nilai default-nya adalah |
normalizer | No | Metode normalisasi. Untuk detailnya, lihat konfigurasi raw_feature. |
default_value | No | Nilai default untuk input null. |
stub_type | No | Jika diatur ke true, fitur ini hanya berfungsi sebagai hasil antara dan tidak disertakan dalam output model. Nilai default-nya adalah false. |
Tentukan salah satu dari
term_doc_freq_fileatauterm_doc_freq_dict. Opsi pertama memiliki prioritas lebih tinggi dan akan digunakan jika keduanya ditentukan.Saat menggunakan fitur ini di layanan online, letakkan file
term_doc_freq_filedanfg.jsondalam direktori yang sama.
kv_dot_product
Ikhtisar
Menghitung dot product dari vektor dua indeks key-value, atau ukuran irisan 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 | Menentukan bidang sumber untuk kueri. |
document | Ya | Menentukan bidang sumber untuk dokumen. |
separator | Tidak | Pemisah untuk input multi-nilai. Nilai default-nya adalah "\u001D". |
kv_delimiter | Tidak | Pemisah untuk pasangan kunci-nilai. Nilai default-nya adalah ":". |
normalizer | Tidak | Metode normalisasi. Untuk informasi selengkapnya, lihat konfigurasi raw_feature. |
default_value | Tidak | Nilai yang dikembalikan untuk input kosong. Nilai default-nya adalah 0. |
stub_type | Tidak | Nilai default-nya adalah false. Jika diatur ke true, fitur ini hanya berfungsi sebagai hasil antara dan tidak disertakan dalam output model. |
Fitur ini mendukung tipe kompleks, seperti
arraydanmap. Untuk performa optimal, gunakan tipe kompleks.Jika input tidak memiliki bagian
value, nilaivaluedefault-nya adalah 1.0. Anda dapat menggunakan properti ini untuk menemukan ukuran irisan dari 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 pengganti yang ditentukan.
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. Nama fitur output. |
expression | Wajib. Menentukan bidang sumber. |
default_value | Opsional. Nilai default yang digunakan jika input kosong atau bernilai null. |
replacements | Opsional. Parameter ini menjadi wajib jika |
replace_file | Opsional. Parameter ini wajib jika Anda tidak mengatur |
is_sequence | Opsional. Menentukan apakah ini merupakan fitur sekuens. Nilai default-nya adalah |
sequence_length | Opsional. Panjang maksimum sekuens. Elemen yang melebihi panjang ini akan dipotong. |
sequence_delim | Opsional. Pemisah untuk elemen sekuens. Parameter ini hanya berlaku untuk input berupa string. |
separator | Opsional. Parameter ini menentukan pemisah nilai ganda untuk input dan hanya berlaku ketika |
value_dimension | Opsional. Menentukan dimensi untuk pemotongan output. Default: 0. |
stub_type | Opsional. Jika diatur ke |
Anda dapat mengonfigurasi kedua parameter
replace_filedanreplacements. Dictionary pengganti dari keduanya digabungkan, danreplacementsmemiliki prioritas lebih tinggi.Operator ini mendukung pengelompokan fitur. Untuk detail konfigurasi, lihat Feature Binning (Discretization):
hash_bucket_size: Melakukan hash terhadap hasil transformasi fitur dan menerapkan operasi modulo.vocab_list: Mengelompokkan input berdasarkan vocabulari dan memetakan setiap nilai ke indeksnya dalam daftar tersebut.vocab_dict: Mengelompokkan input dengan memetakan setiap nilai fitur ke nilai yang sesuai dalamvocab_dict.vocab_file: Membacavocab_listatauvocab_dictdari file.
Operator ini mendukung input multi-nilai bertipe
array.
Contoh
Tabel berikut menunjukkan output untuk contoh konfigurasi di atas.
user:query | Output |
the quick brown fox jumped over the lazy dogs | pack my box with five dozen liquor jugs |
aaa | xX |
Feature|Generation|Tool|Useful | FeatureGenerationToolUseful |
regex_replace_feature
Ikhtisar
Operator regex_replace_feature mengganti substring yang sesuai dengan ekspresi reguler menggunakan string pengganti yang ditentukan.
Anda dapat mengonfigurasi multiple pola. Operator ini akan mengganti setiap substring yang sesuai dengan salah satu pola yang ditentukan.
Konfigurasi
{
"feature_name": "query",
"feature_type": "regex_replace_feature",
"expression": ["user:query"],
"regex_pattern": "\\|",
"replacement": " ",
"default_value": ""
}Parameter | Deskripsi |
feature_name | Wajib diisi. Nama fitur output. |
expression | Wajib diisi. Bidang sumber untuk fitur tersebut. |
default_value | Opsional. Nilai default yang digunakan jika input bernilai null atau kosong. |
regex_pattern | Wajib diisi. Ekspresi reguler yang digunakan untuk menemukan substring yang akan diganti. |
replacement | Opsional. String pengganti. Jika Anda menentukan string kosong, substring yang sesuai 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 (case-sensitive). Nilai default-nya adalah |
is_sequence | Opsional. Menentukan apakah ini merupakan fitur sequence. Nilai default-nya adalah |
sequence_length | Opsional. Panjang maksimum sequence. Operator ini memotong sequence yang melebihi panjang tersebut. |
sequence_delim | Opsional. Pemisah antar elemen dalam sequence. Parameter ini hanya diperlukan ketika input berupa string. |
separator | Opsional. Parameter ini hanya berlaku ketika |
value_dimension | Opsional. Dimensi output untuk memotong hasil. Nilai 0 (default) menonaktifkan pemotongan. |
stub_type | Opsional. Jika diatur ke |
Operator ini mendukung feature binning. Untuk detail konfigurasi, lihat dokumentasi feature binning (diskretisasi). Parameter berikut tersedia:
hash_bucket_size: Melakukan hash terhadap nilai fitur dan menerapkan operasi modulo.vocab_list: Mengelompokkan nilai fitur berdasarkan daftar vocab dan memetakannya ke indeksnya dalam daftar tersebut.vocab_dict: Memetakan setiap nilai fitur ke nilai yang sesuai dalamvocab_dict.vocab_file: Membacavocab_listatauvocab_dictdari file.
Mendukung input
arraymulti-nilai.
Contoh
| Output |
alpha|beta|gamma | alpha beta gamma |
feature|generation|tool|useful | feature generation tool useful |
bool_mask_feature
Pendahuluan
Menyaring elemen dari sebuah sequence menggunakan boolean mask, mirip dengan tf.boolean_mask(tensor, mask).
Ini merupakan jenis 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. Nama fitur, digunakan sebagai awalan untuk output akhir. |
expression | Wajib. Array yang menentukan bidang-bidang dependen. Elemen pertama adalah input sequence yang akan disaring, dan elemen kedua adalah boolean mask. |
default_value | Opsional. Jika tidak ditentukan, parameter ini secara default bernilai |
value_type | Wajib. Tipe data dari output. |
sequence_length | Opsional. Panjang maksimum sequence. Sequence yang lebih panjang akan dipotong. |
sequence_delim | Opsional. Pemisah untuk elemen-elemen dalam sebuah sequence. Parameter ini wajib untuk input berupa string. |
separator | Opsional. Pemisah untuk input multi-nilai. Nilai default-nya adalah |
value_dimension | Opsional. Dimensi output, digunakan untuk pemotongan. Nilai default-nya adalah |
normalizer | Opsional. Metode normalisasi. Parameter ini hanya berlaku untuk fitur numerik. Untuk detailnya, lihat RawFeature. |
stub_type | Opsional. Jika diatur ke |
Mendukung pengelompokan fitur. Untuk detail konfigurasi, lihat Pengelompokan fitur (diskretisasi).
Mendukung input multi-nilai dalam bentuk 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
Memotong array input menggunakan sintaks slice ala Python atau mengambil elemen pada indeks tertentu.
Ini merupakan jenis 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, digunakan sebagai awalan untuk output akhir. |
expression | Ya | Array berisi bidang sumber. |
slice | Ya | Bilangan tunggal untuk mengambil elemen berdasarkan indeksnya, atau string slice ala Python dalam format |
default_value | Tidak | Nilai yang digunakan untuk input kosong. Jika tidak ditentukan, nilai default-nya adalah |
value_type | Ya | Tipe output. |
sequence_length | Tidak | Panjang maksimum sequence. Sequence yang lebih panjang akan dipotong. |
sequence_delim | Tidak | Pemisah antar elemen sequence. Hanya diperlukan jika input berupa |
separator | Tidak | Pemisah nilai ganda untuk input. Nilai default-nya adalah |
value_dimension | Tidak | Menentukan dimensi untuk pemotongan output. Nilai default-nya adalah |
normalizer | Tidak | Metode normalisasi. Hanya berlaku untuk fitur numerik. Untuk detail selengkapnya, lihat RawFeature. |
stub_type | Tidak | Default: |
placeholder | Tidak | Dalam sequence feature, nilai khusus yang digunakan untuk mengisi posisi kosong dan melengkapi dimensi. Nilai default-nya adalah |
Operator ini mendukung pengelompokan fitur. Untuk detail konfigurasi, lihat feature binning (diskretisasi).
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] |