İlk metin sınıflandırma modelinizi oluşturmak için Pytorch'u kullanmayı öğretin!

Eser sahibi: Aravind Pai

Çeviri: Wang Weili

Düzeltme: Zhang Yihao

Bu makale hakkında 3400 kelime , Okumanız tavsiye edilir 10+ dakika

Bu makale Pytorch çerçevesini kullanarak metin sınıflandırmasının uygulanmasına ilişkin temel bilgi noktalarını tanıtmaktadır, bunlara Kelime Dağarcığı Dışı kelimelerin nasıl kullanılacağı, değişken uzunluklu dizilerin eğitim probleminin nasıl çözüleceği ve özel örnekler verilmiştir.

Etiket: Natural Language Processing

Genel Bakış

  • Metin sınıflandırması uygulamak için PyTorch'u nasıl kullanacağınızı öğrenin
  • Metin sınıflandırmadaki kilit noktaları anlayın
  • Sıkıştırmalı doldurma yöntemini kullanmayı öğrenin

Giriş

Programlama yolculuğumda her zaman en gelişmiş mimariye dönüyorum. PyTorch, Keras ve TensorFlow gibi derin öğrenme çerçeveleri sayesinde artık gelişmiş mimarileri uygulamak daha kolay hale geldi. Bu derin öğrenme çerçeveleri, çok sayıda profesyonel bilgi ve programlama becerisine hakim olmanızı gerektirmeden karmaşık model mimarileri ve algoritmaları uygulamanın basit bir yolunu sağlar. Özetle, bu veri biliminin altın madenidir.

Bu yazıda, hızlı hesaplama gücü ile bilinen PyTorch çerçevesini kullanacağız. Bu nedenle, bu makalede, metin sınıflandırma problemini çözmek için kilit noktaları tanıtacağız. Ardından ilk metin sınıflandırıcımızı PyTorch çerçevesine uygulayacağız!

İpucu: Devam etmeden önce şu makaleyi okumanızı tavsiye ederim:

Yeni Başlayanlara Uygun Bir PyTorch Kılavuzu ve Sıfırdan Nasıl Çalışır:

https://www.analyticsvidhya.com/blog/2019/09/introduction-to-pytorch-from-scratch/?utm_source=blogutm_medium=building-image-classification-models-cnn-pytorch

Anahat

1. Metin sınıflandırma problemlerini çözmek için neden PyTorch kullanılıyor?

1. Kelime Dağarcığı dışındaki kelimeleri çözün

2. Değişken uzunluktaki dizileri çözün

3. Sarıcı ve önceden eğitilmiş model

İkinci olarak, sorun senaryosunu anlayın

Üçüncüsü, metin sınıflandırmasını gerçekleştirin

1. Metin sınıflandırma problemlerini çözmek için neden PyTorch kullanılıyor?

Profesyonel kavramlara dalmadan önce, kendimizi hızlı bir şekilde PyTorch çerçevesine alıştıralım. PyTorch'un temel veri birimi, python'daki numpy dizisine benzeyen Tensor'dur. PyTorch kullanmanın en önemli iki avantajı şunlardır:

  • Dinamik ağ-ağ yapısı eğitim sırasında değişebilir
  • Çoklu GPU dağıtılmış eğitim

Metin verilerini işlemek için neden PyTorch'u kullanıyoruz diye düşündüğünüzden eminim? Daha sonra, özellikle metin verileriyle uğraşırken, PyTorch'un onu diğer çerçevelerden farklı kılan bazı inanılmaz özelliklerini tartışacağız.

1. Kelime Dağarcığı Dışı kelimelerin üstesinden gelin

Metin sınıflandırma modeli, sabit veri boyutuna sahip bir metin veri kümesine göre eğitilir. Ancak akıl yürütme problemleri için, kelime setinde bulunmayan bazı kelimelerle karşılaşabilirsiniz.Bu kelimelere Kelime Dağarcığı Dışı kelimeler denir. Kelime Dağarcığı Dışı kelimeleri görmezden gelmek bilgi kaybına neden olabilir, bu nedenle bu önemli bir konudur.

