Bu makale PaddlePaddle'dan yeniden üretilmiştir
Qubit Düzenleyici | Genel Hesap QbitAI
Makine çevirisi (MT), farklı diller arasında çeviri yapmak için bilgisayarları kullanan bir teknolojidir. Çevrilecek dil genellikle kaynak dil olarak adlandırılır ve sonuçta ortaya çıkan çeviri dili hedef dil olarak adlandırılır. Makine çevirisi, kaynak dilden hedef dile dönüşümün gerçekleştirilmesi sürecidir ve doğal dil işlemenin önemli araştırma alanlarından biridir.
Bu makale, klasik uçtan uca sinir ağı makine çevirisi Seq2Seq modelini ve eğitim için PaddlePaddle'ı nasıl kullanacağınızı anlamanıza yardımcı olacaktır. Daha iyi bir çeviri modeli uygulamak istiyorsanız, lütfen GitHub model kitaplığındaki Transformer uygulamasına bakın.
Seq2Seq proje adresi: https://github.com/PaddlePaddle/book/blob/develop/08.machine_translation/README.cn.md
Transformatör proje adresi: https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/neural_machine_translation/transformer
Arka plan tanıtımı
İlk makine çevirisi sistemleri çoğunlukla kural tabanlı çeviri sistemleriydi ve dilbilimcilerin iki dil arasındaki dönüştürme kurallarını yazmaları ve ardından bu kuralları bilgisayara girmeleri gerekiyordu. Bu yöntem dilbilimciler için çok zahmetlidir ve iki veya daha fazla dili bırakın, bir dilin kullanacağı tüm kuralları neredeyse hiç özetleyemeyiz. Böylece istatistiksel makine çevirisi (İstatistiksel Makine Çevirisi, SMT) teknolojisi ortaya çıktı.
İstatistiksel makine çevirisi teknolojisinde, dönüşüm kuralları bizim tarafımızdan sağlanmak yerine otomatik olarak makine tarafından büyük ölçekli külliyattan öğrenilir. Bu nedenle, kural tabanlı çeviri sistemlerinin karşılaştığı bilgi edinme darboğazı sorununun üstesinden gelir, ancak yine de birçok zorluk vardır:
Son yıllarda, derin öğrenme teknolojisinin gelişimi, yukarıdaki zorlukları çözmek için yeni fikirler sağlamıştır. Derin öğrenmeyi makine çevirisi görevlerine uygulama yöntemleri kabaca iki kategoriye ayrılabilir:
Sonuçları göster
Örnek olarak Çince-İngilizce çeviri (Çince'den İngilizceye) modelini ele alalım. Model eğitildiğinde, aşağıdaki parçalı Çince cümleyi girerseniz:
Görüntülenen çeviri sonuçlarının sayısı 3 olarak ayarlanmışsa, oluşturulan İngilizce cümleler aşağıdaki gibidir:
Soldan ilk sütun, oluşturulan cümlenin sıra numarasıdır; soldan ikinci sütun cümlenin puanıdır (büyükten küçüğe), puan ne kadar yüksekse o kadar iyidir; soldan üçüncü sütun, oluşturulan İngilizce cümledir.
Ayrıca iki özel işaret vardır: cümlenin sonu anlamına gelir, bilinmeyen kelime, yani eğitim sözlüğünde görünmeyen kelime anlamına gelir.
Modele genel bakış
Bu bölüm Çift Yönlü Tekrarlayan Sinir Ağını, NMT modelindeki tipik Kodlayıcı-Kod Çözücü çerçevesini ve sırayla ışın arama algoritmasını tanıtır.
Çift yönlü tekrarlayan sinir ağı
Burada gazetede Bengio ekibi tarafından önerilen başka bir yapıyı tanıtıyoruz. Bu yapının amacı, bir diziyi girmek ve her an onun karakteristik gösterimini elde etmektir, yani her çıktı anı, o ana kadar bağlamsal anlamsal bilgiyi temsil etmek için sabit uzunlukta bir vektör kullanır.
Spesifik olarak, iki yönlü tekrarlayan sinir ağı, giriş sırasını zaman boyutunda sırayla ve ters sırada, yani sırasıyla ileri ve geri işler ve her zaman adımında RNN'nin çıktısını sonuncuya ekler. Çıktı katmanı. Bu şekilde, her zaman adımının çıkış düğümü, giriş dizisindeki geçerli anın tam geçmiş ve gelecek bağlam bilgisini içerir. Aşağıdaki şekil, zaman adımlarında açılan çift yönlü bir döngüsel sinir ağını göstermektedir. Ağ, altı ağırlık matrisine sahip bir ileri ve bir geri RNN içerir: ileri gizli katmana giriş ve geri gizli katman ağırlık matrisi (W1, W3), gizli katman kendi ağırlık matrisine gizli katman (W2 , W5), ileri gizli katmandan ve geriye gizli katmandan çıktı katmanına (W4, W6) ağırlık matrisi. Ağın ileri gizli katmanı ile geriye dönük gizli katmanı arasında bağlantı olmadığını unutmayın.
Şekil 2: Zaman adımlarında ortaya çıkan çift yönlü tekrarlayan sinir ağıKodlayıcı-kod çözücü çerçevesi
Kodlayıcı-Kod Çözücü çerçevesi, gelişigüzel uzunluktaki bir kaynak dizinin rasgele uzunluktaki başka bir hedef diziye dönüştürülmesi sorununu çözmek için kullanılır. Yani, kodlama aşaması, tüm kaynak dizisini bir vektöre kodlar ve kod çözme aşaması, tahmin edilen dizinin olasılığını maksimize ederek tüm hedef dizinin kodunu çözer. Kodlama ve kod çözme işlemleri genellikle RNN kullanılarak gerçekleştirilir.
Şekil 3: Kodlayıcı-kod çözücü çerçevesiKodlayıcı
Kodlama aşaması üç adıma bölünmüştür:
Üçüncü adımda, iki yönlü tekrarlayan sinir ağı, iki yönlü GRU'larla uygulanabilen daha karmaşık cümle kodlama temsillerini uygulamak için de kullanılabilir. İleri GRU, kaynak dil son kelimelerini kelime dizisi sırasına göre (x1, ..., xT) kodlar ve bir dizi gizli katman durumu elde eder
. Benzer şekilde, geriye dönük GRU, kaynak dil son sözcüklerini (xT, ..., x1) sırasına göre kodlar.
. Son olarak, xi kelimesi için gizli durumu, iki GRU'nun sonuçlarının birleştirilmesiyle elde edilir, yani hi =
.
Şekil 4: Çift yönlü GRU kullanan kodlayıcıkod çözücü
Makine çevirisi görevinin eğitim sürecinde, kod çözme aşamasının amacı, bir sonraki doğru hedef dil kelimesinin olasılığını en üst düzeye çıkarmaktır. Fikir şudur:
Her an, kaynak dil cümlesinin kodlama bilgisine (bağlam vektörü olarak da adlandırılır) c, gerçek hedef dil dizisinin i-inci kelime ui'sine ve i zamanında RNN'nin gizli katman durumu zi'ye göre, bir sonraki gizli katman durumu zi hesaplanır. +1. Aşağıdaki şekilde hesaplanmıştır:
'doğrusal olmayan bir etkinleştirme işlevi olduğunda; c, kaynak dil cümlesinin bağlam vektörüdür. Dikkat mekanizması kullanılmadığında, kodlayıcının çıktısı kaynak dil cümlesini kodladıktan sonra son öğe ise, c = ht tanımlanabilir ; Ui, hedef dil dizisindeki i-inci kelimedir, u0, hedef dil dizisinin başlangıç etiketidir < s > , Kod çözmenin başlangıcını belirtir; zi, i zamanında kodu çözülen RNN'nin gizli durumudur ve z0, tümü sıfırların bir vektörüdür.
Makine çevirisi görevinin oluşturma süreci, genel olarak, kaynak dil cümlesini önceden eğitilmiş modele göre çevirmektir. Oluşturma sürecindeki kod çözme aşaması, yukarıdaki eğitim sürecinden farklıdır.Ayrıntılar için lütfen sütun arama algoritmasına bakın.
Çubuk arama algoritması
Işın arama, bir grafik veya ağaçta sınırlı bir kümede optimum genişletme düğümünü aramak için kullanılan sezgisel bir grafik arama algoritmasıdır. Genellikle çok büyük çözüm alanlarına (makine çevirisi, konuşma tanıma gibi) sahip sistemlerde kullanılır. Bunun nedeni, belleğin aşağıdaki şekil veya ağaçtaki tüm genişletilmiş çözümleri tutamamasıdır. Bir makine çevirisi görevinde çeviri yapmak istiyorsanız " < s > selam < e > ", hedef dil sözlüğünde yalnızca 3 kelime olsa bile ( < s > , < e > , merhaba), sonsuz cümle oluşturmak da mümkündür (merhaba döngülerinin sayısı değişkendir) Daha iyi bir çeviri sonucu bulmak için sütun arama algoritmasını kullanabiliriz.
Sütun arama algoritması, bir arama ağacı oluşturmak için genişlikte bir strateji kullanır.Ağacın her seviyesinde, düğümler sezgisel maliyete (bu eğiticide, oluşturulan kelimelerin günlük olasılıklarının toplamı) ve ardından yalnızca önceden belirlenmiş Düğüm sayısı (literatürde genellikle kiriş genişliği, kiriş boyutu, sütun genişliği vb. Olarak adlandırılır). Sadece bu düğümler bir sonraki katmanda genişlemeye devam edecek ve diğer düğümler budanacak, yani daha yüksek kaliteli düğümler korunacak ve düşük kaliteli düğümler budanacak. Bu nedenle, aramanın kapladığı alan ve zaman büyük ölçüde azalır, ancak dezavantaj, optimum çözümün garanti edilememesidir.
Sütun arama algoritmasının kod çözme aşamasını kullanarak, amaç bir dizi oluşturma olasılığını en üst düzeye çıkarmaktır. Fikir şudur:
Not: zi + 1 ve pi + 1'in hesaplama formülleri, kod çözücüdekilerle aynıdır. Ve neslin her adımı açgözlü yöntemle gerçekleştirildiğinden, küresel olarak en uygun çözümü elde etmek garanti edilmez.
Veri girişi
Bu öğretici, eğitim seti olarak WMT-14 veri setindeki biteksleri (seçildikten sonra) ve test seti ve üretim seti olarak dev + test verilerini kullanır.
Veri ön işleme
Ön işlem sürecimiz iki adımdan oluşur:
Her paralel topluluk dosyasını kaynak dilden hedef dile tek bir dosyada birleştirin:
Her bir XXX.src ve XXX.trg dosyasını XXX olarak birleştirin.
XXX'deki i'inci satırın içeriği, XXX.src'deki i'inci satır ile XXX.trg'deki i'inci satır arasındaki, '' ile ayrılmış bağlantıdır.
Eğitim verilerinin "kaynak sözlüğünü" ve "hedef sözlüğünü" oluşturun. Her sözlüğün DICTSIZE kelimeleri vardır, bunlara şunlar dahildir: korpustaki en yüksek kelime sıklığına (DICTSIZE-3) sahip kelimeler ve 3 özel sembol < s > (Sıranın başlangıcı), < e > (Sıranın sonu) ve < unk > (Kayıtsız kelime).
Örnek veri
Tam veri seti büyük miktarda veriye sahip olduğundan, eğitim sürecini doğrulamak için PaddlePaddle arabirimi paddle.dataset.wmt14 varsayılan olarak önceden işlenmiş, daha küçük ölçekli bir veri kümesi sağlar.
Veri setinde 193.319 eğitim verisi, 6003 test verisi ve sözlük uzunluğu 30.000'dir. Veri boyutunun sınırlandırılması nedeniyle, bu veri seti kullanılarak eğitilen modelin etkisi garanti edilemez.
Model yapılandırma talimatları
Daha sonra modeli giriş verilerinin şekline göre yapılandırmaya başlarız. Önce gerekli kütüphane işlevlerini tanıtın ve genel değişkenleri tanımlayın.
Ardından kodlayıcı çerçevesini aşağıdaki gibi uygulayın:
Ardından kod çözücüyü eğitim modunda uygulayın:
Kod çözücüyü spekülatif modda uygulayın:
Ayrıca, inference_program ile hesaplanan sonucu kullanmak için bir train_program tanımlıyoruz ve etiketli veriler yardımıyla hatayı hesaplıyoruz. Ayrıca optimize ediciyi tanımlamak için bir optimizer_func tanımlarız.
Eğitim modeli
Eğitim ortamını tanımlayın
Eğitim ortamınızı tanımlayın, eğitimin CPU'da mı yoksa GPU'da mı yapılacağını belirtebilirsiniz.
Veri sağlayıcıyı tanımlayın
Sonraki adım, eğitim ve test için veri sağlayıcıları tanımlamaktır. Sağlayıcı BATCH_SIZE verisini okur. paddle.dataset.wmt.train, her seferinde karıştırıldıktan sonra BATCH_SIZE veri boyutu sağlar ve karıştırma boyutu buf_size arabellek boyutudur.
Bir eğitmen oluşturun (eğitmen)
Eğitmenin bir eğitim programına ve eğitim optimizasyon işlevine ihtiyacı vardır.
veri sağlamak
feed_order, üretilen her veri parçası ile paddle.layer.data arasındaki eşleme ilişkisini tanımlamak için kullanılır. Örneğin, wmt14.train tarafından oluşturulan ilk veri sütunu src_word_id özelliğine karşılık gelir.
Olay işleyicisi
Geri çağırma işlevi event_handler önceden tanımlanmış bir olay meydana geldikten sonra çağrılacaktır. Örneğin, her eğitim adımından sonra hatayı kontrol edebiliriz.
Antrenmana başla
Son olarak, eğitim döngülerinin sayısını (num_epoch) ve diğer bazı parametreleri aktarıyoruz ve eğitime başlamak için trainer.train'i çağırıyoruz.
Uygulama modeli
Kod çözme bölümünü tanımlayın
Çeviriden sonra karşılık gelen kimliği ve puanı tahmin etmek için yukarıda tanımlanan kodlayıcı ve kod çözücü işlevlerini kullanın.
Verileri tanımlayın
İlk olarak, giriş verisi olarak tensörleri oluşturmak için id ve skoru başlatıyoruz. Bu tahmin örneğinde, bir tahmin yapmak için wmt14.test verilerindeki ilk kaydı kullanıyoruz ve son olarak da karşılık gelen cümle sonuçlarını yazdırmak için "kaynak sözlüğü" ve "hedef sözlüğü" kullanıyoruz.
Ölçek
Şimdi tahminlerde bulunabiliriz. İd ve skor sonuçlarını almak için feed_order içinde karşılık gelen parametreleri sağlamamız ve yürütücü üzerinde çalıştırmamız gerekir.
sonuç olarak
Uçtan uca sinir ağı makine çevirisi, son yıllarda ortaya çıkan yepyeni bir makine çevirisi yöntemidir. Bu makalede, NMT'de tipik bir "kodlayıcı-kod çözücü" çerçevesi tanıttık. NMT tipik bir Seq2Seq (Sıradan Sıraya) öğrenme problemi olduğundan, Sorgu yeniden yazma, özetleme, tek turlu diyalog ve Seq2Seq'teki diğer problemlerin tümü bu öğreticinin modeliyle çözülebilir.
Referanslar
- Bitiş -
Samimi işe alım
Qubit, editörleri / muhabirleri işe alıyor ve merkezi Pekin, Zhongguancun'da bulunuyor. Yetenekli ve hevesli öğrencilerin bize katılmasını dört gözle bekliyoruz! Ayrıntılar için, lütfen QbitAI diyalog arayüzünde "işe alım" kelimesiyle yanıt verin.
Qubit QbitAI · Toutiao İmzalama Yazarı
' ' Yapay zeka teknolojisi ve ürünlerindeki yeni eğilimleri takip edin