Bir BERT Modelini Sıfırdan Nasıl Eğitirsiniz?
BERT'in İtalyan kuzeni FiliBERTo ile tanışın.
By James Briggs, Veri Bilimcisi
BERT, ancak İtalya'da — yazar tarafından resim
Makalelerimin çoğu, doğal dil işleme (NLP) dünyasına gelip hakim olan ve dil modelleri için yeni bir çağa işaret eden model olan BERT'e odaklandı.
Daha önce transformatör modellerini kullanmamış olanlar için (örn. BERT nedir), süreç biraz şuna benzer:
pip install transformers
- Önceden eğitilmiş bir transformatör modelini başlatın —
from_pretrained
. - Bazı veriler üzerinde test edin.
- Olabilir modele ince ayar yapın (biraz daha eğitin).
Bu harika bir yaklaşım ama eğer bunu yaparsak kendi transformatör modellerimizi yaratmanın ardındaki anlayıştan yoksun oluruz.
Ve eğer kendi transformatör modellerimizi yaratamıyorsak sorunumuza uyan önceden eğitilmiş bir modelin varlığına güvenmeliyiz, bu her zaman böyle değildir:
İngilizce olmayan BERT modelleri hakkında soru soran birkaç yorum
Dolayısıyla bu makalede, kendi transformatör modelimizi, özellikle de BERT'in RoBERTa adı verilen daha gelişmiş bir versiyonunu oluşturmak için atmamız gereken adımları inceleyeceğiz.
Genel Bakış
Sürecin birkaç adımı var, bu yüzden dalmadan önce yapmamız gerekenleri özetleyelim. Toplamda dört temel bölüm vardır:
- Verileri alma
- Bir tokenizer oluşturmak
- Giriş hattı oluşturma
- Modelin eğitimi
Bu bölümlerin her birinde çalıştıktan sonra, oluşturduğumuz tokenizer'ı ve modeli alıp ikisini de kaydedeceğiz, böylece bunları daha sonra genellikle kullandığımız şekilde kullanabiliriz. from_pretrained
.
Verileri Alma
Her makine öğrenimi projesinde olduğu gibi verilere ihtiyacımız var. Bir transformatör modelini eğitmeye yönelik veriler açısından, gerçekten seçim yapmakta zorlanıyoruz; neredeyse her türlü metin verisini kullanabiliriz.
HuggingFace'in veri kümesi kitaplığını kullanarak OSCAR veri kümesini indirmek için izlenecek video
Ve internette bolca bulunan bir şey varsa o da yapılandırılmamış metin verileridir.
İnternetten alınan metin alanındaki en büyük veri kümelerinden biri OSCAR veri kümesidir.
OSCAR veri seti çok sayıda farklı dile sahiptir ve sıfırdan eğitim için en net kullanım durumlarından biri, BERT'i Telugu veya Navajo gibi daha az kullanılan bazı dillere uygulayabilmemizdir.
Ne yazık ki, herhangi bir düzeyde yeterlilikle konuşabildiğim tek dil İngilizce - ancak kız arkadaşım İtalyan ve bu yüzden o - Laura, İtalyanca konuşulan BERT modelimiz - FiliBERTo'nun sonuçlarını değerlendirecek.
OSCAR veri setinin İtalyanca bölümünü indirmek için HuggingFace'i kullanacağız. datasets
kütüphane — bununla kurabiliriz pip install datasets
. Daha sonra OSCAR_IT'i şununla indiriyoruz:
Bir göz atalım dataset
nesne.
Harika, şimdi verilerimizi tokenizer'ımızı oluştururken kullanabileceğimiz bir formatta saklayalım. Yalnızca aşağıdakileri içeren bir dizi düz metin dosyası oluşturmamız gerekiyor: text
Veri kümemizdeki özellik ve her birini böleceğiz örnek yeni satır kullanma n
.
bizim yerimizde data/text/oscar_it
bulacağımız dizin:
Düz metin OSCAR dosyalarımızı içeren dizin
Tokenizer Oluşturmak
Sırada tokenizer var! Transformatörleri kullanırken, ilgili transformatör modelinin yanı sıra genellikle bir tokenizer yükleriz; tokenizer, süreçteki önemli bir bileşendir.
Özel tokenizer'ımızı oluşturmak için izlenecek video
Tokenizer'ımızı oluştururken, ona tüm OSCAR verilerimizi besleyeceğiz, sözcük dağarcığı boyutumuzu (tokenizer'daki token sayısı) ve varsa özel tokenleri belirteceğiz.
Artık RoBERTa özel tokenları şöyle görünüyor:
Bu nedenle, bunları listeye dahil ettiğimizden emin oluyoruz. special_tokens
tokenizerimizin parametresi train
yöntem çağrısı.
Tokenizer'ımız artık hazır ve dosyayı daha sonra kullanmak üzere kaydedebiliriz:
Artık yeni dosyamızı tanımlayan iki dosyamız var. FiliBERTo belirteç:
- birleştirmeler.txt — metnin belirteçlerle ilk eşlemesini gerçekleştirir
- vocab.json — belirteçleri belirteç kimlikleriyle eşler
Ve bunlarla birlikte, tokenizer'ımızı başlatma aşamasına geçebiliriz, böylece onu da diğer herhangi bir aracı kullandığımız gibi kullanabiliriz. from_pretrained
belirteç.
Tokenizer'ın başlatılması
İlk olarak daha önce oluşturduğumuz iki dosyayı kullanarak tokenizer'ı başlatıyoruz. from_pretrained
:
Artık tokenizerimiz hazır, onunla bazı metinleri kodlamayı deneyebiliriz. Kodlama sırasında genellikle kullandığımız iki yöntemi kullanırız: encode
ve encode_batch
.
Kodlama nesnesinden tokens
biz çıkaracağız input_ids
ve attention_mask
FiliBERTo ile kullanım için tensörler.
Giriş İşlem Hattını Oluşturma
Eğitim sürecimizin girdi hattı, tüm sürecin daha karmaşık kısmıdır. Ham OSCAR eğitim verilerimizi alıp dönüştürüp bir programa yüklememizden oluşur. DataLoader
eğitime hazır.
MLM giriş ardışık düzeninin video anlatımı
Verilerin Hazırlanması
Tek bir örnekle başlayacağız ve hazırlama mantığı üzerinde çalışacağız.
Öncelikle dosyamızı açmamız gerekiyor; kaydettiğimiz dosyaların aynısı. . Txt dosyalar daha önce. Her birini yeni satır karakterlerine göre ayırıyoruz n
çünkü bu bireysel örnekleri gösterir.
Daha sonra verilerimizi kullanarak kodluyoruz. tokenizer
— gibi temel parametreleri eklediğinizden emin olun max_length
, padding
, ve truncation
.
Artık tensörlerimizi oluşturmaya geçebiliriz; modelimizi maskeli dil modelleme (MLM) aracılığıyla eğiteceğiz. Yani üç tensöre ihtiyacımız var:
- girdi_kimlikleri - bizim token_ids maske jetonu kullanılarak maskelenen jetonların ~%15'i ile
<mask>
. - dikkat_maske - bir tensör 1s ve 0dikkat hesaplamalarında kullanılan 'gerçek' belirteçlerin/doldurma belirteçlerinin konumunu işaretler.
- etiketler - bizim token_ids ile yok hayır maskeleme
MLM'ye aşina değilseniz, açıkladım okuyun.
nen attention_mask
ve labels
tensörler basitçe bizim dosyamızdan çıkarılır batch
. input_ids
tensörler daha fazla dikkat gerektirir, ancak bu tensör için jetonların ~%15'ini maskeliyoruz - onlara jeton kimliğini atadık 3
.
Son çıktıda kodlanmış bir programın bir kısmını görebiliriz. input_ids
tensör. İlk belirteç kimliği: 1
- [CLS]
jeton. Tensörün etrafında noktalı olarak birkaç tane var 3
belirteç kimlikleri — bunlar yeni eklediğimiz şeylerdir [MASK]
Token kazanacaksınız.
DataLoader'ı Oluşturma
Daha sonra tanımlarımızı yapıyoruz Dataset
sınıf - kodlanmış üç tensörümüzü PyTorch olarak başlatmak için kullanırız torch.utils.data.Dataset
nesneler.
Son olarak, bizim dataset
bir PyTorch'a yüklendi DataLoader
eğitim sırasında verilerimizi modelimize yüklemek için kullandığımız nesne.
Modeli Eğitmek
Eğitim için iki şeye ihtiyacımız var; DataLoader
ve bir model. DataLoader
elimizde var ama modelimiz yok.
Modelin Başlatılması
Eğitim için ham (önceden eğitilmemiş) bir şeye ihtiyacımız var. BERTLMHeadModel
. Bunu oluşturmak için öncelikle FiliBERTo'yu başlatmak istediğimiz parametreleri tanımlayacak bir RoBERTa yapılandırma nesnesi oluşturmamız gerekiyor.
Daha sonra RoBERTa modelimizi dil modelleme (LM) kafası ile import edip başlatıyoruz.
Eğitim Hazırlığı
Eğitim döngümüze geçmeden önce birkaç şeyi ayarlamamız gerekiyor. Öncelikle GPU/CPU kullanımını ayarlıyoruz. Ardından modelimizin eğitim modunu etkinleştiriyoruz ve son olarak optimize edicimizi başlatıyoruz.
Eğitim
Sonunda - eğitim zamanı! PyTorch aracılığıyla eğitim alırken genellikle yaptığımız gibi antrenman yapıyoruz.
Tensorboard'a yönelirsek zaman içinde kaybımızı bulacağız; umut verici görünüyor.
Kayıp / zaman — bu grafikte birden fazla eğitim oturumu bir araya getirilmiştir
Gerçek Test
Şimdi gerçek sınavın zamanı geldi. Bir MLM hattı oluşturduk ve Laura'dan sonuçları değerlendirmesini istedik. Video incelemesini 22:44'te buradan izleyebilirsiniz:
İlk önce bir başlangıç başlatıyoruz pipeline
kullanarak nesne 'fill-mask'
argüman. Daha sonra modelimizi şu şekilde test etmeye başlayın:
“ciao nasıl yani?” doğru cevap bu! Bu benim İtalyancamın ulaştığı seviyeye ulaştı; o yüzden bunu Laura'ya devredelim.
Ile başlıyoruz "Buongiorno, geldin mi?" - veya "iyi gunler nasilsin?":
İlk cevap, "buongiorno, chi va?" "iyi günler, kim var orada?" anlamına gelir. — örneğin saçma. Ancak ikinci cevabımız doğru!
Sırada biraz daha sert bir ifade var, "ciao, güvercin ci incontriamo oggi pomeriggio?" - veya "Merhaba, bu öğleden sonra nerede buluşacağız?":
Ve biraz daha olumlu sonuçlar döndürüyoruz:
✅ "hi, where do we see each other this afternoon?"
✅ "hi, where do we meet this afternoon?"
❌ "hi, where here we are this afternoon?"
✅ "hi, where are we meeting this afternoon?"
✅ "hi, where do we meet this afternoon?"
Son olarak daha sert bir cümle daha, "Çünkü sarebbe başarılı oldu mu, başka bir şey mi yaptın?" - veya "Başka bir gün seçseydik ne olurdu?":
Burada da birkaç iyi yanıt daha veriyoruz:
✅ "what would have happened if we had chosen another day?"
✅ "what would have happened if I had chosen another day?"
✅ "what would have happened if they had chosen another day?"
✅ "what would have happened if you had chosen another day?"
❌ "what would have happened if another day was chosen?"
Genel olarak modelimiz Laura'nın testlerini geçmiş gibi görünüyor - ve artık FiliBERTo adında yetkin bir İtalyanca dil modelimiz var!
Bir BERT modelini sıfırdan eğitmeye yönelik bu adım adım kılavuz bu kadar!
Verilerimizi almak ve biçimlendirmekten, ham BERT modelimizi eğitmek için dil modellemeyi kullanmaya kadar pek çok yol kat ettik.
Umarım bu makaleyi beğenmişsinizdir! Herhangi bir sorunuz varsa, aracılığıyla bana bildirin Twitter veya aşağıdaki yorumlarda. Bunun gibi daha fazla içerik istiyorsanız, yayınlarım YouTube çok.
Okuduğunuz için teşekkür ederim!
70 indirim! Doğal Dil İşleme: Python'da Transformers ile NLP
Transformatör modelleri modern NLP'de fiili standarttır. Kendilerini en etkileyici kişiler olarak kanıtladılar…
*Aksi belirtilmedikçe tüm görseller yazara aittir.
Bio: James Briggs Londra, İngiltere merkezli, doğal dil işleme konusunda uzmanlaşmış ve finans sektöründe çalışan bir veri bilimcisidir. Aynı zamanda serbest çalışan bir akıl hocası, yazar ve içerik yaratıcısıdır. Yazara e-posta yoluyla ulaşabilirsiniz (jamescalam94@gmail.com).
orijinal. İzinle yeniden yayınlandı.
İlgili:
30 Gün İçindeki En Çok Okunan Haberler | |||||
---|---|---|---|---|---|
|
|
Kaynak: https://www.kdnuggets.com/2021/08/train-bert-model-scratch.html
- "
- &
- Türkiye
- analytics
- etrafında
- göre
- mal
- Oto
- inşa etmek
- bina
- çağrı
- yorumlar
- bileşen
- içerik
- Oluşturma
- yaratıcı
- veri
- veri bilimi
- veri bilimcisi
- gün
- derin öğrenme
- yönetmen
- E-posta
- mühendis
- Mühendisler
- İngilizce
- Özellikler(Hazırlık aşamasında)
- Nihayet
- maliye
- Ad
- biçim
- serbest
- tam
- Tercih Etmenizin
- GPU'lar
- harika
- baş
- okuyun
- Ne kadar
- Nasıl Yapılır
- HTTPS
- Kocaman
- görüntü
- Internet
- IT
- İtalya
- anahtar
- dil
- Diller
- ÖĞRENİN
- öğrenme
- Kütüphane
- yük
- London
- makine öğrenme
- Yapımı
- Haritalar
- maske
- ML
- model
- Modelleme
- hareket
- Doğal lisan
- Doğal Dil İşleme
- nlp
- Online
- açık
- açık kaynak
- Diğer
- plaintext
- oyuncu
- Bol bol
- proje
- pytorch
- Çiğ
- Sonuçlar
- yorum
- Bilim
- bilim adamları
- set
- beden
- So
- bölmek
- başlama
- mağaza
- hikayeler
- test
- Test yapmak
- testleri
- zaman
- simge
- Jeton
- üst
- Eğitim
- dönüşüm
- Uk
- UN
- us
- kullanımın söz
- Video
- İzle
- DSÖ
- pencereler
- içinde
- İş
- Dünya
- yazar
- X
- Youtube