PyTorch, bu sorunu çözmek için, Kelime Dağarcığı Dışı kelimeler sorununu çözmemize yardımcı olmak için eğitim veri setindeki nadir kelimelerin bilinmeyen jetonlarla değiştirilmesini destekliyor.

Ayrıca PyTorch, değişken uzunluktaki dizileri işlemek için yöntemler de sağlar.

2. Değişken uzunluklu metin dizisini işleme

Değişken uzunluktaki diziler problemini çözmek için döngüsel sinir ağlarının kullanıldığını hiç duydunuz mu, nasıl uygulandığına dair herhangi bir şüpheniz var mı? PyTorch, dinamik tekrarlayan sinir ağını gerçekleştirmek için çok faydalı bir 'Paketlenmiş Dolgu sekansı' getiriyor.

Dolgu, cümlelerin başında veya sonunda ek simgeleri doldurma işlemidir. Her cümledeki kelime sayısı farklı olduğundan, farklı uzunluklarda cümleler giriyor, dolgu simgeleri ekliyoruz ve cümleleri eşit uzunlukta yapmak için genişletiyoruz.

Çerçevelerin çoğu statik ağları desteklediğinden, yani model eğitim sürecinde model çerçevesi değişmez, bu nedenle doldurma gereklidir. Dolgu, değişken uzunluklu diziler sorununu çözse de, aynı zamanda yeni sorunlar getiriyor - doldurma belirteci, yeni bilgiler / veriler ekler.Aşağıda, açıklamak için basit bir şema kullanacağım.

Aşağıdaki şekilde, son kelime bir doldurma belirtecini temsil eder, ancak aynı zamanda çıktı üretme sürecinde de rol oynar. Bu problem, pytorch'ta Paketlenmiş Dolgu dizisi ile çözülebilir.

Sıkıştırma dolgusu, doldurma belirteci bölümünü yok sayar. Bu değerler, tekrarlayan sinir ağının eğitim sürecinde asla görünmeyecek ve bu da dinamik, tekrarlayan bir sinir ağı oluşturmamıza yardımcı olabilir.

3. Paketlenmiş ve önceden eğitilmiş modeller

Pytorch, gelişmiş çerçeveler sunuyor. Hugging Face'in Transformers kitaplığı, doğal dili anlama ve doğal dil üretimi için 32'den fazla gelişmiş çerçeve sağlar.

Ek olarak, pytorch ayrıca çok az kodla metinden dile, nesne algılama ve diğer sorunları çözebilen önceden eğitilmiş bazı modeller de sağlar.

İnanılmaz hissettiriyor mu? Bunlar PyTorch'un çok kullanışlı bazı özellikleridir. Şimdi metin sınıflandırma problemini çözmek için PyTorch'u kullanalım.

İkinci olarak, sorun senaryosunu anlayın

Bu makalenin bir parçası olarak, çok ilginç bir soruyu inceleyeceğiz.

Quora, kullanıcıların bilgilerini paylaşırken kendilerini güvende hissedebilmeleri için platformlarındaki "samimiyetsiz" sorunları takip etmeyi umuyor. Bu durumda samimiyetsiz bir soru, faydalı cevaplar aramaktan çok, ifade etmek için tasarlanmış bir soru olarak tanımlanır. Bunu daha ayrıntılı olarak incelemek için, belirli bir sorunun samimiyetsiz olduğunu gösterebilecek bazı özellikler şunlardır:

  • Nötr olmayan bir tona sahiptir;
  • Küçültmek veya kışkırtmak;
  • Gerçeğe dayalı değil;
  • Gerçek cevaplar aramak yerine şok değeri elde etmek için seks (ensest, hayvanlarla cinsel ilişki, pedofili) kullanın.

