Penyematan teks adalah tugas pembelajaran mesin yang digunakan untuk membuat representasi vektor dari sepotong teks. Vektor ini kemudian dapat digunakan sebagai masukan ke algoritma pembelajaran mesin. Tujuan penyematan teks adalah untuk menangkap makna teks dengan cara yang sesuai untuk pembelajaran mesin.
Ada banyak cara berbeda untuk membuat penyematan teks, namun yang paling umum adalah menggunakan jaringan saraf. Jaringan saraf adalah algoritma pembelajaran mesin yang sangat baik dalam mempelajari hubungan yang kompleks. Masukan ke jaringan saraf adalah vektor, dan keluarannya berupa vektor dengan ukuran yang sama. Jaringan saraf belajar memetakan vektor masukan ke vektor keluaran sedemikian rupa sehingga menangkap hubungan antara masukan dan keluaran.
Untuk membuat penyematan teks, jaringan saraf terlebih dahulu dilatih pada kumpulan teks yang besar. Data pelatihan adalah sekumpulan kalimat, dan setiap kalimat direpresentasikan sebagai vektor. Vektor dibuat dengan mengambil vektor kata dari kata-kata dalam kalimat dan menjumlahkannya. Jaringan saraf kemudian dilatih untuk memetakan vektor kalimat ke ukuran vektor tetap.
Setelah jaringan saraf dilatih, jaringan tersebut kemudian dapat digunakan untuk membuat penyematan teks untuk potongan teks baru. Teks baru pertama-tama direpresentasikan sebagai vektor, dan kemudian jaringan saraf digunakan untuk memetakan vektor tersebut ke ukuran vektor tetap. Hasilnya adalah penyematan teks yang menangkap makna teks.
Penyematan teks dapat digunakan untuk berbagai tugas pembelajaran mesin. Misalnya, mereka dapat digunakan untuk meningkatkan kinerja algoritma pembelajaran mesin yang digunakan untuk mengklasifikasikan teks. Penyematan teks juga dapat digunakan untuk menemukan bagian teks yang serupa, atau untuk mengelompokkan teks menjadi satu.
Ada banyak cara berbeda untuk membuat penyematan teks, dan pilihan metode akan bergantung pada aplikasinya. Namun, jaringan saraf adalah metode yang ampuh dan banyak digunakan untuk membuat penyematan teks.
Co:ini adalah jaringan saraf yang kuat, yang dapat menghasilkan, menyematkan, dan mengklasifikasikan teks. Dalam tutorial ini, kita akan menggunakan Co:here untuk menyematkan deskripsi. Untuk menggunakan Co:here Anda perlu membuat akun di Co:here dan mendapatkan kunci API.
Kami akan memprogram dengan Python, jadi kami perlu menginstal perpustakaan cohere
dengan pip
pip install cohere
Pertama, kita harus mengimplementasikan cohere.Client
. Dalam argumen Klien harus ada kunci API, yang telah Anda buat sebelumnya, dan versi 2021-11-08
. Saya akan membuat kelas CoHere
, ini akan berguna pada langkah selanjutnya.
class CoHere :
def __init__ ( self , api_key ):
self . co = cohere . Client ( f' { api_key } ' , '2021-11-08' )
self . examples = []
Bagian utama dari setiap jaringan saraf adalah kumpulan data. Dalam tutorial ini saya akan menggunakan dataset yang mencakup 1000 deskripsi 10 kelas. Jika Anda ingin menggunakannya, Anda dapat mendownloadnya di sini.
Dataset yang diunduh memiliki 10 folder di setiap folder berisi 100 files.txt
dengan deskripsi. Nama file adalah label deskripsi, misalnya sport_3.txt
.
Kita akan membandingkan Random Forest
dengan Co:here Classifier
, jadi kita harus menyiapkan data dengan dua cara. Untuk Random Forest
kita akan menggunakan Co:here Embedder
, kita akan fokus pada hal ini dalam tutorial ini. Pengklasifikasi Cohere memerlukan sampel, di mana setiap sampel harus dirancang sebagai daftar [description, label]
dan saya melakukannya di tutorial saya sebelumnya (di sini)
Pada awalnya, kita perlu memuat semua data, untuk melakukan itu. Kami membuat fungsi load_examples
. Dalam fungsi ini kita akan menggunakan tiga perpustakaan eksternal:
os.path
untuk masuk ke folder dengan data. Kode dieksekusi di jalur di mana file.py
python berada. Ini adalah perpustakaan internal, jadi kita tidak perlu menginstalnya.
numpy
perpustakaan ini berguna untuk bekerja dengan array. Dalam tutorial ini, kita akan menggunakannya untuk menghasilkan angka acak. Anda harus menginstal perpustakaan ini dengan pip pip install numpy
.
glob
membantu kita membaca semua file dan nama folder. Ini adalah perpustakaan eksternal, jadi diperlukan instalasi - pip install glob
.
Kumpulan data yang diunduh harus diekstraksi di folder data
. Dengan os.path.join
kita bisa mendapatkan jalur folder universal.
folders_path = os . path . join ( 'data' , '*' )
Di windows, pengembalian sama dengan data*
.
Kemudian kita bisa menggunakan metode glob
untuk mendapatkan semua nama folder.
folders_name = glob ( folders_path )
folders_name
adalah daftar, yang berisi jalur jendela folder. Dalam tutorial ini, ini adalah nama-nama label.
[ 'data \ business' , 'data \ entertainment' , 'data \ food' , 'data \ graphics' , 'data \ historical' , 'data \ medical' , 'data \ politics' , 'data \ space' , 'data \ sport' , 'data \ technologie' ]
Ukuran Co:here
kumpulan data pelatihan tidak boleh lebih besar dari 50 contoh dan setiap kelas harus memiliki setidaknya 5 contoh, tetapi untuk Random Forest
kita dapat menggunakan 1000 contoh. Dengan loop for
kita bisa mendapatkan nama setiap file. Seluruh fungsinya terlihat seperti itu:
import os . path
from glob import glob
import numpy as np
def load_examples ( no_of_ex ):
examples_path = []
folders_path = os . path . join ( 'data' , '*' )
folders_name = glob ( folders_path )
for folder in folders_name :
files_path = os . path . join ( folder , '*' )
files_name = glob ( files_path )
for i in range ( no_of_ex // len ( folders_name )):
random_example = np . random . randint ( 0 , len ( files_name ))
examples_path . append ( files_name [ random_example ])
return examples_path
Perulangan terakhir mengambil N-jalur secara acak dari setiap label dan menambahkannya ke dalam daftar baru examples_path
.
Sekarang, kita harus membuat set pelatihan. Untuk membuatnya kita akan memuat contoh dengan load_examples()
. Di setiap jalur terdapat nama kelas, kita akan menggunakannya untuk membuat sampel. Deskripsi perlu dibaca dari file, panjangnya tidak boleh panjang, jadi dalam tutorial ini, panjangnya akan sama dengan 100. Untuk daftar texts
ditambahkan daftar [descroption, class_name]
. Jadi, pengembaliannya adalah daftar itu.
def examples ( no_of_ex ):
texts = []
examples_path = load_examples ( no_of_ex )
for path in examples_path :
class_name = path . split ( os . sep )[ 1 ]
with open ( path , 'r' , encoding = "utf8" ) as file :
text = file . read ()[: 100 ]
texts . append ([ text , class_name ])
return texts
Kami kembali ke kelas CoHere
. Kita harus menambahkan satu metode - untuk menyematkan contoh.
Metode cohere
kedua adalah menyematkan teks. Metode ini memiliki argumen serval, seperti:
ukuran model
suatu model.
texts
daftar teks yang akan disematkan.
truncate
jika teks lebih panjang dari token yang tersedia, bagian teks mana yang harus diambil LEFT
, RIGHT
atau NONE
.
Semuanya dapat Anda temukan di sini.
Dalam tutorial ini, metode cohere
akan diimplementasikan sebagai metode kelas CoHere
kita.
def embed ( self , no_of_ex ):
# as a good developer we should split the dataset.
data = pd . DataFrame ( examples ( no_of_ex ))
self . X_train , self . X_test , self . y_train , self . y_test = train_test_split (
list ( data [ 0 ]), list ( data [ 1 ]), test_size = 0.2 , random_state = 0 )
# in the next two lines we create a numeric form of X_train data
self . X_train_embeded = self . co . embed ( texts = X_train ,
model = "large" ,
truncate = "LEFT" ). embeddings
self . X_test_embeded = self . co . embed ( texts = X_test ,
model = "large" ,
truncate = "LEFT" ). embeddings
X_train_embeded
akan berupa array angka, yang terlihat seperti ini:
[ 386, 0.39653537, -0.409076, 0.5956299, -0.06624506, 2.0539167, 0.7133603,...
Untuk membuat aplikasi yang akan membandingkan dua tampilan kemungkinan, kita akan menggunakan Stramlit
. Ini adalah perpustakaan yang mudah dan sangat berguna.
Instalasi
pip install streamlit
Kita memerlukan input teks untuk kunci API co:here
.
Dalam dokumen streamlit kita dapat menemukan metode:
st.header()
untuk membuat header di aplikasi kita
st.test_input()
untuk mengirim permintaan teks
st.button()
untuk membuat tombol
st.write()
untuk menampilkan hasil model kohere.
st.progress()
untuk menampilkan bilah kemajuan
st.column()
untuk membagi aplikasi
st . header ( "Co:here Text Classifier vs Random Forest" )
api_key = st . text_input ( "API Key:" , type = "password" )
cohere = CoHere ( api_key )
cohere . list_of_examples ( 50 ) # number of examples for Cohere classifier
# showed in the previous tutorial
cohere . embed ( 1000 ) # number of examples for random forest
# initialization of random forest with sklearn library
forest = RandomForestClassifier ( max_depth = 10 , random_state = 0 )
col1 , col2 = st . columns ( 2 )
if col1 . button ( "Classify" ):
# training process of random forest, to do it we use embedded text.
forest . fit ( cohere . X_train_embeded , cohere . y_train )
# prediction process of random forest
predict = forest . predict_proba ( np . array ( cohere . X_test_embeded [ 0 ]). reshape ( 1 , - 1 ))[ 0 ]
here = cohere . classify ([ cohere . X_test [ 0 ]])[ 0 ] # prediction process of cohere classifier
col2 . success ( f"Correct prediction: { cohere . y_test [ 0 ] } " ) # display original label
col1 , col2 = st . columns ( 2 )
col1 . header ( "Co:here classify" ) # predictions for cohere
for con in here . confidence :
col1 . write ( f" { con . label } : { np . round ( con . confidence * 100 , 2 ) } %" )
col1 . progress ( con . confidence )
col2 . header ( "Random Forest" ) # predictions for random forest
for con , pred in zip ( here . confidence , predict ):
col2 . write ( f" { con . label } : { np . round ( pred * 100 , 2 ) } %" )
col2 . progress ( pred )
Untuk menjalankan perintah penggunaan aplikasi streamlit
streamlit run name_of_your_file . py
Aplikasi yang dibuat terlihat seperti ini
Penyematan teks adalah alat canggih yang dapat digunakan untuk meningkatkan kinerja algoritme pembelajaran mesin. Jaringan saraf adalah metode yang banyak digunakan dan efektif untuk membuat penyematan teks. Penyematan teks dapat digunakan untuk tugas-tugas seperti klasifikasi teks, kesamaan teks, dan pengelompokan teks.
Dalam tutorial ini, kita membandingkan Random Forest
dengan Co:here Classifier
, tetapi kemungkinan Co:here Embedder
sangat besar. Anda dapat membangun banyak hal dengannya.
Nantikan tutorial selanjutnya! Repositori kode ini dapat diperiksa di sini.
Terima kasih! - Adrian Banachowicz, Magang Ilmu Data di New Native