Örnekle Kelime Gömme ve Word2Vec Modeli
Kelime Gömme Nedir?
Kelime Gömme makine öğrenmesi algoritmalarının benzer anlamlara sahip kelimeleri anlamasını sağlayan bir kelime temsil türüdür. Sinir ağlarını, olasılıksal modelleri veya kelime birlikte oluşum matrisinde boyut azaltmayı kullanarak kelimeleri gerçek sayıların vektörlerine eşlemek için bir dil modelleme ve özellik öğrenme tekniğidir. Kelime yerleştirme modellerinden bazıları Word2vec (Google), Glove (Stanford) ve en hızlısıdır (Facebook).
Kelime Gömme, dağıtılmış anlamsal model veya dağıtılmış temsil edilmiş veya anlamsal vektör uzayı veya vektör uzayı modeli olarak da adlandırılır. Bu isimleri okuduğunuzda benzer kelimeleri bir arada kategorize etmek anlamına gelen semantik kelimesiyle karşılaşıyorsunuz. Örneğin elma, mango, muz gibi meyveler yakına konulmalı, kitaplar ise bu kelimelerden uzak tutulmalıdır. Daha geniş anlamda, kelime yerleştirme, kitapların vektör temsilinden uzağa yerleştirilecek olan meyvelerin vektörünü yaratacaktır.
Kelime Gömme nerede kullanılır?
Kelime gömme, özellik oluşturma, belge kümeleme, metin sınıflandırma 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 tutulan kelimeye benzer kelimeler önermek için kullanılır. Bununla birlikte, farklı kelimelerin yanı sıra en yaygın kelimeleri de önerir.
- İlgili kelimelerden oluşan bir grup oluşturun: Benzer özelliklere sahip şeyleri bir arada gruplayacak ve birbirine benzemeyen uzak mesafelerde gruplandıracak anlamsal gruplama için kullanılır.
- Metin sınıflandırma özelliği: Metin, tahminin yanı sıra eğitim için de modele beslenen vektör dizileri halinde eşlenir. Metin tabanlı sınıflandırıcı modelleri dize üzerinde eğitilemez; dolayısıyla bu, metni makine tarafından eğitilebilecek forma dönüştürecektir. Ayrıca metin tabanlı sınıflandırmada anlamsal yardım oluşturma özellikleri.
- Belge kümeleme: Word Embedding Word2vec'in yaygın olarak kullanıldığı başka bir uygulamadır
- Doğal dil işleme: Kelime yerleştirmenin 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 bilgi sahibi olduk. Kelime yerleştirmeyi uygulamak için farklı modellere de biraz ışık tutuluyor. Bu Kelime Gömme eğitiminin tamamı modellerden birine (Word2vec) odaklanmıştır.
Word2vec nedir?
Word2vec daha iyi kelime temsili için kelime yerleştirmeyi üreten bir teknik/modeldir. Çok sayıda hassas sözdizimsel ve anlamsal kelime ilişkisini yakalayan doğal bir dil işleme yöntemidir. Bu, eşanlamlı kelimeleri tespit edebilen ve eğitildikten sonra kısmi cümleler için ek kelimeler önerebilen sığ, iki katmanlı bir sinir ağıdır.
Bu Word2vec eğitiminde daha ileri gitmeden önce, lütfen aşağıdaki Word yerleştirme örnek diyagramında gösterildiği gibi sığ ve derin sinir ağları arasındaki farka bakın:
Sığ sinir ağı, girdi ve çıktı arasındaki tek gizli katmandan oluşurken, derin sinir ağı, girdi ve çıktı arasında birden fazla gizli katman içerir. Giriş düğümlere tabi olurken, gizli katman ve çıktı katmanı nöronlar içerir.

