Tutorial Penyematan Kata: word2vec menggunakan Gensim (CONTOH)

Isi kandungan:

Anonim

Apa itu Word Embedding?

Word Embedding adalah sejenis perwakilan kata yang membolehkan kata-kata dengan makna serupa difahami oleh algoritma pembelajaran mesin. Secara teknikal, ini adalah pemetaan kata menjadi vektor angka nyata menggunakan rangkaian saraf, model probabilistik, atau pengurangan dimensi pada matriks kejadian bersama kata. Ini adalah pemodelan bahasa dan teknik pembelajaran ciri. Penyematan kata adalah cara untuk melakukan pemetaan menggunakan jaringan saraf. Terdapat pelbagai model penyematan kata yang tersedia seperti word2vec (Google), Glove (Stanford) dan terpantas (Facebook).

Word Embedding juga disebut sebagai model semantik diedarkan atau diedarkan diwakili atau semantik ruang vektor atau model ruang vektor. Semasa anda membaca nama-nama ini, anda menjumpai kata semantik yang bermaksud mengkategorikan kata-kata serupa. Contohnya buah-buahan seperti epal, mangga, pisang harus diletakkan dekat sedangkan buku akan jauh dari perkataan ini. Dalam pengertian yang lebih luas, penyisipan kata akan membuat vektor buah-buahan yang akan ditempatkan jauh dari representasi buku vektor.

Dalam tutorial ini, anda akan belajar

  • Apa itu Word Embedding?
  • Di manakah Word Embedding digunakan?
  • Apa itu word2vec?
  • Apa kata wordveve?
  • Mengapa Word2vec?
  • Senibina Word2vec
  • Beg Perkataan Berterusan.
  • Skip-Gram Model
  • Hubungan antara Word2vec dan NLTK
  • Pengaktif dan Word2Vec
  • Apa itu Gensim?
  • Pelaksanaan Kod word2vec menggunakan Gensim

Di manakah Word Embedding digunakan?

Penyematan kata membantu dalam pembuatan ciri, pengelompokan dokumen, klasifikasi teks, dan tugas memproses bahasa semula jadi. Mari kita senaraikannya dan perbincangan mengenai setiap aplikasi ini.

  • Kira perkataan serupa: Penyematan kata digunakan untuk mencadangkan kata yang serupa dengan perkataan yang dijadikan model ramalan. Bersamaan dengan itu ia juga menunjukkan kata-kata yang tidak serupa, dan juga kata-kata yang paling umum.
  • Buat sekumpulan kata-kata yang berkaitan: Ia digunakan untuk pengelompokan semantik yang akan mengelompokkan perkara-perkara yang mempunyai ciri-ciri serupa dan berbeza jauh.
  • Ciri untuk klasifikasi teks: Teks dipetakan ke dalam susunan vektor yang dimasukkan ke model untuk latihan dan juga ramalan. Model pengkelasan berdasarkan teks tidak dapat dilatih pada rentetan, jadi ini akan mengubah teks menjadi bentuk yang dapat dilatih mesin. Lebih jauh lagi, ciri-ciri membina pertolongan semantik dalam pengkelasan berdasarkan teks.
  • Penggabungan dokumen adalah aplikasi lain di mana penyisipan kata banyak digunakan
  • Pemprosesan bahasa semula jadi: Terdapat banyak aplikasi di mana penyisipan kata berguna dan memenangi fasa pengekstrakan ciri seperti bahagian penandaan ucapan, analisis sentimental, dan analisis sintaksis.

    Sekarang kita mendapat pengetahuan mengenai penyisipan kata. Beberapa cahaya juga dilemparkan pada model yang berbeza untuk melaksanakan penyisipan kata. Keseluruhan tutorial ini difokuskan pada salah satu model (word2vec).

Apa itu word2vec?

Word2vec adalah teknik / model untuk menghasilkan penyisipan kata untuk perwakilan kata yang lebih baik. Ini menangkap sebilangan besar hubungan kata sintaksis dan semantik. Ia adalah rangkaian saraf dua lapisan yang cetek. Sebelum melangkah lebih jauh, sila lihat perbezaan antara rangkaian saraf dangkal dan dalam:

