Kelime Gömme Eğitimi: Gensim kullanarak word2vec (ÖRNEK)

İçindekiler:

Anonim

Kelime Gömme nedir?

Kelime Gömme, benzer anlamdaki kelimelerin makine öğrenme algoritmaları tarafından anlaşılmasına izin veren bir tür kelime temsilidir. Teknik olarak konuşursak, sinir ağını, olasılık modelini veya kelime birlikte oluşum matrisinde boyut indirgemesini kullanarak kelimelerin gerçek sayıların vektörlerine eşleştirilmesidir. Dil modelleme ve özellik öğrenme tekniğidir. Kelime gömme, bir sinir ağı kullanarak haritalama yapmanın bir yoludur. Word2vec (Google), Glove (Stanford) ve fastest (Facebook) gibi çeşitli kelime gömme modelleri mevcuttur.

Kelime Gömme ayrıca dağıtılmış anlamsal model veya dağıtılmış temsil edilen veya anlamsal vektör uzayı veya vektör uzayı modeli olarak da adlandırılır. Bu isimleri okurken, benzer kelimeleri birlikte kategorize etmek anlamına gelen anlamsal kelimeyle karşılaşırsınız. Örneğin elma, mango, muz gibi meyveler yan yana konulmalı, kitaplar ise bu kelimelerden uzak olacaktır. Daha geniş anlamda, kelime gömme, kitapların vektör temsilinden uzağa yerleştirilecek meyvelerin vektörünü yaratacaktır.

Bu eğitimde öğreneceksiniz

  • Kelime Gömme nedir?
  • Kelime Gömme nerede kullanılır?
  • Word2vec nedir?
  • Word2vec ne yapar?
  • Neden Word2vec?
  • Word2vec Mimarisi
  • Sürekli Kelime Çantası.
  • Skip-Gram Modeli
  • Word2vec ve NLTK arasındaki ilişki
  • Aktivatörler ve Word2Vec
  • Gensim nedir?
  • Gensim kullanarak word2vec'in Kod Uygulaması

Kelime Gömme nerede kullanılır?

Kelime gömme, özellik oluşturma, belge kümeleme, metin sınıflandırması ve doğal dil işleme görevlerinde yardımcı olur. Bunları listeleyelim ve bu uygulamaların her biri hakkında biraz tartışalım.

  • Benzer kelimeleri hesaplayın: Kelime gömme, tahmin modeline tabi olan kelimeye benzer kelimeler önermek için kullanılır. Bununla birlikte, en yaygın sözcüklerin yanı sıra farklı sözcükleri de önerir.
  • Bir grup ilişkili kelime oluşturun: Benzer özellikteki şeyleri bir arada ve farklı olmayan şeyleri bir arada gruplandıracak anlamsal gruplama için kullanılır.
  • Metin sınıflandırması özelliği: Metin, eğitim ve tahmin için modele beslenen vektör dizilerine eşlenir. Metin tabanlı sınıflandırıcı modelleri dize üzerinde eğitilemez, bu nedenle bu, metni makine tarafından eğitilebilir forma dönüştürür. Ayrıca, metin tabanlı sınıflandırmada anlamsal yardım oluşturma özellikleri.
  • Belge kümeleme , kelime katıştırmanın yaygın olarak kullanıldığı başka bir uygulamadır
  • Doğal dil işleme: Kelime gömme işleminin yararlı olduğu ve konuşma etiketleme, duygusal analiz ve sözdizimsel analiz gibi özellik çıkarma aşamalarını kazandığı birçok uygulama vardır.

    Artık kelime yerleştirme konusunda biraz bilgimiz var. Kelime yerleştirmeyi uygulamak için farklı modellere de biraz ışık atılır. Bu eğitimin tamamı modellerden birine (word2vec) odaklanmıştır.

Word2vec nedir?

