Word2vec'in Skip-Gram modelinin ayrıntılı açıklaması (uygulama)

Lei Feng.com: Bu, Skip-Gram modeli üzerine üç bölüme ayrılmış bir dizi öğreticidir: yapı, eğitim ve uygulama Bu makale son bölümdür: uygulama. Orijinal yazar Tian Yusu, orijinal olarak yazarda yayınlandı Sütunu bilin Leifeng.com yetkilendirildi.

Önsöz

Önceki sütun, Word2Vec'te Skip-Gram modelini tanıttı. Gördüyseniz, kendi Word2Vec modelinizi uygulamak için TensorFlow'u kullanmaya başlayabilirsiniz. Bu makale, Skip-Gram modelini tamamlamak için TensorFlow'u kullanacaktır. Skip-Gram'ın fikirlerine henüz aşina olmayan arkadaşlar bir önceki sütunun içeriğine göz atabilirler.

Bu gerçek savaş kodunun amacı, Skip-Gram modelindeki bazı fikirlerin ve püf noktalarının anlaşılmasını derinleştirmektir. Derlem boyutunun, derlem kalitesinin, algoritma ayrıntılarının ve eğitim maliyetinin sınırlandırılması nedeniyle, eğitim sonuçları açıkça gensim tarafından paketlenen Word2Vec ile karşılaştırılamaz. Bu kod, yeni başlayanların Skip-Gram modelinin fikirlerini anlaması ve uygulaması için uygundur.

Araç tanıtımı

Dil: Python 3

Paket: TensorFlow (sürüm 1.0) ve diğer veri işleme paketleri (koda bakın)

Editör: jupyter not defteri

