A Journey into the Fabulous Applications of Transformers — Part 2 – Towards AI

Pengarang: Dr. Dharini R

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.

Perjalanan ke Aplikasi Transformers yang Menakjubkan — Bagian 2

Demo dengan Penekanan pada NLP menggunakan Python, Hugging Face

Foto oleh Samuel Sun di Unsplash

Arsitektur transformer banyak digunakan dalam Pemrosesan Bahasa Alami dan sangat berkontribusi pada kebutuhan Model Bahasa Besar (LLM). Dengan maraknya transfer learning di NLP menggunakan LLM, banyak model yang dibangun dan dibagikan dengan komunitas riset di Hugging Face.

Kita akan melihat beberapa aplikasi transformer yang menarik di NLP dengan demo dan penjelasannya. Artikel ini merupakan kelanjutan dari artikel sebelumnya yang ditautkan di bawah.

Sedang

Model wajah memeluk yang digunakan dalam artikel ini juga dapat digunakan sebagai model Plug-and-Play menggunakan Accelerated Inference API. Silakan merujuk ke artikel ini untuk mengetahui lebih lanjut tentang cara menggunakan model menggunakan API-nya.

Model ML Plug-and-Play dengan ‘Accelerated Inference API’ dari Hugging Face

Kode demo untuk semua aplikasi yang dibahas, beserta tautan Colab, diberikan di tautan GitHub ini. Menjadi artikel pengantar, detail tentang model yang dibahas ditautkan di bagian masing-masing. Agar semua aplikasi berfungsi (kecuali untuk kesamaan kalimat), kita perlu menginstal pustaka transformer menggunakan pip install transformer.

Aplikasi yang akan kita lihat di artikel ini adalah

6. Terjemahan

7. Klasifikasi Token

8. Kemiripan Kalimat

9. Klasifikasi Zero-shot

10. Isi Masker

6. Terjemahan

Aplikasi yang menarik dan bermanfaat dengan transformer adalah kemampuan untuk menerjemahkan teks antar bahasa. Beberapa model tersedia untuk tugas penerjemahan, bergantung pada bahasa yang digunakan dalam fase pelatihan.

Dalam contoh kami, kami akan menerjemahkan teks bahasa Inggris ke bahasa Italia. Untuk mengetahui model apa yang dapat melakukan terjemahan, kita harus menjelajahi library Hugging Face. Model bernama Helsinki-NLP/opus-mt-en-it melakukan terjemahan ini, dan kami akan menggunakannya untuk demo kami.

Langkah pertama adalah membuat instance pipeline dengan terjemahan tugas. Nama tugas berbeda-beda sesuai dengan bahasa yang digunakan. Informasi lebih lanjut tentang terjemahan teks dalam berbagai bahasa, model yang sesuai, dan kumpulan data dapat ditemukan di tautan ini.

Dalam kasus kami, tugasnya adalah translation_en_to_it dan diberikan bersama dengan nama model sebagai berikut.

dari pipa impor transformer
text_translator = pipeline(“translation_en_to_it”, model=”Helsinki-NLP/opus-mt-en-it”)

input_text disimpan dengan kalimat bahasa Inggris yang ingin kita terjemahkan.

input_text = “Teks ini diterjemahkan dari bahasa Inggris ke bahasa Italia”

Di baris berikut, kami memuat input ke model kami dan menyimpan hasilnya di italian_text. Saat mencetak yang sama, kami mendapatkan versi terjemahan dari masukan kami.

italian_text = text_translator(input_text, clean_up_tokenization_spaces=Benar)
cetak(italian_text)
Keluaran:
[{‘translation_text’: “Questo testo è tradotto dall’inglese all’italiano”}]

7. Klasifikasi Token

Klasifikasi token adalah tugas untuk menetapkan tag/label ke kata-kata yang ada dalam teks. Satu kata dalam kalimat disebut token. Contoh klasifikasi token adalah Named Entity Recognition(NER) dan Part-of-Speech(PoS) tagging.

Kami telah membahas NER di bagian pertama artikel kami, jadi di sini kami akan melihat tugas kedua, penandaan PoS. Penandaan Part-of-Speech adalah proses mengidentifikasi bagian ucapan yang sesuai dari sebuah kata dan melabelinya dengan tag seperti kata benda, kata ganti, kata sifat, kata keterangan dll, dalam sebuah kalimat.