Word2vec, daha iyi kelime temsili için kelime gömme üretme tekniği / modelidir. Çok sayıda kesin sözdizimsel ve anlamsal kelime ilişkisini yakalar. Sığ, iki katmanlı bir sinir ağıdır. Daha ileri gitmeden önce lütfen sığ ve derin sinir ağı arasındaki farkı görün:

Sığ sinir ağı, giriş ve çıkış arasında yalnızca gizli bir katmandan oluşurken, derin sinir ağı, giriş ve çıkış arasında çok sayıda gizli katman içerir. Giriş, düğümlere maruz kalırken, gizli katman ve çıktı katmanı nöronlar içerir.

Şekil: Sığ ve Derin Öğrenme

word2vec, bir gizli katman girişi ve çıkışı olan iki katmanlı bir ağdır.

Word2vec, Google'dan Tomas Mikolov başkanlığındaki bir grup araştırmacı tarafından geliştirilmiştir. Word2vec, gizli anlamsal analiz modelinden daha iyi ve daha verimlidir.

Word2vec ne yapar?

Word2vec, vektör alanı gösterimindeki kelimeleri temsil eder. Kelimeler vektörler şeklinde temsil edilir ve yerleştirme, benzer anlam kelimelerinin bir arada görüneceği ve farklı kelimelerin uzağa yerleştirileceği şekilde yapılır. Bu aynı zamanda anlamsal bir ilişki olarak da adlandırılır. Sinir ağları metni anlamaz, bunun yerine yalnızca sayıları anlar. Kelime Katıştırma, metni sayısal bir vektöre dönüştürmek için bir yol sağlar.

Word2vec, kelimelerin dilsel bağlamını yeniden yapılandırır. Daha ileri gitmeden önce dilbilimsel bağlamın ne olduğunu anlayalım. Genel yaşam senaryosunda, iletişim kurmak için konuştuğumuzda veya yazdığımızda, diğer insanlar cümlenin amacının ne olduğunu anlamaya çalışırlar. Örneğin, "Hindistan'ın sıcaklığı nedir", buradaki bağlam, kullanıcının bağlam olan "Hindistan'ın sıcaklığını" bilmek istemesidir. Kısacası, bir cümlenin temel amacı bağlamdır. Sözlü veya yazılı dili çevreleyen kelime veya cümle (açıklama), bağlamın anlamını belirlemede yardımcı olur. Word2vec, bağlamlar aracılığıyla kelimelerin vektör temsilini öğrenir.

Neden Word2vec?

Word Gömmeden Önce

Kelime yerleştirmeden önce hangi yaklaşımın kullanıldığını ve sakıncalarının neler olduğunu bilmek önemlidir ve ardından word2vec yaklaşımını kullanarak Word gömme ile kusurların nasıl üstesinden gelineceği konusuna geçeceğiz. Son olarak, word2vec'in nasıl çalıştığını değiştireceğiz çünkü çalıştığını anlamak önemlidir.

Gizli Anlamsal Analiz Yaklaşımı

Bu, kelime yerleştirmeden önce kullanılan yaklaşımdır. Kelimelerin kodlanmış vektörler şeklinde temsil edildiği kelime Torbası kavramını kullandı. Boyutun kelime dağarcığının boyutuna eşit olduğu seyrek bir vektör temsilidir. Sözcük sözlükte geçerse sayılır, yoksa sayılmaz. Daha fazlasını anlamak için lütfen aşağıdaki programa bakın.

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

Çıktı:

[[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']

Kod Açıklama

  1. CountVectorizer, kelime haznesini, içindeki kelimelerin sığdırılmasına göre saklamak için kullanılan modüldür. Bu sklearn'dan ithal edildi
  2. CountVectorizer sınıfını kullanarak nesneyi oluşturun.
  3. CountVectorizer'a sığacak listedeki verileri yazın.
  4. Veriler, CountVectorizer sınıfından oluşturulan nesneye sığdırılır.
  5. Kelime dağarcığını kullanarak verilerdeki kelimeleri saymak için bir torba kelime yaklaşımı uygulayın. Kelime veya simge, kelime haznesinde mevcut değilse, bu tür dizin konumu sıfıra ayarlanır.
  6. 5. satırdaki x olan değişken bir diziye dönüştürülür (x için kullanılabilir yöntem). Bu, 3. Satırda verilen cümle veya listedeki her simgenin sayısını sağlayacaktır.
  7. Bu, 4. Satırdaki veriler kullanılarak yerleştirildiğinde sözlüğün bir parçası olan özellikleri gösterecektir.

Gizli Anlamsal yaklaşımda, satır benzersiz kelimeleri temsil ederken sütun, o kelimenin belgede göründüğü süreyi temsil eder. Belge matrisi biçimindeki kelimelerin temsilidir. Terim-Frekans ters belge frekansı (TFIDF), belgedeki terimin sıklığı / tüm külliyatta terimin sıklığı olan belgedeki kelimelerin sıklığını saymak için kullanılır.

Kelime Çantası yönteminin eksikliği

  • Sözcüğün sırasını görmezden gelir, örneğin, bu kötü = kötü budur.
  • Kelimelerin bağlamını görmezden geliyor. Diyelim ki "Kitapları severdi. Eğitim en iyi kitaplarda bulunur" cümlesini yazarsam. Biri "Kitapları severdi" ve diğeri "Eğitim en iyi kitaplarda bulunur" için iki vektör oluşturur. Her ikisini de dik olarak tedavi eder, bu da onları bağımsız kılar, ancak gerçekte birbirleriyle ilişkilidirler.

Bu sınırlamaların üstesinden gelmek için kelime gömme geliştirildi ve word2vec, bunu uygulamak için bir yaklaşımdır.

Word2vec nasıl çalışır?

Word2vec, çevreleyen bağlamı tahmin ederek kelimeyi öğrenir. Örneğin, " Futbolu seviyor " kelimesini alalım .

Aşk kelimesi için word2vec'i hesaplamak istiyoruz.

Varsayalım

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

Kelime külliyattaki her kelimenin üzerine yapılan hamleleri sever . Sözdizimsel ve kelimeler arasındaki anlamsal ilişki kodlanmıştır. Bu, benzer ve analoji sözcükleri bulmaya yardımcı olur.

Kelime Tüm rastgele özellikleri aşkların hesaplanır. Bu özellikler, bir geri yayılma yöntemi yardımıyla komşu veya bağlam sözcükleriyle ilgili olarak değiştirilir veya güncellenir.

Diğer bir öğrenme yolu da, iki kelimenin bağlamı benzerse veya iki kelimenin benzer özellikleri varsa, bu tür kelimelerin birbiriyle ilişkili olmasıdır.

Word2vec Mimarisi

Word2vec tarafından kullanılan iki mimari vardır

  1. Sürekli Kelime Çantası (CBOW)
  2. gram atla

Daha ileri gitmeden önce, bu mimarilerin veya modellerin kelime temsili açısından neden önemli olduğunu tartışalım. Kelime temsilini öğrenmek esasen denetimsizdir, ancak modeli eğitmek için hedeflere / etiketlere ihtiyaç vardır. Skip-gram ve CBOW, model eğitimi için denetimsiz gösterimi denetimli forma dönüştürür.

CBOW'da, mevcut kelime, çevreleyen bağlam pencerelerinin penceresi kullanılarak tahmin edilir. Örneğin, w i-1 , w i-2 , w i + 1 , w i + 2'ye kelimeler veya bağlam verilirse, bu model w i sağlayacaktır

Skip-Gram, CBOW'un tersini gerçekleştirir, bu da verilen diziyi veya bağlamı kelimeden tahmin ettiğini gösterir. Anlamak için örneği tersine çevirebilirsiniz. Eğer w i verilirse, bu bağlamı veya w i-1 , w i-2 , w i + 1 , w i + 2'yi tahmin edecektir .

Word2vec, CBOW (sürekli kelime çantası) ve skim-gram arasında seçim yapma seçeneği sunar. Bu tür parametreler modelin eğitimi sırasında sağlanır. Negatif örnekleme veya hiyerarşik softmax katmanı kullanma seçeneğine sahip olunabilir.

Sürekli Kelime Çantası.

Devam eden kelime mimarisi çantasını anlamak için basit bir şema çizelim.

Şekil Sürekli Kelime Mimarisi Çantası

Denklemleri matematiksel olarak hesaplayalım. V'nin kelime boyutu ve N'nin gizli katman boyutu olduğunu varsayalım. Giriş, {x i-1 , x i-2, x i + 1, x i + 2 } olarak tanımlanır. V * N'yi çarparak ağırlık matrisini elde ederiz. Başka bir matris, girdi vektörünün ağırlık matrisi ile çarpılmasıyla elde edilir. Bu, aşağıdaki denklem ile de anlaşılabilir.

h = xi t W

burada xi t ∧ W sırasıyla giriş vektörü ve ağırlık matrisidir,

Bağlam ve sonraki kelime arasındaki eşleşmeyi hesaplamak için lütfen aşağıdaki denkleme bakın

u = öngörülen temsil * h

öngörülen temsil elde edildiğinde yukarıdaki denklemde model∧h.

Skip-Gram Modeli

Skip-Gram yaklaşımı, bir giriş kelimesi verilen bir cümleyi tahmin etmek için kullanılır. Daha iyi anlamak için diyagramı çizelim.

Şekil Skip-Gram Modeli

Girdinin kelime olduğu ve modelin bağlamı veya sıralamayı sağladığı Sürekli kelime modeli çantasının tersi olarak ele alınabilir. Ayrıca, hedefin girişe beslendiği ve seçilen sayıda bağlam kelimesini barındırmak için çıkış katmanının birden çok kez çoğaltıldığı sonucuna varabiliriz. Tüm çıktı katmanından gelen hata vektörü, geri yayılım yöntemiyle ağırlıkları ayarlamak için toplanır.

Hangi model seçilmeli?

CBOW, gram atlamadan birkaç kat daha hızlıdır ve sık kullanılan kelimeler için daha iyi bir sıklık sağlarken, gram atlama az miktarda eğitim verisine ihtiyaç duyar ve hatta nadir kelimeleri veya cümleleri temsil eder.

Word2vec ve NLTK arasındaki ilişki

NLTK, doğal Dil araç setidir. Metnin ön işlemesi için kullanılır. Konuşma etiketleme, lemmatize etme, kök ayırma, sözcükleri kaldırmayı durdurma, nadir sözcükleri veya en az kullanılan sözcükleri kaldırma gibi farklı işlemler yapılabilir. Metnin temizlenmesine yardımcı olduğu gibi, etkili sözcüklerden özelliklerin hazırlanmasına da yardımcı olur. Diğer bir şekilde, word2vec, anlamsal (yakından ilişkili öğeler birlikte) ve sözdizimsel (sıralı) eşleştirme için kullanılır. Word2vec kullanarak, benzer sözcükler, farklı sözcükler, boyutsal küçültme ve daha pek çok şey bulunabilir. Word2vec'in bir diğer önemli özelliği, metnin yüksek boyutlu temsilini vektörlerin daha düşük boyutlu gösterimini dönüştürmesidir.

NLTK ve Word2vec nerede kullanılır?

Tokenizasyon, POS etiketleme ve ayrıştırma gibi yukarıda belirtildiği gibi bazı genel amaçlı görevleri yerine getirmek gerekiyorsa, NLTK kullanmak gerekirken, bazı bağlamlara, konu modellemesine veya belge benzerliğine göre kelimeleri tahmin etmek için Word2vec kullanılmalıdır.

NLTK ve Word2vec'in kod yardımı ile ilişkisi

NLTK ve Word2vec, benzer kelime gösterimini veya sözdizimsel eşlemeyi bulmak için birlikte kullanılabilir. NLTK araç seti, NLTK ile birlikte gelen birçok paketi yüklemek için kullanılabilir ve model word2vec kullanılarak oluşturulabilir. Daha sonra gerçek zamanlı kelimeler üzerinde test edilebilir. Aşağıdaki kodda her ikisinin kombinasyonunu görelim. Daha fazla işlem yapmadan önce, lütfen NLTK'nın sağladığı külliyatlara bir göz atın. Komutu kullanarak indirebilirsiniz

nltk(nltk.download('all'))

NLTK kullanılarak indirilen Figure Corpora

Lütfen kod için ekran görüntüsüne bakın.

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

Çıktı:

[('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)]

Kod Açıklaması

  1. Bir sonraki adımda kullanacağımız abc corpus'unu indirebileceğiniz nltk kütüphanesi içe aktarılır.
  2. Gensim ithal edilmektedir. Gensim kurulu değilse, lütfen "pip3 install gensim" komutunu kullanarak kurun. Lütfen aşağıdaki ekran görüntüsüne bakın.

Şekil PIP kullanarak Gensim'i kurma

  1. nltk.download ('abc') kullanılarak indirilen külliyat abc'yi içe aktarın.
  2. Dosyaları cümle olarak Gensim kullanılarak içe aktarılan word2vec modeline aktarın.
  3. Kelime dağarcığı değişken şeklinde saklanır.
  4. Bu dosyalar bilimle ilgili olduğu için model örnek kelime bilimi üzerinde test edilmiştir.
  5. Burada benzer "bilim" kelimesi model tarafından tahmin edilmektedir.

Aktivatörler ve Word2Vec

Nöronun aktivasyon işlevi, bir dizi girdi verilen bu nöronun çıktısını tanımlar. Beynimizdeki farklı nöronların farklı uyaranlar kullanılarak etkinleştirildiği bir faaliyetten biyolojik olarak ilham alır. Aktivasyon fonksiyonunu aşağıdaki diyagramdan anlayalım.

Şekil Etkinleştirme işlevini anlama

Burada x1, x2,… x4 sinir ağının düğümüdür.

w1, w2, w3 düğümün ağırlığıdır,

∑, aktivasyon işlevi olarak çalışan tüm ağırlık ve düğüm değerlerinin toplamıdır.

Neden Aktivasyon işlevi?

Etkinleştirme işlevi kullanılmazsa, çıktı doğrusal olur ancak doğrusal işlevin işlevselliği sınırlıdır. Nesne algılama, görüntü sınıflandırma, ses kullanarak metin yazma ve diğer birçok doğrusal olmayan çıktı gibi karmaşık işlevsellik elde etmek için, etkinleştirme işlevi kullanılarak elde edilir.

Kelime gömme işleminde aktivasyon katmanı nasıl hesaplanır (word2vec)

Softmax Katmanı (normalleştirilmiş üstel işlev), her düğümü etkinleştiren veya ateşleyen çıktı katmanı işlevidir. Kullanılan diğer bir yaklaşım, karmaşıklığın O (log 2 V) ile hesaplandığı Hiyerarşik softmax'tır; burada softmax, O (V) ve V, kelime boyutudur. Bunların arasındaki fark, hiyerarşik softmax katmanındaki karmaşıklığın azalmasıdır. (Hierarchical softmax) işlevselliğini anlamak için lütfen aşağıdaki örneğe bakın:

Şekil Hiyerarşik softmax ağaç benzeri yapı

Belirli bir bağlamda sevgi kelimesini gözlemleme olasılığını hesaplamak istediğimizi varsayalım . Kökten yaprak düğüme akış, önce düğüm 2'ye ve sonra düğüm 5'e hareket olacaktır. Dolayısıyla, eğer kelime büyüklüğü 8'e sahip olsaydık, sadece üç hesaplamaya ihtiyaç vardır. Böylece, bir kelimenin ( aşk ) olasılığının hesaplanmasına, ayrıştırılmasına izin verir .

Hierarchical Softmax dışında başka hangi seçenekler mevcuttur?

Genel anlamda kelime gömme seçenekleri mevcutsa, Farklılaştırılmış Softmax, CNN-Softmax, Önem Örnekleme, Uyarlanabilir Önem Örnekleme, Gürültü Kontrastlı Tahminler, Negatif Örnekleme, Kendi Kendini Normalleştirme ve seyrek Normalleştirme vardır.

Özellikle Word2vec hakkında konuşmak gerekirse, negatif örneklememiz var.

Negatif Örnekleme, eğitim verilerini örneklemenin bir yoludur. Bir şekilde stokastik gradyan inişine benzer, ancak biraz farklıdır. Negatif örnekleme, yalnızca negatif eğitim örneklerini arar. Gürültü kontrast tahminine dayanır ve bağlam içinde değil, kelimeleri rastgele örneklendirir. Hızlı bir eğitim yöntemidir ve içeriği rastgele seçer. Tahmin edilen kelime rastgele seçilen bağlamda görünürse, her iki vektör de birbirine yakındır.

Hangi sonuç çıkarılabilir?

Aktivatörler, tıpkı bizim nöronlarımızın dış uyaranlarla ateşlendiği gibi nöronları ateşliyor. Softmax katmanı, kelime gömme durumunda nöronları ateşleyen çıktı katmanı işlevlerinden biridir. Word2vec'de hiyerarşik softmax ve negatif örnekleme gibi seçeneklerimiz var. Aktivatörler kullanılarak, doğrusal işlevi doğrusal olmayan işleve dönüştürülebilir ve bu şekilde karmaşık bir makine öğrenme algoritması uygulanabilir.

Gensim nedir?

Gensim, python ile uygulanan bir konu modelleme araç setidir. Konu modelleme, metin gövdesindeki gizli yapıyı keşfetmektir. Word2vec, Gensim araç setinden içe aktarılır. Lütfen Gensim'in sadece word2vec'in bir uygulamasını değil, Doc2vec ve FastText'in de sağladığını, ancak bu öğreticinin tamamen word2vec ile ilgili olduğunu ve bu nedenle mevcut konuya bağlı kalacağımızı unutmayın.

Gensim kullanarak word2vec uygulaması

Şimdiye kadar word2vec'in ne olduğunu, farklı mimarilerini, neden bir kelime çantasından word2vec'e geçiş olduğunu, word2vec ile NLTK arasındaki canlı kod ve aktivasyon fonksiyonları arasındaki ilişkiyi tartıştık. Bu bölümde, word2vec Gensim kullanarak gerçekleştirilecektir.

Adım 1) Veri Toplama

Herhangi bir makine öğrenimi modelini uygulamanın veya doğal dil işlemeyi uygulamanın ilk adımı veri toplamadır

Akıllı bir sohbet robotu oluşturmak için lütfen verileri gözlemleyin.

[{"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"]}]

İşte verilerden anladığımız şey

  • Bu veriler üç şey etiketi, kalıbı ve yanıtları içerir. Etiket amaçtır (tartışma konusu nedir).
  • Veriler JSON formatındadır.
  • Kalıp, kullanıcıların bota soracağı bir sorudur.
  • Yanıtlar, sohbet botunun ilgili soruya / kalıba sağlayacağı yanıttır.

Adım 2) Veri ön işleme.

Ham veriyi işlemek çok önemlidir. Temizlenen veriler makineye beslenirse model daha doğru yanıt verir ve verileri daha verimli öğrenir.

Bu adım, durdurma kelimelerini, kökten türetmeyi, gereksiz kelimeleri vb. Kaldırmayı içerir. Devam etmeden önce, verileri yüklemek ve bir veri çerçevesine dönüştürmek önemlidir. Lütfen bunun için aşağıdaki koda bakın

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

KOD açıklaması.

  1. Veriler json biçiminde olduğundan, json içe aktarılır
  2. Dosya değişkende saklanır
  3. Dosya açık ve veri değişkenine yüklendi

Artık veriler içe aktarılır ve verileri veri çerçevesine dönüştürme zamanı gelmiştir. Bir sonraki adımı görmek için lütfen aşağıdaki koda bakın

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

KOD açıklaması

1. Veriler, yukarıda içe aktarılan pandalar kullanılarak veri çerçevesine dönüştürülür.

2. Sütun desenlerindeki listeyi dizeye dönüştürür.

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

Kod Açıklama

1. İngilizce durdurma sözcükleri, nltk araç setinden durdurma sözcüğü modülü kullanılarak içe aktarılır

2. Metnin tüm kelimeleri, for condition ve lambda fonksiyonu kullanılarak küçük harfe dönüştürülür. Lambda işlevi anonim bir işlevdir.

3. Veri çerçevesindeki metnin tüm satırları dize noktalama işaretleri açısından kontrol edilir ve bunlar filtrelenir.

4. Rakamlar veya nokta gibi karakterler normal ifade kullanılarak kaldırılır.

5. Metinden rakamlar çıkarılır.

6. Bu aşamada durdurma kelimeleri kaldırılır.

7. Şimdi sözcükler süzülür ve aynı sözcüğün farklı biçimleri sözcüklendirme kullanılarak kaldırılır. Bunlarla veri ön işlemeyi bitirdik.

Çıktı:

, 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

Adım 3) word2vec kullanarak Sinir Ağı oluşturma

