Tutorial Penyematan Kata: word2vec menggunakan Gensim (CONTOH)

Daftar Isi:

Anonim

Apa itu Word Embedding?

Penyematan Kata adalah jenis representasi kata yang memungkinkan kata-kata dengan arti serupa dipahami oleh algoritme pembelajaran mesin. Secara teknis, ini adalah pemetaan kata menjadi vektor bilangan real menggunakan jaringan saraf, model probabilistik, atau reduksi dimensi pada matriks ko-kemunculan kata. Ini adalah pemodelan bahasa dan teknik pembelajaran fitur. Penyematan kata adalah cara untuk melakukan pemetaan menggunakan jaringan saraf. Ada berbagai model penyematan kata yang tersedia seperti word2vec (Google), Glove (Stanford) dan tercepat (Facebook).

Word Embedding juga disebut sebagai model semantik terdistribusi atau ruang vektor semantik yang diwakili atau terdistribusi atau model ruang vektor. Saat Anda membaca nama-nama ini, Anda menemukan kata semantik yang berarti mengkategorikan kata-kata yang mirip bersama-sama. Misalnya buah-buahan seperti apel, mangga, pisang harus diletakkan dekat sedangkan buku akan jauh dari kata-kata ini. Dalam arti yang lebih luas, embedding kata akan menciptakan vektor buah-buahan yang akan ditempatkan jauh dari representasi vektor buku.

Dalam tutorial ini, Anda akan belajar

  • Apa itu Word Embedding?
  • Di mana Word Embedding digunakan?
  • Apa itu word2vec?
  • Apa yang dilakukan word2vec?
  • Mengapa Word2vec?
  • Arsitektur Word2vec
  • Tas Kata-kata Berkelanjutan.
  • Model Lewati-Gram
  • Hubungan antara Word2vec dan NLTK
  • Aktivator dan Word2Vec
  • Apa itu Gensim?
  • Implementasi Kode word2vec menggunakan Gensim

Di mana Word Embedding digunakan?

Penyematan kata membantu dalam pembuatan fitur, pengelompokan dokumen, klasifikasi teks, dan tugas pemrosesan bahasa alami. Mari kita daftar dan berdiskusi tentang masing-masing aplikasi ini.

  • Hitung kata-kata yang mirip: Penyematan kata digunakan untuk menyarankan kata-kata yang mirip dengan kata yang menjadi sasaran model prediksi. Bersamaan dengan itu, itu juga menyarankan kata-kata yang berbeda, serta kata-kata yang paling umum.
  • Buat sekelompok kata terkait: Ini digunakan untuk pengelompokan semantik yang akan mengelompokkan hal-hal dengan karakteristik yang sama bersama-sama dan berbeda jauh.
  • Fitur untuk klasifikasi teks: Teks dipetakan ke dalam array vektor yang diumpankan ke model untuk pelatihan serta prediksi. Model pengklasifikasi berbasis teks tidak dapat dilatih pada string, jadi ini akan mengubah teks menjadi bentuk yang dapat dilatih mesin. Lebih lanjut fitur-fiturnya membangun bantuan semantik dalam klasifikasi berbasis teks.
  • Pengelompokan dokumen adalah aplikasi lain di mana penyematan kata digunakan secara luas
  • 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 mendapat pengetahuan tentang embedding kata. Beberapa cahaya juga diberikan pada model yang berbeda untuk mengimplementasikan embedding kata. Seluruh tutorial ini difokuskan pada salah satu model (word2vec).

Apa itu word2vec?

Word2vec adalah teknik / model untuk menghasilkan embedding kata untuk representasi kata yang lebih baik. Ini menangkap sejumlah besar hubungan kata sintaksis dan semantik yang tepat. Ini adalah jaringan saraf dua lapis yang dangkal. Sebelum melangkah lebih jauh, silakan lihat perbedaan antara jaringan saraf dangkal dan dalam:

Jaringan neural dangkal terdiri dari satu-satunya lapisan tersembunyi antara masukan dan keluaran sedangkan jaringan saraf dalam berisi beberapa lapisan tersembunyi antara masukan dan keluaran. Masukan dikenakan node sedangkan lapisan tersembunyi, serta lapisan keluaran, berisi neuron.

Gambar: Pembelajaran dangkal vs. mendalam

word2vec adalah jaringan dua lapisan di mana ada masukan satu lapisan tersembunyi dan keluaran.

