A Comprehensive Guide to Building Multi-lingual Neural Machine… – Towards AI

A Comprehensive Guide to Building Multi-lingual Neural Machine… – Towards AI

Author(s): Fraol Batole

Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda membuat produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.

Artikel ini menunjukkan implementasi langkah demi langkah model Multi-lingual Neural Machine Translation (MNMT). Dalam implementasi ini, kami membangun MNMT berbasis arsitektur encoder-decoder.

Sekilas tentang MNMT:

Sebelum mendalami penerapannya, mari kita mundur selangkah dan memahami apa yang dimaksud dengan model Multi-lingual Neural Machine Translation (MNMT). Anehnya, ada sekitar 7.100 bahasa yang ada di seluruh dunia [https://www.ethnologue.com/guides/how-many-languages]. Karena beberapa alasan, ada kebutuhan untuk menerjemahkan satu bahasa ke bahasa lain. Meskipun orang biasa menerjemahkan bahasa secara manual, kemajuan pembelajaran mendalam baru-baru ini telah memungkinkan terjemahan teks secara otomatis. Terjemahan dari satu bahasa ke bahasa lain disebut Neural Machine Translation (NMT). Misalnya, diberikan teks bahasa Inggris, model dapat menerjemahkannya ke dalam bahasa Spanyol.

Sekarang, bagaimana jika ada kebutuhan untuk menerjemahkan lebih banyak bahasa? Kemudian, kita harus membuat beberapa model NMT yang mendukung terjemahan bahasa yang berbeda. Namun, baru-baru ini, penelitian menunjukkan bahwa melatih satu model yang mendukung terjemahan berbagai bahasa bermanfaat karena beberapa alasan. Ini disebut sebagai Multi-lingual Neural Machine Translation (MNMT). Misalnya, beberapa konteks dari bahasa yang tersedia diterapkan ke bahasa lain. Terutama kasus penggunaan ini bermanfaat untuk bahasa sumber daya rendah. Untuk ilustrasi MNMT, gambar di bawah ini.

Model MNTM (Diambil dari Google)

Pengumpulan dan pemrosesan data:

Langkah 1: Mengumpulkan dan membersihkan dataset

Untuk melatih model MNTM, korpus paralel (teks) harus ada dalam bahasa. Artinya, pada gambar di atas, sebuah kalimat dalam bahasa Jepang harus memiliki kalimat yang diterjemahkan ke dalam bahasa Inggris dan Korea. Dataset yang cocok untuk tujuan ini adalah Tatoeba. Kumpulan data ini berisi kalimat dalam lebih dari 400 bahasa. Pasangan kalimat yang didukung oleh dataset ini dapat diunduh di sini.

Langkah 2: Mengekstrak Kalimat Paralel

Seperti yang telah dijelaskan di atas, kita membutuhkan teks paralel antara masing-masing bahasa. Jadi, kita harus menyaring kalimat-kalimat yang perlu diterjemahkan. Untuk blog ini, kami hanya menggunakan English-to-{Japanese, and Korean}, seperti yang diilustrasikan pada gambar di atas. Untuk menemukan kalimat yang mirip, kita dapat memfilter persimpangan antara setiap bahasa menggunakan library Pandas.

Kode untuk menerapkan ini tersedia di sini.

Dataset Tatoeba berisi id untuk setiap kalimat. Karena kami mengunduh kalimat berpasangan “Bahasa Inggris ke Bahasa Jepang” dan “Bahasa Inggris ke Bahasa Korea”, kami dapat menemukan persimpangan id Bahasa Inggris di antara kedua pasangan. Dengan demikian, kita dapat menemukan kalimat bahasa Inggris yang sama dan terjemahannya ke dalam bahasa {Jepang dan Korea}. Sekarang, kalimat yang diekstraksi dapat digunakan untuk melatih model kita.

Langkah 3: Memproses dataset terlebih dahulu

Sekarang, kita dapat menyiapkan set pelatihan dan pengujian untuk model tersebut. Kami memuat kumpulan data yang diunduh dan dibersihkan dalam kode di bawah ini dan meletakkan tag awal dan akhir.

text_file = “spa-eng/spa.txt” dengan open(text_file) sebagai f:
baris = f.baca().split(“n”)[:-1]
text_pairs = []
untuk baris dalam baris:
inggris, jepang, korea = line.split(“t”)
spanyol = “[start] ” + spanyol + ” [end]”
text_pairs.append((inggris, spanyol)) impor acak
print(random.choice(text_pairs)) impor acak
acak.acak(text_pairs)
num_val_samples = int(0,15 * len(text_pairs))
num_train_samples = len(text_pairs) – 2 * num_val_samples
train_pairs = text_pairs[:num_train_samples]
val_pairs = text_pairs[num_train_samples:num_train_samples + num_val_samples]
test_pairs = text_pairs[num_train_samples + num_val_samples:]

Selain itu, setiap teks harus divektorisasi, yaitu mengubah teks menjadi vektor numerik. Langkah ini, di antara keuntungan lainnya, mengurangi kecepatan komputasi model kami. Kami menggunakan kode yang ada dari Deep Learning with Python (buku edisi kedua) untuk membuat vektor dan menyiapkan dataset.

Langkah 4: Vektorisasi dan menyiapkan dataset

Kode tersebut dapat diakses di sini.

Membangun model:

Langkah 5: Model Encoder-Decoder berbasis LSTM

Dalam artikel ini, kami hanya menggunakan cara berbeda untuk melakukan praproses dataset untuk model. Namun, ada beberapa pendekatan untuk membangun MNTM. Misalnya, dengan menambahkan output tambahan ke model, kita dapat mengimplementasikan MNTM. Setiap lapisan keluaran akan bertanggung jawab untuk memprediksi satu bahasa.

Model dibangun berdasarkan [1] Tapi dengan sedikit perubahan. Kami memilih untuk menggunakan LSTM daripada GRU dari kode asli untuk contoh ini. Selain itu, karena kami memiliki banyak bahasa, kami meneruskan input sebagai bahasa sumber dan yang lainnya sebagai bahasa target.

sumber = keras.Input(bentuk=(Tidak ada,), dtype=”int64″, nama=”sumber”)
x = layer.Embedding(vocab_size, embed_dim, mask_zero=True)(sumber)
encoded_source = lapisan.Bidirectional(
layers.LSTM(latent_dim), merge_mode=”sum”)(x) past_target = keras.Input(shape=(Tidak ada,), dtype=”int64″, name=”target”)
x = layer.Embedding(vocab_size, embed_dim, mask_zero=True)(past_target)
decoder_gru = lapisan.LSTM(latent_dim, return_sequences=True)
x = decoder_gru(x, initial_state=encoded_source)
x = layer.Dropout(0.5)(x)
target_next_step = layer.Dense(vocab_size, activation=”softmax”)(x)
seq2seq_rnn = keras.Model([source, past_target]target_langkah_berikutnya)

Langkah 6: Melatih model

Kami menggunakan model LSTM sederhana sebagai contoh sehingga kinerjanya mungkin lebih rendah dari model lain. Namun, mudah untuk membuat model yang berbeda dan memasukkan kumpulan data yang sama karena teknik ini sebagian besar bergantung pada prapemrosesan daripada membuat model.

seq2seq_rnn.kompilasi(
pengoptimal=”rmsprop”,
loss=”sparse_categorical_crossentropy”,
metrik=[“accuracy”]) seq2seq_rnn.fit(train_ds, zaman=15, validasi_data=val_ds)

Langkah 7: Memeriksa terjemahan model

impor numpy sebagai np
spa_vocab = target_vectorization.get_vocabulary()
spa_index_lookup = dict(zip(rentang(len(spa_vocab)), spa_vocab))
max_decoded_sentence_length = 20

def decode_sequence(input_kalimat):
tokenized_input_sentence = source_vectorization([input_sentence])
decode_kalimat = “[start]”
untuk saya dalam rentang (max_decoded_sentence_length):
tokenized_target_sentence = target_vectorization([decoded_sentence])
next_token_predictions = seq2seq_rnn.predict(
[tokenized_input_sentence, tokenized_target_sentence])
sampled_token_index = np.argmax(next_token_predictions[0, i, :])
sampled_token = spa_index_lookup[sampled_token_index]
decoded_sentence += ” ” + sampled_token
jika sampled_token == “[end]”:
merusak
kembalikan decode_sentence

test_eng_texts = [pair[0] untuk pasangan di test_pairs]
untuk _ dalam rentang (20):
input_kalimat = random.choice(test_eng_texts)
mencetak(“-“)
cetak(input_kalimat)
cetak(decode_sequence(input_kalimat))

Referensi:

https://github.com/fchollet/deep-learning-with-python-notebooks/blob/master/chapter11_part04_sequence-to-sequence-learning.ipynb Dabre, Raj, Chenhui Chu, dan Anoop Kunchukuttan. “Survei terjemahan mesin saraf multibahasa.” Survei Komputasi ACM (CSUR) 53.5 (2020): 1–38. https://tatoeba.org/en/downloads https://ai.googleblog.com/2016/11/zero-shot-translation-with-googles.html

Panduan Lengkap untuk Membangun Terjemahan Mesin Neural Multibahasa menggunakan Keras. awalnya diterbitkan di Menuju AI di Medium, di mana orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI

Author: Jonathan Kelly