Zephyrnet Logosu

Hugging Face Transformers: Part 1 ile bir metin özetleme projesi oluşturun

Tarih:

Ne zaman OpenAI Metin oluşturma konusunda uzmanlaşmış üçüncü nesil makine öğrenimi (ML) modelini Temmuz 2020'de piyasaya sürdü, bir şeylerin farklı olduğunu biliyordum. Bu model, kendisinden önce gelen hiç kimseye benzemeyen bir sinir vurdu. Aniden, teknolojiyle ilgilenebilecek, ancak genellikle AI/ML alanındaki en son gelişmeleri pek umursamayan arkadaşlarımın ve meslektaşlarımın bunun hakkında konuştuğunu duydum. Guardian bile yazdı bir makale hakkında. Veya daha kesin olmak gerekirse, model makaleyi yazdı ve Guardian düzenledi ve yayınladı. İnkar etmek yoktu - GPT 3 oyun değiştiriciydi.

Model piyasaya sürüldükten sonra insanlar hemen bunun için potansiyel uygulamalar bulmaya başladı. Haftalar içinde, web sitesinde bulunabilecek birçok etkileyici demo oluşturuldu. GPT-3 web sitesi. Gözüme çarpan özel bir uygulama metin özetleme – bir bilgisayarın belirli bir metni okuma ve içeriğini özetleme yeteneği. Bir bilgisayar için en zor görevlerden biridir çünkü doğal dil işleme (NLP) alanındaki iki alanı birleştirir: okuduğunu anlama ve metin oluşturma. Bu yüzden metin özetleme için GPT-3 demolarından çok etkilendim.

Onları bir deneyebilirsin Hugging Face Spaces web sitesi. Şu sıralar favorim bir uygulama Bu, girdi olarak yalnızca makalenin URL'si ile haber makalelerinin özetlerini oluşturur.

Bu iki bölümlük dizide, etki alanınız için metin özetleme modellerinin kalitesini değerlendirebilmeniz için kuruluşlar için pratik bir kılavuz öneriyorum.

Eğitime genel bakış