Word2vec dikembangkan oleh sekelompok peneliti yang dipimpin oleh Tomas Mikolov di Google. Word2vec lebih baik dan lebih efisien daripada model analisis semantik laten.

Apa yang dilakukan word2vec?

Word2vec mewakili kata-kata dalam representasi ruang vektor. Kata-kata direpresentasikan dalam bentuk vektor dan penempatan dilakukan sedemikian rupa sehingga kata-kata yang memiliki makna serupa muncul bersama-sama dan kata-kata yang berbeda terletak jauh. Ini juga disebut sebagai hubungan semantik. Jaringan saraf tidak memahami teks, melainkan hanya memahami angka. Penyematan Kata menyediakan cara untuk mengonversi teks menjadi vektor numerik.

Word2vec merekonstruksi konteks linguistik 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 kalimat tersebut. Misal, “What is the temperature of India”, disini konteksnya adalah user ingin mengetahui “temperature of India” yang merupakan konteks. Singkatnya, tujuan utama kalimat adalah konteks. Kata atau kalimat yang mengelilingi bahasa lisan atau tulisan (pengungkapan) membantu dalam menentukan makna konteks. Word2vec mempelajari representasi vektor dari kata-kata melalui konteksnya.

Mengapa Word2vec?

Sebelum Penyematan Kata

Penting untuk mengetahui pendekatan mana yang digunakan sebelum penyematan kata dan apa saja kekurangannya, lalu kita akan beralih ke topik bagaimana kelemahan diatasi dengan penyematan kata menggunakan pendekatan word2vec. Terakhir, kita akan membahas cara kerja word2vec karena penting untuk memahami cara kerjanya.

Pendekatan untuk 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 di mana dimensinya sama dengan ukuran kosakata. Jika kata tersebut muncul dalam kamus, itu akan dihitung, jika tidak, tidak. Untuk lebih memahami, silakan lihat program di bawah ini.

from sklearn.feature_extraction.text import CountVectorizervectorizer=CountVectorizer()data_corpus=["guru99 is the best sitefor online tutorials. I love to visit guru99."]vocabulary=vectorizer.fit(data_corpus)X= vectorizer.transform(data_corpus)print(X.toarray())print(vocabulary.get_feature_names())

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

  1. CountVectorizer adalah modul yang digunakan untuk menyimpan kosakata berdasarkan kesesuaian kata-kata di dalamnya. Ini diimpor dari sklearn
  2. Buat objek menggunakan kelas CountVectorizer.
  3. Tulis data dalam daftar yang akan dipasang di CountVectorizer.
  4. Data sesuai dengan objek yang dibuat dari kelas CountVectorizer.
  5. Menerapkan sekumpulan pendekatan kata untuk menghitung kata dalam data menggunakan kosakata. Jika kata atau token tidak tersedia dalam kosakata, maka posisi indeks tersebut disetel ke nol.
  6. Variabel di baris 5 yang x diubah menjadi array (metode tersedia untuk x). Ini akan memberikan jumlah setiap token dalam kalimat atau daftar yang disediakan di Baris 3.
  7. Ini akan menunjukkan fitur-fitur yang merupakan bagian dari kosakata jika dilengkapi dengan data di Baris 4.

Dalam pendekatan Semantik Laten, baris mewakili kata-kata unik sedangkan kolom mewakili jumlah waktu kata tersebut muncul di dokumen. Merupakan representasi kata-kata dalam bentuk matriks dokumen. Term-Frequency inverse document frequency (TFIDF) digunakan untuk menghitung frekuensi kata dalam dokumen yang merupakan frekuensi term dalam dokumen / frekuensi term dalam seluruh korpus.

Kekurangan metode Bag of Words

  • Ini mengabaikan urutan kata, misalnya, ini buruk = buruk adalah ini.
  • Ini mengabaikan konteks kata. Misalkan Jika saya menulis kalimat "Dia menyukai buku. Pendidikan paling baik ditemukan di buku". Ini akan membuat dua vektor, satu untuk "Dia menyukai buku" dan lainnya untuk "Pendidikan paling baik ditemukan di buku." Itu akan memperlakukan keduanya ortogonal yang membuat mereka mandiri, tetapi pada kenyataannya, mereka terkait satu sama lain

Untuk mengatasi batasan ini, word embedding dikembangkan dan word2vec merupakan pendekatan untuk mengimplementasikannya.

Bagaimana Word2vec bekerja?

