Keras'ta bir sinir makinesi çeviri sistemi nasıl geliştirilir?

Bu makale, Lei Feng'in altyazı grubu tarafından derlenen teknik bir blogdur, orijinal başlığı Keras'ta Scratch'ten Nöral Makine Çeviri Sistemi Nasıl Geliştirilir ve yazarı Jason Brownlee'dir.

Tercüme | Cao Yongsheng Lin Lihong Düzeltme Okuması | Fan Jiang

Makine çevirisi, oldukça karmaşık dil bilgisi kullanılarak geliştirilen bazı büyük istatistiksel modelleri içeren zorlu bir görevdir.

Nöral makine çevirisinin çalışma prensibi, makine çevirisi sorunlarını çözmek için derin sinir ağlarını kullanmaktır.

Bu eğitimde, Almancayı İngilizceye çevirmek için kullanılabilecek bir nöral makine çeviri sisteminin nasıl geliştirileceğini öğreneceksiniz.

Bu öğreticiyi tamamladıktan sonra şunları öğreneceksiniz:

  • Nöral makine çeviri sistemini eğitmek için verileri temizleme ve hazırlama

  • Makine çevirisi için bir kodlayıcı-kod çözücü modeli nasıl geliştirilir

  • Yeni girdi cümleleri hakkında akıl yürütmek ve model becerilerini değerlendirmek için iyi eğitilmiş bir model nasıl kullanılır?

Hadi başlayalım.

Keras'ta bir sinir makinesi çeviri sistemi nasıl geliştirilir Fotoğraf Björn Groß'un izniyle

Eğiticiye genel bakış