Birlikte çalıştığım birçok kuruluşun (hayır kurumları, şirketler, STK'lar) okumaları ve özetlemeleri gereken çok miktarda metin var - finansal raporlar veya haber makaleleri, bilimsel araştırma makaleleri, patent başvuruları, yasal sözleşmeler ve daha fazlası. Doğal olarak, bu kuruluşlar bu görevleri NLP teknolojisi ile otomatikleştirmekle ilgileniyorlar. Mümkün olanın sanatını göstermek için genellikle, neredeyse hiçbir zaman etkilemeyi başaramayan metin özetleme demolarını kullanırım.

Ama şimdi ne?

Bu kuruluşlar için zorluk, tek seferde değil, birçok belge için özetlere dayalı metin özetleme modellerini değerlendirmek istemeleridir. Tek işi uygulamayı açmak, bir belgeye yapıştırmak, Özetlemek düğmesine basın, çıktıyı bekleyin, özetin iyi olup olmadığını değerlendirin ve bunu binlerce belge için baştan yapın.

Bu öğreticiyi dört hafta önceki geçmiş benliğimi düşünerek yazdım – bu yolculuğa başladığımda keşke o zamanlar sahip olsaydım dediğim öğreticiydi. Bu anlamda, bu öğreticinin hedef kitlesi, AI/ML'ye aşina olan ve daha önce Transformer modellerini kullanmış, ancak metin özetleme yolculuğunun başında olan ve daha derine dalmak isteyen kişilerdir. "Yeni başlayanlar" tarafından ve yeni başlayanlar için yazıldığından, bu öğreticinin a pratik rehber – değil the pratik rehber. Lütfen öyleymiş gibi davran George EP Kutusu demişti:

Bu öğreticide ne kadar teknik bilgi gerektiği konusunda: Python'da biraz kodlama içerir, ancak çoğu zaman kodu API'leri çağırmak için kullanırız, bu nedenle derin kodlama bilgisi de gerekmez. Ne anlama geldiği gibi belirli ML kavramlarına aşina olmak yararlıdır. tren ve dağıtmak bir model, kavramları Eğitim, onaylama, ve test veri kümeleri, ve bunun gibi. Ayrıca Transformatörler kitaplığı Before yararlı olabilir, çünkü bu kitaplığı bu eğitim boyunca yoğun bir şekilde kullanıyoruz. Bu kavramları daha fazla okumak için faydalı bağlantılar da ekliyorum.

Bu öğretici yeni başlayanlar tarafından yazıldığından, NLP uzmanlarının ve ileri düzey derin öğrenme pratisyenlerinin bu eğitimden pek bir şey almalarını beklemiyorum. En azından teknik açıdan değil – yine de okumaktan keyif alabilirsiniz, bu yüzden lütfen hemen ayrılmayın! Ancak benim basitleştirmelerim konusunda sabırlı olmanız gerekecek - Bu eğitimdeki her şeyi olabildiğince basit hale getirme konseptiyle yaşamaya çalıştım, ancak daha basit değil.

Bu öğreticinin yapısı

Bu seri, bir metin özetleme projesinin farklı aşamalarından geçtiğimiz iki gönderiye bölünmüş dört bölümden oluşuyor. İlk gönderide (bölüm 1), metin özetleme görevleri için bir ölçü tanıtarak başlıyoruz - bir özetin iyi mi yoksa kötü mü olduğunu değerlendirmemizi sağlayan bir performans ölçüsü. Ayrıca özetlemek istediğimiz veri kümesini tanıtıyor ve ML olmayan bir model kullanarak bir temel oluşturuyoruz - belirli bir metinden bir özet oluşturmak için basit bir buluşsal yöntem kullanıyoruz. Bu temel çizgiyi oluşturmak, herhangi bir makine öğrenimi projesinde hayati derecede önemli bir adımdır, çünkü ileriye dönük olarak AI kullanarak ne kadar ilerleme kaydettiğimizi ölçmemizi sağlar. “AI teknolojisine yatırım yapmaya gerçekten değer mi?” Sorusuna cevap vermemizi sağlar.

İkinci gönderide, özetler oluşturmak için önceden eğitilmiş bir model kullanıyoruz (bölüm 2). Bu, ML olarak adlandırılan modern bir yaklaşımla mümkündür. öğrenme aktarımı. Bu, başka bir yararlı adım çünkü temelde hazır bir model alıyoruz ve onu veri kümemizde test ediyoruz. Bu, modeli veri kümemizde gerçekten eğittiğimizde ne olduğunu görmemize yardımcı olan başka bir temel oluşturmamıza olanak tanır. Yaklaşım denir sıfır vuruşlu özetleme, çünkü model veri kümemize sıfır maruz kaldı.

Bundan sonra, önceden eğitilmiş bir model kullanmanın ve onu kendi veri setimiz üzerinde eğitmenin zamanı geldi (bölüm 3). Buna da denir ince ayar. Modelin verilerimizin kalıplarından ve özdeyişlerinden öğrenmesini ve yavaş yavaş buna adapte olmasını sağlar. Modeli eğittikten sonra onu özetler oluşturmak için kullanırız (bölüm 4).

Özetlemek:

  • Bölüm 1:
    • Bölüm 1: Temel oluşturmak için ML olmayan bir model kullanın
  • Bölüm 2:
    • 2. Bölüm: Sıfır atış modeliyle özetler oluşturun
    • 3. Bölüm: Bir özetleme modeli eğitin
    • 4. Bölüm: Eğitilen modeli değerlendirin

Bu eğitim için kodun tamamı aşağıda mevcuttur GitHub repo.

Bu eğitimin sonunda ne elde etmiş olacağız?

Bu eğitimin sonunda, biz alışkanlık üretimde kullanılabilecek bir metin özetleme modeline sahiptir. bizde bile olmayacak Tercih Etmenizin özetleme modeli (buraya çığlık emojisi ekleyin)!

Bunun yerine sahip olacağımız şey, projenin bir sonraki aşaması için bir başlangıç ​​noktası olacak.
deney aşaması. Veri bilimindeki "bilim" burada devreye giriyor çünkü artık her şey, mevcut eğitim verileriyle yeterince iyi bir özetleme modelinin eğitilip eğitilemeyeceğini anlamak için farklı modeller ve farklı ayarlarla deneyler yapmakla ilgili.

Ve tamamen şeffaf olmak gerekirse, teknolojinin henüz olgunlaşmadığı ve projenin uygulanmayacağı sonucunun çıkması için iyi bir şans var. Ve iş paydaşlarınızı bu olasılığa hazırlamanız gerekir. Ama bu başka bir yazının konusu.

Bölüm 1: Temel oluşturmak için ML olmayan bir model kullanın

Bu, bir metin özetleme projesi oluşturmaya ilişkin eğitimimizin ilk bölümüdür. Bu bölümde, aslında ML kullanmadan çok basit bir model kullanarak bir temel oluşturuyoruz. Bu, herhangi bir ML projesinde çok önemli bir adımdır, çünkü ML'nin proje süresi boyunca ne kadar değer kattığını ve buna yatırım yapmaya değer olup olmadığını anlamamızı sağlar.

Öğreticinin kodu aşağıda bulunabilir GitHub repo.

Veri, veri, veri

Her ML projesi verilerle başlar! Mümkünse, her zaman bir metin özetleme projesi ile elde etmek istediğimiz şeyle ilgili verileri kullanmalıyız. Örneğin amacımız patent başvurularını özetlemekse, modeli eğitmek için de patent başvurularını kullanmalıyız. Bir makine öğrenimi projesi için büyük bir uyarı, eğitim verilerinin genellikle etiketlenmesi gerektiğidir. Metin özetleme bağlamında bu, özet (etiket) kadar özetlenecek metni de sağlamamız gerektiği anlamına gelir. Model, yalnızca her ikisini de sağlayarak iyi bir özetin nasıl göründüğünü öğrenebilir.

Bu öğreticide, herkese açık bir veri kümesi kullanıyoruz, ancak özel veya özel bir veri kümesi kullanıyorsak adımlar ve kod tamamen aynı kalıyor. Ve yine, metin özetleme modeliniz için aklınızda bir hedef varsa ve buna karşılık gelen verilere sahipseniz, bundan en iyi şekilde yararlanmak için lütfen verilerinizi kullanın.

Kullandığımız veriler, arXiv veri kümesiarXiv makalelerinin özetlerini ve başlıklarını içerir. Amacımız için, özetlemek istediğimiz metin olarak özeti, referans özeti olarak başlığı kullanıyoruz. Verilerin indirilmesi ve önişlenmesiyle ilgili tüm adımlar aşağıda mevcuttur. defter. ihtiyacımız var AWS Kimlik ve Erişim Yönetimi (IAM) rolü, veri yüklemeye ve oradan veri yüklemeye izin verir. Amazon Basit Depolama Hizmeti (Amazon S3) bu not defterini başarıyla çalıştırmak için. Veri seti makalenin bir parçası olarak geliştirildi ArXiv'in Veri Kümesi Olarak Kullanımı Üzerine altında lisanslıdır ve Creative Commons CC0 1.0 Evrensel Kamu Malı Adanması.

Veriler üç veri kümesine bölünmüştür: eğitim, doğrulama ve test verileri. Kendi verilerinizi kullanmak istiyorsanız, durumun da böyle olduğundan emin olun. Aşağıdaki diyagram, farklı veri kümelerini nasıl kullandığımızı göstermektedir.

Doğal olarak bu noktada ortak soru şu: Ne kadar veriye ihtiyacımız var? Muhtemelen zaten tahmin edebileceğiniz gibi, cevap şudur: duruma göre değişir. Alanın ne kadar uzmanlaşmış olduğuna (patent başvurularını özetlemek, haber makalelerini özetlemekten oldukça farklıdır), modelin kullanışlı olması için ne kadar doğru olması gerektiğine, modelin eğitiminin ne kadara mal olması gerektiğine vb. bağlıdır. Modeli gerçekten eğittiğimizde daha sonraki bir noktada bu soruya geri döneceğiz, ancak bunun kısası, projenin deneme aşamasındayken farklı veri kümesi boyutlarını denememiz gerektiğidir.

Bir modeli iyi yapan nedir?

Birçok ML projesinde, bir modelin performansını ölçmek oldukça basittir. Bunun nedeni, modelin sonucunun doğru olup olmadığı konusunda genellikle çok az belirsizlik olmasıdır. Veri kümesindeki etiketler genellikle ikili (Doğru/Yanlış, Evet/Hayır) veya kategoriktir. Her durumda, bu senaryoda modelin çıktısını etiketle karşılaştırmak ve doğru veya yanlış olarak işaretlemek kolaydır.

Metin oluştururken, bu daha zor hale gelir. Veri kümemizde sağladığımız özetler (etiketler), metni özetlemenin yalnızca bir yoludur. Ancak belirli bir metni özetlemek için birçok olasılık vardır. Bu nedenle, model 1:1 etiketimizle eşleşmese bile çıktı yine de geçerli ve faydalı bir özet olabilir. Peki modelin özetini sağladığımızla nasıl karşılaştıracağız? Bir modelin kalitesini ölçmek için metin özetlemede en sık kullanılan metrik, KABA puanı. Bu metriğin mekaniğini anlamak için bkz. NLP'de Nihai Performans Metriği. Özetle, ROUGE puanı, aşağıdakilerin örtüşmesini ölçer: n-gram (bitişik dizi n öğeleri) modelin özeti (aday özeti) ve referans özeti (veri kümemizde sağladığımız etiket) arasında. Ancak, elbette, bu mükemmel bir ölçü değil. Sınırlamalarını anlamak için, kontrol edin KARALANMAYA KARŞILAŞMAYA KARŞILAŞMAYA

Peki, ROUGE puanını nasıl hesaplayacağız? Bu metriği hesaplamak için epeyce Python paketi var. Tutarlılığı sağlamak için projemiz boyunca aynı yöntemi kullanmalıyız. Bu öğreticinin sonraki bir noktasında, kendimizinkini yazmak yerine Transformers kitaplığından bir eğitim komut dosyası kullanacağımız için, kaynak kodu komut dosyasının ve ROUGE puanını hesaplayan kodu kopyalayın:

from datasets import load_metric
metric = load_metric("rouge") def calc_rouge_scores(candidates, references): result = metric.compute(predictions=candidates, references=references, use_stemmer=True) result = {key: round(value.mid.fmeasure * 100, 1) for key, value in result.items()} return result

Puanı hesaplamak için bu yöntemi kullanarak, proje boyunca her zaman elmaları elmalarla karşılaştırmamızı sağlıyoruz.

Bu fonksiyon, birkaç ROUGE puanını hesaplar: rouge1, rouge2, rougeL, ve rougeLsum. içindeki "toplam" rougeLsum bu metriğin bütün bir özet üzerinden hesaplanması gerçeğine atıfta bulunurken, rougeL bireysel cümlelerin ortalaması olarak hesaplanır. Peki projemiz için hangi ROUGE puanını kullanmalıyız? Yine deneme aşamasında farklı yaklaşımlar denememiz gerekiyor. Değeri ne olursa olsun, orijinal ROUGE kağıdı “ROUGE-2 ve ROUGE-L tek belgeli özetleme görevlerinde iyi çalıştı”, “ROUGE-1 ve ROUGE-L kısa özetleri değerlendirmede harika performans gösteriyor” diyor.

Temel oluştur

Sırada basit, ML olmayan bir model kullanarak temel oluşturmak istiyoruz. Bu ne anlama geliyor? Metin özetleme alanında, birçok çalışma çok basit bir yaklaşım kullanır: ilkini alırlar. n metnin cümlelerini ve aday özetini ilan eder. Daha sonra aday özetini referans özetiyle karşılaştırırlar ve ROUGE puanını hesaplarlar. Bu, birkaç kod satırında uygulayabileceğimiz basit ama güçlü bir yaklaşımdır (bu kısım için kodun tamamı aşağıdadır). defter):