Word2vec mempelajari kata dengan memprediksi konteks sekitarnya. Sebagai contoh, mari kita ambil kata "Dia mencintai Sepakbola".

Kami ingin menghitung word2vec untuk kata: cinta.

Seharusnya

loves = Vin. P(Vout / Vin) is calculatedwhere,Vin is the input word.P is the probability of likelihood.Vout is the output word.

Kata suka bergerak di setiap kata dalam korpus. Hubungan sintaksis dan Semantik antar kata dikodekan. Ini membantu dalam menemukan kata-kata yang mirip dan analogi.

Semua fitur acak dari kata cinta dihitung. Fitur-fitur ini diubah atau diperbarui terkait kata-kata tetangga atau konteks dengan bantuan metode propagasi mundur.

Cara belajar yang lain adalah jika konteks dua kata serupa atau dua kata memiliki ciri yang serupa, maka kata-kata tersebut saling berkaitan.

Arsitektur Word2vec

Ada dua arsitektur yang digunakan oleh word2vec

  1. Tas Kata-kata Berkelanjutan (RIBU)
  2. lewati gram

Sebelum melangkah lebih jauh, 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 yang tidak diawasi menjadi bentuk yang diawasi untuk pelatihan model.

Di CBOW, kata saat ini diprediksi menggunakan jendela jendela konteks di sekitarnya. Misalnya, jika w i-1 , w i-2 , w i + 1 , w i + 2 diberi kata atau konteks, model ini akan memberikan w i

Skip-Gram melakukan kebalikan dari CBOW yang menyiratkan bahwa ia memprediksi urutan atau konteks yang diberikan dari kata tersebut. Anda dapat membalikkan contoh untuk memahaminya. Jika w i diberikan, ini akan memprediksi konteks atau w i-1 , w i-2 , w i + 1 , w i + 2.

Word2vec menyediakan opsi untuk memilih antara CBOW (sekumpulan kata berkelanjutan) dan skim-gram. Parameter tersebut disediakan selama pelatihan model. Seseorang dapat memiliki opsi untuk menggunakan pengambilan sampel negatif atau lapisan softmax hierarkis.

Tas Kata-kata Berkelanjutan.

Mari kita gambar diagram sederhana untuk memahami tas arsitektur kata yang berkelanjutan.

Gambar Tas Berkelanjutan dari Arsitektur Kata

Mari kita hitung persamaan secara matematis. Misalkan V adalah ukuran kosakata dan N adalah ukuran lapisan tersembunyi. Input didefinisikan sebagai {x i-1 , x i-2, x i + 1, x i + 2 }. Kami mendapatkan matriks bobot dengan mengalikan V * N. Matriks lain diperoleh dengan mengalikan vektor input dengan matriks bobot. Ini juga bisa dipahami dengan persamaan berikut.

Ketinggian = xi t W

dimana xi t ∧ 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 yang diprediksi diperoleh model∧h pada persamaan di atas.

Model Lewati-Gram

Pendekatan Skip-Gram digunakan untuk memprediksi kalimat yang diberi kata masukan. Untuk memahaminya dengan lebih baik mari kita menggambar diagramnya.

Gambar Model Skip-Gram

Seseorang dapat memperlakukannya sebagai kebalikan dari model tas kata berkelanjutan di mana inputnya adalah kata dan model memberikan konteks atau urutannya. Kita juga dapat menyimpulkan bahwa target yang diumpankan ke lapisan input dan output direplikasi beberapa kali untuk mengakomodasi jumlah kata konteks yang dipilih. Vektor kesalahan dari semua lapisan keluaran dijumlahkan untuk menyesuaikan bobot melalui metode propagasi mundur.

Model mana yang harus dipilih?

CBOW beberapa kali lebih cepat daripada melewatkan gram dan memberikan frekuensi yang lebih baik untuk kata-kata yang sering, sedangkan skip gram membutuhkan sedikit data pelatihan dan bahkan mewakili kata-kata atau frase langka.

Hubungan antara Word2vec dan NLTK