Kita mulai dengan mengimpor pipa dan membuat instance dengan klasifikasi token tugas.

dari pipa impor transformer

pos_classifier = pipeline(“token-classification”, model = “vblagoje/bert-english-uncased-finetuned-pos”)

Seperti yang diberikan di atas, model yang kami gunakan adalah vblagoje/bert-english-uncased-finetuned-pos. Sekarang kita akan mengklasifikasikan token dan menampilkannya.

tags = pos_classifier(“Halo, saya senang melihat air terjun.”)
cetak(tag)

Keluaran:
[{‘entity’: ‘INTJ’, ‘score’: 0.9958117, ‘index’: 1, ‘word’: ‘hello’, ‘start’: 0, ‘end’: 5}, {‘entity’: ‘PRON’, ‘score’: 0.9995704, ‘index’: 2, ‘word’: ‘i’, ‘start’: 6, ‘end’: 7}, {‘entity’: ‘AUX’, ‘score’: 0.9966484, ‘index’: 3, ‘word’: ‘am’, ‘start’: 8, ‘end’: 10}, {‘entity’: ‘ADJ’, ‘score’: 0.99829704, ‘index’: 4, ‘word’: ‘happy’, ‘start’: 11, ‘end’: 16}, {‘entity’: ‘ADV’, ‘score’: 0.99861526, ‘index’: 5, ‘word’: ‘when’, ‘start’: 17, ‘end’: 21}, {‘entity’: ‘PRON’, ‘score’: 0.9995561, ‘index’: 6, ‘word’: ‘i’, ‘start’: 22, ‘end’: 23}, {‘entity’: ‘VERB’, ‘score’: 0.99941325, ‘index’: 7, ‘word’: ‘see’, ‘start’: 24, ‘end’: 27}, {‘entity’: ‘NOUN’, ‘score’: 0.9958626, ‘index’: 8, ‘word’: ‘waterfalls’, ‘start’: 28, ‘end’: 38}, {‘entity’: ‘PUNCT’, ‘score’: 0.9996631, ‘index’: 9, ‘word’: ‘.’, ‘start’: 38, ‘end’: 39}]

Untuk melihat hasilnya dengan jelas, kita akan mengimpor panda dan membuat kerangka data dari hasilnya dan melihat hasilnya seperti yang ditunjukkan di bawah ini.

impor panda sebagai pd
df_tags = pd.DataFrame(tag)
cetak(df_tags)

Keluaran:
kata indeks skor entitas mulai akhir
0 INTJ 0,995812 1 halo 0 5
1 PRON 0,999570 2 dan 6 7
2 AUX 0,996648 03:00 8 10
3 ADJ 0,998297 4 senang 11 16
4 ADV 0,998615 5 saat 17 21
5 PRON 0,999556 6 dan 22 23
6 KATA KERJA 0,999413 7 lihat 24 27
7 KATA BENDA 0,995863 8 air terjun 28 38
8 POIN 0,999663 9 . 38 39

8. Kemiripan Kalimat

Aplikasi yang menarik dengan transformer adalah kemampuan untuk mengekstrak penyisipan kalimat yang menangkap informasi semantik. Penyematan kalimat adalah representasi numerik dari seluruh kalimat dan digunakan sebagai masukan untuk model. Dalam contoh kami, kami akan menggunakan transformator kalimat untuk menghasilkan penyematan kalimat dan menggunakannya untuk mengidentifikasi kesamaan antara dua kalimat.

Untuk contoh ini, kita harus menginstal perpustakaan transformer kalimat dari wajah memeluk, tidak seperti aplikasi lain di mana kita akan menginstal perpustakaan transformer. Ada banyak model yang tersedia untuk tugas kesamaan kalimat, dan kita akan menggunakan model pengubah kalimat/all-MiniLM-L6-v2 dalam contoh kita.

Langkah pertama adalah mengimpor SentenceTransformer dan util seperti yang ditunjukkan di bawah ini. Paket util diperlukan untuk menggunakan fungsi kesamaan cosinus untuk mengukur jarak antara dua penyematan.

!pip install kalimat-transformer
dari kalimat_transformers impor SentenceTransformer, util