import re ref_summaries = list(df_test['summary']) for i in range (3): candidate_summaries = list(df_test['text'].apply(lambda x: ' '.join(re.split(r'(?<=[.:;])s', x)[:i+1]))) print(f"First {i+1} senctences: Scores {calc_rouge_scores(candidate_summaries, ref_summaries)}")

Bu değerlendirme için test veri setini kullanıyoruz. Bu mantıklı çünkü modeli eğittikten sonra son değerlendirme için aynı test veri setini de kullanıyoruz. için farklı numaralar da deniyoruz. n: aday özeti olarak sadece ilk cümle ile başlıyoruz, sonra ilk iki cümle ve son olarak ilk üç cümle.

Aşağıdaki ekran görüntüsü ilk modelimizin sonuçlarını göstermektedir.

ROUGE puanları, aday özeti olarak yalnızca ilk cümleyle birlikte en yüksektir. Bu, birden fazla cümle almanın özeti çok ayrıntılı hale getirdiği ve daha düşük bir puana yol açtığı anlamına gelir. Bu, tek cümlelik özetlerin puanlarını temel olarak kullanacağımız anlamına gelir.

Bu kadar basit bir yaklaşım için bu sayıların aslında oldukça iyi olduğunu belirtmek önemlidir, özellikle de rouge1 Puan. Bu sayıları bağlam içine koymak için, başvurabiliriz Pegasus Modelleri, farklı veri kümeleri için son teknoloji bir modelin puanlarını gösterir.