NLTK adalah perangkat Bahasa alami. Ini digunakan untuk preprocessing teks. Seseorang dapat melakukan operasi yang berbeda seperti penandaan bagian ucapan, lemmatizing, stemming, penghentian kata-kata, menghapus kata-kata langka 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 semantik (item yang terkait erat bersama-sama) dan pencocokan sintaksis (urutan). Menggunakan word2vec, seseorang dapat menemukan kata-kata yang mirip, kata-kata yang berbeda, reduksi dimensi, dan banyak 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-kata menurut 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 serupa atau pencocokan sintaksis. Toolkit NLTK dapat digunakan untuk memuat banyak paket yang disertakan dengan NLTK dan model dapat dibuat menggunakan word2vec. Itu kemudian dapat diuji pada kata-kata waktu nyata. Mari kita lihat kombinasi keduanya pada kode berikut. Sebelum diproses lebih lanjut, silakan lihat korpora yang disediakan NLTK. Anda dapat mengunduh menggunakan perintah

nltk(nltk.download('all'))

Gambar Corpora diunduh menggunakan NLTK

Silakan lihat tangkapan layar untuk kodenya.

import nltkimport gensimfrom nltk.corpus import abcmodel= 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

  1. pustaka nltk diimpor dari mana Anda dapat mengunduh korpus abc yang akan kita gunakan pada langkah berikutnya.
  2. Gensim diimpor. Jika Gensim belum terinstal, silahkan install menggunakan perintah "pip3 install gensim". Silakan lihat gambar di bawah ini.

Gambar Instalasi Gensim menggunakan PIP

  1. impor corpus abc yang telah diunduh menggunakan nltk.download ('abc').
  2. Meneruskan file ke model word2vec yang diimpor menggunakan Gensim sebagai kalimat.
  3. Kosakata disimpan dalam bentuk variabel.
  4. Model diuji pada contoh kata sains karena file ini terkait dengan sains.
  5. Di sini kata serupa dari "sains" diprediksi oleh model.

Aktivator dan Word2Vec

Fungsi aktivasi neuron menentukan keluaran dari neuron yang diberi serangkaian masukan. Terinspirasi secara biologis oleh aktivitas di otak kita di mana neuron yang berbeda diaktifkan menggunakan rangsangan yang berbeda. Mari kita pahami fungsi aktivasi melalui diagram berikut.

Gambar Memahami fungsi Aktivasi

Di sini x1, x2,… x4 adalah node dari jaringan saraf.

w1, w2, w3 adalah bobot node,

∑ adalah penjumlahan dari semua bobot dan nilai node yang berfungsi sebagai fungsi aktivasi.

Mengapa fungsi Aktivasi?

Jika tidak ada fungsi aktivasi yang digunakan, keluaran akan linier tetapi fungsionalitas fungsi linier terbatas. Untuk mencapai fungsionalitas yang kompleks seperti deteksi objek, klasifikasi gambar, pengetikan teks menggunakan suara dan banyak keluaran non-linier lainnya diperlukan yang dicapai dengan menggunakan fungsi aktivasi.

Bagaimana lapisan aktivasi dihitung dalam kata embedding (word2vec)

Softmax Layer (fungsi eksponensial yang dinormalisasi) adalah fungsi lapisan keluaran yang mengaktifkan atau mengaktifkan setiap node. Pendekatan lain yang digunakan adalah Hierarchical softmax dimana kompleksitas dihitung dengan O (log 2 V) dimana softmax adalah O (V) dimana V adalah ukuran kosa kata. Perbedaan antara ini adalah pengurangan kompleksitas dalam lapisan softmax hierarkis. Untuk memahami fungsionalitas (Hierarchical softmax), silakan lihat contoh di bawah ini:

Gambar struktur seperti pohon softmax hierarki

Misalkan kita ingin menghitung kemungkinan mengamati kata cinta dalam konteks tertentu. Aliran dari akar ke simpul daun akan menjadi yang pertama pindah ke simpul 2 dan kemudian ke simpul 5. Jadi jika kita telah memiliki ukuran kosakata 8, hanya dibutuhkan tiga komputasi. Jadi memungkinkan penguraian, perhitungan kemungkinan satu kata ( cinta ).

Pilihan apa lagi yang tersedia selain Hierarchical Softmax?

Jika berbicara dalam arti umum untuk opsi penyematan kata yang tersedia adalah Softmax yang Dibedakan, CNN-Softmax, Pengambilan Sampel Kepentingan, Pengambilan sampel Kepentingan Adaptif, Perkiraan Kontrasif Kebisingan, Pengambilan Sampel Negatif, Normalisasi Mandiri, dan Normalisasi Jarang.

Berbicara secara khusus tentang Word2vec, kami memiliki pengambilan sampel negatif.