Word2vec, bir gizli katman girişi ve çıkışı olan iki katmanlı bir ağdır.
Word2vec, Google'da Tomas Mikolov başkanlığındaki bir grup araştırmacı tarafından geliştirildi. Word2vec, gizli anlamsal analiz modelinden daha iyi ve daha verimlidir.
Neden Word2vec?
Word2vec, vektör uzayı gösterimindeki kelimeleri temsil eder. Kelimeler vektörler şeklinde temsil edilir ve yerleştirme, benzer anlamlara sahip kelimeler bir arada görünecek ve farklı kelimeler birbirinden uzak olacak şekilde yapılır. Buna anlamsal ilişki de denir. Sinir ağları metni anlamıyor, bunun yerine yalnızca sayıları anlıyor. Kelime Gömme, metni sayısal bir vektöre dönüştürmenin bir yolunu sağlar.
Word2vec kelimelerin dilsel bağlamını yeniden yapılandırır. Daha ileri gitmeden önce dilsel 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", burada bağlam, kullanıcının bağlam olan "Hindistan'ın sıcaklığı"nı bilmek istemesidir. Kısaca cümlenin asıl amacı bağlamdır. Konuşma veya yazı dilini çevreleyen kelime veya cümle (açıklama), bağlamın anlamını belirlemeye yardımcı olur. Word2vec bağlamlar aracılığıyla kelimelerin vektör temsilini öğrenir.
Word2vec ne yapar?
Kelime Yerleştirmeden Önce
Kelime gömmeden önce hangi yaklaşımın kullanıldığını ve dezavantajlarının neler olduğunu bilmek önemli, ardından Word2vec yaklaşımını kullanarak Word gömme ile dezavantajların nasıl giderildiği konusuna geçeceğiz. Son olarak Word2vec'in nasıl çalıştığını anlatacağız çünkü çalıştığını anlamak önemlidir.
Gizli Anlamsal Analiz Yaklaşımı
Kelime yerleştirmeden önce kullanılan yaklaşım budur. Kelimelerin kodlanmış vektörler biçiminde temsil edildiği Kelime Torbası kavramını kullandı. Boyutun kelime dağarcığının boyutuna eşit olduğu seyrek bir vektör temsilidir. Kelime sözlükte geçiyorsa sayılır, aksi takdirde sayılmaz. Daha fazlasını anlamak için lütfen aşağıdaki programa bakın.
Word2vec Örneği
from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() data_corpus = ["guru99 is the best site for online tutorials. I love to visit guru99."] vocabulary = vectorizer.fit(data_corpus) X = vectorizer.transform(data_corpus) print(X.toarray()) print(vectorizer.get_feature_names_out())
Çı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
- CountVectorizer, kelimelerin içine sığmasına dayalı olarak kelimeleri depolamak için kullanılan modüldür. Bu sklearn'den içe aktarılmıştır.
- CountVectorizer sınıfını kullanarak nesneyi oluşturun.
- CountVectorizer'a sığacak verileri listeye yazın.
- Veriler CountVectorizer sınıfından oluşturulan nesneye sığdırılır.
- Kelime dağarcığını kullanarak verilerdeki kelimeleri saymak için bir kelime çantası yaklaşımı uygulayın. Eğer kelime veya belirteç sözlükte mevcut değilse, söz konusu indeks konumu sıfıra ayarlanır.
- 5. satırdaki x olan değişken bir diziye dönüştürülür (yöntem x için kullanılabilir). Bu, 3. Satırda verilen cümle veya listedeki her bir belirtecin sayısını sağlayacaktır.
- Bu, 4. Satırdaki veriler kullanılarak yerleştirildiğinde sözlüğün parçası olan özellikleri gösterecektir.
Gizli Semantik yaklaşımda, satır benzersiz kelimeleri temsil ederken sütun, o kelimenin belgede kaç kez göründüğünü temsil eder. Kelimelerin belge matrisi biçimindeki temsilidir. Terim-Frekans ters belge sıklığı (TFIDF), belgedeki terimin sıklığı/terimin tüm derlemdeki sıklığı olan belgedeki kelimelerin sıklığını saymak için kullanılır.
Kelime Çantası yönteminin eksikliği
- Kelimenin sırasını göz ardı eder, örneğin bu kötü = bu kötü.
- Kelimelerin bağlamını göz ardı eder. Diyelim ki “Kitapları severdi” cümlesini yazsam. Eğitim en iyi kitaplarda bulunur”. Biri "Kitapları severdi" ve diğeri "Eğitimin en iyi yolu kitaplarda bulunur" olmak üzere iki vektör oluşturacaktır. Her ikisine de ortogonal davranır, bu da onları bağımsız kılar, ancak gerçekte birbirleriyle ilişkilidirler.
Bu sınırlamaların üstesinden gelmek için kelime yerleştirme geliştirildi ve Word2vec bunu uygulamaya yönelik bir yaklaşımdır.
Word2vec nasıl çalışır?
Word2vec, sözcüğü çevreleyen bağlamı tahmin ederek öğrenir. Örneğin “O” kelimesini ele alalım. seviyor Futbol."
Loves kelimesinin Word2vec değerini hesaplamak istiyoruz.
varsaymak
loves = Vin. P(Vout / Vin) is calculated where, Vin is the input word. P is the probability of likelihood. Vout is the output word.
Word seviyor derlemdeki her kelimenin üzerinde hareket eder. Kelimeler arasındaki sözdizimsel ve anlamsal ilişki kodlanmıştır. Bu, benzer ve analoji kelimelerinin bulunmasına yardımcı olur.
Kelimenin tüm rastgele özellikleri seviyor hesaplanır. Bu özellikler bir yardımcı program yardımıyla komşu veya bağlam kelimelerine göre değiştirilir veya güncellenir. Geri Yayılım yöntemi.
Bir başka öğrenme yolu da iki kelimenin bağlamı benzerse veya iki kelime benzer özelliklere sahipse bu kelimelerin birbiriyle ilişkili olduğudur.
Word2vec Archidoku
Word2vec tarafından kullanılan iki mimari vardır:
- Sürekli Kelime Çantası (CBOW)
- Gramı atla
Bu Word2vec eğitiminde daha fazla ilerlemeden önce, bu mimarilerin veya modellerin kelime temsili açısından neden önemli olduğunu tartışalım. Kelime temsilini öğrenmek esasen gözetimsizdir, ancak modeli eğitmek için hedeflere/etiketlere ihtiyaç vardır. Skip-gram ve CBOW, model eğitimi için gözetimsiz temsili gözetimli forma dönüştürür.
CBOW'da, geçerli sözcük, çevreleyen bağlam pencerelerinin penceresi kullanılarak tahmin edilir. Örneğin, wi-1,wi-2,wi + 1,wi + 2kelimeler veya bağlam verilirse, bu model şunları sağlayacaktır:i
Skip-Gram, CBOW'un tersini gerçekleştirir; bu, kelimeden verilen diziyi veya bağlamı tahmin ettiğini ima eder. Anlamak için örneği tersine çevirebilirsiniz. eğer wi verilirse, bu bağlamı veya w'yi tahmin edecektir.i-1,wi-2,wi + 1,wben+2.
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ği olabilir.
Sürekli Kelime Torbası
Sürekli kelime torbası mimarisini anlamak için basit bir Word2vec örnek diyagramı çizelim.