Eğitim 4 bölüme ayrılmıştır:

  • Almancadan İngilizceye çevrilmiş veri seti

  • Metin verilerini hazırlayın

  • Nöral çeviri modelini eğitme

  • Nöral çeviri modellerinin değerlendirilmesi

  • Python ortamı

    Bu eğitim, Python 3 SciPy ortamını kurduğunuzu varsayar.

    Keras'ı (2.0 veya üstü) TensorFlow veya Theano arka uç ile yüklemelisiniz.

    Bu öğretici ayrıca NumPy ve Matplotlib'i zaten kurduğunuzu varsayar.

    Kurulum ortamı ile ilgili olarak, yardıma ihtiyacınız olursa lütfen şu makaleye bakın:

    • Anaconda ile Makine Öğrenimi ve Derin Öğrenme için Python Ortamı Nasıl Kurulur

    Almancadan İngilizceye çevrilmiş veri seti

    Bu eğitimde, dil öğrenimi için bilgi kartlarının temeli olarak Almanca'dan İngilizce'ye veri setini kullanacağız.

    Veri seti ManyThings.org'dan temin edilebilir ve vaka Tatoeba Projesi'nden alınmıştır. Veri seti Almanca sözcük öbekleri ve İngilizce sözcüklerden oluşuyor ve Anki flashcard yazılımını kullanıyoruz.

    Bu sayfa birçok dil çiftinin bir listesini sağlar, diğer dilleri keşfetmenizi tavsiye ederim:

    Sekmeyle Ayrılmış İki Dilli Cümle Çiftleri

    Bu eğiticide kullanılan veri kümesi buradan indirilebilir:

    Almanca - İngilizce deu-eng.zip

    Veri kümesini mevcut çalışma dizinine indirin ve sıkıştırmayı açın; örneğin:

    Deu.txt adında bir dosyanız olacak. Txt, Almanca aşamasında 152.820 çift İngilizce içerir, her satırın bir satırı vardır ve dilleri ayırmak için bir etiket vardır.

    Örneğin dosyanın ilk 5 satırı şu şekilde görünür:

    Giriş olarak Almanca kelime ve cümle dizisini kullanıyoruz ve bunları İngilizce kelime ve cümle dizisine çeviriyoruz Bu bizim tahmin problemimiz.

    Geliştirilen model, başlangıç seviyesindeki bazı Almanca ifadeler için uygun olacaktır.

    Metin verilerini hazırlayın

    Sonraki adım, metin verilerini modelleme için hazırlamaktır.

    İlk önce orijinal verilere bakın Lütfen gördüğünüz her şeyin muhtemelen veri temizleme sürecinde ihtiyacımız olan şey olduğunu unutmayın.

    Örneğin, orijinal verileri incelerken lütfen aşağıdakilere dikkat edin:

    • Noktalama işaretleri var.

    • Metin büyük ve küçük harf içeriyor.

    • Almanca'da bazı özel karakterler var.

    • İngilizce ve farklı Almanca çevirilerinde tekrarlanan ifadeler var.

    • Bu dosya cümle uzunluğuna göre sıralanmıştır ve dosyanın sonunda çok uzun cümleler vardır.

    İyi bir metin temizleme programı bu sorunların bir kısmını veya tamamını halledebilir.

    Veri hazırlama iki bölüme ayrılmıştır:

  • Belgeleri temizleyin

  • Ayrı belge

  • 1. Belgeleri temizleyin

    Öncelikle, verileri Unicode Almanca karakterleri kaydedecek şekilde yüklemeliyiz. Aşağıdaki işlev load_doc olarak adlandırılır ve dosyayı bir metin blobu olarak yükler.

    Her satır, önce İngilizce, ardından Almanca ve ardından sekmelerle ayrılmış bir çift kelime öbeği içerir.

    Yüklenen metni satır satır bölmeliyiz. To_pairs işlevi yüklenen metni böler.

    Artık her cümleyi temizlemeye hazırız. Gerçekleştireceğimiz belirli temizleme işlemleri aşağıdaki gibidir:

    • Tüm çıktı olmayan karakterleri silin.

    • Tüm noktalama karakterlerini kaldırın.

    • Tüm Unicode karakterlerini ASCII'ye (Latin karakterleri gibi) normalleştirin.

    • Vakaları küçük harfe göre normalleştirin.

    • Alfabetik sırada olmayan tüm simgeleri silin.

    Bu işlemleri yüklenen veri setindeki her bir ifade çifti üzerinde gerçekleştireceğiz.

    Clean_pairs işlevi bu işlemleri gerçekleştirir.

    Son olarak, veriler temizlendiğine göre, kelime öbeği çiftlerinin listesini kullanılacak bir dosyaya kaydedebiliriz.

    Save_clean_data işlevi temiz metin listesini bir dosyaya kaydetmek için pickle API'yi kullanır.

    Tüm bunları bir araya getirdiğimizde, tam örnek aşağıda listelenmiştir.

    Bu örneği çalıştırmak, geçerli çalışma dizininde "english-german.pkl" adlı bir temizleme metni oluşturacaktır.

    Temizlemenin beklendiği gibi yapıldığını doğrulamak üzere çalışmanın sonunda bunları değerlendirebilmemiz için bazı temizleme metni örnekleri yazdırılır.

    2. Ayrı metin

    Temizlenen veriler, bazıları dosyanın sonuna kadar çok uzun olan 150.000'den fazla ifade çifti içerir.

    Bu, küçük bir çeviri modeli geliştirmek için iyi bir örnektir. Modelin karmaşıklığı örneklerin sayısı, kelime öbeği uzunluğu ve kelime dağarcığı ile artar.

    Modelleme için iyi bir veri setimiz olmasına rağmen, modelin gerektirdiği modelin boyutunu büyük ölçüde küçültmek ve gerekli eğitim süresini modele uygun bir zamana dönüştürmek için bu sorunu biraz basitleştireceğiz.

    Uzantı olarak daha eksiksiz bir veri kümesi üzerinde bir model geliştirebilirsiniz. Veri setini dosyadaki ilk 10.000 örneğe indirerek sorunu basitleştireceğiz; bunlar veri setindeki en kısa ifadeler olacaktır.

    Ek olarak, ilk 9000 örneği eğitim örnekleri olarak ve kalan 1.000 örneği de uyum modelini test etmek için kullanacağız.

    Aşağıda, temiz verileri yükleyen, bölen ve verilerin bölünmüş kısmını yeni bir dosyaya kaydeden eksiksiz bir örnek bulunmaktadır.

    Bu örneği çalıştırmak üç yeni dosya oluşturur: max cümle uzunluğu ve kelime listesi gibi problem parametrelerini tanımlamak için kullanabileceğimiz tüm eğitim ve test örneklerini içeren english-german-both.pkl ve english-german-train .pkl ve ingilizce-almanca-test.pkl dosyaları. Eğitim ve test veri kümeleri için Pkl dosyaları.

    Artık çeviri modelini geliştirmeye hazırız.

    Nöral çeviri modelini eğitme

    Bu bölümde bir çeviri modeli oluşturacağız.

    Bu bölüm, temizlenmiş metin verilerinin modele yüklenmesini ve hazırlanmasını ve ardından modelin bu veriler üzerinde tanımlanmasını ve eğitilmesini içerir.

    Veri hazırlamayı kolaylaştırmak için veri setini yüklemeye başlayalım. Aşağıdaki işlev: load_clean_sentences, eğitim veri kümesini yüklemek için kullanılır ve bunun tersi, test veri kümesini de yükleyebilir.

    Eğitimi kullanacağız veya birleştireceğiz, test veri seti sorunun maksimum uzunluğunu ve kelime dağarcığını tanımlar.

    Oldukça basit. Bu öznitelikleri ayrı bir veri kümesinden tanımlayabilir ve ardından çok uzun olan veya test kümesindeki kelime dağarcığını aşan örnekleri kısaltabiliriz.

    Modelleme için gerekli olduğu üzere kelimeleri sayısal değerlerle eşlemek için Keras Tokenize sınıfını kullanıyoruz. İngilizce ve Almanca diziler için ayrı bir belirteç kullanacağız. Aşağıdaki işlev, create_tokenizer'ın bir kalıplar listesinde eğiteceği bir belirteçtir.

    Benzer şekilde, max_length işlevi bir kelime listesindeki en uzun diziyi bulacaktır.

    Token üreteci, kelime haznesi boyutu ve maksimum uzunluk, İngilizce ve Almanca cümleleri hazırlamak için bu fonksiyonları arayabilir ve veri setini birleştirebiliriz.

    Artık veri setini eğitmeye başlamaya hazırız.

    Her bir giriş ve çıkış dizisi bir sayı olarak kodlanmalı ve maksimum kelime uzunluğu ile doldurulmalıdır.

    Bunun nedeni, çıktı dizisi için gömülü bir sözcük kullanmak ve çıktı dizisini ısı ile kodlamak istememizdir. Aşağıdaki işlev: encode_sequences bu işlemleri gerçekleştirebilir ve sonucu döndürebilir.

    Çıktı dizisinin bir kez çalışırken kodlanması gerekir. Bunun nedeni, modelin çıktı olarak her bir kelimenin olasılığını tahmin etmesidir.

    Encode_output işlevi İngilizceyi çıktı dizisine sıcak kodlayacaktır.

    Bu iki işlevi, eğitim modelleri için eğitim ve test veri setleri hazırlamak için kullanabiliriz.

    Şimdi modeli tanımlamaya başlayabilirsiniz.

    Bu sayıda, kodlayıcı-kod çözücü LSTM modelini kullandık. Bu mimaride, çıktı dizisi, bir ön uç model kodlayıcı tarafından kodlanan bir dizidir ve arka uç model, kelime kelime kodunu çözen bir kod çözücü olarak adlandırılır.

    Define_model işlevi, modeli tanımlar ve modeli ayarlamak için giriş ve çıkış kelime haznesi boyutu, maksimum giriş ve çıkış kelime uzunluğu ve maksimum bellek birimi sayısı gibi bazı parametreleri kullanır.

    Bu model ayarı, bu sorun için uygun değildir, bu da onu ayarlamak ve çeviri becerilerini geliştirmek için çok fazla potansiyele sahip olduğunuz anlamına gelir.

    Son olarak modeli eğitmeye başlıyoruz.

    64 toplu iş boyutuna sahip tüm örnek veri kümelerinde 30 eğitim yinelemesini tamamlıyoruz

    Test setinde modelin becerileri her geliştiğinde modelin bir dosyaya kaydedilmesini sağlamak için kontrol noktaları kullanırız.

    Bunların hepsini bir araya getirip sinirsel çeviri modellerine uygulayabiliriz.

    Tam çalışma örneği aşağıda listelenmiştir.

    Kelime boyutu ve maksimum cümle uzunluğu gibi veri setinin parametrelerinin bir özetini yazdırmak için önce örneği çalıştırın.

    Ardından, tanımlı modelin bir özetini yazdırarak model yapılandırmasını onaylamamıza izin verin.

    Model konfigürasyonuna başka bir bakış açısı sağlayan modelin bir diyagramı da oluşturuldu.

    Ardından modeli eğitmeye başlarız.

    Modern CPU donanımı çağ başına yaklaşık 30 saniye sürer; GPU gerekmez.

    Çalıştırma sırasında model, bir sonraki adımda çıkarıma hazır olan model.h5 dosyasına kaydedilecektir.

    Sinir ağı çeviri modelini değerlendirin

    Eğitim ve test veri setlerini değerlendireceğiz.

    Model, eğitim veri setinde çok iyi performans göstermelidir ve ideal olarak test veri setinde iyi performans gösterecek şekilde genişletilmiştir.

    İdeal olarak, modelin test seti yerine eğitim sırasında seçilmesine yardımcı olmak için ayrı bir doğrulama veri seti kullanırız. Bunu bir uzantı olarak deneyebilirsiniz.

    Temizlenmiş veri seti önceden olduğu gibi yüklenmeli ve hazırlanmalıdır.

    Daha sonra, eğitim sırasında kaydedilen en iyi model yüklenmelidir.

    Değerlendirme iki adımdan oluşur: önce çevrilmiş çıktı sırasını oluşturun, ardından bu süreçte birçok girdi örneğini tekrarlayın ve birden çok durumda modelin becerilerini özetleyin.

    Çıkarımdan başlayarak, model tüm çıktı sırasını tek seferde tahmin edebilir.

    Bu, kelimelere geri dönmek için jetonlaştırıcıda numaralandırabileceğimiz ve arayabileceğimiz bir dizi tam sayıdır.

    Aşağıdaki word_for_id işlevi bu ters eşlemeyi gerçekleştirecektir:

    Bu eşleştirmeyi çevirideki her tam sayıya uygulayabilir ve sonucu bir kelime dizgisi olarak döndürebiliriz. Aşağıdaki tahmin_dizisi işlevi, bunu tek bir kodlanmış kaynak deyim için yapar.

    Daha sonra, bu işlemi veri setindeki her kaynak kelime öbeği için tekrarlayabilir ve tahmin sonucunu İngilizce beklenen hedef cümle ile karşılaştırabiliriz.

    Modelin uygulamadaki performansını filtrelemek için ekrana bazı karşılaştırma sonuçlarını yazdırabiliriz.

    Modelin nasıl performans gösterdiğine dair nicel bir fikir edinmek için BLEU puanını da hesaplayacağız.

    Eval_model işlevi, sağlanan veri kümesindeki her kelime öbeği için yukarıdaki tahmin_dizisi işlevini çağırarak bu içeriği uygular.

    Bunların hepsini birleştirip yüklü modeli eğitim ve test veri setlerinde değerlendirebiliriz.

    Tam kod ekranı aşağıda verilmiştir:

    Önce kaynak metni, beklenen ve tahmin edilen çeviri örneklerini ve eğitim veri setinin puanını yazdırmak için örneği çalıştırın ve ardından test veri setini yazdırın.

    Veri kümesinin rastgele karıştırılması ve sinir ağının rastgeleliği göz önüne alındığında, özel sonuçlarınız farklı olacaktır.

    Öncelikle test veri setinin sonuçlarına baktığımızda bu çevirilerin okunabilir ve çoğunun doğru olduğunu görebiliriz.

    Örneğin: "ich liebe dich" doğru bir şekilde "seni seviyorum" olarak çevrilmiştir

    BLEU-4 puanının 0,51 olduğunu da görebiliriz ki bu da bu modelden bekleyebileceğimiz üst sınırı sağlar.

    Test setinin sonuçlarına bakmak ve okunabilir çevirilere bakmak kolay bir iş değildir.

    Örneğin, "ich mag dich nicht" in "Senden hoşlanmıyorum" olarak çevrildiğini görüyoruz.

    Bazı kötü çeviriler ve iyi bir örnek de gördük. Model daha fazla ayarlanabilir. Örneğin, "ich bin etwas beschwipst" beklenen "biraz sarhoşum" yerine "biraz var" anlamına gelir.

    BLEU-4 puanı 0.076238 olup, modeli daha da geliştirmek için temel bir beceri sağlar.

    genişletmek

    Bu bölüm, tartışmayı genişletmek isteyebileceğiniz bazı fikirleri listeler.

    • Veri temizleme . Veriler üzerinde, noktalama işaretlerini kaldırmama veya büyük harfleri normalleştirme ya da yinelenen İngilizce cümleleri kaldırma gibi farklı veri temizleme işlemleri gerçekleştirebilirsiniz.

    • Sözlük . Kelime dağarcığını iyileştirebilir veya veri kümesinde 5 veya 10 defadan az kullanılan kelimeleri silebilir ve bunları "unk" ile değiştirebilirsiniz.

    • Daha fazla veri . Modele uyması için kullanılan veri seti 50.000, 100.000 cümle veya daha fazlasına genişletilebilir.

    • Giriş sırası . Giriş cümlelerinin sırası, yetenekleri geliştirdiği bildirilen tersine çevrilebilir veya çift yönlü bir giriş katmanı kullanılabilir.

    • Katman sayısı . Kodlayıcı ve kod çözücü modelleri, ek katmanlarla genişletilebilir ve modele daha fazla karakterizasyon yeteneği sağlamak için daha fazla eğitim yinelemesi gerçekleştirilir.

    • Depolama ünitesi . Kodlayıcı ve kod çözücüdeki bellek birimlerinin sayısı, model için daha fazla karakterizasyon yeteneği sağlamak üzere artırılabilir.

    • Düzenli . Model, ağırlık veya aktivasyon düzenleme gibi bir düzenlilik kullanabilir veya LSTM katmanında düşüş kullanabilir.

    • Önceden eğitilmiş kelime vektörü . Modelde önceden eğitilmiş kelime vektörleri kullanılabilir

    • Özyinelemeli model . Modelin özyinelemeli formülü kullanılabilir, burada çıkış sırasındaki bir sonraki kelime giriş sırasına ve o ana kadar üretilen çıktı sırasına göre koşullandırılabilir.

    daha fazla okuma

    İşte bu konuyla ilgili bazı materyaller, daha fazlasını öğrenmek isterseniz, bu içerikleri inceleyebilirsiniz.

    Kodlayıcı-Kod Çözücü Uzun Kısa Süreli Bellek Ağları

    sonuç olarak

    Bu eğitimde, Almanca kelimeleri İngilizceye çevirmek için bir sinirsel çeviri sisteminin nasıl kurulacağını öğrenebilirsiniz.

    Özellikle şu noktaları öğrendim:

    • Veriler nasıl temizlenir ve nöral çeviri sistemini eğitmek için veriler nasıl hazırlanır

    • Makine çevirisi için bir kodlayıcı-kod çözücü modeli nasıl geliştirilir

    • Yeni girdi cümleleri hakkında akıl yürütmek ve modelin becerilerini değerlendirmek için iyi eğitilmiş bir model nasıl kullanılır?

    Orijinal blog sitesi: https://machinelearningmastery.com/develop-neural-machine-translation-system-keras/

    Daha fazla makale için Leifeng.com'u takip edin, Leiphonefansub WeChat hesabını (leiphonefansub) arkadaş olarak ekleyin

    Yapay Zeka Gönüllüsü Olmak İçin "Katılmak istiyorum" açıklaması

    Lei Feng Ağı Lei Feng Ağı

    Odayı önceden alın, mutlu olun! Şuna bir bak, endişelen! COFCO Hongyun'un yüzlerce sahibi evleri kabul etmeyi reddetti
    önceki
    "Yeni Oolong Avlusu" nda Zeng Zhi'nin büyük kötü adamı göründü, Wang Ning Kong Lianshun bir saniyede otoriter bir şekilde ortaya çıktı.
    Sonraki
    İnternet ünlüsü "Bayan Dong" nereye gidiyor? Trump, Çin-ABD ilişkilerini yeniden başlatabilir mi? Büyük kafa kanalı
    2018 MC puan özeti: Switch en çok şahesere sahiptir ve PC en yüksek ortalama kaliteye sahiptir
    Disney bunu bulutları oluşturmak için kullanıyor mu? Işık radyasyonu tahmini sinir ağının gücü nedir? | 2 dakikalık kağıt
    IFA2017 Sony Xperia amiral gemisi yeni makinesi Xperia XZ1'i piyasaya sürdü
    Bilgi Popülerleştirme Intelligent Weak Current Knowledge Ethernet Switch Arayüz Tipi
    Zeng Guofan, Zuo Zongtang ve Huxiang Kültürü Arkadaşlar Konuşuyor No. 226
    İkinci bir çocuğa sahip olmaya ve bir MPV almayı planlayın, hangisini seçmelisiniz?
    Giysilerin üzerine yazılan sıcak öğeler nelerdir? Neden bu kadar sıcak
    Kader, sen tam bir "Muhteşem Weiyang" Jingjing Kültürü
    Sony, yeni Black Card serisi RX0'ı resmi olarak piyasaya sürdü
    Satış öncesi fiyattan 10.000 daha düşük olan VV6, zeka sayesinde WEY lüks SUV'nin hakim konumunu oluşturabilir mi?
    Beğen = okundu mu? Selfie = nefret mi çekiyor? En eksiksiz arkadaş çevresi görgü kurallarına cevap veriyor!
    To Top