Langkah selanjutnya, kita memuat input_sentences dengan kalimat yang ingin kita coba modelnya. Kami memberikan nama model khusus untuk digunakan pada SentenceTransformer.

similarity_model = SentenceTransformer(‘kalimat-transformer/semua-MiniLM-L6-v2’)
input_kalimat = [“I’m happy”, “I’m not sad”]

Pada langkah selanjutnya, kami mengekstrak embedding untuk kedua kalimat tersebut. Penyematan untuk kedua kalimat disimpan dalam variabel terpisah.

embedding_1= similarity_model.encode(input_sentences[0]convert_to_tensor=Benar)
embedding_2 = similarity_model.encode(input_sentences[1]convert_to_tensor=Benar)

Pada langkah terakhir, kami menggunakan fungsi cos_sim dari util untuk menghitung jarak antara dua vektor (embeddings)

cetak(util.pytorch_cos_sim(embedding_1, embedding_2))
Keluaran:
tensor([[0.4624]])

Semakin nilainya mendekati 1, semakin banyak kesamaan antar kalimat. Jika nilainya mendekati 0, kita dapat memahami bahwa kalimatnya tidak serupa.

9. Klasifikasi zero-shot

Klasifikasi zero-shot berakar pada pembelajaran Zero-shot yang pada dasarnya berarti pengklasifikasi dilatih dengan satu set label dan diuji dengan set label yang berbeda. Kumpulan label evaluasi tidak terlihat oleh model sama sekali.

Artinya kita bisa mengambil model klasifikasi zero-shot, memberi masukan dan juga memberi label kita sendiri. Model akan mengklasifikasikan teks sesuai dengan label yang diberikan oleh kami, meskipun model tidak dilatih oleh salah satu dari label tersebut. Sekarang kami akan mencoba hal yang sama di demo kami. Mari kita mulai dengan instantiating pipeline dengan task zero-shot-classification.