Rangkaian neural dangkal terdiri daripada satu-satunya lapisan tersembunyi antara input dan output sedangkan jaringan neural mendalam mengandungi beberapa lapisan tersembunyi antara input dan output. Input dikenakan nod sedangkan lapisan tersembunyi, serta lapisan output, mengandungi neuron.

Gambar: Pembelajaran cetek berbanding mendalam

word2vec adalah rangkaian dua lapisan di mana terdapat input satu lapisan tersembunyi dan output.

Word2vec dikembangkan oleh sekumpulan penyelidik yang diketuai oleh Tomas Mikolov di Google. Word2vec lebih baik dan lebih efisien daripada model analisis semantik laten.

Apa kata wordveve?

Word2vec mewakili perkataan dalam perwakilan ruang vektor. Kata-kata dilambangkan dalam bentuk vektor dan penempatan dilakukan sedemikian rupa sehingga kata-kata makna yang serupa muncul bersama-sama dan kata-kata yang tidak sama terletak jauh. Ini juga disebut sebagai hubungan semantik. Rangkaian saraf tidak memahami teks sebaliknya mereka hanya memahami nombor. Word Embedding menyediakan cara untuk menukar teks menjadi vektor angka.

Word2vec menyusun semula konteks kata bahasa. Sebelum melangkah lebih jauh mari kita fahami, apa konteks linguistik? Dalam senario kehidupan umum ketika kita bercakap atau menulis untuk berkomunikasi, orang lain cuba mengetahui apakah objektif ayat tersebut. Sebagai contoh, "Berapakah suhu India", di sini konteksnya ialah pengguna ingin mengetahui "suhu India" yang merupakan konteks. Ringkasnya, objektif utama ayat adalah konteks. Kata atau ayat di sekitar bahasa lisan atau tulisan (pengungkapan) membantu dalam menentukan makna konteks. Word2vec mempelajari perwakilan vektor kata melalui konteks.

Mengapa Word2vec?

Sebelum Penyematan Kata

Penting untuk mengetahui pendekatan mana yang digunakan sebelum penyisipan kata dan apa kekurangannya dan kemudian kita akan beralih ke topik bagaimana kemerosotan diatasi dengan penyisipan Word menggunakan pendekatan word2vec. Akhirnya, kita akan bergerak bagaimana word2vec berfungsi kerana penting untuk memahami ia berfungsi.

Pendekatan untuk Analisis Semantik Laten

Ini adalah pendekatan yang digunakan sebelum penyisipan kata. Ia menggunakan konsep beg kata di mana perkataan diwakili dalam bentuk vektor yang dikodkan. Ini adalah representasi vektor yang jarang di mana dimensinya sama dengan ukuran perbendaharaan kata. Sekiranya perkataan itu berlaku dalam kamus, ia akan dihitung, jika tidak. Untuk memahami lebih lanjut, sila lihat program di bawah.

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())

Pengeluaran:

[[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 Kod

  1. CountVectorizer adalah modul yang digunakan untuk menyimpan perbendaharaan kata berdasarkan pemasangan kata-kata di dalamnya. Ini diimport dari sklearn
  2. Buat objek menggunakan kelas CountVectorizer.
  3. Tuliskan data dalam senarai yang akan dipasang di CountVectorizer.
  4. Data sesuai dengan objek yang dibuat dari kelas CountVectorizer.
  5. Terapkan pendekatan kata untuk menghitung perkataan dalam data menggunakan perbendaharaan kata. Sekiranya kata atau token tidak tersedia dalam perbendaharaan kata, maka kedudukan indeks tersebut ditetapkan ke sifar.
  6. Pemboleh ubah dalam baris 5 yang x ditukarkan kepada larik (kaedah tersedia untuk x). Ini akan memberikan jumlah setiap token dalam ayat atau senarai yang disediakan di Baris 3.
  7. Ini akan menunjukkan ciri-ciri yang merupakan sebahagian daripada perbendaharaan kata ketika dipasang menggunakan data di Baris 4.

Dalam pendekatan Latent Semantic, baris mewakili kata-kata yang unik sedangkan lajur mewakili berapa kali kata itu muncul dalam dokumen. Ia adalah representasi kata-kata dalam bentuk matriks dokumen. Frekuensi dokumen terbalik-Frekuensi Istilah (TFIDF) digunakan untuk menghitung frekuensi kata dalam dokumen yang merupakan frekuensi istilah dalam dokumen / frekuensi istilah di seluruh korpus.

Kekurangan kaedah Bag of Words

  • Ini mengabaikan susunan kata, misalnya, ini buruk = buruk ini.
  • Ia mengabaikan konteks kata-kata. Katakanlah jika saya menulis ayat "Dia suka buku. Pendidikan paling banyak terdapat dalam buku". Ini akan menghasilkan dua vektor satu untuk "Dia suka buku" dan yang lain untuk "Pendidikan paling banyak terdapat dalam buku." Ini akan memperlakukan kedua-duanya secara ortogonal yang menjadikan mereka bebas, tetapi pada hakikatnya, mereka saling berkaitan

Untuk mengatasi keterbatasan ini penyisipan kata dikembangkan dan word2vec adalah pendekatan untuk melaksanakannya.

Bagaimana Word2vec berfungsi?

Word2vec mempelajari perkataan dengan meramalkan konteks sekitarnya. Sebagai contoh, mari kita ambil perkataan "Dia suka Bola Sepak."

Kami mahu mengira word2vec untuk perkataan: love.

Andaikan

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 atas setiap perkataan di korpus. Sintaksis dan hubungan Semantik antara kata dikodkan. Ini membantu dalam mencari kata yang serupa dan analogi.

Semua ciri rawak kata suka dikira. Ciri-ciri ini diubah atau dikemas kini mengenai kata-kata tetangga atau konteks dengan bantuan kaedah penyebaran belakang.

Kaedah pembelajaran lain adalah bahawa jika konteks dua perkataan serupa atau dua perkataan mempunyai ciri yang serupa, maka kata-kata seperti itu berkaitan.

Senibina Word2vec

Terdapat dua seni bina yang digunakan oleh word2vec

  1. Beg perkataan berterusan (CBOW)
  2. langkau gram

Sebelum melangkah lebih jauh, mari kita bincangkan mengapa seni bina atau model ini penting dari sudut pandang perwakilan kata. Perwakilan kata pembelajaran pada dasarnya tidak diawasi, tetapi sasaran / label diperlukan untuk melatih model. Skip-gram dan CBOW menukar perwakilan yang tidak diawasi menjadi bentuk yang diawasi untuk latihan model.

Di CBOW, kata semasa diramalkan menggunakan tetingkap tetingkap konteks. Contohnya, 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 menunjukkan kebalikan dari CBOW yang menunjukkan bahawa ia meramalkan urutan atau konteks yang diberikan dari perkataan. Anda boleh membalikkan contoh untuk memahaminya. Sekiranya w i diberikan, ini akan meramalkan konteks atau w i-1 , w i-2 , w i + 1 , w i + 2.

Word2vec memberikan pilihan untuk memilih antara CBOW (beg perkataan berterusan) dan skim-gram. Parameter seperti itu diberikan semasa latihan model. Seseorang boleh mempunyai pilihan untuk menggunakan pensampelan negatif atau lapisan softmax hierarki.

Beg Perkataan Berterusan.

Mari kita lukis gambarajah ringkas untuk memahami seni bina perkataan yang berterusan.

Gambar Beg Seni Bina Kata Berterusan

Mari kita mengira persamaannya secara matematik. Katakan V adalah ukuran perbendaharaan kata dan N adalah ukuran lapisan tersembunyi. Input ditakrifkan sebagai {x i-1 , x i-2, x i + 1, x i + 2 }. Kami memperoleh matriks berat dengan mengalikan V * N. Matriks lain diperoleh dengan mengalikan vektor input dengan matriks berat. Ini juga dapat difahami dengan persamaan berikut.

h = xi t W

di mana xi t ∧ W adalah vektor input dan matriks berat masing-masing,

Untuk mengira padanan antara konteks dan kata seterusnya, sila rujuk persamaan di bawah

u = penyampaian ramalan * h

di mana peramalan diramalkan diperoleh model∧h dalam persamaan di atas.

Skip-Gram Model

Pendekatan Skip-Gram digunakan untuk meramalkan ayat yang diberi kata input. Untuk memahaminya dengan lebih baik mari kita lukis rajah.

Gambar Skip-Gram Model

Seseorang boleh menganggapnya sebagai kebalikan dari model kata berterusan yang mana inputnya adalah kata dan model menyediakan konteks atau urutan. Kita juga dapat menyimpulkan bahawa sasaran dimasukkan ke lapisan input dan output ditiru berkali-kali untuk mengakomodasi jumlah kata konteks yang dipilih. Vektor ralat dari semua lapisan output dijumlahkan untuk menyesuaikan berat melalui kaedah backpropagation.

Model mana yang hendak dipilih?

CBOW beberapa kali lebih cepat daripada langkau gram dan memberikan frekuensi yang lebih baik untuk kata-kata yang kerap sedangkan langkau gram memerlukan sedikit data latihan dan mewakili kata atau frasa yang jarang berlaku.

Hubungan antara Word2vec dan NLTK

NLTK adalah toolkit Bahasa semula jadi. Ia digunakan untuk memproses teks. Seseorang boleh melakukan operasi yang berbeza seperti bahagian penandaan ucapan, lemmatizing, stemming, menghentikan penghapusan kata-kata, mengeluarkan kata-kata yang jarang berlaku atau perkataan yang paling jarang digunakan. Ia membantu membersihkan teks dan juga membantu menyiapkan ciri-ciri dari perkataan yang berkesan. Dengan cara lain, word2vec digunakan untuk pencocokan semantik (item yang berkait rapat) dan sintaksis (urutan). Dengan menggunakan word2vec, seseorang dapat menemui kata-kata yang serupa, perkataan yang tidak serupa, pengurangan dimensi, dan banyak lagi yang lain. Ciri penting lain dari word2vec adalah menukar representasi dimensi teks yang lebih tinggi menjadi vektor dimensi yang lebih rendah.

Di mana untuk menggunakan NLTK dan Word2vec?

Sekiranya seseorang harus menyelesaikan beberapa tugas tujuan umum seperti yang disebutkan di atas seperti tokenization, POS taging dan parsing seseorang mesti menggunakan NLTK sedangkan untuk meramalkan kata-kata sesuai dengan beberapa konteks, pemodelan topik, atau kesamaan dokumen seseorang harus menggunakan Word2vec.

Hubungan NLTK dan Word2vec dengan bantuan kod

NLTK dan Word2vec dapat digunakan bersama untuk mencari perwakilan kata yang serupa atau padanan sintaksis. Toolkit NLTK dapat digunakan untuk memuat banyak paket yang disertakan dengan NLTK dan model dapat dibuat menggunakan word2vec. Ia kemudian dapat diuji berdasarkan kata-kata masa nyata. Mari kita lihat gabungan keduanya dalam kod berikut. Sebelum memproses lebih lanjut, lihat corpora yang disediakan oleh NLTK. Anda boleh memuat turun menggunakan arahan

nltk(nltk.download('all'))

Gambar Corpora yang dimuat turun menggunakan NLTK

Sila lihat tangkapan skrin untuk kod.

import nltkimport gensimfrom nltk.corpus import abcmodel= gensim.models.Word2Vec(abc.sents())X= list(model.wv.vocab)data=model.most_similar('science')print(data)

Pengeluaran:

[('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 Kod

  1. perpustakaan nltk diimport dari mana anda boleh memuat turun corcus abc yang akan kami gunakan pada langkah seterusnya.
  2. Gensim diimport. Sekiranya Gensim tidak dipasang, sila pasang dengan menggunakan perintah "pip3 install gensim". Sila lihat tangkapan skrin di bawah.

Gambar Memasang Gensim menggunakan PIP

  1. import corpus abc yang telah dimuat turun menggunakan nltk.download ('abc').
  2. Hantarkan fail ke word2vec model yang diimport menggunakan Gensim sebagai ayat.
  3. Perbendaharaan kata disimpan dalam bentuk pemboleh ubah.
  4. Model diuji pada contoh sains kata kerana fail-fail ini berkaitan dengan sains.
  5. Di sini perkataan serupa "sains" diramalkan oleh model.

Pengaktif dan Word2Vec

Fungsi pengaktifan neuron menentukan output neuron yang diberi satu set input. Diilhamkan secara biologi oleh aktiviti di otak kita di mana pelbagai neuron diaktifkan menggunakan rangsangan yang berbeza. Mari kita fahami fungsi pengaktifan melalui rajah berikut.

Rajah Memahami fungsi Pengaktifan

Di sini x1, x2,… x4 adalah simpul rangkaian saraf.

w1, w2, w3 adalah berat nod,

∑ adalah penjumlahan semua nilai berat dan simpul yang berfungsi sebagai fungsi pengaktifan.

Mengapa Pengaktifan berfungsi?

Sekiranya tidak ada fungsi pengaktifan, output akan linier tetapi fungsi fungsi linier terbatas. Untuk mencapai fungsi yang kompleks seperti pengesanan objek, klasifikasi gambar, mengetik teks menggunakan suara dan banyak output tidak linier lain diperlukan yang dicapai dengan menggunakan fungsi pengaktifan.

Bagaimana lapisan pengaktifan dihitung dalam penyisipan kata (word2vec)

Softmax Layer (fungsi eksponensial dinormalisasi) adalah fungsi lapisan output yang mengaktifkan atau menghidupkan setiap nod. Pendekatan lain yang digunakan adalah Softmax Hierarki di mana kerumitan dikira oleh O (log 2 V) di mana softmax itu adalah O (V) di mana V adalah ukuran perbendaharaan kata. Perbezaan antara ini adalah pengurangan kerumitan dalam lapisan softmax hierarki. Untuk memahami fungsi (Hierarki softmax), sila lihat contoh di bawah:

Rajah Hirarki pohon softmax seperti struktur

Andaikan kita mahu mengira kebarangkalian untuk memerhatikan kata cinta yang diberikan dalam konteks tertentu. Aliran dari akar ke simpul daun akan menjadi langkah pertama ke simpul 2 dan kemudian ke simpul 5. Oleh itu, jika kita mempunyai ukuran perbendaharaan kata 8, hanya diperlukan tiga pengiraan. Oleh itu ia membolehkan penguraian, pengiraan kebarangkalian satu kata ( cinta ).

Apa pilihan lain yang ada selain daripada Hierarchical Softmax?

Sekiranya berbicara dalam pengertian umum untuk pilihan penyisipan kata yang tersedia adalah Softmax dibezakan, CNN-Softmax, Pensampelan Kepentingan, persampelan Kepentingan Adaptif, Anggaran Kontras Kebisingan, Persampelan Negatif, Normalisasi Diri, dan Normalisasi jarang.

Bercakap secara khusus mengenai Word2vec, kami mempunyai persampelan negatif.

Pensampelan Negatif adalah cara untuk mengambil sampel data latihan. Ia seperti keturunan kecerunan stokastik, tetapi dengan sedikit perbezaan. Persampelan negatif hanya mencari contoh latihan negatif. Ini berdasarkan perkiraan kontras kebisingan dan sampel kata secara rawak, bukan dalam konteks. Ini adalah kaedah latihan yang pantas dan memilih konteks secara rawak. Sekiranya perkataan yang diramalkan muncul dalam konteks yang dipilih secara rawak kedua-dua vektor saling berdekatan.

Apa kesimpulan yang dapat diambil?

Pengaktif menembak neuron seperti neuron kita ditembak menggunakan rangsangan luaran. Lapisan Softmax adalah salah satu fungsi lapisan output yang menembakkan neuron sekiranya berlaku penyisipan kata. Dalam word2vec kita mempunyai pilihan seperti softmax hierarki dan persampelan negatif. Dengan menggunakan pengaktif, seseorang dapat mengubah fungsi linier menjadi fungsi nonlinier, dan algoritma pembelajaran mesin yang kompleks dapat dilaksanakan dengan menggunakan fungsi tersebut.

Apa itu Gensim?

Gensim adalah toolkit pemodelan topik yang dilaksanakan di python. Pemodelan topik adalah menemui struktur tersembunyi di badan teks. Word2vec diimport dari toolkit Gensim. Harap maklum bahawa Gensim tidak hanya menyediakan implementasi word2vec tetapi juga Doc2vec dan FastText tetapi tutorial ini adalah mengenai word2vec jadi kami akan berpegang pada topik semasa.

Pelaksanaan word2vec menggunakan Gensim

Hingga kini kita telah membincangkan apa itu word2vec, arsitekturnya yang berbeza, mengapa ada peralihan dari sekumpulan kata ke word2vec, hubungan antara word2vec dan NLTK dengan fungsi kod langsung dan fungsi pengaktifan. Pada bahagian ini, akan melaksanakan word2vec menggunakan Gensim

Langkah 1) Pengumpulan Data

Langkah pertama untuk melaksanakan mana-mana model pembelajaran mesin atau melaksanakan pemprosesan bahasa semula jadi adalah pengumpulan data

Perhatikan data untuk membina chatbot pintar.

[{"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 fahami dari data

  • Data ini mengandungi tiga perkara, corak, dan respons. Tag adalah maksud (apakah topik perbincangan).
  • Data dalam format JSON.
  • Corak adalah soalan yang akan diajukan pengguna ke bot
  • Respons adalah jawapan yang akan diberikan oleh chatbot kepada soalan / corak yang sesuai.

Langkah 2) Pemprosesan data.

Sangat penting untuk memproses data mentah. Sekiranya data yang dibersihkan dimasukkan ke mesin, maka model akan bertindak balas dengan lebih tepat dan akan mempelajari data dengan lebih cekap.

Langkah ini melibatkan penghapusan kata berhenti, pangkal, kata-kata yang tidak perlu, dan lain-lain. Sebelum meneruskan, penting untuk memuatkan data dan mengubahnya menjadi kerangka data. Sila lihat kod di bawah ini

import jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)

Penjelasan KOD.

  1. Oleh kerana data dalam bentuk format json maka json diimport
  2. Fail disimpan dalam pemboleh ubah
  3. Fail dibuka dan dimuat dalam pemboleh ubah data

Sekarang data diimport dan sudah waktunya untuk mengubah data menjadi kerangka data. Sila lihat kod di bawah untuk melihat langkah seterusnya

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

Penjelasan KOD

1. Data diubah menjadi kerangka data menggunakan panda yang diimpor di atas.

2. Ia akan menukar senarai dalam corak lajur menjadi rentetan.

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 Kod

1. Kata berhenti Bahasa Inggeris diimport menggunakan modul kata berhenti dari nltk toolkit

2. Semua perkataan teks diubah menjadi huruf kecil menggunakan fungsi keadaan dan lambda. Fungsi lambda adalah fungsi tanpa nama.

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

4. Karakter seperti angka atau titik dikeluarkan menggunakan ungkapan biasa.

5. Digit dikeluarkan dari teks.

6. Kata berhenti dikeluarkan pada tahap ini.

7. Kata-kata disaring sekarang, dan bentuk yang berbeza dari kata yang sama dikeluarkan menggunakan lemmatisasi. Dengan ini, kami telah selesai memproses data.

Pengeluaran:

, 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) Pembinaan Rangkaian Neural menggunakan word2vec

Kini tiba masanya untuk membina model menggunakan modul Gensim word2vec. Kita mesti mengimport word2vec dari Gensim. Mari kita lakukan ini, dan kemudian kita akan membina dan pada peringkat akhir kita akan memeriksa model pada data masa nyata.

from gensim.models import Word2Vec

Sekarang, kita berjaya membina model menggunakan Word2Vec. Sila rujuk baris kod seterusnya untuk mempelajari cara membuat model menggunakan Word2Vec. Teks diberikan kepada model dalam bentuk daftar sehingga kami akan mengubah teks dari bingkai data menjadi daftar menggunakan kod 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 Kod

1. Membuat senarai_ besar di mana senarai dalaman dilampirkan. Ini adalah format yang dimasukkan ke model Word2Vec.

2. Gelung dilaksanakan, dan setiap entri lajur corak kerangka data diulang.

3. Setiap elemen corak lajur dibahagi dan disimpan dalam senarai dalaman li

4. Senarai dalaman dilampirkan dengan senarai luar.

5. Senarai ini disediakan untuk model Word2Vec. Mari kita fahami beberapa parameter yang disediakan di sini

Min_count: Ini akan mengabaikan semua perkataan dengan jumlah frekuensi lebih rendah daripada ini.

Ukuran: Ia menceritakan dimensi vektor perkataan.

Pekerja: Ini adalah utas untuk melatih model

Terdapat juga pilihan lain yang tersedia, dan beberapa yang penting dijelaskan di bawah

Tetingkap: Jarak maksimum antara kata semasa dan ramalan dalam ayat.

Sg: Ini adalah algoritma latihan dan 1 untuk skip-gram dan 0 untuk beg perkataan Berterusan. Kami telah membincangkannya secara terperinci di atas.

Hs: Jika ini adalah 1 maka kita menggunakan softmax hierarki untuk latihan dan jika 0 maka persampelan negatif digunakan.

Alpha: Kadar pembelajaran awal

Mari kita paparkan kod akhir di bawah

#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) Penjimatan model

Model boleh disimpan dalam bentuk tong sampah dan bentuk model. Bin adalah format binari. Sila lihat garis bawah untuk menyimpan model

model.save("word2vec.model")model.save("model.bin")

Penjelasan kod di atas

1. Model disimpan dalam bentuk fail .model.

2. model disimpan dalam bentuk fail .bin

Kami akan menggunakan model ini untuk melakukan ujian masa nyata seperti kata-kata serupa, kata-kata yang tidak serupa, dan kata yang paling umum.

Langkah 5) Memuatkan model dan melakukan ujian masa nyata

Model dimuat menggunakan kod di bawah

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

Sekiranya anda ingin mencetak perbendaharaan kata daripadanya dilakukan dengan menggunakan perintah di bawah

vocab = senarai (model.wv.vocab)

Sila 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) Periksa perkataan yang serupa