Şimdi sıra Gensim modülü word2vec kullanarak bir model oluşturmaya geldi. Gensim'den word2vec ithal etmeliyiz. Bunu yapalım, sonra inşa edeceğiz ve son aşamada modeli gerçek zamanlı veriler üzerinden kontrol edeceğiz.

from gensim.models import Word2Vec

Artık modeli Word2Vec kullanarak başarıyla oluşturabiliriz. Modelin Word2Vec kullanılarak nasıl oluşturulacağını öğrenmek için lütfen sonraki kod satırına bakın. Metin, modele bir liste şeklinde sağlanır, böylece metni aşağıdaki kodu kullanarak veri çerçevesinden listeye dönüştüreceğiz.

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)

Kod Açıklamaları

1. İç listenin eklendiği büyük_listeyi oluşturdu. Bu, Word2Vec modeline beslenen formattır.

2. Döngü uygulanır ve veri çerçevesinin desen sütununun her girişi yinelenir.

3. Sütun desenlerinin her bir öğesi bölünür ve iç liste li bölümünde saklanır.

4. İç listeye dış liste eklenir.

5. Bu liste, Word2Vec modeline sağlanır. Burada sağlanan bazı parametreleri anlayalım

Min_count: Toplam frekansı bundan daha düşük olan tüm kelimeleri göz ardı edecektir.