Sampling Negatif adalah cara untuk mengambil sampel data pelatihan. Ini seperti penurunan gradien stokastik, tetapi dengan beberapa perbedaan. Pengambilan sampel negatif hanya mencari contoh pelatihan negatif. Ini didasarkan pada estimasi kontrastif kebisingan dan kata-kata sampel secara acak, bukan dalam konteksnya. Ini adalah metode pelatihan cepat dan memilih konteksnya secara acak. Jika kata yang diprediksi muncul dalam konteks yang dipilih secara acak, kedua vektor tersebut berdekatan satu sama lain.

Kesimpulan apa yang bisa ditarik?

Aktivator menembakkan neuron seperti neuron kita ditembakkan menggunakan rangsangan eksternal. Lapisan softmax adalah salah satu fungsi lapisan keluaran yang mengaktifkan neuron jika terjadi embedding kata. Di word2vec kami memiliki opsi seperti softmax hierarkis dan pengambilan sampel negatif. Dengan menggunakan aktivator, seseorang dapat mengubah fungsi linier menjadi fungsi nonlinier, dan algoritme pembelajaran mesin yang kompleks dapat diimplementasikan dengan menggunakan itu.

Apa itu Gensim?

Gensim adalah toolkit pemodelan topik yang diimplementasikan dalam python. Pemodelan topik menemukan struktur tersembunyi di badan teks. Word2vec diimpor dari toolkit Gensim. Harap dicatat bahwa Gensim tidak hanya menyediakan implementasi word2vec tetapi juga Doc2vec dan FastText tetapi tutorial ini adalah tentang word2vec jadi kami akan tetap berpegang pada topik saat ini.

Implementasi word2vec menggunakan Gensim

Sampai sekarang kita telah membahas apa itu word2vec, arsitekturnya yang berbeda, mengapa ada pergeseran dari sekumpulan kata ke word2vec, hubungan antara word2vec dan NLTK dengan kode langsung dan fungsi aktivasi. Pada bagian ini, akan mengimplementasikan word2vec menggunakan Gensim

Langkah 1) Pengumpulan Data

Langkah pertama untuk mengimplementasikan model pembelajaran mesin atau mengimplementasikan pemrosesan bahasa alami adalah pengumpulan data

Perhatikan datanya untuk membangun chatbot yang cerdas.

[{"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 yaitu tag, pola, dan tanggapan. Tag adalah maksudnya (apa topik pembahasannya).
  • Data dalam format JSON.
  • Pola adalah pertanyaan yang akan ditanyakan pengguna ke bot
  • Responses adalah jawaban yang akan diberikan chatbot untuk pertanyaan / pola yang sesuai.

Langkah 2) Pemrosesan awal data.

Sangat penting untuk mengolah data mentah. Jika data yang sudah dibersihkan diumpankan ke mesin, maka model akan merespons dengan 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 jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)

Penjelasan CODE.

  1. Karena data dalam bentuk format json maka json diimpor
  2. File disimpan dalam variabel
  3. File terbuka dan dimuat dalam variabel data

Sekarang data diimpor dan sekarang saatnya untuk mengubah data menjadi bingkai data. Silakan lihat kode di bawah ini untuk melihat langkah selanjutnya

import pandas as pddf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)

Penjelasan CODE

1. Data diubah ke dalam bingkai data menggunakan panda yang diimpor di atas.

2. Ini akan mengubah daftar dalam pola kolom menjadi string.

from nltk.corpus import stopwordsfrom textblob import Wordstop = 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 for condition dan lambda function. Fungsi Lambda adalah fungsi anonim.

3. Semua baris teks dalam bingkai data diperiksa untuk tanda baca string, dan ini disaring.

4. Karakter seperti angka atau titik dihapus menggunakan ekspresi reguler.

5. Digit dihapus dari teks.

6. Kata-kata berhenti akan dihapus pada tahap ini.

7. Kata-kata disaring sekarang, dan bentuk yang berbeda dari kata yang sama dihapus menggunakan lemmatization. Dengan ini, kami telah menyelesaikan pemrosesan awal data.

Keluaran:

, patterns, responses, tag0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful3,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']",hoursopening4,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 Neural Network menggunakan word2vec

Sekarang saatnya membangun model menggunakan modul Gensim word2vec. Kami harus mengimpor word2vec dari Gensim. Mari kita lakukan ini, lalu kita akan membangun dan pada tahap terakhir kita akan memeriksa model pada data waktu nyata.