Denklemleri matematiksel olarak hesaplayalım. V'nin sözcük boyutu ve N'nin gizli katman boyutu olduğunu varsayalım. Giriş şu şekilde tanımlanır: { xi-1, xi-2, xben+1, xi + 2}. Ağırlık matrisini V * N'yi çarparak elde ederiz. Başka bir matris, giriş vektörünü ağırlık matrisiyle çarparak elde edilir. Bu, aşağıdaki denklemle de anlaşılabilir.
h=xitW
nerede xit? 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=tahmin edilen temsil*h
yukarıdaki denklemde tahmin edilen temsilin elde edildiği model?h.
Gram Atlama Modeli
Skip-Gram yaklaşımı, giriş kelimesi verilen bir cümleyi tahmin etmek için kullanılır. Bunu daha iyi anlamak için aşağıdaki Word2vec örneğinde gösterildiği gibi diyagramı çizelim.

Bunu, girdinin kelime olduğu ve modelin bağlamı veya diziyi sağladığı Sürekli kelime çantası modelinin tersi olarak ele alabiliriz. Ayrıca hedefin girdiye beslendiği ve seçilen sayıda bağlam sözcüğünü barındırmak için çıktı katmanının birden çok kez kopyalandığı sonucuna da varabiliriz. Tüm çıktı katmanından gelen hata vektörü, bir geri yayılım yöntemi yoluyla ağırlıkların ayarlanması için toplanır.
Hangi modeli seçmeli?
CBOW, atlama gramından birkaç kat daha hızlıdır ve sık kullanılan kelimeler için daha iyi bir frekans sağlarken, atlama gramı az miktarda eğitim verisine ihtiyaç duyar ve nadir kelimeleri veya cümleleri bile temsil eder.
Word2vec ve NLTK arasındaki ilişki
NLTK doğal Dil araç setidir. Metnin ön işlenmesi için kullanılır. Konuşmanın bazı kısımlarını etiketleme, lemmatize etme, kök çıkarma, durdurma sözcüklerini kaldırma, 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 kelimelerden özelliklerin hazırlanmasına da yardımcı olur. Diğer bir deyişle, Word2vec anlamsal (birbiriyle yakından ilişkili öğeler) ve sözdizimsel (sıra) eşleştirme için kullanılır. Word2vec'i kullanarak benzer kelimeleri, farklı kelimeleri, boyut azaltmayı ve daha fazlasını bulabilirsiniz. Word2vec'in bir diğer önemli özelliği de metnin yüksek boyutlu temsilini vektörlerin daha düşük boyutlu temsiline dönüştürebilmesidir.
NLTK ve Word2vec nerede kullanılır?
Yukarıda belirtildiği gibi tokenleştirme, POS etiketleme ve ayrıştırma gibi bazı genel amaçlı görevleri gerçekleştirmek gerekiyorsa, NLTK'yi kullanmalı, oysa bazı bağlama, konu modellemeye veya belge benzerliğine göre kelimeleri tahmin etmek için Word2vec kullanılmalıdır.
NLTK ve Word2vec'in kod yardımıyla ilişkisi
NLTK ve Word2vec, benzer kelime gösterimlerini veya sözdizimsel eşleşmeleri bulmak için birlikte kullanılabilir. NLTK araç takımı, 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. Her ikisinin birleşimini aşağıdaki kodda görelim. Daha fazla işlem yapmadan önce lütfen NLTK'nin sağladığı korpuslara bir göz atın. Komutu kullanarak indirebilirsiniz
nltk(nltk.download('all'))