Boyut: Kelime vektörlerinin boyutluluğunu anlatır.

Çalışanlar: Bunlar modeli eğitmek için kullanılan konulardır

Başka seçenekler de mevcuttur ve bazı önemli olanlar aşağıda açıklanmıştır.

Pencere: Bir cümle içindeki mevcut ve tahmin edilen kelime arasındaki maksimum mesafe.

Sg: Bir eğitim algoritmasıdır ve atlama-gram için 1 ve Sürekli bir kelime torbası için 0'dır. Bunları yukarıda ayrıntılı olarak tartıştık.

Hs: Bu 1 ise, eğitim için hiyerarşik softmax kullanıyoruz ve 0 ise negatif örnekleme kullanılıyor.

Alfa: İlk öğrenme oranı

Son kodu aşağıda gösterelim

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

Adım 4) Model kaydetme

Model, bin ve model formunda kaydedilebilir. Bin, ikili formattır. Modeli kaydetmek için lütfen aşağıdaki satırlara bakın

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

Yukarıdaki kodun açıklaması

1. Model, bir .model dosyası biçiminde kaydedilir.

2. model .bin dosyası şeklinde kaydedilir.

Bu modeli, Benzer kelimeler, farklı kelimeler ve en yaygın kelimeler gibi gerçek zamanlı testler yapmak için kullanacağız.

