Penyematan Kata dan Model Word2Vec dengan Contoh
Apa itu Penyematan Kata?
Penyematan Kata adalah jenis representasi kata yang memungkinkan algoritme pembelajaran mesin memahami kata-kata dengan arti serupa. Ini adalah teknik pemodelan bahasa dan pembelajaran fitur untuk memetakan kata menjadi vektor bilangan real menggunakan jaringan saraf, model probabilistik, atau reduksi dimensi pada matriks kejadian bersama kata. Beberapa model penyematan kata adalah Word2vec (Google), Glove (Stanford), dan tercepat (Facebook).
Penyematan Kata juga disebut sebagai model semantik terdistribusi atau ruang vektor semantik atau model ruang vektor terdistribusi. Saat Anda membaca nama-nama ini, Anda menemukan kata semantik yang berarti mengelompokkan kata-kata yang mirip. Misalnya buah-buahan seperti apel, mangga, pisang sebaiknya diletakkan berdekatan sedangkan buku jauh dari kata-kata tersebut. Dalam arti luas, penyematan kata akan menghasilkan vektor buah-buahan yang ditempatkan jauh dari representasi vektor buku.
Di mana Penyematan Kata digunakan?
Penyematan kata membantu dalam pembuatan fitur, pengelompokan dokumen, klasifikasi teks, dan tugas pemrosesan bahasa alami. Mari kita daftarkan dan diskusikan masing-masing aplikasi ini.
- Hitung kata-kata serupa: Penyematan kata digunakan untuk menyarankan kata-kata yang mirip dengan kata yang dijadikan sasaran model prediksi. Bersamaan dengan itu, ia juga menyarankan kata-kata yang berbeda, serta kata-kata yang paling umum.
- Buatlah sekelompok kata terkait: Ini digunakan untuk pengelompokan semantik yang akan mengelompokkan hal-hal yang memiliki karakteristik serupa dan berbeda secara berjauhan.
- Fitur untuk klasifikasi teks: Teks dipetakan ke dalam array vektor yang dimasukkan ke model untuk pelatihan dan prediksi. Model pengklasifikasi berbasis teks tidak dapat dilatih pada string, jadi ini akan mengubah teks menjadi bentuk yang dapat dilatih oleh mesin. Lebih lanjut fitur-fiturnya dalam membangun bantuan semantik dalam klasifikasi berbasis teks.
- Pengelompokan dokumen: adalah aplikasi lain yang banyak menggunakan Word Embedding Word2vec
- Pemrosesan bahasa alami: Ada banyak aplikasi di mana penyematan kata berguna dan memenangkan fase ekstraksi fitur seperti penandaan bagian ucapan, analisis sentimental, dan analisis sintaksis. Sekarang kita telah mendapatkan pengetahuan tentang penyematan kata. Beberapa penjelasan juga diberikan pada model yang berbeda untuk mengimplementasikan penyematan kata. Seluruh tutorial Penyematan Word ini difokuskan pada salah satu model (Word2vec).
Apa itu Word2vec?
Kata2vec adalah teknik/model untuk menghasilkan penyematan kata untuk representasi kata yang lebih baik. Ini adalah metode pemrosesan bahasa alami yang menangkap sejumlah besar hubungan sintaksis dan semantik kata yang tepat. Ini adalah jaringan saraf dua lapis dangkal yang dapat mendeteksi kata-kata sinonim dan menyarankan kata-kata tambahan untuk sebagian kalimat setelah dilatih.
Sebelum melangkah lebih jauh dalam tutorial Word2vec ini, silakan lihat perbedaan antara jaringan saraf dangkal dan dalam seperti yang ditunjukkan pada diagram contoh penyematan Word di bawah ini:
Jaringan saraf dangkal hanya terdiri dari lapisan tersembunyi antara masukan dan keluaran, sedangkan jaringan saraf dalam berisi beberapa lapisan tersembunyi antara masukan dan keluaran. Input dikenai node sedangkan lapisan tersembunyi, serta lapisan output, berisi neuron.
Word2vec merupakan jaringan dua lapis dimana terdapat masukan satu lapisan tersembunyi dan keluaran.
Word2vec dikembangkan oleh sekelompok peneliti yang dipimpin oleh Tomas Mikolov di Google. Word2vec lebih baik dan lebih efisien dibandingkan model analisis semantik laten.
Mengapa Word2vec?
Word2vec mewakili kata-kata dalam representasi ruang vektor. Kata-kata direpresentasikan dalam bentuk vektor dan penempatannya dilakukan sedemikian rupa sehingga kata-kata yang memiliki makna serupa muncul bersamaan dan kata-kata yang berbeda letaknya berjauhan. Ini juga disebut sebagai hubungan semantik. Jaringan saraf tidak memahami teks, melainkan hanya memahami angka. Word Embedding menyediakan cara untuk mengonversi teks menjadi vektor numerik.
Word2vec merekonstruksi konteks linguistik kata-kata. Sebelum melangkah lebih jauh mari kita pahami, apa itu konteks linguistik? Dalam skenario kehidupan umum ketika kita berbicara atau menulis untuk berkomunikasi, orang lain mencoba mencari tahu apa tujuan dari kalimat tersebut. Misal “Berapa suhu di India”, disini konteksnya pengguna ingin mengetahui “suhu India” yang sesuai konteks. Singkatnya, tujuan utama sebuah kalimat adalah konteks. Kata atau kalimat yang melingkupi bahasa lisan atau tulisan (pengungkapan) membantu dalam menentukan makna konteks. Word2vec mempelajari representasi vektor kata-kata melalui konteks.
Apa yang dilakukan Word2vec?
Sebelum Penyematan Kata
Penting untuk mengetahui pendekatan mana yang digunakan sebelum penyematan kata dan apa kekurangannya, lalu kita akan beralih ke topik tentang bagaimana kekurangan diatasi dengan penyematan Word menggunakan pendekatan Word2vec. Terakhir, kita akan membahas cara kerja Word2vec karena penting untuk memahami cara kerjanya.
Pendekatan Analisis Semantik Laten
Ini adalah pendekatan yang digunakan sebelum penyematan kata. Ini menggunakan konsep Bag of Words di mana kata-kata direpresentasikan dalam bentuk vektor yang dikodekan. Ini adalah representasi vektor renggang yang dimensinya sama dengan ukuran kosakata. Jika kata tersebut muncul dalam kamus, maka itu dihitung, jika tidak, tidak. Untuk memahami lebih lanjut, silakan lihat program di bawah ini.
Contoh Word2vec
from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() data_corpus = ["guru99 is the best site for online tutorials. I love to visit guru99."] vocabulary = vectorizer.fit(data_corpus) X = vectorizer.transform(data_corpus) print(X.toarray()) print(vectorizer.get_feature_names_out())
Keluaran:
[[1 2 1 1 1 1 1 1 1 1]]
[u'best', u'guru99', u'is', u'love', u'online', u'sitefor', u'the', u'to', u'tutorials', u'visit']
Penjelasan Kode
- CountVectorizer adalah modul yang digunakan untuk menyimpan kosakata berdasarkan kecocokan kata di dalamnya. Ini diimpor dari sklearn.
- Buat objeknya menggunakan kelas CountVectorizer.
- Tulis data dalam daftar yang akan dipasang di CountVectorizer.
- Data dimasukkan ke dalam objek yang dibuat dari kelas CountVectorizer.
- Terapkan pendekatan sekantong kata untuk menghitung kata dalam data menggunakan kosakata. Jika kata atau token tidak tersedia dalam kosakata, maka posisi indeks tersebut disetel ke nol.
- Variabel pada baris 5 yaitu x diubah menjadi array (metode tersedia untuk x). Ini akan memberikan jumlah setiap token dalam kalimat atau daftar yang disediakan di Baris 3.
- Ini akan menunjukkan fitur-fitur yang merupakan bagian dari kosakata ketika dilengkapi dengan menggunakan data pada Baris 4.
Dalam pendekatan Semantik Laten, baris mewakili kata-kata unik sedangkan kolom mewakili berapa kali kata tersebut muncul dalam dokumen. Merupakan representasi kata dalam bentuk matriks dokumen. Term-Frequency inverse document vehicle (TFIDF) digunakan untuk menghitung frekuensi kata dalam dokumen yaitu frekuensi istilah dalam dokumen/frekuensi istilah dalam keseluruhan korpus.
Kekurangan metode Bag of Words
- Mengabaikan urutan kata, misalnya this is bad = bad is this.
- Itu mengabaikan konteks kata-kata. Misalkan jika saya menulis kalimat “Dia menyukai buku. Pendidikan paling baik ditemukan di buku”. Ini akan menciptakan dua vektor, satu untuk “Dia menyukai buku” dan lainnya untuk “Pendidikan paling baik ditemukan di buku.” Ini akan memperlakukan keduanya secara ortogonal yang membuat mereka independen, namun pada kenyataannya, mereka terkait satu sama lain
Untuk mengatasi keterbatasan ini, penyematan kata dikembangkan dan Word2vec adalah pendekatan untuk mengimplementasikannya.
Bagaimana Word2vec bekerja?
Word2vec mempelajari kata dengan memprediksi konteks sekitarnya. Misalnya, mari kita ambil kata “Dia mencintai Sepak bola."
Kami ingin menghitung Word2vec untuk kata: cinta.
Seharusnya
loves = Vin. P(Vout / Vin) is calculated where, Vin is the input word. P is the probability of likelihood. Vout is the output word.
Word mencintai berpindah ke setiap kata dalam korpus. Sintaksis serta hubungan semantik antar kata dikodekan. Ini membantu dalam menemukan kata-kata yang serupa dan analogi.
Semua fitur acak dari kata tersebut mencintai dihitung. Fitur-fitur ini diubah atau diperbarui mengenai kata-kata tetangga atau konteks dengan bantuan a Propagasi Kembali Metode.
Cara pembelajaran lainnya adalah jika konteks dua kata serupa atau dua kata mempunyai ciri serupa, maka kata-kata tersebut berkaitan.
Kata2vec Architekstur
Ada dua arsitektur yang digunakan oleh Word2vec:
- Kumpulan Kata Berkelanjutan (CBOW)
- Lewati gram
Sebelum melangkah lebih jauh dalam tutorial Word2vec ini, mari kita bahas mengapa arsitektur atau model ini penting dari sudut pandang representasi kata. Mempelajari representasi kata pada dasarnya tidak diawasi, tetapi target/label diperlukan untuk melatih model. Skip-gram dan CBOW mengubah representasi tanpa pengawasan menjadi bentuk diawasi untuk pelatihan model.
Dalam CBOW, kata saat ini diprediksi menggunakan jendela konteks di sekitarnya. Misalnya, jika wi-1,wi-2,wi + 1,wi + 2diberi kata-kata atau konteks, model ini akan memberikan wi
Skip-Gram melakukan kebalikan dari CBOW yang menyiratkan bahwa ia memprediksi urutan atau konteks tertentu dari kata tersebut. Anda dapat membalik contoh tersebut untuk memahaminya. Jika wi diberikan, ini akan memprediksi konteksnya atau wi-1,wi-2,wi + 1,wsaya+2.
Word2vec menyediakan opsi untuk memilih antara CBOW (Continuous Bag of Words) dan skim-gram. Parameter tersebut disediakan selama pelatihan model. Seseorang dapat memiliki opsi untuk menggunakan pengambilan sampel negatif atau lapisan softmax hierarkis.
Kantong Kata Berkelanjutan
Mari kita menggambar diagram contoh Word2vec sederhana untuk memahami arsitektur kata yang berkesinambungan.
Mari kita hitung persamaannya secara matematis. Misalkan V adalah ukuran kosakata dan N adalah ukuran lapisan tersembunyi. Masukan didefinisikan sebagai { xi-1, Xsaya-2, xsaya+1, xi + 2}. Kita memperoleh matriks bobot dengan mengalikan V * N. Matriks lain diperoleh dengan mengalikan vektor input dengan matriks bobot. Hal ini juga dapat dipahami melalui persamaan berikut.
h=xitW
dimana xit? W masing-masing adalah vektor masukan dan matriks bobot,
Untuk menghitung kecocokan antara konteks dan kata berikutnya, silakan lihat persamaan di bawah ini
u=representasi yang diprediksi*h
dimana representasi prediksi diperoleh model?h pada persamaan di atas.
Model Lewati Gram
Pendekatan Skip-Gram digunakan untuk memprediksi suatu kalimat dengan memberikan kata masukan. Untuk memahaminya lebih baik mari kita menggambar diagram seperti yang ditunjukkan pada contoh Word2vec di bawah ini.
Seseorang dapat memperlakukannya sebagai kebalikan dari model tas kata Berkelanjutan di mana masukannya adalah kata dan model memberikan konteks atau urutannya. Kita juga dapat menyimpulkan bahwa target diumpankan ke lapisan masukan dan keluaran direplikasi beberapa kali untuk mengakomodasi jumlah kata konteks yang dipilih. Vektor kesalahan dari seluruh lapisan keluaran dijumlahkan untuk menyesuaikan bobot melalui metode propagasi mundur.
Model mana yang harus dipilih?
CBOW beberapa kali lebih cepat daripada skip gram dan memberikan frekuensi yang lebih baik untuk kata-kata yang sering digunakan sedangkan skip gram memerlukan sejumlah kecil data pelatihan dan bahkan mewakili kata atau frasa yang jarang.
Hubungan antara Word2vec dan NLTK
NLTK adalah perangkat Bahasa alami. Ini digunakan untuk pra-pemrosesan teks. Seseorang dapat melakukan operasi yang berbeda seperti penandaan bagian-bagian ucapan, lemmatisasi, stemming, penghapusan kata-kata penghentian, penghapusan kata-kata yang jarang atau kata-kata yang paling jarang digunakan. Ini membantu dalam membersihkan teks serta membantu dalam mempersiapkan fitur dari kata-kata yang efektif. Dengan cara lain, Word2vec digunakan untuk pencocokan semantik (item yang terkait erat) dan sintaksis (urutan). Dengan menggunakan Word2vec, seseorang dapat menemukan kata-kata yang mirip, kata-kata yang berbeda, pengurangan dimensi, dan banyak lagi lainnya. Fitur penting lainnya dari Word2vec adalah mengubah representasi teks berdimensi lebih tinggi menjadi vektor berdimensi lebih rendah.
Di mana menggunakan NLTK dan Word2vec?
Jika seseorang harus menyelesaikan beberapa tugas tujuan umum seperti yang disebutkan di atas seperti tokenisasi, penandaan dan penguraian POS, seseorang harus menggunakan NLTK sedangkan untuk memprediksi kata berdasarkan beberapa konteks, pemodelan topik, atau kesamaan dokumen, seseorang harus menggunakan Word2vec.
Hubungan NLTK dan Word2vec dengan bantuan kode
NLTK dan Word2vec dapat digunakan bersama untuk menemukan representasi kata yang mirip atau pencocokan sintaksis. Toolkit NLTK dapat digunakan untuk memuat banyak paket yang disertakan dengan NLTK dan model dapat dibuat menggunakan Word2vec. Kemudian dapat diuji pada kata-kata waktu nyata. Mari kita lihat kombinasi keduanya dalam kode berikut. Sebelum memproses lebih lanjut, harap lihat korpora yang disediakan NLTK. Anda dapat mengunduh menggunakan perintah
nltk(nltk.download('all'))
Silakan lihat tangkapan layar untuk kodenya.
import nltk import gensim from nltk.corpus import abc model= gensim.models.Word2Vec(abc.sents()) X= list(model.wv.vocab) data=model.most_similar('science') print(data)
Keluaran:
[('law', 0.9415997266769409), ('practice', 0.9276568293571472), ('discussion', 0.9259148836135864), ('agriculture', 0.9257254004478455), ('media', 0.9232194423675537), ('policy', 0.922248125076294), ('general', 0.9166069030761719), ('undertaking', 0.916458249092102), ('tight', 0.9129181504249573), ('board', 0.9107444286346436)]
Penjelasan Kode
- Perpustakaan nltk diimpor dari mana Anda dapat mengunduh korpus abc yang akan kita gunakan pada langkah berikutnya.
- Gensim diimpor. Jika Gensim Word2vec belum terinstall, silahkan install menggunakan perintah “pip3 install gensim”. Silakan lihat tangkapan layar di bawah ini.
- import corpus abc yang sudah didownload menggunakan nltk.download('abc').
- Teruskan file ke model Word2vec yang diimpor menggunakan Gensim sebagai kalimat.
- Kosakata disimpan dalam bentuk variabel.
- Model diuji pada contoh kata sains karena file-file ini terkait dengan sains.
- Di sini kata “sains” yang serupa diprediksi oleh model.
Aktivator dan Word2Vec
Fungsi aktivasi neuron menentukan keluaran neuron tersebut berdasarkan serangkaian masukan. Secara biologis terinspirasi oleh aktivitas di otak kita di mana neuron yang berbeda diaktifkan menggunakan rangsangan yang berbeda. Mari kita pahami fungsi aktivasi melalui diagram berikut.
Di sini x1,x2,..x4 adalah simpul jaringan saraf.
w1, w2, w3 adalah bobot node,
? adalah penjumlahan dari seluruh bobot dan nilai node yang berfungsi sebagai fungsi aktivasi.
Mengapa fungsi Aktivasi?
Jika tidak ada fungsi aktivasi yang digunakan, output akan bersifat linear, tetapi fungsionalitas fungsi linear terbatas. Untuk mencapai fungsionalitas yang kompleks seperti deteksi objek, klasifikasi gambar, pengetikan teks menggunakan suara, dan banyak output non-linear lainnya, diperlukan fungsi aktivasi.
Bagaimana lapisan aktivasi dihitung dalam penyematan kata (Word2vec)
Softmax Layer (fungsi eksponensial ternormalisasi) adalah fungsi lapisan keluaran yang mengaktifkan atau mengaktifkan setiap node. Pendekatan lain yang digunakan adalah Hierarchical Softmax di mana kompleksitas dihitung dengan O(log2V) di mana softmax adalah O(V) di mana V adalah ukuran kosakata. Perbedaan antara keduanya adalah pengurangan kompleksitas pada lapisan softmax hierarkis. Untuk memahami fungsionalitasnya (Softmax hierarkis), lihat contoh penyisipan kata di bawah ini:
Misalkan kita ingin menghitung probabilitas mengamati kata tersebut cinta diberikan konteks tertentu. Alur dari simpul akar ke simpul daun akan dipindahkan terlebih dahulu ke simpul 2 lalu ke simpul 5. Jadi jika kita sudah mempunyai ukuran kosakata 8 maka hanya diperlukan tiga kali komputasi. Sehingga memungkinkan penguraian, penghitungan probabilitas satu kata (cinta).
Apa saja pilihan lain yang tersedia selain Hierarchical Softmax?
Jika berbicara dalam pengertian umum untuk penyematan kata, opsi yang tersedia adalah Differentiated Softmax, CNN-Softmax, Importance Sampling, Adaptive Importance sampling, Noise Contrastive Estimations, Negative Sampling, Self-Normalization, dan infrequent Normalization.
Berbicara secara khusus tentang Word2vec, kami memiliki pengambilan sampel negatif.
Pengambilan Sampel Negatif adalah cara mengambil sampel data pelatihan. Ini agak mirip dengan penurunan gradien stokastik, tetapi dengan beberapa perbedaan. Pengambilan sampel negatif hanya mencari contoh pelatihan negatif. Hal ini didasarkan pada estimasi kontrastif kebisingan dan mengambil sampel kata secara acak, bukan dalam konteksnya. Ini adalah metode pelatihan cepat dan memilih konteksnya secara acak. Jika kata prediksi muncul dalam konteks yang dipilih secara acak, kedua vektor tersebut berdekatan satu sama lain.
Kesimpulan apa yang bisa diambil?
Aktivator mengaktifkan neuron seperti halnya neuron kita diaktifkan menggunakan rangsangan eksternal. Lapisan softmax adalah salah satu fungsi lapisan keluaran yang mengaktifkan neuron jika terjadi penyisipan kata. Dalam Word2vec, kami memiliki opsi seperti softmax hierarkis dan pengambilan sampel negatif. Dengan menggunakan aktivator, seseorang dapat mengubah fungsi linier menjadi fungsi nonlinier, dan algoritma pembelajaran mesin yang kompleks dapat diimplementasikan menggunakan aktivator.
Apa itu Gensim?
Gensim adalah perangkat pemodelan topik sumber terbuka dan pemrosesan bahasa alami yang diimplementasikan di Python dan Cython. Toolkit Gensim memungkinkan pengguna mengimpor Word2vec untuk pemodelan topik guna menemukan struktur tersembunyi di badan teks. Gensim tidak hanya menyediakan implementasi Word2vec tetapi juga untuk Doc2vec dan FastText.
Tutorial ini tentang Word2vec jadi kita akan tetap pada topik saat ini.
Bagaimana Mengimplementasikan Word2vec menggunakan Gensim
Sampai sekarang kita telah membahas apa itu Word2vec, berbagai arsitekturnya, mengapa ada peralihan dari sekumpulan kata ke Word2vec, hubungan antara Word2vec dan NLTK dengan kode langsung dan fungsi aktivasi.
Di bawah ini adalah langkah demi langkah metode mengimplementasikan Word2vec menggunakan Gensim:
Langkah 1) Pengumpulan Data
Langkah pertama untuk menerapkan model pembelajaran mesin atau menerapkan pemrosesan bahasa alami adalah pengumpulan data
Harap amati data untuk membangun chatbot cerdas seperti yang ditunjukkan pada contoh Gensim Word2vec di bawah ini.
[{"tag": "welcome", "patterns": ["Hi", "How are you", "Is any one to talk?", "Hello", "hi are you available"], "responses": ["Hello, thanks for contacting us", "Good to see you here"," Hi there, how may I assist you?"] }, {"tag": "goodbye", "patterns": ["Bye", "See you later", "Goodbye", "I will come back soon"], "responses": ["See you later, thanks for visiting", "have a great day ahead", "Wish you Come back again soon."] }, {"tag": "thankful", "patterns": ["Thanks for helping me", "Thank your guidance", "That's helpful and kind from you"], "responses": ["Happy to help!", "Any time!", "My pleasure", "It is my duty to help you"] }, {"tag": "hoursopening", "patterns": ["What hours are you open?", "Tell your opening time?", "When are you open?", "Just your timing please"], "responses": ["We're open every day 8am-7pm", "Our office hours are 8am-7pm every day", "We open office at 8 am and close at 7 pm"] }, {"tag": "payments", "patterns": ["Can I pay using credit card?", " Can I pay using Mastercard?", " Can I pay using cash only?" ], "responses": ["We accept VISA, Mastercard and credit card", "We accept credit card, debit cards and cash. Please don’t worry"] } ]
Inilah yang kami pahami dari data tersebut
- Data ini berisi tiga hal tag, pola, dan respon. Tag adalah maksudnya (apa topik pembahasannya).
- Datanya dalam format JSON.
- Pola adalah pertanyaan yang akan diajukan pengguna kepada bot
- Respons adalah jawaban yang akan diberikan chatbot terhadap pertanyaan/pola yang sesuai.
Langkah 2) Pemrosesan awal data
Sangat penting untuk memproses data mentah. Jika data yang sudah dibersihkan dimasukkan ke mesin, maka model akan merespons lebih akurat dan mempelajari data dengan lebih efisien.
Langkah ini melibatkan penghapusan kata-kata berhenti, stemming, kata-kata yang tidak perlu, dll. Sebelum melanjutkan, penting untuk memuat data dan mengubahnya menjadi bingkai data. Silakan lihat kode di bawah ini untuk itu
import json json_file =’intents.json' with open('intents.json','r') as f: data = json.load(f)
Penjelasan Kode:
- Karena data dalam bentuk format json maka json diimpor
- File disimpan dalam variabel
- File terbuka dan dimuat dalam variabel data
Sekarang data telah diimpor dan sekarang saatnya mengubah data menjadi bingkai data. Silakan lihat kode di bawah ini untuk melihat langkah selanjutnya
import pandas as pd df = pd.DataFrame(data) df['patterns'] = df['patterns'].apply(', '.join)
Penjelasan Kode:
1. Data diubah menjadi bingkai data menggunakan panda yang telah diimpor di atas.
2. Ini akan mengubah daftar dalam pola kolom menjadi string.
from nltk.corpus import stopwords from textblob import Word stop = stopwords.words('english') df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split())) df['patterns't']= df['patterns''].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation) df['patterns']= df['patterns'].str.replace('[^\w\s]','') df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit())) df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop)) df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
Penjelasan Kode:
1. Kata-kata berhenti bahasa Inggris diimpor menggunakan modul kata berhenti dari toolkit nltk
2. Semua kata dalam teks diubah menjadi huruf kecil menggunakan kondisi dan fungsi lambda. Fungsi Lambda adalah fungsi anonim.
3. Semua baris teks dalam bingkai data diperiksa tanda baca stringnya, dan ini difilter.
4. Karakter seperti angka atau titik dihilangkan menggunakan ekspresi reguler.
5. Digits dihapus dari teks.
6. Kata-kata berhenti dihilangkan pada tahap ini.
7. Kata-kata sekarang disaring, dan bentuk berbeda dari kata yang sama dihilangkan menggunakan lemmatisasi. Dengan ini, kami telah menyelesaikan prapemrosesan data.
Keluaran:
, patterns, responses, tag 0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome 1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye 2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful 3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening 4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please don’t worry']",payments
Langkah 3) Membangun Jaringan Neural menggunakan Word2vec
Sekarang saatnya membangun model menggunakan modul Gensim Word2vec. Kita harus mengimpor Word2vec dari Gensim. Mari kita lakukan ini, lalu kita akan membangun dan pada tahap akhir kita akan memeriksa model pada data waktu nyata.
from gensim.models import Word2Vec
Sekarang dalam tutorial Gensim Word2vec ini, kita berhasil membangun model menggunakan Word2Vec. Silakan merujuk ke baris kode berikutnya untuk mempelajari cara membuat model menggunakan Word2Vec. Teks diberikan kepada model dalam bentuk daftar sehingga kita akan mengonversi teks dari bingkai data ke daftar menggunakan kode di bawah ini
Bigger_list=[] for i in df['patterns'] li = list(i.split("")) Bigger_list.append(li) Model= Word2Vec(Bigger_list,min_count=1,size=300,workers=4)
Penjelasan Kode:
1. Membuat big_list tempat daftar bagian dalam ditambahkan. Ini adalah format yang dimasukkan ke model Word2Vec.
2. Perulangan diimplementasikan, dan setiap entri kolom pola pada bingkai data diiterasi.
3. Setiap elemen pola kolom dipisahkan dan disimpan dalam daftar bagian dalam li
4. Daftar bagian dalam ditambahkan dengan daftar bagian luar.
5. Daftar ini disediakan untuk model Word2Vec. Mari kita pahami beberapa parameter yang disediakan di sini
Jumlah_min: Ini akan mengabaikan semua kata dengan frekuensi total lebih rendah dari ini.
Ukuran: Ini menceritakan dimensi dari kata vektor.
Pekerja: Ini adalah thread untuk melatih model
Ada juga opsi lain yang tersedia, dan beberapa opsi penting dijelaskan di bawah
Jendela: Jarak maksimum antara kata saat ini dan kata yang diprediksi dalam sebuah kalimat.
Sg: Ini adalah algoritma pelatihan dan 1 untuk skip-gram dan 0 untuk Continuous bag of words. Kami telah membahasnya secara rinci di atas.
Hs: Jika nilainya 1 maka kita menggunakan softmax hierarkis untuk pelatihan dan jika nilainya 0 maka pengambilan sampel negatif digunakan.
Alfa: Kecepatan pembelajaran awal
Mari kita tampilkan kode terakhir di bawah ini:
#list of libraries used by the code import string from gensim.models import Word2Vec import logging from nltk.corpus import stopwords from textblob import Word import json import pandas as pd #data in json format json_file = 'intents.json' with open('intents.json','r') as f: data = json.load(f) #displaying the list of stopwords stop = stopwords.words('english') #dataframe df = pd.DataFrame(data) df['patterns'] = df['patterns'].apply(', '.join) # print(df['patterns']) #print(df['patterns']) #cleaning the data using the NLP approach print(df) df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split())) df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation)) df['patterns']= df['patterns'].str.replace('[^\w\s]','') df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit())) df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop)) df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()])) #taking the outer list bigger_list=[] for i in df['patterns']: li = list(i.split(" ")) bigger_list.append(li) #structure of data to be taken by the model.word2vec print("Data format for the overall list:",bigger_list) #custom data is fed to machine for further processing model = Word2Vec(bigger_list, min_count=1,size=300,workers=4) #print(model)
Langkah 4) Penghematan model
Model dapat disimpan dalam bentuk bin dan bentuk model. Bin adalah format biner. Silakan lihat baris di bawah ini untuk menyimpan model
model.save("word2vec.model") model.save("model.bin")
Penjelasan kode di atas
1. Model disimpan dalam bentuk file .model.
2. model disimpan dalam bentuk file .bin
Kami akan menggunakan model ini untuk melakukan pengujian waktu nyata seperti Kata serupa, kata berbeda, dan kata paling umum.
Langkah 5) Memuat model dan melakukan pengujian waktu nyata
Model dimuat menggunakan kode di bawah ini:
model = Word2Vec.load('model.bin')
Jika ingin mencetak kosakatanya dilakukan dengan menggunakan perintah di bawah ini:
vocab = list(model.wv.vocab)
Silakan lihat hasilnya:
['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available']
Langkah 6) Pemeriksaan kata-kata yang paling mirip
Mari kita terapkan secara praktis:
similar_words = model.most_similar('thanks') print(similar_words)
Silakan lihat hasilnya:
[('kind', 0.16104359924793243), ('using', 0.1352398842573166), ('come', 0.11500970274209976), ('later', 0.09989878535270691), ('helping', 0.04855936020612717), ('credit', 0.04659383371472359), ('pay', 0.0329081267118454), ('thank', 0.02484947443008423), ('hour', 0.0202352125197649), ('opening', 0.018177658319473267)]
Langkah 7) Tidak cocok dengan kata yang diberikan
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split()) print(dissimlar_words)
Kami telah menyediakan kata-katanya 'Sampai jumpa lagi, terima kasih sudah berkunjung'. Hal ini akan cetak kata-kata yang paling berbeda dari kata-kata ini. Mari kita jalankan kode ini dan temukan hasilnya
Hasil setelah eksekusi kode di atas:
Thanks
Langkah 8) Menemukan persamaan antara dua kata
Ini akan memberi tahu hasil kemungkinan kesamaan antara dua kata. Silakan lihat kode di bawah ini bagaimana menjalankan bagian ini.
similarity_two_words = model.similarity('please','see') print("Please provide the similarity between these two words:") print(similarity_two_words)
Hasil dari kode diatas seperti dibawah ini
0.13706
Anda selanjutnya dapat menemukan kata-kata serupa dengan menjalankan kode di bawah ini
similar = model.similar_by_word('kind') print(similar)
Output dari kode di atas:
[('credit', 0.11764447391033173), ('cash', 0.11440904438495636), ('one', 0.11151769757270813), ('hour', 0.0944807156920433), ('using', 0.0705675333738327), ('thats', 0.05206916481256485), ('later', 0.04502468928694725), ('bye', 0.03960943967103958), ('back', 0.03837274760007858), ('thank', 0.0380823090672493)]
Kesimpulan
- Penyematan Kata adalah jenis representasi kata yang memungkinkan kata-kata dengan makna serupa dipahami oleh algoritme pembelajaran mesin
- Penyematan Kata digunakan untuk menghitung kata-kata serupa, Membuat sekelompok kata terkait, Fitur untuk klasifikasi teks, Pengelompokan dokumen, Pemrosesan bahasa alami
- Word2vec menjelaskan: Word2vec adalah model jaringan saraf dua lapis yang dangkal untuk menghasilkan penyematan kata untuk representasi kata yang lebih baik
- Word2vec mewakili kata-kata dalam representasi ruang vektor. Kata-kata direpresentasikan dalam bentuk vektor dan penempatannya dilakukan sedemikian rupa sehingga kata-kata yang memiliki makna serupa muncul bersamaan dan kata-kata yang berbeda letaknya berjauhan.
- Algoritma Word2vec menggunakan 2 arsitektur yaitu Continuous Bag of Words (CBOW) dan Skip Gram
- CBOW beberapa kali lebih cepat daripada skip gram dan memberikan frekuensi yang lebih baik untuk kata-kata yang sering digunakan sedangkan skip gram memerlukan sejumlah kecil data pelatihan dan bahkan mewakili kata atau frasa yang jarang.
- NLTK dan Word2vec dapat digunakan bersama untuk membuat aplikasi yang kuat
- Fungsi aktivasi neuron menentukan keluaran dari neuron tersebut dengan serangkaian masukan. Di Word2vec. Lapisan Softmax (fungsi eksponensial yang dinormalisasi) adalah fungsi lapisan keluaran yang mengaktifkan atau mengaktifkan setiap node. Word2vec juga menyediakan pengambilan sampel negatif
- Gensim adalah perangkat pemodelan topik yang diimplementasikan dengan python