Sonuç ve sırada ne var

Serimizin 1. Kısmında, özetleme projesi boyunca kullandığımız veri setini ve özetleri değerlendirmek için bir metriği tanıttık. Daha sonra basit, ML'siz bir modelle aşağıdaki temel çizgiyi oluşturduk.

içinde sonraki yazı, sıfır çekim modeli kullanıyoruz - özellikle, genel haber makalelerinde metin özetlemek için özel olarak eğitilmiş bir model. Ancak, bu model veri kümemizde hiç eğitilmeyecektir (bu nedenle “sıfır atış” adı).

Bu sıfır atış modelinin çok basit temelimize kıyasla nasıl bir performans göstereceğini tahmin etmeyi size ev ödevi olarak bırakıyorum. Bir yandan, çok daha karmaşık bir model olacak (aslında bir sinir ağı). Öte yandan, yalnızca haber makalelerini özetlemek için kullanılır, bu nedenle arXiv veri kümesine özgü kalıplarla mücadele edebilir.


Yazar Hakkında

heiko hotz AI ve Makine Öğrenimi için Kıdemli Çözüm Mimarıdır ve AWS içindeki Doğal Dil İşleme (NLP) topluluğuna liderlik eder. Bu görevden önce, Amazon'un AB Müşteri Hizmetlerinde Veri Bilimi Başkanıydı. Heiko, müşterilerimizin AWS'deki AI/ML yolculuklarında başarılı olmalarına yardımcı olur ve Sigortacılık, Finansal Hizmetler, Medya ve Eğlence, Sağlık Hizmetleri, Kamu Hizmetleri ve İmalat dahil olmak üzere birçok sektördeki kuruluşlarla birlikte çalışmıştır. Heiko boş zamanlarında mümkün olduğunca çok seyahat eder.

spot_img

En Son İstihbarat

spot_img