Adım 5) Modeli yükleme ve gerçek zamanlı test yapma

Model aşağıdaki kod kullanılarak yüklenir

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

Kelimeyi ondan yazdırmak istiyorsanız aşağıdaki komutu kullanarak yapılır.

kelime = liste (model.wv.vocab)

Lütfen sonucu görün

['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'] 

Adım 6) En Benzer kelimeleri kontrol etme

İşleri pratik bir şekilde uygulayalım

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

Lütfen sonucu görün

[('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)] 

7. Adım) Sağlanan kelimelerdeki kelimeyle eşleşmiyor

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

'Sonra görüşürüz, ziyaret ettiğiniz için teşekkürler' sözlerini verdik . Bu, bu kelimelerden en farklı kelimeleri yazdıracaktır. Bu kodu çalıştıralım ve sonucu bulalım

Yukarıdaki kodun çalıştırılmasından sonraki sonuç.

Thanks

Adım 8) İki kelime arasındaki benzerliği bulmak

Bu, iki kelime arasında benzerlik olasılığı ile sonuçlanacağını söyleyecektir. Lütfen bu bölümün nasıl çalıştırılacağını aşağıdaki koda bakın.

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

Yukarıdaki kodun sonucu aşağıdaki gibidir

0,13706

Aşağıdaki kodu çalıştırarak da benzer kelimeleri bulabilirsiniz.

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

