Bu makale, ' Transformers Explained ' gönderisinin bir uzantısıdır . Yazı, esasen, Google Research'ün bir yeniliği olan ünlü Transformer modelinin derinlemesine bir açıklamasıdır. Zaten geçtiyseniz, içeriğe geçin. Yeniyseniz, Transformer'in çalışmasının arkasındaki mantığı öğrenmekle ilgileniyorsanız, okumayı düşünün.
Bu makale, TensorFlow ile Transformer modelini kullanarak haber makalesi başlıkları oluşturmak için Soyutlayıcı Metin Özetleyici oluşturmaya yönelik adım adım bir kılavuzdur . Bu yazının içeriği aşağıdadır:
Özetleme, daha büyük bir edebiyat parçasını kısaca açıklama ve bağlamın hitap ettiği anlamın çoğunu kapsama yeteneğidir.
Natural Language Processing'de, özetleme görevi genel olarak iki kategoriye ayrılabilir:
Oysa Soyut Özetleme, sistemi tüm bağlamı anlamaya çalışmak ve bu anlayışa dayalı bir özet oluşturmak için eğitmek için sezgisel yaklaşımları içerir . Bu, özetler oluşturmanın daha insan benzeri bir yoludur ve bu özetler, çıkarımsal yaklaşımlara kıyasla daha etkilidir.
Bununla birlikte, resmi ve / veya resmi metinlerin özetlenmesi için bunlara hala güvenilemediğinden, soyut modellerde iyileştirme için çok daha fazla alan vardır. Bu tür kullanım durumlarında, çıkarımlı özetleme tercih edilir.
Bu görev için Inshorts veri kümesini kullandım . Inshorts , çeşitli kaynaklardan haberleri toplayan ve bunları özet olarak ('kısaca') yayınlayan bir hizmettir.
"60 kelimeyle haberdar olun."
hizmetin sloganıdır. Eğitim için manşeti bir haber makalesinin özeti olarak ele alacağız ve orijinal makale bağlam olacaktır.
Bu görev için gereksiz olan sütunlar (Kaynak, Saat, Tarih) kaldırılır. Veri kümesinde ~ 55 bin haber başlığı çifti örneği bulunur. Haber verilerinde ~ 76 bin benzersiz kelime ve manşetlerde ~ 29 bin benzersiz kelime var. En uzun haber dizisine sahip örneklem 469 kelimeden oluşmakta olup, ortalama haber uzunluğu 368 kelimedir, manşetlerinki ise sırasıyla 96 ve 63 kelimedir.
Bu tür veriler doğrudan modelde kullanılamaz ve bu nedenle temizlenmesi gerekir. Bir sonraki bölümde, ön işleme adımlarını kısaca ele alıyoruz.
Burada, herhangi bir NLP modelini eğitmek için gerekli olan temel ön işlemeyi gerçekleştiriyoruz.
Hedef dizilerin başlangıcını ve sonunu tanımak için, bunları başlangıç ("<go>") ve bitiş ("<stop>") jetonları ile doldururuz.
Biz uygun dizgeciklerini esasen noktalama işaretleri, dönüştürür harfe metni filtreler dizileri üzerinde, nihayet kelimelerin oluşma sıklığı tarafından sipariş ve onların belirteç eşdeğerleriyle kelimelerin bir eşleme içerir ve bir kelime dicti tutar için metinsel verileri dönüştürür doğrudan modele girilebilen belirteçler.
TensorFlow'un tokenleştirme API'si, veri temizleme ve ön işleme altındaki her şeyi hemen hemen kapsar. Bununla birlikte, modele genelleştirilmiş bir girdi elde edebilmemiz için dizileri sabit bir uzunlukta doldurmak / kesmek olan bir adım daha var.
Sonunda verileri karıştırır ve gruplandırırız, böylece modeli eğitirken kolayca getirilebilir. Bu işlemlerin daha hızlı hesaplanması için TensorFlow'un Veri Kümesi API'sini kullanıyoruz.
Sonunda Transformer'in modele doğrudan katkı sağlayacak bileşenlerine geçiyoruz.
Not Tüm bu bileşenlerin çalışma arkasında matematik zaten görüşüldüğünü burada .
Bu işlevler, giriş dizileri için konumsal kodlamaların elde edilmesinden sorumludur. Konumsal Kodlamalar, Transformatörde kullanılan öz-dikkat mekanizmasının onu dikkate almadığı için, temelde giriş sözcükleri arasında bir sıralama kavramı oluşturur.
Maske doldurma daha kısadır dizilere eklenir dış dolgu görmezden sorumludur uzunluk değiştirgesinin .
İleriye dönük maske, hedef dizideki belirli bir geçerli kelimeden sonra ortaya çıkan kelimelerin mevcut kelimenin tahminine katkıda bulunmasını göz ardı etmekten sorumludur.
Transformer modelinin yapımına geliyoruz.
Modeldeki dikkat hesaplamasının temelini oluşturduğundan bu, Transformer'ı oluşturmanın en önemli adımlarından biridir.
Yukarıdaki kod, aşağıdaki işlevin sonucunu döndürür (+ maskeleme):
Bu, hemen hemen her alt katmandan sonra kullanılan ve aynı şekilde kullanılan normal iki katmanlı bir İleri Besleme Ağıdır.
Multi-Head Attention'ı TensorFlow Custom Layer olarak tanımlıyoruz. Burada, girdileri birden çok kafaya böldük, ölçeklendirilmiş nokta-ürün dikkatini kullanarak dikkat ağırlıklarını hesapladık ve son olarak, tüm kafalardan birleşik çıktı
Bunlar sırasıyla kodlayıcı ve kod çözücünün temel birimleridir. Model ayarlanırken bunlar Nₓ kodlayıcı / kod çözücü katmanlarına genişletilebilir .
Bunlar, Çok Başlı Dikkat katmanlarından ve ardından Artık Bırakma bağlantılarından ve doğrusal dönüşüm katmanlarından oluşur.
Burada sırasıyla Nₓ Encoder ve Decoder bloklarını entegre ediyoruz .
Bu katman, girdi ve çıktılarla doğrudan etkileşimden sorumludur. Burada giriş düğünleri elde edilir, bu düğünler konumsal kodlamalara eklenir.
Son olarak, tüm ara katmanları tf.keras.Model sınıfından miras alınan bir Özel Model sınıfında yığınlıyoruz.
Vocab_size birimlerine sahip çıktı katmanını Decoder'a ekleriz . Bu sınıfın çıktısı, eğitim sırasında çıkarım veya kayıp hesaplaması için kullanılacaktır.
Dönüştürme belgesi ayrıca, daha hızlı yakınsamaya yardımcı olan özel bir öğrenme hızı planlayıcısı hakkında eğitim önerir.
Harika şeyler. Modeli SparseCategoricalCrossEntropy kaybı ile eğitiyoruz çünkü normal CategoricalCrossEntropy kaybı, hedefi büyük bir dizi olacak olan hedef dizideki her kelimenin bir sıcak kodlaması olarak gerektirecektir.
Ayrıca, yastıklı jetonların maruz kaldığı kaybı, ortalama kayba katkıda bulunmamaları için 0 olarak gizleriz.
Özetleyiciyi eğitirken kullandığım hiper parametre değerleri şunlardır:
Aşağıda, eğitimin birkaç son döneminin ayrıntılarının bir parçası bulunmaktadır:
Epoch 18 Batch 0 Loss 1.8277 Epoch 18 Batch 429 Loss 1.7935 Epoch 18 Batch 858 Loss 1.8485 Epoch 18 Loss 1.8489 Time taken for 1 epoch: 298.76677560806274 secs Epoch 19 Batch 0 Loss 1.6240 Epoch 19 Batch 429 Loss 1.7632 Epoch 19 Batch 858 Loss 1.8245 Epoch 19 Loss 1.8252 Time taken for 1 epoch: 298.52965450286865 secs Epoch 20 Batch 0 Loss 1.7538 Epoch 20 Batch 429 Loss 1.7412 Epoch 20 Batch 858 Loss 1.8018 Saving checkpoint for epoch 20 at checkpoints/ckpt-8 Epoch 20 Loss 1.8020 Time taken for 1 epoch: 299.4963185787201 secs
Şimdi modeli, modelin daha önce görmediği veriler üzerinde test etme zamanı.
Bununla birlikte, modeli eğitim verileriyle benzer bir dağılımdan, yani haberlere benzer bir şekilde test ettiğimizden emin olmalıyız.
Ancak bundan önce, model kod çözücüde girdi olarak hedef diziyi almak için kullanıldığından özel bir çıkarım adımı yazmamız gerekir ( Öğretmen Zorlama ). Bununla birlikte, test ederken, önceki tahminleri kod çözücüde girdi olarak kullanmamız gerekir.
Burada, ilk kelime için çıktı elde ediyoruz, onu ilk kelimeye ekliyoruz ve üçüncü kelimeyi birinci ve ikinci kelime dizisi için çıktı olarak birlikte elde ediyoruz, bu çıkışı tekrar kod çözücü girişlerine ekliyoruz ve çıktı dizisinin uzunluğu maksimuma ulaşır veya tahmin edilen kelime "<stop>" dur.
Harika! Bu sonuçlar, böylesine küçük bir eğitim süresi ve daha az veri miktarı için beklenenden gerçekten daha iyi.
İyi bilinen Transformer modelini TensorFlow API kullanarak başarıyla uyguladık. Derin öğrenmede oldukça zor bir kullanım örneğini de ele aldık ve bunun üzerinde iyi sonuçlar elde ettik.
İşte kodun github deposuna bir bağlantı. Çatallaştırmaktan, modeli ayarlamaktan veya daha fazla veri üzerinde çalışmaktan çekinmeyin.
NMT için Trafo: https://www.tensorflow.org/tutorials/text/transformer
TensorFlow API belgeleri: https://www.tensorflow.org/api_docs
Kaggle'da Inshorts Veri Kümesi: https://www.kaggle.com/shashichander009/inshorts-news-data
Etrafımızdaki dünya gibi, dil de sürekli değişiyor. Önceki dönemlerde dil değişiklikleri yıllar hatta on yıllar içinde meydana gelirken, artık günler hatta saatler içinde gerçekleşebilir.
Bir ürün yöneticisi olarak sürekli olarak ekibimi ve kendimi daha verimli ve etkili hale getirmenin yollarını arıyorum. Aşağıda, zamandan tasarruf etmek ve daha fazla etki yaratmak için ChatGPT'yi bir Proje Yöneticisinin iş akışına nasıl dahil edebileceğinize dair birkaç başlangıç fikri verilmiştir.
Torchvision kitaplığının sezgisel bir anlayışı - temel bilgilerden ileri düzeye (Bölüm 1/3) Torchvision nedir? Torchvision, PyTorch ile el ele giden bir Bilgisayar Görüşü kütüphanesidir. Verimli Görüntü ve Video dönüşümleri için yardımcı programlara, yaygın olarak kullanılan bazı önceden eğitilmiş modellere ve bazı veri setlerine sahiptir (torchvision PyTorch ile birlikte gelmez, ayrı olarak kurmanız gerekecektir.
Torchvision kitaplığının sezgisel bir şekilde anlaşılması - 14 görsel dönüşüm örneğiyle (Bölüm 2/3) Bölüm 1 için (torchvision'daki modüllere giriş), lütfen aşağıdaki bağlantıyı ziyaret edin. Bu makalede, veri kümesi (görüntüler) yüklendikten hemen sonra bir dizi halinde gerçekleştirilebilen basit görüntü dönüştürme işlevlerini deneyeceğiz.
Grafik Sinir Ağları (GNN'ler), grafik verilerinden öğrenmek için standart bir araç kutusu olarak ortaya çıktı. GNN'ler, içerik önerisi veya ilaç keşfi gibi farklı alanlarda yüksek etkili sorunlar için iyileştirmeler sağlayabilir.
Bir önceki yazımda, blob algılama ve bağlantılı bileşenlere dayalı olarak ilgilenilen nesneleri nasıl tanımlayacağımızı öğrendik. Bununla birlikte, belirli ilgi çekici nesneleri görüntülerimizden ayırmamız gereken zamanlar olacaktır.