Marilah kita melaksanakan perkara-perkara secara praktikal

similar_words = model.most_similar('thanks')print(similar_words)

Sila 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 sesuai dengan perkataan dari perkataan yang disediakan

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

Kami telah memberikan perkataan 'Sampai jumpa lagi, terima kasih kerana berkunjung' Ini akan mencetak perkataan yang paling berbeza dari kata-kata ini. Mari kita jalankan kod ini dan cari hasilnya

Hasilnya setelah pelaksanaan kod di atas.

Thanks

Langkah 8) Mencari persamaan antara dua perkataan

Ini akan menunjukkan kemungkinan kebarangkalian persamaan antara dua perkataan. Sila lihat kod di bawah ini bagaimana melaksanakan bahagian ini.

similarity_two_words = model.similarity('please','see')print("Please provide the similarity between these two words:")print(similarity_two_words)

Hasil kod di atas adalah seperti di bawah

0.13706

Anda boleh mendapatkan perkataan serupa dengan melaksanakan kod di bawah

similar = model.similar_by_word('kind')print(similar)

Keluaran kod 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)]

Kesimpulannya

  • Word Embedding adalah sejenis perwakilan kata yang membolehkan kata-kata dengan makna serupa difahami oleh algoritma pembelajaran mesin
  • Word Embedding digunakan untuk menghitung kata yang serupa, Membuat sekumpulan kata yang berkaitan, Fitur untuk klasifikasi teks, Penggabungan dokumen, Pemrosesan bahasa semula jadi
  • Word2vec adalah model rangkaian saraf dua tingkat yang cetek untuk menghasilkan penyisipan kata untuk perwakilan kata yang lebih baik
  • Word2vec mewakili perkataan dalam perwakilan ruang vektor. Kata-kata dilambangkan dalam bentuk vektor dan penempatan dilakukan sedemikian rupa sehingga kata-kata makna yang serupa muncul bersama-sama dan kata-kata yang tidak sama terletak jauh
  • Word2vec menggunakan 2 seni bina Continuous Bag of words (CBOW) dan skip gram
  • CBOW beberapa kali lebih cepat daripada langkau gram dan memberikan frekuensi yang lebih baik untuk kata-kata yang kerap sedangkan langkau gram memerlukan sedikit data latihan dan mewakili kata atau frasa yang jarang berlaku.
  • NLTK dan word2vec dapat digunakan bersama untuk membuat aplikasi yang hebat
  • Fungsi pengaktifan neuron menentukan output neuron yang diberi satu set input. Dalam perkataan2vec. Softmax Layer (fungsi eksponensial dinormalisasi) adalah fungsi lapisan output yang mengaktifkan atau menghidupkan setiap nod. Word2vec juga mempunyai persampelan negatif
  • Gensim adalah toolkit pemodelan topik yang dilaksanakan di python