Yapay zeka veya tam yığın geliştirme ile mücadele mi ediyorsunuz? Uzmanlarımız size rehberlik etmek için burada: özel tavsiyeler, teknik entegrasyon ve daha fazlası. Bize ulaşın [email protected].

Az Çekimli NER: Ek Açıklamasız Varlık Çıkarımı ve GPT Tabanlı Eğitim

spaCy veya NLTK tabanlı önceden eğitilmiş varlık çıkarma modelleri harika sonuçlar verir ancak iş unvanları, KDV numaraları, ilaçlar vb. gibi yerel olmayan varlıkları tespit etmek için sıkıcı bir açıklama ve eğitim süreci gerektirir. GPT-3, GPT-J ve GPT-NeoX gibi büyük dil modelleri sayesinde, artık herhangi bir açıklama ve eğitim olmadan, birkaç vuruşlu öğrenme sayesinde her tür varlığı çıkarmak mümkün. Bu makalede, bunun nasıl yapılacağını gösteriyoruz.

NER (entity extraction) temel olarak yapılandırılmamış bir metinden yapılandırılmış bilgi çıkarmakla ilgilidir. NER konusunda yeniyseniz öncelikle kısa tanıtım yazımızı okuyabilirsiniz: NER'e giriş.

spaCy ve NLTK ile NER: geleneksel yol

SpaCy, son yıllarda NER için fiili standart haline geldi (spaCy web sitesine bakın). SpaCy, kullanımı kolay olduğu için çok çekici bir çerçevedir ve hızı onu üretim kullanımı için çok uygun hale getirir.

SpaCy, birden fazla dilde önceden eğitilmiş birçok model öneren bir Python doğal dil işleme çerçevesidir, bu nedenle kendi modelinizi eğitmek zorunda kalmadan kendi dilinizde çeşitli varlık türlerini (şirketler, şehirler, adresler, tarihler vb.) çıkarmak kolaydır.

NLTK da Python ile varlık çıkarımı için ilginç bir seçimdir, ancak varsayılan olarak daha az varlık önerir ve genel olarak NLTK üretim için önerilmez (daha çok bir eğitim ve araştırma çerçevesidir).

Ancak bu çerçevelerle hızlı bir şekilde bir sınıra ulaşacaksınız: yerel olarak desteklenen varlıkların sayısı sınırlıdır. Çoğu şirket, kişi bilgileri, finansal veriler, tıbbi tedaviler vb. gibi belirli iş bilgilerini çıkarmak için NER'den yararlanmak ister. Elbette, bu varlıklar spaCy'nin önceden eğitilmiş modelleri tarafından varsayılan olarak desteklenmez, bu nedenle bunu başarmak için kendi veri kümenizi oluşturmanız ve kendi modelinizi eğitmeniz gerekir.

Kendi spaCy modelinizi eğitmek uzun ve sıkıcı bir açıklama sürecidir: çok sayıda iyi örnek oluşturmak ve bunlara açıklama eklemek için bir veya birkaç kişinin işbirliği yapması gerekir. Modelin düzgün bir şekilde öğrenebilmesi için çok büyük miktarda örnek gereklidir. İyi açıklama araçları mevcuttur (spaCy'nin Prodigy'si gibi), ancak yine de birçok NLP projesinin iptal edilmesine neden olan acı verici bir görev olmaya devam etmektedir.

Ek açıklama illüstrasyonu

İyi haber: GPT-3, GPT-J ve GPT-NeoX gibi büyük dil modellerinin yükselişiyle, artık herhangi bir varlığı açıklama eklemeden ve yeni bir model eğitmeden çıkarmak mümkün!

GPT-3, GPT-J ve GPT-NeoX ile Metin Oluşturma