dari pipa impor transformer
zero_shot_classifier = pipeline(“zero-shot-classification”)
Keluaran:
Tidak ada model yang disediakan, default ke facebook/bart-large-mnli dan revisi c626438 (https://huggingface.co/facebook/bart-large-mnli).
Menggunakan pipeline tanpa menentukan nama model dan revisi dalam produksi tidak disarankan.
Mengunduh: 100%
1,15rb/1,15rb [00:00<00:00, 28.0kB/s]
Mengunduh: 100%
1,63G/1,63G [00:26<00:00, 63.5MB/s]
Mengunduh: 100%
26.0/26.0 [00:00<00:00, 467B/s]
Mengunduh: 100%
899rb/899rb [00:00<00:00, 5.16MB/s]
Mengunduh: 100%
456k/456k [00:00<00:00, 2.73MB/s]
Mengunduh: 100%
1,36M/1,36M [00:00<00:00, 2.71MB/s]

Karena kami belum memberikan model tertentu, model facebook/bart-large-mnli dipilih oleh perpustakaan, dan bobot model diunduh dan dirujuk dengan zero_shot_classifier.

Langkah selanjutnya adalah menentukan teks input dan label yang akan kita gunakan untuk klasifikasi. Menggunakan zero_shot_classifier, kami meneruskan teks input dan label untuk diklasifikasikan.

input_sentence = “Saya lapar dan marah. Saya pikir es krim akan membuat saya merasa baik”
label = [‘food’, ‘travel’,’entertainment’,’sad’,’happy’,’neutral’]
hasil = zero_shot_classifier(input_sentence, label)
cetak(hasil)

Keluaran:
{‘sequence’: ‘Saya lapar dan marah. Saya rasa es krim akan membuat saya merasa nyaman’, ‘label’: [‘food’, ‘sad’, ‘entertainment’, ‘travel’, ‘neutral’, ‘happy’]’skor’: [0.8720405101776123, 0.07575708627700806, 0.023996146395802498, 0.010163746774196625, 0.009797507897019386, 0.00824508722871542]}

Untuk melihat hasilnya dengan jelas, kita akan mengimpor perpustakaan panda dan melihat hasilnya dalam bingkai data. Seperti yang ditunjukkan pada kerangka data di bawah ini, skor untuk label food dan sad lebih banyak dari label lainnya. Kita dapat melihat bahwa kalimat yang diberikan, berkaitan dengan label makanan lebih dari semua label lainnya. Jadi kami mendapatkan skor tertinggi dalam hal itu.

impor panda sebagai pd
df_result = pd.DataFrame(hasil)
cetak(df_result.loc[:, [‘labels’,’scores’]])
Keluaran:
skor label
0 makanan 0,872041
1 sedih 0,075757
2 hiburan 0,023996
3 perjalanan 0,010164
4 netral 0,009798
5 senang 0,008245

10. Isi Masker

Konsep Pemodelan Bahasa Bertopeng (MLM) berurusan dengan memprediksi kata-kata untuk menggantikan kata-kata yang sengaja disamarkan dalam data. Ini membantu dalam meningkatkan pemahaman statistik bahasa yang digunakan model untuk dilatih dan menghasilkan representasi teks yang lebih baik. Keunggulan MLM adalah prapelatihan yang diawasi sendiri yang tidak memerlukan data berlabel untuk pelatihan.

Tugas Fill Mask, dengan demikian menangani kata-kata acak dalam kalimat yang diberikan dan mengeksplorasi berbagai saran yang diberikan oleh model untuk mengganti topeng.

Mari kita mulai dengan instantiating pipeline dengan tugas fill-mask seperti yang ditunjukkan di bawah ini. Karena kami belum memberikan model tertentu, model default (distiroberta-base) diunduh.

dari pipa impor transformer
fill_mask_clf = pipa(“fill-mask”)

Keluaran:
Tidak ada model yang disediakan, standarnya adalah distilroberta-base dan revisi ec58a5b (https://huggingface.co/distilroberta-base).
Menggunakan pipeline tanpa menentukan nama model dan revisi dalam produksi tidak disarankan.
Mengunduh: 100%
480/480 [00:00<00:00, 13.5kB/s]
Mengunduh: 100%
331M/331M [00:08<00:00, 43.4MB/s]
Mengunduh: 100%
899rb/899rb [00:00<00:00, 1.56MB/s]
Mengunduh: 100%
456k/456k [00:00<00:00, 1.77MB/s]
Mengunduh: 100%
1,36M/1,36M [00:00<00:00, 1.77MB/s]

Sekarang kita memberikan kalimat pada model dengan menutupi sebuah kata di dalamnya dengan token . Saat mencetak keluaran, kami melihat lima kemungkinan kata yang berbeda untuk kata bertopeng, skor yang sesuai, representasi token, dan kalimat lengkap dengan kata yang diprediksi.

print(fill_mask_clf(“kecerdasan buatan akan menjadi di masa depan”))

Keluaran:
[{‘score’: 0.061495572328567505,
‘token’: 30208,
‘token_str’: ‘ commonplace’,
‘sequence’: ‘artificial intelligence is going to be commonplace in the future’},
{‘score’: 0.05322642996907234,
‘token’: 25107,
‘token_str’: ‘ ubiquitous’,
‘sequence’: ‘artificial intelligence is going to be ubiquitous in the future’},
{‘score’: 0.0344822071492672,
‘token’: 5616,
‘token_str’: ‘ useful’,
‘sequence’: ‘artificial intelligence is going to be useful in the future’},
{‘score’: 0.033160075545310974,
‘token’: 6128,
‘token_str’: ‘ everywhere’,
‘sequence’: ‘artificial intelligence is going to be everywhere in the future’},
{‘score’: 0.025654001161456108,
‘token’: 956,
‘token_str’: ‘ needed’,
‘sequence’: ‘artificial intelligence is going to be needed in the future’}]

Ringkasan

Dalam dua bagian artikel ini, kami membahas 10 aplikasi terpenting yang dapat dicapai dengan transformer. Kesimpulannya adalah, dengan munculnya transformer dan model bahasa yang besar, tugas-tugas kompleks yang membutuhkan biaya dan waktu yang besar sekarang tersedia untuk digunakan dengan mudah. Juga harus dicatat bahwa model yang sama dapat digunakan untuk tugas yang berbeda.

Idenya adalah untuk memahami kemungkinan model dan menyempurnakannya untuk tujuan Anda sendiri. Semakin banyak kita mencoba, semakin banyak kita belajar. Lanjutkan dan Sukses!!!

Silakan temukan lebih banyak artikel terkait NLP di halaman ini.

Terima kasih!!

A Journey into the Fabulous Applications of Transformers — Bagian 2 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