from gensim.models import Word2Vec

Sekarang, kami berhasil membangun model menggunakan Word2Vec. Silakan merujuk ke baris kode berikutnya untuk mempelajari cara membuat model menggunakan Word2Vec. Untuk model disediakan teks dalam bentuk list sehingga kita akan mengubah teks dari data frame ke list dengan 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. Buat daftar_lebih besar di mana daftar bagian dalam ditambahkan. Ini adalah format yang diumpankan ke model Word2Vec.

2. Loop diterapkan, dan setiap entri kolom pola dari bingkai data diiterasi.

3. Setiap elemen pola kolom dipisahkan dan disimpan dalam daftar bagian dalam li

4. daftar batin ditambahkan dengan daftar luar.

5. Daftar ini diberikan untuk model Word2Vec. Mari kita pahami beberapa parameter yang disediakan di sini

Min_count: Ini akan mengabaikan semua kata dengan frekuensi total lebih rendah dari ini.

Ukuran: Ini memberitahu dimensi dari vektor kata.

Pekerja: Ini adalah utas untuk melatih model

Ada juga opsi lain yang tersedia, dan beberapa yang penting dijelaskan di bawah ini

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 sekantong kata-kata berkelanjutan. Kami telah membahas ini secara rinci di atas.

Hs: Jika ini adalah 1 maka kami menggunakan softmax hierarki untuk pelatihan dan jika 0 maka pengambilan sampel negatif digunakan.

Alpha: Kecepatan pembelajaran awal

Mari kita tampilkan kode terakhir di bawah ini

#list of libraries used by the codeimport stringfrom gensim.models import Word2Vecimport loggingfrom nltk.corpus import stopwordsfrom textblob import Wordimport jsonimport pandas as pd#data in json formatjson_file = 'intents.json'with open('intents.json','r') as f:data = json.load(f)#displaying the list of stopwordsstop = stopwords.words('english')#dataframedf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)# print(df['patterns'])#print(df['patterns'])#cleaning the data using the NLP approachprint(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 listbigger_list=[]for i in df['patterns']:li = list(i.split(" "))bigger_list.append(li)#structure of data to be taken by the model.word2vecprint("Data format for the overall list:",bigger_list)#custom data is fed to machine for further processingmodel = Word2Vec(bigger_list, min_count=1,size=300,workers=4)#print(model)

Langkah 4) Model hemat

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-kata yang mirip, kata-kata yang berbeda, dan kata-kata yang paling umum.

Langkah 5) Memuat model dan melakukan pengujian waktu nyata

Model dimuat menggunakan kode di bawah ini

model = Word2Vec.load('model.bin')

Jika Anda ingin mencetak kosakata dari itu 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 yang paling mirip

Mari kita terapkan semuanya 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 dari kata-kata yang diberikan

dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())print(dissimlar_words)

Kami telah menyediakan kata-kata 'Sampai jumpa lagi, terima kasih telah berkunjung'. Ini akan mencetak 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 kesamaan 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 di atas adalah seperti di bawah 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 arti serupa dipahami oleh algoritme pembelajaran mesin
  • Penyematan Kata digunakan untuk menghitung kata-kata yang mirip, Membuat sekelompok kata terkait, Fitur untuk klasifikasi teks, Pengelompokan dokumen, Pemrosesan bahasa alami
  • 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 penempatan dilakukan sedemikian rupa sehingga kata-kata yang memiliki makna serupa muncul bersama-sama dan kata-kata yang berbeda terletak jauh.
  • Word2vec menggunakan 2 arsitektur Continuous Bag of words (CBOW) dan skip gram
  • CBOW beberapa kali lebih cepat daripada melewatkan gram dan memberikan frekuensi yang lebih baik untuk kata-kata yang sering, sedangkan skip gram membutuhkan sedikit data pelatihan dan bahkan mewakili kata-kata atau frase langka.
  • NLTK dan word2vec dapat digunakan bersama untuk membuat aplikasi yang kuat
  • Fungsi aktivasi neuron menentukan keluaran dari neuron yang diberi serangkaian masukan. Di word2vec. Softmax Layer (fungsi eksponensial yang dinormalisasi) adalah fungsi lapisan keluaran yang mengaktifkan atau mengaktifkan setiap node. Word2vec juga menyediakan sampel negatif
  • Gensim adalah toolkit pemodelan topik yang diimplementasikan dalam python