Metin üretimi için büyük dil modelleri son zamanlarda GPT-3 ile ortaya çıkmaya başladı (GPT-3 hakkında daha fazla bilgi için OpenAI'nin web sitesine bakın). OpenAI 175 milyar parametreden oluşan GPT-3 modelini yayınladığında, bu bir devrimdi çünkü herhangi bir ek eğitim gerektirmeden doğal dil işlemeye dayalı birçok son teknoloji yapay zeka uygulamasının önünü açtı.

GPT-3 gibi GPT modellerinin ilk amacı metin üretmektir: modele bir girdi verin ve gerisini sizin için üretmesine izin verin. Metin üretimine dayanarak, hemen hemen her doğal dil işleme kullanım durumu elde edilebilir: sınıflandırma, özetleme, konuşma yapay zekası, başka kelimelerle ifade etme... ve tabii ki varlık çıkarma!

GPT-3 açık kaynaklı bir model olmadığından, açık kaynak topluluğu GPT-3'e alternatifler üzerinde çalıştı ve şu anda 2 harika açık kaynaklı eşdeğerimiz var: GPT-J ve GPT-NeoX. Hala GPT-3 kadar büyük değiller, ancak açık kaynak topluluğunun OpenAI'yi yakalamasının sadece bir zaman meselesi olduğuna şüphe yok.

Bu modellerden uygun şekilde yararlanmak için "az sayıda öğrenme" adı verilen yeni bir teknik gerekir.

Az Atışla Öğrenme

Bu büyük GPT modelleri o kadar büyüktür ki sizden çok hızlı bir şekilde öğrenebilirler.

Diyelim ki GPT-3'ün sizin için kısa bir ürün açıklaması oluşturmasını istiyorsunuz. İşte birkaç atışlık öğrenme olmadan bir örnek:

Generate a product description containing these specific keywords: t-shirt, men, $50

Alacağınız yanıt işe yaramaz olacaktır. Örneğin şöyle bir şey olabilir:

Generate a product description containing these specific keywords: t-shirt, men, $50 and short.

The product description needs to be a few words long. Don’t use plurals, use the keywords in the order they are

İyi haber: modele sadece birkaç örnek vererek çok daha iyi sonuçlar elde edebilirsiniz!

Generate a product description containing specific keywords.

Keywords: shoes, women, $59
Result: Beautiful shoes for women at the price of $59.
###
Keywords: trousers, men, $69
Result: Modern trousers for men, for $69 only.
###
Keywords: gloves, winter, $19
Result: Amazingly hot gloves for cold winters, at $19.
###
Keywords: gpu, gaming, $1499
Result:

Sonuç şöyle bir şey olacaktır:

Generate a product description containing specific keywords.

Keywords: shoes, women, $59
Result: Beautiful shoes for women at the price of $59.
###
Keywords: trousers, men, $69
Result: Modern trousers for men, for $69 only.
###
Keywords: gloves, winter, $19
Result: Amazingly hot gloves for cold winters, at $19.
###
Keywords: gpu, gaming, $1,499
Result: The best gaming GPU on the market, at the price of $1,499 only.

Gördüğünüz gibi, modelden gelen yanıt, ilk verdiğimiz 3 örnek sayesinde şu anda mükemmel bir şekilde amaca uygun. Yine de bu model bu tür bir ürün tanımı oluşturma görevi üzerinde hiç eğitilmemişti. İşte "az sayıda örnekle öğrenme" tekniği bununla ilgilidir: sadece birkaç örnekle anında "transfer öğrenimi" gerçekleştirirsiniz. Bu tür bir sonuç elde etmek için genellikle bir doğal dil işleme modelini tonlarca örnekle eğitmeyi beklersiniz, ancak burada değil.

Az Atışlı Öğrenme ile Varlık Çıkarma

Şimdi birkaç vuruşlu öğrenme sayesinde varlık çıkarma işlemini gerçekleştireceğiz.

Diyelim ki web sitelerinden iş unvanlarını çıkarmak istiyorsunuz. Asıl talebinizi yapmadan önce birkaç iş unvanı çıkarma örneği vermeniz yeterlidir:

Extract job titles from the following sentences.

Sentence: John Doe has been working for Microsoft for 20 years as a Linux Engineer.
Job title: Linux Engineer
###
Sentence: John Doe has been working for Microsoft for 20 years and he loved it.
Job title: none
###
Sentence: Marc Simoncini | Director | Meetic
Job title: Director
###
Sentence: Franck Riboud was born on 7 November 1955 in Lyon. He is the son of Antoine Riboud, who transformed the former European glassmaker BSN Group into a leading player in the food industry. He is the CEO at Danone.
Job title: CEO
###
Sentence: Damien is the CTO of Platform.sh, he was previously the CTO of Commerce Guys, a leading ecommerce provider.
Job title:

Sonuç aşağıdaki gibi olacaktır:

Extract job titles from the following sentences.

Sentence: John Doe has been working for Microsoft for 20 years as a Linux Engineer.
Job title: Linux Engineer
###
Sentence: John Doe has been working for Microsoft for 20 years and he loved it.
Job title: none
###
Sentence: Marc Simoncini | Director | Meetic
Job title: Director
###
Sentence: Franck Riboud was born on 7 November 1955 in Lyon. He is the son of Antoine Riboud, who transformed the former European glassmaker BSN Group into a leading player in the food industry. He is the CEO at Danone.
Job title: CEO
###
Sentence: Damien is the CTO of Platform.sh, he was previously the CTO of Commerce Guys, a leading ecommerce provider.
Job title: CTO

Fark ettiğiniz gibi, az sayıda örnek oluşturma konusunda akıllı davranmamız gerekiyor. Hiçbir iş unvanı bulunamayabilir, bu yüzden "hiçbiri" döndüren bir örnek oluşturduk (yanlış pozitifleri önler). Belki de aynı anda birkaç iş unvanı çıkarmak istiyorsunuz? Bu durumda da birkaç iş unvanı döndüren örnekler oluşturmak önemlidir (örneğin virgülle ayrılmış iş unvanları).

Daha fazla örnek ekleyerek daha da iyi sonuçlar elde edersiniz. Örneklerinizin gerçek nihai talebinize mümkün olduğunca yakın olması önemlidir. Örneğin, yalnızca cümleler yerine tüm paragrafları analiz edeceğinizi biliyorsanız, paragrafları da içeren örnekler oluşturmak en iyisidir.

Eğer bir GPT modeline erişiminiz yoksa, NLP Cloud API'sini kullanabilirsiniz. Çeşitli istemciler mevcuttur (Python, Go, Node.js, Ruby, PHP...). Burada Python istemcisi ile GPT-J kullanarak bir örnek gösterelim:

import nlpcloud

client = nlpcloud.Client("gpt-j", "your API token", gpu=True)
client.generation("""Extract job titles from the following sentences.

    Sentence: John Doe has been working for Microsoft for 20 years as a Linux Engineer.
    Job title: Linux Engineer
    ###
    Sentence: John Doe has been working for Microsoft for 20 years and he loved it.
    Job title: none
    ###
    Sentence: Marc Simoncini | Director | Meetic
    Job title: Director
    ###
    Sentence: Franck Riboud was born on 7 November 1955 in Lyon. He is the son of Antoine Riboud, who transformed the former European glassmaker BSN Group into a leading player in the food industry. He is the CEO at Danone.
    Job title: CEO
    ###
    Sentence: Damien is the CTO of Platform.sh, he was previously the CTO of Commerce Guys, a leading ecommerce provider.
    Job title:""",
top_p=0.1,
length_no_input=True,
remove_input=True,
end_sequence="###",
remove_end_sequence=True
)

Sonuç şöyle olacak: CTO

Size az önce kullandığımız metin oluşturma parametreleri hakkında kısa bir açıklama yapmama izin verin.

Çok düşük bir üst p değeri belirledik çünkü GPT-J'nin çok orijinal sonuçlar yaratmasını istemiyoruz: sadece isteğinizde gördüğü şeye sadık kalmasını istiyoruz.

"length_no_input" maksimum uzunluk değerinin girdi metnini dikkate almaması gerektiği anlamına gelir.

"remove_input" girdi metninin sonuçtan çıkarılması gerektiği anlamına gelir.

"end_sequence", modelin bu karakterle karşılaştığında metin üretmeyi durdurması gerektiği anlamına gelir. Birkaç atışlık örneklerimizde her yanıtın sonuna "###" eklediğimiz gibi, model yanıtı oluşturduktan sonra otomatik olarak "###" oluşturacak ve orada duracaktır.

"remove_end_sequence", yanıttan "###" ifadesini kaldırmak istediğimiz anlamına gelir.

NLP Cloud belgelerinde daha fazla ayrıntı görebilirsiniz: Burada gör.

Performans Değerlendirmeleri

Bir GPT modeli ile varlık çıkarımı yapmak, model bunun için eğitilmemiş olsa bile herhangi bir yeni varlık anında çıkarılabileceğinden çok fazla özgürlük sağlar!

Ancak bunun bir bedeli var: bu büyük dil modelleri çok büyük ve nispeten yavaş.

Örneğin, GPT-J veya GPT-NeoX kullanmak istiyorsanız, NVIDIA RTX A6000 veya A40 gibi çok fazla VRAM'e sahip büyük bir GPU gerektirecektir. Ve biraz gecikme olacaktır (bir varlığın çıkarılması yaklaşık 500 ms sürer). Aksine, spaCy veya NLTK altyapı açısından çok daha hızlı ve daha az maliyetli olacaktır.

Sonuç

2022 yılında, herhangi bir açıklama ve eğitim olmadan çok kolay bir şekilde gelişmiş NER gerçekleştirmek mümkün! Bu, şirketlerin varlık çıkarma projelerini daha hızlı teslim etmelerine büyük ölçüde yardımcı olacak ve aynı zamanda doğal dil işlemeye dayalı daha ileri uygulamalara olanak tanıyacaktır.

Ancak GPT-3, GPT-J ve GPT-NeoX gibi büyük dil modelleri maliyetlidir, bu nedenle ilgili altyapı maliyetlerini küçümsememelisiniz.

Umarım bu makale zamandan ve paradan tasarruf etmenize yardımcı olur!

Julien Salinas
NLP Cloud'da CTO