Yukarıdaki kodun çıktısı

[('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)]

Sonuç

  • Kelime Gömme, benzer anlama sahip kelimelerin makine öğrenme algoritmaları tarafından anlaşılmasına izin veren bir tür kelime temsilidir.
  • Kelime Gömme, benzer kelimeleri hesaplamak, Bir grup ilişkili kelime oluşturmak, Metin sınıflandırması için özellik, Belge kümeleme, Doğal dil işleme için kullanılır.
  • Word2vec, daha iyi kelime gösterimi için kelime gömme üretmek için sığ, iki katmanlı bir sinir ağı modelidir.
  • Word2vec, vektör alanı gösterimindeki kelimeleri temsil eder. Kelimeler vektörler şeklinde temsil edilir ve yerleştirme, benzer anlam kelimelerinin bir arada görüneceği ve farklı kelimelerin uzakta yer alacağı şekilde yapılır.
  • Word2vec 2 mimari kullandı Sürekli Kelime Çantası (CBOW) ve gram atla
  • CBOW, gram atlamadan birkaç kat daha hızlıdır ve sık kullanılan kelimeler için daha iyi bir sıklık sağlarken, gram atlama az miktarda eğitim verisine ihtiyaç duyar ve hatta nadir kelimeleri veya cümleleri temsil eder.
  • NLTK ve word2vec, güçlü uygulamalar oluşturmak için birlikte kullanılabilir
  • Nöronun aktivasyon işlevi, bir dizi girdi verilen bu nöronun çıktısını tanımlar. Word2vec olarak. Softmax Katmanı (normalleştirilmiş üstel işlev), her düğümü etkinleştiren veya ateşleyen çıktı katmanı işlevidir. Word2vec'de ayrıca negatif örnekleme mevcuttur
  • Gensim, python'da uygulanan bir konu modelleme araç setidir.