Lütfen kod için ekran görüntüsüne bakın.
import nltk import gensim from nltk.corpus import abc model= gensim.models.Word2Vec(abc.sents()) X= list(model.wv.vocab) data=model.most_similar('science') print(data)
Çı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ı
- Bir sonraki adımda kullanacağımız abc külliyatını indirebileceğiniz nltk kütüphanesi içe aktarılır.
- Gensim ithal edilmektedir. Gensim Word2vec kurulu değilse lütfen “pip3 install gensim” komutunu kullanarak kurun. Lütfen aşağıdaki ekran görüntüsüne bakın.

- nltk.download('abc') kullanılarak indirilen corpus abc'yi içe aktarın.
- Dosyaları Gensim kullanılarak cümleler halinde içe aktarılan Word2vec modeline aktarın.
- Kelime bilgisi değişken biçiminde saklanır.
- Bu dosyalar bilimle ilgili olduğundan model örnek kelime bilimi üzerinde test edilmiştir.
- Burada benzer bir kelime olan “bilim” model tarafından öngörülmektedir.
Aktivatörler ve Word2Vec
Nöronun aktivasyon fonksiyonu, bir dizi girdi verildiğinde o nöronun çıktısını tanımlar. Biyolojik olarak beynimizdeki farklı nöronların farklı uyaranlar kullanılarak aktive edildiği bir aktiviteden esinlenmiştir. Aktivasyon fonksiyonunu aşağıdaki diyagram aracılığıyla anlayalım.

Burada x1,x2,..x4 sinir ağının düğümüdür.
w1, w2, w3 düğümün ağırlığıdır,
? aktivasyon fonksiyonu olarak çalışan tüm ağırlık ve düğüm değerlerinin toplamıdır.
Neden Etkinleştirme işlevi?
Hiçbir aktivasyon fonksiyonu kullanılmazsa çıktı doğrusal olur ancak doğrusal fonksiyonun 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 aktivasyon fonksiyonu kullanılarak elde edilen çıktılara ihtiyaç vardır.
Kelime yerleştirmede aktivasyon katmanı nasıl hesaplanır (Word2vec)
Softmax Katmanı (normalleştirilmiş üstel fonksiyon), her düğümü etkinleştiren veya ateşleyen çıktı katmanı fonksiyonudur. Kullanılan bir diğer yaklaşım, karmaşıklığın O(log) ile hesaplandığı Hiyerarşik softmax'tır.2V) softmax'ın O(V) olduğu ve V'nin kelime dağarcığı boyutu olduğu yerde. Bunlar arasındaki fark, hiyerarşik softmax katmanındaki karmaşıklığın azaltılmasıdır. (Hiyerarşik softmax) işlevselliğini anlamak için lütfen aşağıdaki Word yerleştirme örneğine bakın:

Kelimeyi gözlemleme olasılığını hesaplamak istediğimizi varsayalım. Aşk belirli bir bağlam verilmiştir. Kökten yaprak düğüme olan akış, ilk olarak 2. düğüme ve daha sonra 5. düğüme doğru hareket edecektir. Yani eğer kelime dağarcığımız 8'e sahipse, yalnızca üç hesaplamaya ihtiyaç vardır. Böylece tek bir kelimenin olasılığının ayrıştırılmasına, hesaplanmasına olanak sağlar (Aşk).
Hiyerarşik Softmax dışında başka hangi seçenekler mevcut?
Kelime gömme seçenekleri genel anlamda konuşursak, Farklılaştırılmış Softmax, CNN-Softmax, Önem Örnekleme, Uyarlanabilir Önem örnekleme, Gürültü Karşılaştırmalı Tahminler, Negatif Örnekleme, Kendi Kendini Normalleştirme ve seyrek Normalleştirme'dir.
Özellikle Word2vec hakkında konuşursak, negatif örneklememiz mevcuttur.
Negatif Örnekleme, eğitim verilerini örneklemenin bir yoludur. Bir bakıma stokastik gradyan inişine benziyor, ancak bazı farklar var. Negatif örnekleme yalnızca negatif eğitim örneklerini arar. Gürültü karşılaştırmalı tahminine dayanır ve bağlamda değil rastgele olarak kelimelerin örneklenmesine dayanır. Hızlı bir eğitim yöntemidir ve bağlamı rastgele seçer. Tahmin edilen kelime rastgele seçilen bağlamda görünüyorsa, her iki vektör de birbirine yakındır.
Ne gibi bir sonuç çıkarılabilir?
Aktivatörler nöronları, nöronlarımızın dış uyaranlar kullanılarak ateşlenmesi gibi ateşler. Softmax katmanı, kelime yerleştirmeleri durumunda nöronları ateşleyen çıktı katmanı işlevlerinden biridir. Word2vec'te hiyerarşik softmax ve negatif örnekleme gibi seçeneklerimiz var. Aktivatörler kullanılarak doğrusal işlev doğrusal olmayan işleve dönüştürülebilir ve karmaşık bir makine öğrenme algoritması bu şekilde uygulanabilir.
Gensim nedir?
gensim uygulanan açık kaynaklı bir konu modelleme ve doğal dil işleme araç setidir. Python ve Cython. Gensim araç seti, kullanıcıların metin gövdesindeki gizli yapıyı keşfetmeleri için konu modelleme amacıyla Word2vec'i içe aktarmalarına olanak tanır. Gensim yalnızca Word2vec'in bir uygulamasını değil aynı zamanda Doc2vec ve FastText için de bir uygulama sağlar.
Bu eğitim tamamen Word2vec ile ilgili olduğundan mevcut konuya sadık kalacağız.
Gensim Kullanılarak Word2vec Nasıl Uygulanır?
Şimdiye kadar Word2vec'in ne olduğunu, farklı mimarilerini, neden kelime torbasından Word2vec'e geçiş yapıldığını, Word2vec ile NLTK arasındaki ilişkiyi canlı kod ve aktivasyon fonksiyonlarıyla ele aldık.
Aşağıda Gensim kullanarak Word2vec'i uygulamanın adım adım yöntemi verilmiştir:
Adım 1) Veri Toplama
Herhangi bir makine öğrenimi modelini uygulamanın veya doğal dil işlemeyi uygulamanın ilk adımı veri toplamaktır
Aşağıdaki Gensim Word2vec örneğinde gösterildiği gibi akıllı bir chatbot oluşturmak için lütfen verileri inceleyin.
[{"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"] } ]
Verilerden şunu anlıyoruz
- Bu veriler üç şeyi içerir: etiket, desen ve yanıtlar. Etiket niyettir (tartışma konusu nedir).
- Veriler JSON formatındadır.
- Kalıp, kullanıcıların bota soracağı bir sorudur
- Cevaplar, chatbot'un ilgili soruya/desenlere vereceği cevaptır.
Adım 2) Veri ön işleme
Ham verinin işlenmesi çok önemlidir. Temizlenmiş veriler makineye beslenirse model daha doğru yanıt verecek ve verileri daha verimli öğrenecektir.
Bu adım, durdurulan kelimelerin, kök kelimelerin, gereksiz kelimelerin vb. kaldırılmasını içerir. Devam etmeden önce verileri yüklemek ve onu bir veri çerçevesine dönüştürmek önemlidir. Bunun için lütfen aşağıdaki koda bakın
import json json_file =’intents.json' with open('intents.json','r') as f: data = json.load(f)
Kodun Açıklaması:
- Veriler json formatında olduğundan json içe aktarılır
- Dosya değişkende saklanır
- Dosya açık ve veri değişkenine yüklendi
Artık veriler içe aktarılmıştır ve verileri veri çerçevesine dönüştürmenin zamanı gelmiştir. Bir sonraki adımı görmek için lütfen aşağıdaki koda bakın
import pandas as pd df = pd.DataFrame(data) df['patterns'] = df['patterns'].apply(', '.join)
Kodun 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ürecektir.
from nltk.corpus import stopwords from textblob import Word stop = stopwords.words('english') df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split())) df['patterns't']= df['patterns''].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation) df['patterns']= df['patterns'].str.replace('[^\w\s]','') df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit())) df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop)) df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
Kod Açıklaması:
1. İngilizce durdurma sözcükleri, nltk araç setindeki durdurma sözcüğü modülü kullanılarak içe aktarılır
2. Metnin tüm kelimeleri for koşul 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. Sayı veya nokta gibi karakterler normal ifade kullanılarak kaldırılır.
5. Digit'ler metinden çıkarıldı.
6. Durdurucu kelimeler bu aşamada kaldırılır.
7. Artık kelimeler filtreleniyor ve lemmatizasyon kullanılarak aynı kelimenin farklı biçimleri kaldırılıyor. Bunlarla veri ön işlemeyi tamamladık.
Çıktı:
, patterns, responses, tag 0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome 1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye 2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful 3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening 4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please don’t worry']",payments
Adım 3) Word2vec kullanarak Sinir Ağı oluşturma
Şimdi Gensim Word2vec modülünü kullanarak bir model oluşturmanın zamanı geldi. Word2vec'i Gensim'den içe aktarmamız gerekiyor. Bunu yapalım, sonra inşa edelim ve son aşamada modeli gerçek zamanlı veriler üzerinde kontrol edelim.
from gensim.models import Word2Vec
Şimdi bu Gensim Word2vec eğitiminde, modeli Word2Vec kullanarak başarılı bir şekilde 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, bu nedenle aşağıdaki kodu kullanarak metni 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)
Kodun Açıklaması:
1. İç listenin eklendiği daha büyük_listeyi oluşturduk. Bu, Word2Vec modeline beslenen formattır.
2. Döngü uygulanır ve veri çerçevesinin desenler sütununun her girişi yinelenir.
3. Sütun desenlerinin her bir öğesi bölünür ve iç listede saklanır.
4. İç liste dış listeye eklenir.
5. Bu liste Word2Vec modeline sağlanmıştır. Burada verilen parametrelerden bazılarını anlayalım
Min_count: Toplam frekansı bundan daha düşük olan tüm kelimeleri yok sayacaktır.
Alan: Kelime vektörlerinin boyutluluğunu anlatır.
İşçiler: Bunlar modeli eğitmek için kullanılan konulardır
Ayrıca başka seçenekler de mevcuttur ve bazı önemli olanlar aşağıda açıklanmıştır.
penceresi: Bir cümle içindeki mevcut ve tahmin edilen kelime arasındaki maksimum mesafe.
Sg: Bu bir eğitim algoritmasıdır ve skip-gram için 1 ve sürekli bir kelime çantası için 0. Bunları yukarıda detaylı olarak tartıştık.
Hs: Eğer bu değer 1 ise eğitim için hiyerarşik softmax kullanıyoruz demektir ve eğer 0 ise negatif örnekleme kullanıyoruz demektir.
Alfa: İlk öğrenme oranı
Son kodu aşağıda görüntüleyelim:
#list of libraries used by the code import string from gensim.models import Word2Vec import logging from nltk.corpus import stopwords from textblob import Word import json import pandas as pd #data in json format json_file = 'intents.json' with open('intents.json','r') as f: data = json.load(f) #displaying the list of stopwords stop = stopwords.words('english') #dataframe df = pd.DataFrame(data) df['patterns'] = df['patterns'].apply(', '.join) # print(df['patterns']) #print(df['patterns']) #cleaning the data using the NLP approach print(df) df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split())) df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation)) df['patterns']= df['patterns'].str.replace('[^\w\s]','') df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit())) df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop)) df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()])) #taking the outer list bigger_list=[] for i in df['patterns']: li = list(i.split(" ")) bigger_list.append(li) #structure of data to be taken by the model.word2vec print("Data format for the overall list:",bigger_list) #custom data is fed to machine for further processing model = Word2Vec(bigger_list, min_count=1,size=300,workers=4) #print(model)
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, .model dosyası biçiminde kaydedilir.
2. model .bin dosyası biçiminde 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) Modelin yüklenmesi ve gerçek zamanlı testin gerçekleştirilmesi
Model aşağıdaki kod kullanılarak yüklenir:
model = Word2Vec.load('model.bin')
Kelime dağarcığını yazdırmak istiyorsanız aşağıdaki komut kullanılarak yapılır:
vocab = list(model.wv.vocab)
Lütfen sonuca bakı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 Kelimelerin Kontrolü
Gelin şunları uygulamalı olarak uygulayalım:
similar_words = model.most_similar('thanks') print(similar_words)
Lütfen sonuca bakı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)]
Adım 7) Sağlanan kelimelerdeki kelime eşleşmiyor
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split()) print(dissimlar_words)
Kelimeleri verdik 'Görüşmek üzere, ziyaretiniz için teşekkürler.' Bu irade Bu kelimelerden en farklı kelimeleri yazdırın. Bu kodu çalıştırıp sonucu bulalım
Yukarıdaki kodun yürütülmesinden sonraki sonuç:
Thanks
Adım 8) İki kelime arasındaki benzerliği bulma
Bu, iki kelime arasındaki benzerlik olasılığının sonucunu verecektir. Lütfen bu bölümün nasıl yürütüleceğini 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 benzer kelimeleri daha da 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 anlamlara sahip kelimelerin makine öğrenmesi algoritmaları tarafından anlaşılmasını sağlayan bir kelime temsili türüdür.
- Kelime Gömme, benzer kelimeleri hesaplamak, İlgili kelimelerden oluşan bir grup oluşturmak, Metin sınıflandırma özelliği, Belge kümeleme, Doğal dil işleme için kullanılır.
- Word2vec açıkladı: Word2vec, daha iyi kelime temsili için kelime yerleştirmeleri üreten sığ, iki katmanlı bir sinir ağı modelidir
- Word2vec, vektör uzayı gösterimindeki kelimeleri temsil eder. Kelimeler vektörler halinde temsil edilir ve yerleştirme, benzer anlamlı kelimeler bir arada görünecek ve farklı kelimeler birbirinden uzak olacak şekilde yapılır.
- Word2vec algoritması 2 mimari kullanır Sürekli Kelime Çantası (CBOW) ve gram atlama
- CBOW, atlama gramından birkaç kat daha hızlıdır ve sık kullanılan kelimeler için daha iyi bir frekans sağlarken, atlama gramı az miktarda eğitim verisine ihtiyaç duyar ve nadir kelimeleri veya cümleleri bile temsil eder.
- NLTK ve Word2vec birlikte kullanılarak güçlü uygulamalar oluşturulabilir
- Nöronun aktivasyon fonksiyonu, bir dizi girdi verildiğinde o nöronun çıktısını tanımlar. Word2vec'te. Softmax Katmanı (normalleştirilmiş üstel işlev), her düğümü etkinleştiren veya ateşleyen çıkış katmanı işlevidir. Word2vec'te negatif örnekleme de mevcuttur
- Gensim, python'da uygulanan bir konu modelleme araç setidir