Çevrimiçi GPU: floyd (https://www.floydhub.com/)

Veri kümesi: önceden işlenmiş Wikipedia makaleleri (İngilizce)

Vücut parçası

Makale, kod yapımı için temel olarak aşağıdaki dört bölümden oluşmaktadır:

-Veri ön işleme

-Eğitim örnek yapımı

-Model yapımı

-Model doğrulama

1 Veri ön işleme

Burada paketlerin içe aktarılması ve verilerin yüklenmesi hakkında yazmayacağım, nispeten basit, lütfen git üzerindeki koda bakın.

Veri ön işleme bölümü temel olarak şunları içerir:

  • Metindeki özel sembolleri değiştirin ve düşük frekanslı kelimeleri kaldırın

  • Kelime segmentasyonu

  • Korpus oluştur

  • Dünya haritası

İlk olarak, ilk iki adımı tamamlamak için bir fonksiyon tanımlıyoruz, yani metin temizleme ve kelime bölütleme işlemleri.

Yukarıdaki işlev, noktalama işaretlerini değiştirme ve düşük frekanslı sözcükleri silme işlemlerini gerçekleştirir ve sözcük bölümlemesinden sonra metni döndürür.

Temizledikten sonra verilere bir göz atalım:

Kelime bölütlemeden sonraki metin ile haritalama tablomuzu oluşturabiliriz, kod tekrarlanmayacaktır, herkes aşina olmalıdır.

Metin ve sözlüğün boyutuna da bakabiliriz:

Metnin tamamındaki kelimelerin boyutu yaklaşık 16.6 milyon ve sözlüğün boyutu yaklaşık 60.000'dir Bu ölçek aslında eğitilmiş kelime vektörü için yeterli değildir, ancak biraz daha iyi bir model eğitilebilir.

2 Eğitim örneklerinin oluşturulması

Skip-gram'da, eğitim örneklerinin formunun (giriş kelimesi, çıkış kelimesi) olduğunu biliyoruz, burada çıkış kelimesi giriş kelimesinin bağlamıdır. Model gürültüsünü azaltmak ve eğitimi hızlandırmak için, durdurma kelimeleri gibi gürültü faktörlerini ortadan kaldırmak için gruplar oluşturmadan önce örnekleri örneklememiz gerekir.

örnekleme

Modelleme sürecinde, "the" ve "a" gibi birçok yaygın kelime (aynı zamanda durdurma kelimeleri olarak da adlandırılır) eğitim metninde görünecek ve bu kelimeler eğitimimize çok fazla gürültü getirecektir. Son makale olan Word2Vec'te, modelin gürültüsünü azaltmak ve eğitimi hızlandırmak için örneklerin örneklenmesi ve yüksek frekanslı durdurma kelimelerinin kaldırılması gerektiğinden bahsedilmişti.

Silinen her kelimenin olasılığını hesaplamak için aşağıdaki formülü kullanıyoruz:

Bunlar arasında f (wi) wi kelimesinin görülme sıklığını temsil eder. t, genellikle 1e-3 ile 1e-5 arasında bir eşiktir.

Yukarıdaki kod, örnekteki her bir kelimenin silinme olasılığını hesaplar ve örnekler olasılığa dayanır Şimdi elimizde örneklenen kelime listesi var.

Toplu oluştur

Önce skip-gram'ın örnek formatını inceleyelim. skip-gram, içeriğe dayalı olarak geçerli girdi sözcüğünü tahmin eden CBOW'dan farklıdır. Skip-gram, bağlamı bir girdi sözcüğüne göre tahmin eder, böylece bir girdi sözcüğü birden çok bağlama karşılık gelir. "Hızlı kahverengi tilki tembel köpeğin üzerinden atlar" şeklinde bir kestane alalım. Skip_window = 2'yi sabitlersek, o zaman tilki bağlamı, eğer bizim batch_size = 1 ise, o zaman bir grupta aslında dört eğitim örneği vardır.

Yukarıdaki analiz, iki adımda koda dönüştürülür: Birincisi, her bir giriş kelimesinin bağlamını bulmak ve ikincisi, bağlama dayalı bir toplu iş oluşturmaktır.

Birincisi, giriş kelimesinin bağlam kelime listesini bulmaktır:

Kelime listesinde karşılık gelen bağlamı bulmak için bu indeks numarasına dayalı olarak bir kelime indeks numarasını almak için bir get_targets işlevi tanımlarız (varsayılan window_size = 5). Lütfen burada küçük bir numara olduğunu unutmayın.Giriş kelimesi bağlamını gerçekten seçtiğimde, kullanılan pencere boyutu aralıkta rastgele bir sayıdır. Buradaki amaç, modelin giriş kelimesine daha yakın kelimelere daha fazla dikkat etmesini sağlamaktır.

Yukarıdaki işleve sahip olduktan sonra, bağlam kelimesini giriş kelimesine göre kolayca bulabiliriz. Bu sözlerle eğitim için grubumuzu oluşturabiliriz:

Yukarıdaki kodun toplu işlemesine dikkat edin. Her girdi sözcüğü için birden çok çıktı sözcüğü (bağlam) olduğunu biliyoruz. Örneğin, girdimiz "tilki" dir ve bağlam şu şekildedir, o zaman bir tilki partisi içinde dört eğitim örneği vardır ,,,.

3 Model yapımı

Veri ön işleme bittikten sonra modelimizi oluşturmamız gerekiyor. Eğitimi hızlandırmak ve modeldeki kelime vektörlerinin kalitesini iyileştirmek için, ağırlıkları güncellemek için negatif örnekleme kullanıyoruz.

Gömme katmanına giriş katmanı

Girdi katmanından gizli katmana kadar olan ağırlık matrisinin boyutu gömme katmanı olarak verilmelidir.Genellikle embeding_size 50-300 arasında ayarlanır.

Gömme katmanının aranması TensorFlow'da gömülme_bakarak gerçekleştirilir, bakınız:

Katmanı çıktı katmanına gömme

Atlama gramında, her bir giriş kelimesinin birden fazla bağlam kelimesi aslında bir ağırlık matrisini paylaşır ve her bir (giriş kelimesi, çıkış kelimesi) eğitim örneğini girdi olarak kullanırız. Eğitimi hızlandırmak ve kelime vektörlerinin kalitesini artırmak için ağırlıkları güncellemek için negatif örnekleme kullanıyoruz.

TensorFlow'daki sampled_softmax_loss, negatif örnekleme nedeniyle, aslında modelin eğitim kaybını hafife alacağız. Daha fazla ayrıntı için:

Lütfen koddaki softmax_w boyutunun vocab_size x embedding_size olduğunu unutmayın, bunun nedeni TensorFlow'daki sampled_softmax_loss içindeki parametre ağırlıklarının boyutudur.

4 Model doğrulama

Yukarıdaki adımlarda modelin çerçevesini oluşturduk, aşağıdaki modeli eğitip eğitelim. Eğitimin her aşamasını daha sezgisel olarak gözlemleyebilmek için. Birkaç kelime seçelim ve benzer kelimelerin eğitim sürecinde nasıl değiştiğini görelim.

Eğitim modeli:

Lütfen buraya dikkat edin, doğrulama setinde kod basımı benzer kelimeleri sık sık yapmamaya çalışın çünkü burada fazladan bir hesaplama adımı olacak yani hesaplama kaynaklarını tüketecek olan benzerliğin hesaplanması ve hesaplama süreci çok yavaş. Bu yüzden kodda, sonucu bir kez yazdırmak için 1000 tur ayarladım.

Nihai eğitim sonuçlarından model, bir gibi kelimeleri ve altın gibi metal kelimeleri saymak gibi bazı yaygın kelimelerin anlamlarını öğrenmeye devam etti ve hayvanlarda benzer kelimeler nispeten doğrudur.

Eğitim sonuçlarımızı daha kapsamlı gözlemleyebilmek için, yüksek boyutlu kelime vektörlerini görselleştirmek için sklearn'de TSNE kullanıyoruz. Daha fazla ayrıntı için:

Yukarıdaki resimde yüksek boyutlu kelime vektörü, TSNE'den geçen mesafeye göre iki boyutlu bir koordinat sisteminde gösterilmektedir.Resim halihazırda git kütüphanesindedir.Orijinal resmi görmek isteyenler gitmek için git ~

Ayrıntılara bakalım:

Yukarıda, tüm büyük görüntünün kısmi bir alanı gösterilmektedir ve etkinin oldukça iyi olduğunu görebilirsiniz.

Etkiyi iyileştirmek için ipuçları:

  • Eğitim örneklerini artırmak, külliyat ne kadar büyükse model o kadar öğrenilebilir bilgi öğrenebilir.

  • Pencere boyutunu artırarak daha fazla bağlamsal bilgi elde edilebilir.

  • Gömme boyutunu artırmak, boyutsal bilgi kaybını azaltabilir, ancak çok büyük olmamalıdır.Genellikle 50-300 arası bir ölçek kullanırım.

ek:

Çince kelime vektör hesaplama kodu da git kodunda sağlanmıştır. Aynı zamanda, bir Çince eğitim külliyatı sağlanır. Derleme, bir işe alım web sitesinden taradığım işe alım verileridir ve kelime segmentasyonu ve durdurma kelimelerinin kaldırılmasını gerçekleştirdim (git'den temin edilebilir), ancak külliyat çok küçük ve eğitim etkisi değil bu iyi.

Yukarıdakiler modelle eğittiğim Çince verilerdir. Word ve excel, office gibi bazı anlambilimlerin çok yakın olduğunu, ppt ve proje, kelime işleme vb. Mantıksal düşünme ve dil ifadesi gibi bazı anlambilimlerin çıkarıldığını görebilirsiniz, ancak genel etki hala devam ediyor Çok kötü. Bir yandan, külliyatın boyutu çok küçük (sadece 70 megabaytlık bir külliyat), diğer yandan model ayarlanmamış. İlgilenen öğrenciler daha iyi sonuçlar olup olmayacağını görmeye çalışabilirler.

Kodun tamamını görün:

Leifeng.com'da İlgili Okumalar:

Doğal dil işlemeye (NLP) başlayamayacağınızdan değil, ancak onu açmanın doğru yolunu bulamadınız

Yüz algılama-OpenCV teknik öğreticisine ulaşmak için 25 satır Python kodu

Gece Okuma Büyük Kalp! Yeni evliler rayda gelinlik aldıklarında treni durdurmak zorunda kaldılar | 12 yaşındaki çocuk annesini öldürdükten sonra okula gidebilir mi diye sordu
önceki
"FIFA 19" hakkında bilmeniz gereken birkaç ayrıntı
Sonraki
Bugün yayınlanan "Blade Runner 2049", yönetmen "Wa Shen" beş süper önemli anı açıkladı
Röportaj | Bu Miyazaki öğrencisinin pek çok bilgisi var
"Gizli Savaş" Zhao Liying'in değişken bir tarzı var ve ikili bir hayatı yorumlamak için oyunculuk becerilerini zorluyor
ADF4351 ve FPGA'ya Dayalı Sentetik Frekans Kaynağı Tasarımı
Vivo NEX çift ekranlı versiyonun resmi duyurusu: ön ve arka lensler entegre edilmiştir ve ekran / vücut oranı harika! Resmi HD resmi ekleyin
"Dead or Alive 6" E32018 gerçek makine demosu, milk shake gerçekten gitti
Harvard China Forum Nisan'da açılıyor, 75.000 USD Girişimcilik Yarışması için geri sayım yapıyor
Taoying Daily Wu Jing ve Liu Yifei, Tokyo Film Festivali'nde "Altın Turna Ödülü" nü kazandı
Topluluk içinde yalnız yaşayan bu "yüksek hane halkı kaydı" yaşlı adam 200.000 hesap cüzdanını saklamak için verdi
Comma.ai, otonom sürüş için yeni iş fırsatlarını koklayan, açık kaynaktan sonra ilk yerli benimseyen kişi mi?
Kadın bir komedyenden güçlü bir gruba nasıl yaptı?
Step motorun çalışma prensibi
To Top