Eğitim seti yukarıda sorulan soruları ve samimiyetsiz olup olmadığını gösteren bir etiketi içerir (hedef = 1 samimiyetsiz demektir). Temel gerçeklerde gürültü var, yani eğitim seti mükemmel değil. Görevimiz, belirli bir sorunun "samimiyetsiz" olup olmadığını belirlemektir.

Veri indirme bağlantısı:

https://drive.google.com/open?id=1fcip8PgsrX7m4AFgvUPLaac5pZ79mpwX

Şimdi PyTorch'ta kendi metin sınıflandırma modelimizi yazmanın zamanı geldi.

Üçüncüsü, metin sınıflandırmasını gerçekleştirin

Önce modelleme için gerekli tüm paketleri içe aktarın. İşte kullanacağımız paketlere kısa bir genel bakış:

  • Torç paketi Tensör üzerinde tensör ve matematiksel işlemleri tanımlamak için kullanılır;
  • TorchText paketi PyTorch'taki bazı önceden işlenmiş komut dosyalarını ve ortak NLP veri setlerini içeren NLP kitaplığıdır.

Sonuçları tekrarlanabilir hale getirmek için bir çekirdek değeri belirledim. Derin öğrenme modellerinin rastlantısallığından dolayı, yürütme sırasında farklı sonuçlar üretilebilir, bu nedenle tohum değerinin belirlenmesi çok önemlidir.

  • Veri ön işleme:

Şimdi metin önişleme yapmak için alanları nasıl kullanacağımıza bakalım. İki tür etki alanı nesnesi vardır: Field ve LabelField. Aralarındaki farkı çabucak anlayalım:

  • Alan: Veri modülünün Alan nesnesi, veri setindeki her bir sütunun ön işleme adımlarını açıklamak için kullanılır;
  • LabelField: LabelField, Field nesnelerinin yalnızca sınıflandırma görevleri için kullanıldığı özel bir durumdur. Yalnızca unk_token ve ardışık ayarlamak için kullanılır, her ikisi de varsayılan olarak Yoktur.

Field'ı kullanmadan önce, farklı parametrelerine ve kullanımlarına bir göz atın:

  • Tokenize: Kelime bölütleme yöntemini tanımlayın, burada yeni bir sözcük bölümleme algoritması kullandığı için boşluklu belirteç kullanıyoruz;
  • Daha düşük: Metni küçük harfe dönüştürün;
  • Batch_first: Girdi ve çıktının ilk boyutu genellikle parti boyutudur.

Ardından, bir demet listesi oluşturun, her bir demet bir sütun adı içerir ve ikinci değer bir alan nesnesidir. Ek olarak, tuplelar csv dosyasındaki sütunların sırasına göre düzenlenir.Bir sütunu yok saydığımızda, onu temsil etmek için (Yok, Yok) kullanırız.

Gerekli sütunları, soruları ve etiketleri okuyun.

alanlar =

Bu kod bloğunda, bir alan nesnesi tanımlayarak özel bir veri seti yükledim.

Şimdi veri kümesini eğitim ve doğrulama verilerine ayıralım

  • Giriş ve çıkış dizilerini hazırlayın:

Bir sonraki adım, metnin kelime dağarcığını oluşturmak ve bunları bir tamsayı dizisine dönüştürmektir. Kelime hazinesi, metnin tamamındaki tüm bağımsız kelimeleri içerir ve her kelimeye bir dizin atanır. İşte parametreler:

  • min_freq: Sözcük dağarcığındaki sıklığı bu parametre değerinden daha düşük olduğunda, sözcük bilinmeyen simgeye eşlenir;
  • İki özel jeton, bir bilinmeyen simge ile dolgu belirteci Sözlüğe ekle: Bilinmeyen simge Kelime Dağarcığı Dışı kelimeleri işlemek için kullanılır; Dolgu jetonu Giriş sırası eşit uzunluktadır.

Kelime hazinesi oluşturuyoruz ve kelimeleri önceden eğitilmiş kelime düğünleriyle vektörlere dönüştürüyoruz. Gömme sözcüğünü rastgele olarak başlatmak istiyorsanız, vektör parametresini göz ardı edebilirsiniz.

