BAB III METODOLOGI
3.1 Jadwal Penelitian
Tabel 3.3 Jadwal Penelitian
No Kegiatan Bulan 1 Bulan 2 Bulan 3 Bulan 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 Identifikasi
Masalah dan Studi
Literatur
2 Pengumpulan Data
s3 Pra Proses Data
4 Pelatihan Model
5 Analisis dan Evaluasi
6 Penyusunan Dokumen Tugas Akhir
22
Halaman ini sengaja dikosongkan
22
BAB IV PERANCANGAN
4.1 Perancangan Pengumpulan Data Teks
Pada tahap ini dilakukan pengumpulan data teks atau korpus dari beberapa jurnal kedokteran berbahasa Indonesia. Data diperoleh dengan mengunduhnya dari website kemudian disimpan dalam satu folder agar mudah digunakan dalam tahap selanjutnya. Pada tahap ini berhasil dikumpulkan sebanyak 402 file jurnal kedokteran berformat pdf.
4.2 Perancangan Pra-Proses
Pada tahap ini dilakukan pra-proses terhadap data teks yang telah dikumpulkan di tahap sebelumnya. Pada pra-proses, beberapa unsur kata dalam Bahasa Inggris dibuang. Selain itu teks terkait referensi atau daftar pustaka juga tidak diikutkan.
Sehingga bagian jurnal yang diambil hanyalah bagian pendahuluan sampai kesimpulan. Hasil dari pra-proses disimpan dalam bentuk file berformat txt.
4.3 Perancangan Penerjemahan
Pada tahap ini dilakukan proses penerjemahan dataset yang akan digunakan dalam pelatihan dan evaluasi model. Dataset yang digunakan adalah Ohsumed yaitu dataset yang sering digunakan sebagai pembanding untuk tugas klasifikasi teks.
Penerjemahan dataset ini menggunakan model transformer yang khusus digunakan dalam machine translation.
Tabel 4.1 Dataframe Dataset Terjemahan Attribute Tipe Data Deskripsi
text String Berisi teks hasil dari terjemahan
labels String Label dari teks. Labels ini diambil dari nama folder tempat file disimpan.
4.4 Perancangan Teks Augmentasi
Pada tahap ini dilakukan proses augmentasi teks terhadap dataset yang akan digunakan dalam pelatihan model. Proses ini bertujuan untuk menyeimbangkan jumlah kelas yang terdapat dalam dataset tersebut. Metode yang digunakan dalam augmentasi teks ini adalah contextual word embedding dari model multilingual- bert. Proses ini dilakukan dengan bantuan pustaka transformers dan nlpaug di python.
23
24
Tabel 4.2 Dataframe Dataset Augmentasi Attribute Tipe Data Deskripsi
text String Berisi teks hasil dari proses augmentasi labels String Label dari teks. Labels ini diambil dari
nama folder tempat file disimpan.
4.5 Perancangan Pelatihan Model Klasifikasi
Dalam pembuata model BERT terdapat beberapa parameter yang harus ditentutak agar mendapatkan hasil terbaik. Perubahan parameter akan dilakukan yaitu perubahan pada jenis model, optimizer, scheduler, learning rate, jumlah epoch dan max len. Model yang akan digunakan dalam penelitian ini adalah model BERT hasil dari pelatihan language model, indobert-base-p1, indobert-base-lite-p1, indolem/indobert-base-uncased, mBERT, dan XLMRoBERTa. Adapapun optimizer yang akan digunakan adalah Adam dan AdamW. Tipe scheduler yang digunakan adalah CosineAnnealingWarmRestart dan CosineAnnealingLR. Untuk learning rate akan digunakan 1e-4, 1e-5, dan 1e-6. Jumlah epoch yang digunakan yaitu 15 dan 25. Parameter terakhir adalah jumlah kata maksimal dalam kalimat, max len, adalah 100 dan 256. Untuk lebih jelasnya kombinasi parameter-parameter yang telah disebutkan sebelumnya dirinci didalam tabel 6 dibawah ini.
25
Tabel 4.3 Parameter yang Digunakan Pada Model BERT
Parameter Nilai Keterangan
Model 1. MedBERT
2. indobert-base-p1
3. indolem/indobert-base-uncased 4. mBERT
5. XLMRoBERTa
Model yang digunakan sebagai pembanding.
Optimizer 1. Adam
2. AdamW Menentukan algorima
optimizer yang digunakan untuk training model.
Optimizer adalah algoritma atau metode yang digunakan untuk mengubah atribut model neural network seperti weights dan learning rate untuk mengurangi loss
Scheduler 1. CosineAnnealingLR
2. CosineAnnealingLRWarmRestart
Menentukan algoritma scheduler yang akan digunakan. Algoritma scheduler ini adalah sebuah teknik untuk mengurangi besar learning rate secara bertahap,
Learning
Rate 1. 1e-4
2. 1e-5 3. 1e-6
Menentukan nilai Learning rate dari Optimizer yang dipilih. Learning Rate merupakan parameter yang mengontrol berapa banyak untuk mengubah model dalam menanggapi estimasi kesalahan setiap kali bobot model diperbarui.
banyaknya jumlah kata maksimal yang digunakan dimasing- masing kalimat.
26
4.6 Perancangan Evaluasi Model
Tahap pelatihan dan evaluasi model dibagi menjadi dua skema. Skema yang pertama adalah adalah pelatihan dan evaluasi model untuk downstream task fill in the blanks sedangkan skema yang kedua adalah pelatihan dan evaluasi model untuk downstream task sequence text classification. Untuk skema pelatihan dan evaluasi model yang pertama yaitu model dilatih dalam data teks yang telah dikumpulkan ditahap sebelumnya dan dievaluasi dengan metode fill mask untuk mengetahui seberapa bagus language model memprediksi kata yang dihilangkan, dalam hal ini diganti dengan sebuah token [MASK] atau <mask>. Hasil dari proses pelatihan ini akan membentuk sebuah model yang khusus mengenali kosakata-kosakata dalam bidang kedokteran. Skema selanjutnya adalah menggunakan model yang dihasilkan untuk diuji dan dievaluasi performa menggunakan dataset pembanding yang telah diterjemahkan. Metrik evaluasi yang akan digunakan adalah accuracy score.
4.6.1 Fill Mask
Metode evaluasi fill mask adalah seberapa baik sebuah model bisa memprediksi kata yang sesuai ketika kata tersebut diganti oleh sebuah token [MASK].
Contohnya pada kalimat uji “preeklampsia ditandai dengan adanya hipertensi dan [MASK] pada usia kehamilan lebih dari 20 minggu” diharapkan model mampu memprediksi kalimat proteinuria pada kata yang ditutupi token [MASK].
4.6.2 Accuracy Score
Accuracy score adalah sebuah nilai yang mengukur seberapa banyak prediksi yang benar dari semua data yang diuji.
Jumlah prediksi benar 𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴 = Total Data
26
27
Halaman ini sengaja dikosongkan
BAB V IMPLEMENTASI
Bab ini menjelaskan mengenai implementasi dari perancangan yang telah dilakukan. Bagian ini akan menjelaskan mengenai lingkungan implementasi, pembuatan fitur-fitur dalam bentuk kode, dan pengujian model.
5.1 Persiapan Implementasi
Penelitian ini menggunakan perangkat cloud dengan spesifikasi seperti pada Tabel 5.1.
Tabel 5.1 Spesifikasi Perangkat Cloud Nama Perangkat Kaggel Kernel
Processor Intel® Xeon® CPU @ 2.3GHz
Memory 25.3 GB
GPU NVIDIA Tesla P100
VRAM 16 GB
Sementara untuk software yang digunakan pada penelitian ini meliputi kode editor, bahasa pemrograman dan pustaka yang digunakan dirinci dalam Tabel 5.2 seperti dibawah ini.
Tabel 5.2 Rincian Software Bahasa
Pemrograman Python
Tools Jupyter Notebook
Virtual Environment Anaconda
Pustaka ▪ Numpy
▪ Pandas
▪ Scikit-Learn
▪ Matplotlib
▪ Seaborn
▪ maleo
▪ PyTorch
▪ transformers
▪ sentencepiece
▪ nlpaug
28
29
Import os
from tqdm.notebook import tqdm MAIN_DIR = "D:/Pra TA/Bio Text/"
all_text = ''
for i, file in tqdm(enumerate(os.listdir(MAIN_DIR)), leave=True, total=len(os.listdir(MAIN_DIR))):
words = open(MAIN_DIR + file, "r", encoding='UTF-8').read() all_text += words
all_text = all_text.lower()
from transformers import MarianTokenizer, MarianMTModel
id_model_name = "Helsinki-NLP/opus-mt-en-id"
id_tokenizer =
MarianTokenizer.from_pretrained(id_model_name)
id_model = MarianMTModel.from_pretrained(id_model_name)
5.2 Pengumpulan Data Teks
Data-data teks dalam bentuk pdf akan digabungkan menjadi satu bagian dalam sebuah file txt. Hal ini dikarenakan dalam pelatihan language model, model hanya membutuhkan data-data teks dalam bentuk file txt.
Kode 5.1 Potongan Kode untuk Memuat Data Teks 5.3 Pra-Proses Data Teks / Korpus
Pada tahap ini pra-proses dilakukan secara manual. Pra-proses dilakukan dengan cara menghapus beberapa kalimat dalam Bahasa Inggris. Biasanya kalimat ini adalah paragraf abstrak. Selain itu penghapusan teks juga dilakukan dalam bagian daftar pustaka atau referensi.
5.4 Penerjemahan Dataset
Proses penerjemahan dataset dibantu dengan memanfaatkan pustaka transformers di bahasa pemrograman python. Dalam pustaka ini akan digunakan sebuah model yang berperan untuk menyelesaikan permasalahan di bidang machine translation.
Model transformer yang akan digunakan dalam tahap ini adalah model yang beraksitektur Seq2Seq. Untuk nama modelnya sendiri adalah Helsinki-NLP/opus- mt-en-id.
Kode 5.1 Potongan Kode untuk Penerjemahan
30
Kode 5.2 Potongan Kode Kelas Dataset untuk Penerjemahan
Potongan kode diatas digunakan untuk membuat sebuah dataloader yang berfungsi untuk memuat data per batch. Pada kode tersebut terlihat bahwa banyak batch yang digunakan adalah 32. Proses penerjemahan dibantu dengan penggunaan dataloader dikarenakan jika tidak menggunakan dataloader maka data akan dimuat secara utuh satu dataset dalam proses penerjemahannya. Hal ini akan mengakibatkan Out of Memory dimana GPU yang digunakan tidak mampu untuk melakukan komputasi.
Selanjutnya proses translasi atau penerjemahan akan dilakukan oleh potongan kode dibawah ini.
from torch.utils.data import DataLoader, Dataset class TransDataset(Dataset):
def init (self, texts):
self.texts = texts def len (self):
return len(self.texts) def getitem (self, item):
text = str(self.texts[item]) return {
'texts':text }
def translate_data_loader(df):
ds = TransDataset(
texts = df.text.to_numpy() )
return DataLoader(
ds,
batch_size=32, num_workers=0 )
31
Kode 5.3 Potongan Kode Untuk Melakukan Penerjemahan
Fungsi / method translate diatas digunakan untuk melakukan proses translasi. Pada fungsi tersebut teks yang akan diterjemahkan diubah bentuknya kedalam list terlebih dahulu. Kemudian teks tersebut di encode dengan sebuah fungsi tokenizer.prepare_seq2se_batch yang prosesnya akan dilakukan menggunakan GPU. Teks hasil terjemahan dihasilkan melalui pemanggilan fungsi model.generate(**encoded).to(device). Setelah itu teks yang masih ter-encode akan di-decode melalui fungsi tokenizer.batch_decode. Teks yang akan diterjemahkan akan diubah bentuknya menjadi per batch dan menyimpannya dalam sebuah variable trans_data_loader. Untuk bisa digunakan, teks yang telah ditranslasikan akan diuraikan lagi sehingga bentuknya menjadi satuan bukan per batch. Hal ini bisa dilakukan dengan melakukan iterasi disetiap batch dan memasukan anggotanya ke dalam sebuah list baru, dalam hal ini list txtaugment.
def translate(texts, model=id_model, tokenizer=id_tokenizer):
source_text = list(texts) encoded =
tokenizer.prepare_seq2seq_batch(src_texts=source_text, return_tensors="pt").to(device)
translated = model.generate(**encoded).to(device) translated_texts = tokenizer.batch_decode(translated, skip_special_tokens=True)
return translated_texts
trans_data_loader = translate_data_loader(aug)
import warnings
warnings.filterwarnings("ignore") from tqdm import tqdm
txtaugment = []
for batch in tqdm(trans_data_loader, leave=True, total=len(trans_data_loader)):
txtaugment.append(translate(batch['texts']))
32
from torch.utils.data import DataLoader, Dataset class AugmentationDataset(Dataset):
def init (self, texts, labels):
self.texts = texts self.labels = labels def len (self):
return len(self.texts) def getitem (self, item):
text = str(self.texts[item]) label = self.labels[item]
return {
'texts':text, 'labels':label }
def aug_data_loader(df):
ds = AugmentationDataset(
texts = df.text.to_numpy(), labels = df.label
)
5.5 Penambahan Data dengan Augmentasi Teks
Dataset yang digunakan untuk evaluasi downstream task terdiri dari 23 kelas.
Proporsi untuk masing-masing kelas masih tidak seimbang dan perbandingannya sangat jauh sekali. Untuk mengatasi permasalahan performa yang diakibatkan oleh ketidakseimbangan data perlu dilakukan penambahan data dengan teknik oversampling terhadap kelas minor.
Kode 5.1 Potongan Kode Kelas Dataset Augmentasi
Sebelum masuk kedalam tahap augmentasi, pembuatan dataloader sangat penting untuk dilakukan. Hal ini dikarenakan pustaka yang digunakan dalam melakukan augmentasi tidak mampu memproses data yang besar dalam sekali proses. Oleh karena itu pada potongan kode diatas kita bisa melihat nilai batch size hanya satu.
33
aug_part1_loader = aug_data_loader(part1) next(iter(aug_part1_loader))
output
{'texts': ['Efek epinefrin pada hemodinamik dan metabolisme oksigen pada syok septik yang resistan terhadap dopamin. Efek hemodinamik epinefrin dipelajari secara prospektif pada 13 pasien dengan syok septik yang tetap hipotensi setelah pemberian cairan dan dopamin. Pengukuran hemodinamik dilakukan sebelum dan satu jam setelah dimulainya infus epinefrin. Tek arteri sistolik, diastolik, dan rata-rata meningkat pada semua pasien (p kurang dari 0,01). Indeks jantung dan resistensi pembuluh darah sistemik meningkat masing-masing sebesar 34 dan 32 persen (p kurang dari 0,05), tetapi denyut jantung dan resistensi pembuluh darah paru tetap tidak berubah. Ada peningkatan bersamaan dalam pengiriman oksigen (p kurang dari 0,01) dan konsumsi oksigen (p kurang dari 0,05), besarnya yang terakhir terkait dengan laktasidemia awal (p kurang dari 0,01). Mengingat tujuan fisiologis yang diakui secara dari manajemen syok septik, kami menyimpulkan bahwa epinefrin bisa menjadi alternatif yang tepat di mana pemuatan cairan dan dopamin telah l.'],
'labels': tensor([0])}
Kode 5.2 Potongan Kode Untuk Memilih Label yang akan Diaugmentasi Potongan kode diatas adalah potongan kode untuk menseleksi label mana saja yang jumlahnya masih sedikit. Pada kode diatas saya memilih label 0, 1, 2, 4, 6, 8, 10, dan 21. Setelah diseleksi label-label tadi disatukan dalam satu dataframe agar lebih mudah diproses ditahap berikutnya.
Kode 5.3 Potongan Kode untuk Membungkus Data dalam Sebuah Dataloader
l0 = train[train.label == 0] ; l1 = train[train.label == 1] ; l2 = train[train.label == 2]
l4 = train[train.label == 4] ; l6 = train[train.label == 6] ; l8 = train[train.label == 8]
l10 = train[train.label == 10] ; l21 = train[train.label == 21]
part1 =
l0.append(l1).append(l2).append(l4).append(l6).append(l8).append(l10).append(
l21)part1
34
Kode diatas adalah kode yang berfungsi untuk membungkus setiap data dalam sebuah dataloader, dalam hal ini adalah aug_data_loader. Kode next(iter(aug_part1_loader)) digunakan untuk mengecek apa yang terdapat dalam setiap batch. Dari keterangan output diatas dalam satu batch dataloader terdiri dari data text dan data labels yang bertipe tensor.
from transformers import *
import nlpaug.augmenter.char as nac import nlpaug.augmenter.word as naw import nlpaug.augmenter.sentence as nas import nlpaug.flow as nafc
from nlpaug.util import Action
aug = naw.ContextualWordEmbsAug(model_path='bert-base-multilingual- uncased', aug_p=0.2)
text = "Beberapa lesi oral dan kulit terjadi setelah pengobatan dengan penisilin. Sebuah kasus eritema multiforme telah disajikan. Eritema multiforme mungkin merupakan penyakit yang sembuh sendiri atau kronis, dengan tingkat keparahan yang bervariasi. Penyakit ini penting bagi praktisi yang mungkin dipanggil untuk menegakkan diagnosis dan memberikan rujukan atau pengobatan yang tepat, terutama bila lesi terbatas pada mulut. Prognosis umumnya baik, meskipun kekambuhan sering terjadi."
augmented_text = aug.augment(text) print("Original:")
print(text)
print("Augmented Text:") print(augmented_text)
Output
Original:Beberapa lesi oral dan kulit terjadi setelah pengobatan dengan penisilin. Sebuah kasus eritema multiforme telah disajikan. Eritema multiforme mungkin merupakan penyakit yang sembuh sendiri atau kronis, dengan tingkat keparahan yang bervariasi.
Augmented Text:beberapa lesi oral dan kulit terjadi setelah pengobatan menggunakan penisilin. sebuah versi eritema multiforme telah disajikan.
eritema multiforme mungkin merupakan penyakit yang sembuh sendiri atau kronis, dan jenis sel yang bervariasi.
Kode 5.4 Augmentasi untuk Satu Buah Sample
35
import warnings
warnings.filterwarnings("ignore") from tqdm import tqdm
augmentpart1 = []
labelspart1 = []
aug = naw.ContextualWordEmbsAug(model_path='bert-base-multilingual- uncased', aug_p=0.1)
for batch in tqdm(aug_part1_loader, leave=True, total=len(aug_part1_loader)):
for i in range(0, 6):
augmentpart1.append(aug.augment(batch['texts'])) labelspart1.append(batch['labels'])
augment1 = []
label1 = []
for batch in augmentpart1:
for item in batch:
augment1.append(item) for batch in labelspart1:
for item in batch:
label1.append(int(item.detach().cpu().numpy()))
print(augment1[:5]) print(label1[:5])
Potongan kode diatas adalah sampel bagaimana augmentasi teks akan dilakukan.
Proses ini dibantu dengan menggunakan pustaka nlpaug. Adapun metode yang digunakan adalah Contextual Word Embedding yang memanfaatkan model 'bert- base-multilingual-uncased dengan perubahan maksimal sebesar 40 persen.
Kode 5.5 Potongan Kode untuk Melakukan Augmentasi
Potongan kode 5.9 diatas digunakan untuk melakukan augmentasi terhadap semua kelas minor dimana masing-masing kelas akan dilakukan sebanyak enam kali. Hasil teks dari proses augmentasi akan disimpan dalam list augmentpart1 sedangkan untuk labelnya akan disimpan dalam list labelspart1. Tahap selanjutnya adalah menguraikan teks dan label hasil augmentasi menjadi satu dataframe.
36
from itertools import groupby def rm_messy_text(test):
clean_txt = re.sub(r"([\w+]+[aiueo])\1{1,}", '', test)
clean_txt = re.sub(r"([aiueo]+[b-z])\1\b|([aiueo]+[bcdlj])\1\b", '', clean_txt) clean_txt = re.sub(r"([b-zB-Z]+)\1\b", '', clean_txt)
clean_txt = re.sub(r"([b-zB-Z]+)\1\b", '', clean_txt) no_dupli = ([k for k, v in groupby(clean_txt.split())]) no_dupli = ' '.join(no_dupli)
no_dupli = ([k for k, v in groupby(no_dupli.split())]) no_dupli = ' '.join(no_dupli)
return no_dupli
train['text'] = train.text.apply(rm_messy_text)
import re
repeated_rows_train = []
repeated_rows_test = []
for idx, review in enumerate(train['text']):
if re.match(r'\w*(\w)\1+', review):
repeated_rows_train.append(idx) print(len(repeated rows train))
5.6 Pra-Proses Dataset
Terkadang proses hasil proses translasi tidak begitu baik dan masih terdapat beberapa kalimat yang tidak sempurna terjemahkan. Oleh karena itu diperlukan pra- proses untuk menghilangkan kata-kata yang tidak diinginkan.
Kode 5.1 Regex untuk Pra-Proses Dataset
Potongan kode diatas digunakan untuk menghilangkan beberapak kata yang tidak bermakna dalam sebuah kalimat. Kata-kata yang tidak bermakna biasanya tersusun dari sebuah huruf konsonan dan vokal secara berturut-turut. Selain itu kode ini juga digunakan untuk menghilangkan kata-kata duplikat yang terdapat dalam satu paragraf.
Kode 5.2 Regex untuk Mengektrak Baris Index Berhuruf Ganda
Untuk memastikan data training bersih, kode diatas dijalankan untuk mengecek jika sebuah kalimat masih terdapat huruf yang berulang lebih dari dua kali, maka akan dilakukan drop baris dimana kalimat tersebut berada.
37
import os import torch
import transformers from pathlib import Path
from tokenizers import BertWordPieceTokenizer, ByteLevelBPETokenizer from transformers import BertTokenizerFast, BertForMaskedLM,
AutoModelForMaskedLM, pipeline, PreTrainedTokenizerFast
from transformers import AlbertTokenizerFast, AlbertForMaskedLM, AutoTokenizer, pipeline
from transformers import GPT2Config, AutoConfig, BertConfig, AlbertConfig
5.7 Pelatihan Language Model
Proses pelatihan language model sangat berbeda dengan proses pelatihan model untuk task-task lain dalam NLP seperti klasifikasi teks. Pelatihan ini bertujuan untuk membuat sebuah model yang dilatih dengan daftar kosakata yang khusus terutama kosakat-kosakata dalam bidang kedokteran. Berikut ini beberapa potongan kode mengenai bagaimana melatih sebuah language model pada kumpulan teks.
Kode 5.1 Kode untuk Memuat Pustaka yang Dibutuhkan dalam Pelatihan Language Model
Hal terpenting yang harus dilakukan pertama kali adalah memuat beberapa pustaka yang akan digunakan seperti torch, transformers,dan tokenizers. Dari pustaka transformers digunakan beberapa modul seperti BertTokenizerFast dan
AlbertTokenizerFast yang berfungsi untuk memuat tokenizers yang telah didapatkan dari kumpulan teks yang digunakan. Selain itu juga dari pustaka transformers dimuat modul seperti BertForMaskedLM dan AlbertForMaskedLM yang digunakan untuk memuat konfigurasi / pengaturan bahwa model yang digunakan akan digunakan dalam pelatihan masked language model. Adapun modul config seperti BertConfig
dan AlbertConfig dimuat untuk melakukan beberapa pengaturan seperti vocab size, jumlah attention head, jumlah hidden layers dan sebagainya. Selain itu pustaka tokenizers memuat modul BertWordPieceTokenizer dan ByteLevelBPETokenizer.
Kedua modul ini berfungsi untuk menentukan mekanisme pembuatan tokenizer, apakah akan menggunakan WordPiece tokenizer ataukah akan menggunakan ByteLevelBPE tokenizer.
38
from tokenizers.implementations import ByteLevelBPETokenizer, BertWordPieceTokenizer
from tokenizers.processors import BertProcessing tokenizer = BertWordPieceTokenizer(
'./vocab.txt', )
Kode 5.2 Kode untuk Pelatihan Tokenizer Berdasarkan Teks Latih Potongan kode ini digunakan untuk melakukan pelatihan tokenizer terhadap semua file txt yang terdapat dalam sebuah direktori. Untuk model BERT jenis tokenizer yang digunakan adalah BertWordPieceTokenizer. Pada proses pelatihan tokenizer bisa dilihat bahwa jumlah vocab size yang digunakan adalah 52000 dengan disertai beberapa token special seperti [UNK], [SEP], [PAD], [CLS], dan [MASK]. Hasil pelatihan tokenizer ini akan tersimpan kedalam sebuah file txt bernama vocab.txt (default).
Kode 5.3 Kode untuk Memuat Tokenizer Berdasarkan Kosakata Hasil Pelatihan Language Model
Potongan kode diatas digunakan untuk memuat semua kosakata yang telah dihasilkan dalam pelatihan tokenizer kesebuah format wordpiece tokenizer agar mudah digunakan oleh model BERT dalam melakukan pelatihan language model.
%%time
from pathlib import Path
from tokenizers import ByteLevelBPETokenizer, BertWordPieceTokenizer paths = [str(x) for x in Path("../input/medwikinews-30-
mei/").glob("**/*.txt")]
# Initialize a tokenizer
tokenizer = BertWordPieceTokenizer()
# Customize training
tokenizer.train(files=paths, vocab_size=52_000, min_frequency=2, special_tokens=[
39
from transformers import RobertaConfig, BertConfig config = BertConfig(
vocab_size=52_000,
max_position_embeddings=514, num_attention_heads=12, num_hidden_layers=6, type_vocab_size=1, )
Kode 5.1 Kode untuk Melakukan Pengaturan Tokenizer dengan Menambahkan Token [SEP] dan [CLS]
Kode diatas digunakan untuk melakukan pra-proses pada BERT yaitu dengan mengonversi token [SEP] dan [CLS] menjadi sebuah representasi angka. Hal ini dilakukan untuk menandai dimana awal dan akhir setiap kalimat yang telah diubah bentuknya menjadi angka. Setelah itu setiap teks akan dipotong dengan panjang maksimal 512.
Kode 5.2 Kode untuk Melakukan Konfigurasi Language Model
Kode diatas digunakan untuk melakukan konfigurasi model BERT yang akan dibuat. Parameter-parameter yang digunakan adalah vocab_size yang digunakan untuk mengatur berapa banyak jumlah kosakata yang akan digunakan. Parameter
max_position_embeddings untuk mengatur seberapa banyak positional embedding yang akan digunakan, dalam hal ini sebanyak 514 yang terdiri dari 512 kata dan sebuah token [CLS] dan [SEP]. num_attention_heads menunjukan berapa banyak jumlah attention head yang digunakan dalam hal ini sebanyak 12. num_hidden_layers digunakan untuk melakukan pengaturan seberapa banyak hidden_layers yang digunakan dalam hal ini adalah 6 layer.
from tokenizers.implementations import ByteLevelBPETokenizer, BertWordPieceTokenizer
from tokenizers.processors import BertProcessing tokenizer._tokenizer.post_processor = BertProcessing(
("[SEP]", tokenizer.token_to_id("[SEP]")), ("[CLS]", tokenizer.token_to_id("[CLS]")), )
tokenizer.enable_truncation(max_length=512)
40
%%time
from transformers import LineByLineTextDataset dataset = LineByLineTextDataset(
tokenizer=tokenizer,
file_path="../input/medwikinews-30-mei/bio-train.txt", block_size=128,
)
Kode 5.1 Kode untuk Memuat Tokenizer dan Menginisiasi Model Berdasarkan Konfigurasi yang Telah Dibuat
Kode diatas digunakan untuk memuat tokenizer yang dihasilkan oleh pelatihan tokenizer sebelumnya. File yang dimuat dalam direktori ./ adalah file vocab.txt.
Setelah itu BertTokenizerFast akan mengatur panjang maksimal setiap sekuen kalimat sebesar 512. Setelah itu pembuatan model dengan menggunakan modul
BertForMaskedLM dengan konfigurasi yang telah dibuat ditahap sebelumnya.
Kode 5.1 Kode untuk Mengubah Teks Latih ke Format Dataset Per Baris Tahap selanjutnya adalah memuat dataset dalam hal ini teks yang akan digunakan dalam pelatihan language model. Kumpulan teks yang akan digunakan memiliki struktur kalimat per baris. Oleh karena itu dengan menggunakan pustaka transformers kita bisa menggunakan modul LineByLineTextDataset. Modul ini berfungsi untuk memproses setiap kalimat baris per baris yang terdapat dalam file.txt. Terlihat dalam kode diatas file yang digunakan adalah bio-train.txt.
Kode 5.1 Kode untuk Mengubah Teks Latih ke Format Dataset Per Baris Tahap selanjutnya adalah memuat dataset dalam hal ini teks yang akan digunakan dalam pelatihan language model. Kumpulan teks yang akan digunakan memiliki struktur kalimat per baris. Oleh karena itu dengan menggunakan pustaka transformers kita bisa menggunakan modul LineByLineTextDataset. Modul ini berfungsi untuk memproses setiap kalimat baris per baris yang terdapat dalam file.txt. Terlihat dalam kode diatas file yang digunakan adalah bio-train.txt.