Bu makale Jay Alammar'ın The Illustrated BERT, ELMo ve co. Blogundan çevrilmiştir. (How NLP Cracked Transfer Learning)
2018, makine öğrenimi modellerinin metni işlemesi için bir dönüm noktasıdır (daha doğrusu, doğal dil işleme veya kısaca NLP). Kelimeleri ve cümleleri temsil etmek için gizli anlambilim ve ilişkileri nasıl yakalayacağımız konusundaki anlayışımız da hızla gelişiyor. Buna ek olarak, NLP topluluğundaki bazı kişiler, ücretsiz olarak indirip kendi model ve ardışık düzenlerinizde kullanmanız için çok güçlü birçok modeli paylaştılar (bu, yıllar önce bilgisayar görüşünün hızlı gelişimine atıfta bulunan NLP'nin ImageNet anı olarak adlandırılır).
En son dönüm noktalarından biri, yeni bir NLP döneminin başlangıcı olarak kabul edilen BERT'nin piyasaya sürülmesidir. BERT, dil temelli birçok görevi kıran bir rekor. Makalenin yayınlanmasından kısa bir süre sonra, modelin ekibi de modelin kodunu açık kaynaklı ve büyük veri kümeleri üzerinde önceden eğitilmiş modelin indirilmiş bir sürümünü sağladı. Bu büyük bir gelişmedir çünkü doğal dil işleme için bir makine öğrenimi modeli oluşturmak isteyen herkesin, bu güçlü önceden eğitilmiş modeli kullanıma hazır bir bileşen olarak kullanmasına olanak tanır ve böylece modeli sıfırdan eğitme maliyetini düşürür. Gereken zaman, enerji, bilgi ve kaynaklar.
BERT ayrıca Yarı Denetimli Sıralı Öğrenme (Andrew Dai ve Quoc Le tarafından), ELMo (Matthew Peters ve AI2 ve UW CSE'den araştırmacılar tarafından), ULMFiT (hızlı .ai kurucuları Jeremy Howard ve Daniel Sebastian Ruder), OpenAI transformatörü (OpenAI araştırmacıları Radford, Narasimhan, Salimans ve Sutskever tarafından) ve Transformer (Vaswani ve diğerleri), vb.
BERT'in ne olduğunu anlamak için birçok kavramı anlamamız gerekir. Öncelikle BERT'in ne kullandığını görmek daha iyi olacaktır.
1. Örnek: cümle sınıflandırması
En basit fikir, tek bir metni sınıflandırmak için BERT kullanmaktır. Model şuna benzer:
Böyle bir modeli eğitmek için, bir sınıflandırıcıyı eğitmeye odaklanmanız gerekir ve eğitim aşamasında BERT modelinde yapılan değişiklikler çok küçüktür. Bu eğitim sürecine ince ayar denir ve kökleri Yarı Denetimli Sıralı Öğrenme ve ULMFiT'dir.
Bu konsepte aşina olmayanlar için, sınıflandırıcıları tartıştığımız için, bu görev makine öğreniminde denetimli öğrenmeyi içerir. Bu, böyle bir modeli eğitmek için etiketli bir veri setine ihtiyacımız olduğu anlamına gelir. İstenmeyen posta sınıflandırmasını örnek olarak alırsak, etiketli veri kümesi bir e-posta mesajları listesi ve bir etiket ("istenmeyen posta" veya "istenmeyen posta değil" olarak etiketlenir) olacaktır.
Benzer görev senaryoları şunları içerir:
İki, model mimari
Artık BERT için bir kullanım örneğiniz olduğuna göre, nasıl çalıştığını daha iyi anlayalım.
Google, gazetede farklı model boyutlarında iki BERT'den bahsetti:
BERT temelde eğitimli bir Transformer kodlayıcı yığınıdır. Transformer'in içeriği için lütfen Illustrating Transformer blog gönderisine bakın. Transformatör, BERT'in temelidir ve bu kavramı da aşağıda ele alacağız.
BERT modellerinin her iki ölçeğinde de birçok kodlayıcı katmanı vardır (kağıtta "Transformatör blokları" olarak anılır) -BERT Base'de bu tür 12 yapı vardır ve BERT Large'da 24 vardır. Kodlayıcıda ileri beslemeli ağlar da vardır (BERT Base'de 768 gizli katman nöronu ve BERT Large'da 1024 gizli katman nöronu) ve dikkat katmanında Transformer kağıdına göre daha fazla dikkat katmanı kullanılır. "Kafa" (BERT Tabanı 12 "kafaya" sahiptir ve BERT Büyük 16'ya sahiptir).
Model girişi
Giriş sırasının ilk simgesi, CLS'nin sınıf anlamına geldiği özel bir semboldür.
Tıpkı Transformer'in kodlayıcısı gibi, BERT girdi olarak bir kelime dizisini alır ve bu kelimeler kodlayıcı yığınında sürekli olarak akar. Her katmanın bir öz-dikkat katmanından ve ileri beslemeli bir ağdan geçmesi ve ardından bunu bir sonraki kodlayıcıya vermesi gerekir.
Mimari açıdan şu ana kadar Transformer ile aynıdır (bazı hiperparametreler hariç). Ardından, çıktı tarafında, onunla Transformer arasındaki farkı göreceğiz.
Model çıktısı
Her konum uygun şekilde, boyutu hidden_size (BERT Tabanında 768) olan bir vektör çıkarır. Daha önce bahsedilen cümle sınıflandırma örneği için, yalnızca ilk konumun çıktısına (yani, sembolle değiştirilen konuma) odaklanıyoruz.
Bu çıktı vektörü artık seçtiğimiz sınıflandırıcıya girdi olarak kullanılabilir. Kağıt, daha iyi sınıflandırma sonuçları elde etmek için sınıflandırıcı olarak tek katmanlı bir sinir ağı kullanıyor.
Daha fazla etiketiniz varsa (örneğin, bir e-posta servis sağlayıcısıysanız, e-postaları "spam", "spam olmayan", "sosyal" ve "promosyonlar" vb. Olarak işaretlemeniz gerekir), siz Sadece sınıflandırıcının bu bölümünün ağını daha fazla çıkış nöronuna sahip olacak şekilde ayarlayın ve ardından softmax'ı geçin.
Üç, evrişimli ağ ile paralel
CV geçmişine sahip kişiler için bu vektör aktarımı, VGGNet gibi bir ağın evrişimli kısmı ile ağ yapısının sonundaki tam bağlantılı katman arasında olanları anımsatmalıdır.
Dördüncüsü, yeni yerleşik temsil çağı
Bu yeni keşifler, metin kodlama yöntemlerinde yeni değişiklikler getirdi. Şimdiye kadar, çoğu NLP modelinde, kelime gömme temel bir metin temsil yöntemi olmuştur. Word2Vec ve Glove gibi yöntemler bu tür görevlerde yaygın olarak kullanılmaktadır. Önce bunları nasıl kullanacağımızı gözden geçirelim.
Kelime yerleştirmeyi özetleyin
Makine öğrenimi modelinin kelimeleri işleyebilmesi için, modelin hesaplamalarda kullanılabilmesi için metni sayılar şeklinde temsil etmemiz gerekir. Word2Vec kullanarak, kelimeleri temsil etmek için bir vektör kullanabiliriz ve bu vektör aynı zamanda belirli anlamsal bilgileri de ("Stockholm" ile "İsveç" arasındaki ilişki "Kahire" ve "Mısır" arasındaki ilişkiye eşdeğerdir) ve gramer bilgilerini yakalar. , Veya dilbilgisine dayalı ilişkiler (örneğin, "vardı" ve "sahip" arasındaki ilişki, "oldu" ve "eşittir" arasındaki ilişki ile aynıdır).
İnsanlar, modeli küçük bir veri seti üzerinde sıfırdan eğitmek yerine, kelime yerleştirmeyi öğrenmek için ön eğitim için büyük miktarda metin verisi kullanmanın iyi bir fikir olduğunu çabucak anladılar. Önceden eğitilmiş Word2Vec veya GloVe'yi indirebilirsiniz. Aşağıda, GloVe eğitimi ile elde edilen "çubuğa" karşılık gelen vektör temsilidir (gömme vektör boyutu 200'dür).
Büyük boyutlar nedeniyle, sonraki makalelerde vektörleri temsil etmek için aşağıdaki şekiller kullanılacaktır:
ELMo: Bağlamın önemi
GloVe tarafından eğitilen vektörü, örneğin "sopa" nın temsili gibi bir kelime olarak kullanırsak, bu temsil, bağlam ne olursa olsun aynıdır. Bazı çalışmalarda (Peters vd., 2017, McCann vd., 2017, Peters vd., 2018 ELMo makalesinde), araştırmacılar "sopa" gibi kelimelerin aslında çok fazla anlamı olduğuna inanıyor. Ne anlama geldiği, kullanıldığı bağlama bağlıdır. Öyleyse neden bir kelimenin bağlamına göre gömülü temsilini öğrenmiyorsunuz? Yani, kelimenin bağlamının anlamını öğrenin ve diğer bağlamsal bilgileri öğrenin. Bu bağlamda, bağlamsallaştırılmış kelime gömme modeli ortaya çıkmıştır.
ELMo, her kelime için sabit bir gömme kullanmaz, bunun yerine her kelimeye gömme atamadan önce tüm cümleye bakar. Bu yerleştirmeleri oluşturmak için göreve özgü çift yönlü LSTM kullanır.
ELMo, bağlamda ön eğitim için önemli fikirler sağlar. ELMo LSTM, büyük veri kümeleri üzerinde eğitilebilir ve daha sonra diğer doğal dil görevlerini işlemek için diğer modellerin bir parçası olarak kullanılabilir.
ELMo'nun sırrı nedir?
ELMo, bir kelime dizisindeki bir sonraki kelimeyi tahmin etmek için eğitim alarak dili anlar - bu göreve Dil modelleme . Bu çok kullanışlıdır, çünkü büyük miktarda metin verisine sahibiz, böyle bir model ek etiketlere ihtiyaç duymadan bu verilerden öğrenebilir.
Her LSTM zaman adımının gizli durumunun ELMo'nun "başının" arkasından çıktığını görebiliriz. Bu vektörler, ön eğitimden sonra yerleştirme sürecinde kullanışlı olacaktır.
ELMo aslında bir adım daha ileri gitti ve iki yönlü bir LSTM eğitti - böylece dil modeli sadece bir sonraki kelimeyi değil, aynı zamanda önceki kelimeyi de tahmin edebilir.
ELMo, gizli durumu (ve ilk yerleştirmeyi) belirli bir şekilde (eklemeden sonra ağırlıklı toplama) birleştirerek bağlamsallaştırılmış kelime yerleştirmeyi önerir.
5. ULM-FiT: NLP'de transfer öğrenmeyi anlama
ULM-FiT, modelin eğitim öncesi öğrendiklerini etkili bir şekilde kullanmak için bazı yöntemler sunar - yalnızca yerleştirme değil, aynı zamanda bağlamsallaştırılmış yerleştirme sunumu. ULM-FiT, çeşitli görevler için dil modelini etkili bir şekilde ince ayar yapmak için bir dil modeli ve bir dizi prosedür sunar.
NLP nihayet CV gibi transfer öğrenmeyi gerçekleştirmenin bir yolunu buldu.
6. Transformatör: LSTM'nin Ötesinde
Transformer'in kağıtlarının ve kodlarının piyasaya sürülmesinin yanı sıra makine çevirisi gibi görevlerdeki başarıları, sektördeki bazı insanları bunun LSTM'nin yerini alacağını düşündürmeye başladı. Transformer, uzun vadeli bağımlılıkları LSTM'den daha iyi idare edebilir.
Transformatörün kodlayıcı-kod çözücü yapısı, onu makine çevirisi için ideal bir model haline getirir. Fakat cümleleri sınıflandırmak için onu nasıl kullanırsınız? Diğer özel görevler için dil modelinde nasıl ince ayar yapacaksınız?
7. OpenAI Transformer: Dil modelleme için Transformer kod çözücüyü önceden eğitin
Tam bir Transformer olmadan öğrenmeyi aktarabileceğimiz ve ince ayar yapabileceğimiz ortaya çıktı. Transformer'in kod çözücüsünü kullanabiliriz. Kod çözücü iyi bir seçimdir çünkü sonraki kelimeleri engelleyebilir (bu, kelime kelime çeviri yaparken çok kullanışlı bir özelliktir).
Bu model 12 kod çözücü katmanını istifler. Bu tasarımda kodlayıcı olmadığından, bu kod çözücü katmanları Transformer metninde kodlayıcı-kod çözücü dikkat alt katmanına sahip olmayacaktır. Bununla birlikte, hala bir öz-ilgi katmanı var.
Bu yapıyla, modeli aynı dil modelleme görevi üzerinde eğitmeye devam edebiliriz: sonraki kelimeyi tahmin etmek için büyük miktarda (etiketlenmemiş) metin kullanın. Sadece 7000 kitabın metnini modele atın ve öğrenmesine izin verin! Kitaplar bu tür görevler için harikadır çünkü modelin eğitim için tweet veya makale kullandığınızda elde edemeyeceğiniz ilişkili bilgileri öğrenmesine olanak tanır.
8. Transfer öğrenimini aşağı akış görevlerinde kullanın
Artık OpenAI Transformer önceden eğitildiğine ve çeşitli katmanları ayarlandığına göre, onu aşağı akış görevlerinde kullanmaya başlayabiliriz. Önce cümle sınıflandırmasına bir göz atalım (e-posta mesajlarını "spam" veya "spam olmayan" olarak sınıflandırın):
OpenAI belgesi, farklı görev türleri için girdileri işlemek için kullanılan birçok girdi dönüşümünü listeler. Aşağıdaki şekil, modelin yapısını ve farklı görevleri yerine getirirken girdi dönüşümünü gösterir.
Dokuz, BERT: kod çözücüden kodlayıcıya
openAI Transformer, Transformer'a dayalı olarak ince ayarlanabilir, önceden eğitilmiş bir model sunar. Ancak LSTM'yi Transformer olarak değiştirmek yine de bir şeyleri eksik yapar. ELMo'nun dil modeli çift yönlüdür, openAI Transformer ise yalnızca soldan sağa bir dil modeli eğitir. Öyleyse, soldan sağa ve sağdan sola tahmin edebilen (aynı zamanda yukarı ve aşağı sınırlamalarına tabi olan) Transformer tabanlı bir model oluşturabilir miyiz?
MLM dil modeli
BERT, "Transformer kodlayıcı kullanacağız" dedi.
"Bu çılgınlık," dedi biri, "herkes iki yönlü şartlandırmanın her bir kelimenin kendisini çok seviyeli bir bağlamda görmesini sağlayacağını biliyor."
"Maske kullanacağız," dedi BERT kendinden emin bir şekilde.
Transformer'in kodlayıcı yığınını eğitmek için uygun bir görev bulmak karmaşık bir sorundur BERT, bu sorunu çözmek için ilk literatürdeki (cloze task) "maskeli dil modeli" kavramını kullanır.
Girişin% 15'ini korumaya ek olarak, BERT ayrıca modelin ince ayarını iyileştirmek için bir şeyler karıştırır. Bazen rastgele bir kelimeyi başka bir kelimeyle değiştirir ve modelin o konumda doğru kelimeyi tahmin etmesine izin verir.
İki cümle görevi
OpenAI Transformer tarafından farklı görevleri işlerken yapılan girdi dönüşümlerini hatırlarsanız, bazı görevlerin modelin iki cümle hakkındaki bilgileri işlemesini gerektirdiğini fark edeceksiniz (örneğin, bir cümlenin başka bir cümlenin açıklaması olup olmadığı; örneğin, bir Wikipedia varsayalım) Girdi olarak girdi ve bu girdi hakkında başka bir girdi olarak bir soru. Bu soruyu cevaplayabilir miyiz?)
BERT'in birden çok cümle arasındaki ilişkiyi daha iyi ele alabilmesi için, eğitim öncesi süreçte ek bir görev vardır: iki cümle verildiğinde (A ve B), B, A'dan sonra görünen cümle olabilir mi?
Belirli görevleri çözmek için modeller
BERT belgesi, BERT'nin farklı görevlerde uygulanmasını gösterir.
Özellik çıkarma için BERT
BERT'i kullanmanın tek yolu ince ayar yöntemi değildir. Tıpkı ELMo gibi, bağlamsal kelime düğünleri oluşturmak için önceden eğitilmiş BERT'i de kullanabilirsiniz. Ardından, bu gömme temsillerini mevcut modele besleyebilirsiniz - kağıt ayrıca NER gibi görevlerde bu kullanımın nihai etkisinin ince ayar yönteminin sonucundan çok daha kötü olmadığından da bahsetti.
Bağlamsal yerleştirme olarak en çok hangi vektör işe yarar? Sanırım özel göreve bağlı. Kağıt, 6 seçeneği karşılaştırır (ince ayardan sonra 96,4 noktalı modelle karşılaştırıldığında):
Ten, BERT'i yürüyüşe çıkar
BERT'yi denemenin en iyi yolu, Google Colab'da barındırılan Cloud TPU'lar ile BERT FineTuning'dir. Daha önce hiç Cloud TPU kullanmadıysanız, bu aynı zamanda onları denemek için iyi bir başlangıçtır ve BERT kodu TPU, CPU ve GPU üzerinde de çalışabilir.
Sonra, BERT kod uygulamasına bakabilirsiniz:
Ayrıca BERT'nin PyTorch uygulamasına da başvurabilirsiniz. AllenNLP, diğer modellerin BERT yerleştirmeleri ile temsil edilmesine izin vermek için bu kodu kullanır.
Transfer: https://www.cnblogs.com/d0main/p/10165671.html