Ardından, modeli eğitmek için partiyi hazırlayın. BucketIterator, minimum doldurma miktarı gerektiren bir şekilde partiler oluşturur.

  • Model mimarisi

Şimdi bu ikili sınıflandırma problemini çözmek için modelin mimarisini tanımlamamız gerekiyor. Torch'daki nn modülü, tüm modeller için temel bir modeldir. Diğer bir deyişle, her model nn modülünün bir alt sınıfı olmalıdır.

İnit ve forward olmak üzere iki fonksiyon tanımladım. Bu iki fonksiyonun uygulama senaryolarını açıklamama izin verin.

  • içinde: Sınıfın örneği başlatıldığında, init işlevi otomatik olarak çağrılır. Bu nedenle, kurucu olarak da adlandırılır. Sınıfın parametrelerinin yapıcıda başlatılması gerekir ve modelin kullanması gereken katmanları tanımlamamız gerekir;
  • ileri: İleri işlevi, girdilerin ileriye doğru yayılması için hesaplama adımlarını tanımlar.

Son olarak, her katmanın ayrıntılarını ve parametrelerini anlıyoruz.

Gömülü katman: NLP ile ilgili herhangi bir görev için, kelime gömme çok önemlidir çünkü bir kelimeyi dijital biçimde temsil edebilir. Gömme katmanı, her satırın bir sözcük yerleştirmeyi temsil ettiği bir arama tablosu alır. Gömme katmanı, metni temsil eden tamsayı dizisini yoğun bir vektör matrisine dönüştürebilir. Gömme katmanının iki önemli parametresi:

  • num_embeddings: Arama tablosundaki kelimelerin sayısı;
  • embedding_dim: Bir kelimenin vektör boyutunu temsil eder.

LSTM: LSTM, uzun bağımlılıkları öğrenebilen bir RNN çeşididir. İşte bilmeniz gereken bazı önemli LSTM parametreleri:

  • input_size: Giriş vektörünün boyutları;
  • hidden_size: Gizli katman düğümlerinin sayısı;
  • num_layers: Ağdaki katman sayısı;
  • batch_first: True'ya eşitse, giriş ve çıkış tensörleri (toplu iş, sıra, özellik) biçimindedir;
  • bırakmak: Varsayılan değer 0'dır. Sıfır olmayan bir değere ayarlanırsa, her LSTM katmanının çıktısı bırakma katmanına gider ve karşılık gelen nöron oranı, bırakma parametresi değerinin olasılığı ile silinir;
  • çift yönlü: True ise, LSTM çift yönlüdür.

Doğrusal Katman: Doğrusal katman, yoğun katmana atıfta bulunur ve iki önemli parametreye sahiptir:

  • in_features: Özelliklerin sayısını girin;
  • out_features: Gizli katman düğümlerinin sayısı.

Sıkıştırılmış doldurma: Yukarıda tartışıldığı gibi, sıkıştırma dolgusu dinamik tekrarlayan sinir ağlarında kullanılır. Sıkıştırılmış dolgu kullanılmazsa, rnn ayrıca doldurmadan sonra dolgu girişini işler ve yastıklı öğenin gizli durumunu geri döndürür. Ancak sıkıştırılmış dolgu harika bir pakettir, dolgu girişini göstermez. Doldurulan kısmı doğrudan yok sayar ve doldurulmamış eleman kısmının gizli durumunu döndürür.

Artık bu mimarideki tüm bölümleri anladığımıza göre, şimdi koda bakabiliriz!

Bir sonraki adım, hiperparametreleri tanımlamak ve modeli başlatmaktır.

Model özetine bakalım ve gömme katmanını önceden eğitilmiş kelime düğünleriyle başlatalım.

Burada modelin optimize edicisini, kaybını ve metriğini tanımlıyorum:

Modellemenin iki aşaması:

  • Eğitim aşaması: model.train (), modeli eğitime girecek şekilde ayarlar ve bırakma katmanını etkinleştirir;
  • Tahmin aşaması: model.eval (), modelin değerlendirme aşamasını başlatır ve bırakma katmanını kapatır.

Sonraki, modeli eğitmek için kullanılan işlevi tanımlayan kod bloğudur.

Dolayısıyla modeli eğitmek için bir işlevimiz var, ancak modeli değerlendirmek için de bir işleve ihtiyacımız var. Hadi gel!

Son olarak modeli belli bir miktar eğitip her dönem için en iyi modeli saklayacağız.

En iyi modeli yükleyelim ve kullanıcı tanımlı girdiyi kabul eden ve tahminler yapan bir çıkarım işlevi tanımlayalım! Birkaç sorunu tahmin etmek için bu modeli kullanalım.

özet

PyTorch'ta kendi metin sınıflandırma modelimizi nasıl oluşturacağımızı gördük ve sıkıştırma ile doldurmanın önemini anladık. Performansı daha da iyileştirmek için uzun vadeli ve kısa vadeli modellerin hiperparametrelerini, gizli düğüm sayısı, gizli katman sayısı, vb. Gibi istediğiniz zaman kullanabilirsiniz.

Orijinal bağlantı:

https://www.analyticsvidhya.com/blog/2020/01/first-text-classification-in-pytorch/

Orjinal başlık:

PyTorch kullanarak İlk Metin Sınıflandırma modelinizi oluşturun

Editör: Huang Jiyan

Redaksiyon: Lin Yilin

Çevirmen Profili

Wang Weili , Yaşlı bakımı endüstrisinde BI uygulayıcısı. Öğrenmeye devam et.

-Bitiş-

Tsinghua-Qingdao Veri Bilimi Enstitüsü'nün resmi WeChat kamu platformunu takip edin " THU Veri Pastası "Ve kız kardeş numarası" Veri Pastası THU "Daha fazla ders avantajı ve kaliteli içerik elde edin.

Suzhou Şehrinin liderleri başı çeker ve maskeyi çıkarır!
önceki
Li Jingchun: Yeni çağda veriler, geleceği ve güvenlik güvencesinin gelişimini yönlendiriyor
Sonraki
Kod yağlı boyamaya dönüşür, saça iyi gelir, yalnızca HTML + CSS kullanılır ve sanat tasarımı da şaşırtıcı!
Profesör Zhang Xuegong, Uluslararası Hesaplamalı Biyoloji Derneği Üyeliğine seçildi ve Topluluk başkanına yeni taç salgını hakkında bir mektup gönderdi!
Bill Gates, Microsoft'un yönetim kurulundan ayrıldığını duyurdu: dünyanın en zengin adamı dünyayı değiştirmeye kararlı!
Bilgi haritasının sınırları takip edilecek ve altı büyük açık sorun çözülecek!
83 belge ve 4D özetleri, yoğun öğrenime giden yolu açar
Tsinghua Özel Ödülü Gao Tianyu Kuru Mal Paylaşımı: İşte böyle kağıtlar yazıyorum, deneyler yapıyorum ve amirimle iyi geçiniyorum
Salgından sonraki dijital fırsatlar için, "endüstriyel düşünce" "veri düşüncesini" sorunsuz bir şekilde nasıl destekleyebilir?
Liste Yeni taç virüsü dünyayı süpürüyor ve dünyanın tıbbi standartları rekabet ediyor
Ürün videosu teşhir edildi ve sentezlendi, GAN ile 4 mühendis oluşturuldu ve 10 günde 30.000 ABD doları kitle fonlaması sağlandı
Büyük insan riskleriyle başa çıkmak için süper zeka nasıl kullanılır?
RPA çağını mümkün kılan Microsoft, eğitim öncesi modeli LayoutLM hakkında genel bir belge yayınladı
Raspberry Pi + Movidius NCS'de hedef algılamayı tamamlamak için YOLO ve Tiny-YOLO kullanın
To Top