• Tidak ada hasil yang ditemukan

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.

Dokumen terkait