Türkçe NER(Varlık İsim Tanıma)'de Summarify'ın Büyük Başarısı

Merhabalar,
Size güzel haberlerimiz var! Bu yazımızda; verisinden, modeline kadar tamamen Summarify bünyesinde geliştirdiğimiz Varlık İsmi Tanıma(Named Entitiy Recognition) modelimizin performansından bahsedeceğiz.

Varlık İsmi tanıma nedir?

Varlık İsmi Tanıma, Yapay Zeka'nın ve Dilbilim'in alt dallarından olan Doğal Dil İşleme(NLP)'nin görevlerindendir. NLP, doğal dillerin işlenmesi ve kullanılması amacı ile araştırma yapılan bir alandır.

NER, metindeki anahtar bilgileri(varlıkları) tanımlama ve kategorize etme görevi olarak açıklanabilir. Tanımı ilk olarak 1995 yılında MUC-6 (Message Understanding Conference) konferansında yapılmıştır. Varlıkları ENAMEX, TIMEX ve NUMEX olmak üzere 3 temel kategoride yapılmaktaydı

  • Enamex: Kişi, yer, organizasyon gibi ifadeleri
  • Numex: Parasal ve yüzdesel ifadeleri
  • Timex: Gün ve tarih gibi zamansal ifadeleri tanımlamak için kullanılmaktadır.

İngilizce dilini işlemek için geliştirilmiş olan spacy kütüphanesinde bu kategorilere daha detaylı olarak yer verilmektedir.

Not: Spacy NER'deki etiketler ile birazdan göstereceğimiz Summarify NER modelinin etiket formatlarında farklılıklar bulunmaktadır.

Bu kategorilerde yeralan varlıklar, sürekli olarak aynı şeyleri ifade edebilen kelime veya kelime dizileri olabilir. Tespit edilen her varlık önceden belirlenmiş kategorilerde sınıflandırılır. Örneğin bir NER modeli "Türkçe"'yi algılayabilir ve "Language" olarak sınıflandırabilir.

Bu yazıdaki NER formatları BIO formatında değerlendirilmiştir. Bu formatı açıklamak gerekirse:

  • B- Beginning
  • I- Inner
  • O- Outside

olacak şekilde her etiket için 3 farklı konum belirten ifade bulunmaktadır. “Mustafa Kemal Atatürk Ankara’ya geldi” cümlesi için etiketler:

  • Mustafa = “B-Person”
  • Kemal = “I-Person”
  • Atatürk = “I-Person”
  • Ankara’ya = “B-Location”
  • geldi = “O”

biçiminde olacaktır.

NER'i Nasıl Kullanabilirim?

İşletmenizin veya projenizin NER'den yararlanabileceğini düşünüyorsanız, daha fazlasını öğrenmekle ilgileniyorsanız veya özel bir kullanım örneğiniz varsa, bize ulaşın.

Kullandığımız Veriseti

Tamamı Summarify ekibi tarafından etiketlenmiş 15.789 cümlelik bir veri setinde, toplamda 13 etiket ile modelimizin eğitimini gerçekleştirdik.

Verimizdeki Etiketler ise;

  • Company: Kar amacı güden şirketler, tüzel kişilikler
  • Organization: Kar amacı gütmeyen(genelde) kurumlar, belediyeler vb.
  • Country: Ülkeler, eski devletler, otonom bölgeler vb.
  • Date: Haftanın günleri,yıllar gibi tarih belirten kelimeler (20 Mart 2021)
  • Language: Diller
  • Location: Şehirler, bölgeler, kıtalar, dağlar vb gibi konum belirten kavramlar.
  • Money: Miktar belirten para birimleri ( 5 dolar, 5 tl gibi)
  • Nationality: Irk veya vatandaşlık belirten kelimeler (Müslüman, Hristiyan, Yahudi gibi kavramlar da Nationality olarak değerlendirilmiştir.)
  • Number: miktar belirten rakamlar ("elli defa söyledim" gibi gerçekte miktar belirtmeyen rakamlar dahil edilmemiştir.)
  • Percent: Yüzdelik ifade belirten ifadeler
  • Person: Şahıs adları
  • Time: 16:14, 09:00 gibi saat belirten ifadeler
  • Misc: Varlık belirten ama yukarıdaki varlık tiplerine uymayan varlıklar. Ürün isimleri, film isimleri, festivaller vb.

Model Performansı

Modelimizde 15.789 veriseti ile 9473 eğitim, 6316 test verisi olmak üzere 13 etiket özelinde aşağıda tabloda bulunan sonuçları elde ettik.
Önümüzdeki günlerde modele daha fazla veri eklenerek geliştirilmeye devam edeceğiz ve genelleme becerisini test edeceğiz.

f1 Precision Recall
Organization 89.99% 90.45% 89.54%
Country 95.21% 95.52% 94.91%
Location 91.48% 89.97% 93.04%
Company 85.82% 82.38% 89.56%
Person 96.05% 95.91% 96.18%
Nationality 93.96% 93.84% 94.09%
Language 92.41% 90.95% 93.93%
Money 97.34% 95.71% 99.01%
Number 97.36% 96.59% 98.14%
Percent 97.72% 98.17% 97.27%
Date 97.91% 97.29% 98.54%
Time 96.49% 96.49% 96.49%
Misc 83.82% 81.32% 86.48%
Overall 93.20% 92.37% 94.05%

Sektördeki modeller ile karşılaştırma

Modelimizi piyasadaki diğer modellerle karşılaştırabilmek için aynı zamanda Türkçe Bert repositorysinde bulunan ve toplam 3 etiketten oluşan NerData verisinde de test ettik. Bu veride %87 F1 skoru elde ettik, ancak burada modelin eğitildiği veri ile bu verinin aynı kriterlerde etiketlenmediğini unutmamak ve buna göre değerlendirmek gerekiyor.

Örnek vermek gerekirse;

  • “Ülkü Tamer'in 'Kavaklık'ta Bir Akşam' şiirini çok beğendim!” cümlesi için için Nerdata verisinde sadece "Kavaklık" kelimesi Location olarak etiketlenmişken, bizim modelimiz "Kavalık'ta Bir Akşam" cümlesini bir bütün olarak Misc olarak etiketliyor. Dolayısıyla metric ölçümü yapılırken bu örnek için LOCATION performansı düşmüş oluyor. Halbuki bizim modelimizin eğitildiği veri için bu doğru bir tahmin olacaktı.
  • “Fransa'lı futbolcu Zinedine Zidane” cümlesi için Nerdata verisinde sadece "Fransa" kelimesi LOCATION olarak etiketlenmişken, bizim modelimiz "Fransa'lı" kelimesini bir bütün olarak NATIONALITY şeklinde etiketliyor. Bu da aynı şekilde metrik sonuçlarında düşüşe sebep oluyor.

Bu durum göz önüne alındığında, ölçüm için en uygun etiketin PERSON etiketi olduğunu düşünüyoruz. Ancak yine de PERSON etiketi bile bazı yerlerde uygun olmayabiliyor.

  • “Er Ryan'ı Kurtarmak filmi eleştirmenler tarafından çok beğenildi” cümlesi için Nerdata verisinde "Ryan" kelimesine Person etiketi verilmişken, bizim modelimiz "Er Ryan'ı Kurtarmak" ifadesine bir bütün olarak Misc etiketini veriyor. Bu da yine ölçümlerde düşüşe sebep oluyor.

Görsel olarak örnek vermek gerekirse:

Ner Örnek 1 Ner Örnek 2

Bu örnekte “Ankara Anlaşması” ifadesine baktığımızda ilk görselde NerData verisinde sadece Ankara kelimesinin LOCATION olarak etiketlendiğini, ancak SumNer modelinin bu ifadeyi bütün olarak MISC şeklinde etiketlediğini görüyoruz.

Ner Örnek 3 Ner Örnek 4

İkinci örnekte ise film isimlerinde veri formatındaki uyumsuzluk görülüyor.Bu tip veri formatlarındaki farklılıklar göz önüne alındığında, buna rağmen Nerdata verisinde %87 F1 elde edilmesini tatmin edici bir sonuç olarak görüyoruz.

Modelimizin NerData verisi ile tutarlılığını tespit etmek için, HuggingFace transformers kütüphanesinde hazır bulunan bazı modelleri, kendi modellerimiz ile karşılaştırmak istedik. Karşılaştırma testi NerData’nın tamamı (27.556 cümle) kullanıldı.

Sonuçlar için bütün modellerde Sekans Etiketlemelerini test etmek için özel olarak hazırlanan Seqeval paketi kullanıldı.

SumNER f1 precision recall
Location 90.24% 90.53% 89.94%
Organization 84.07% 82.86% 85.32%
Person 93.22% 92.82% 93.61%
OVERALL 89.84% 89.40% 90.29%
savasy/
bert-base-turkish-ner-cased
f1 precision recall
Location 78.02% 77.38% 78.66%
Organization 51.93% 41.83% 68.47%
Person 74.90% 87.34% 65.56%
OVERALL 67.78% 65.57% 70.14%
beyhan/
bert-base-turkish-ner-cased-pretrained
f1 precision recall
Location 69.27% 81.38% 60.30%
Organization 53.34% 82.39% 39.43%
Person 83.16% 91.18% 76.43%
OVERALL 72.04% 86.62% 61.67%
gurkan08/
turkish-ner
f1 precision recall
Location 36.69% 32.46% 42.20%
Organization 49.02% 57.81% 42.55%
Person 67.88% 67.62% 68.15%
OVERALL 54.26% 54.60% 53.94%

SumNER Modeli:

Tamamı Summarify tarafından hazırlanan ve 13 etiketten oluşan Ner modeli.

NerData ile karşılaştırma yapabilmek için, model çıktılarında elde edilen COMPANY ve ORGANIZATION etiketleri ORGANIZATION çatısı altında birleştirildi, COUNTRY ve LOCATION etiketleri LOCATION çatısı altında birleştirildi, PERSON etiketleri olduğu gibi bırakıldı ve kalan diğer bütün etiketler kaldırıldı.

Sonuçlara bakıldığında, F1 skoru genelinde en iyi performansı SumNer modelinin verdiği görülüyor. SumNER modelinin NerData üzerindeki sonuçların Precision ve Recall sonuçları birbirlerine çok yakın olduklarından dolayı, NerData verisinin formatının, kendi hazırladığımız SumDATA verisinin formatına benzediğini ve bu yüzden tutarlı sonuçlar verdiğini söyleyebiliriz.

NerData ile ilgili online dökümantasyon bulamadığımızdan dolayı, tam olarak kimin hazırladığını ve nasıl hazırlandığını bilmiyoruz. Ancak kendi modelimiz ile tutarlı sonuçlar verdiği için NerData’nın el ile özel olarak hazırlandığını düşünüyoruz.

Savasy/bert-base-turkish-ner-cased:

WikiAnn verisi ile 3 etiket genelinde eğitilen BERT modeli

Model çıktıları BIO formatında olduğu için herhangi bir değişiklik yapılmadı.

Bu modelin sonuçlarına baktığımızda, WikiAnn verisi ile eğitilen modelin Precision skorunda çok düşük olduğu görülüyor. Özellikle ORGANIZATION etiketi için model %41.83 precision skoru elde etmiş. Bu demek oluyor ki modelin ORGANIZATION olarak tahmin ettiği kelimelerden sadece %41’i gerçek veride ORGANIZATION etiketine sahip.

PERSON etiketine baktığımızda bu defa Precision skorunun daha yüksek olduğu görülüyor. Ancak Recall skoruna bakıldığında, modelin gerçek verideki PERSON etiketlerinin sadece %65’ini tespit edebildiği görülüyor.

Sonuç: WikiAnn verisi Türkçe Vikipedi üzerinden otomatik etiketlenme yapılarak hazırlanmış bir veri seti olduğu için, bu veri ile eğitilen modeller, el ile hazırlanan bir veri setinde tutarsız sonuçlar veriyor.

beyhan/bert-base-turkish-ner-cased-pretrained:

3 etiket genelinde eğitilen BERT modeli

Model çıktıları BILOU formatında olduğu için U ile başlayan etiketler B olarak, L ile başlayan etiketler I olarak değiştirildi. (L- Last, U- Unit anlamına geliyor. BIO formatına çevirmek için bu işlem yapılabiliyor)

Modelde her etiket için elde edilen Precision sonuçlarına bakıldığında %80’in altına düşmediğini görüyoruz. Yani model bir kelime için tahmin yürüttüğünde, bu tahminler genel olarak başarılı tahminler oluyor.

Ancak Recall sonuçlarının, Precision sonuçlarına kıyasla daha kötü olduğu görülüyor. Bu durum, modelin genelleme becerisinin çok iyi olmadığını bize söylüyor. Yani eğitim sürecinde daha fazla veri görmeye ihtiyacı olduğu söylenebilir.

Sonuç: Model sayfasında dökümantasyon olmadığı için bu modelin hangi veri ile eğitildiğini bilmiyoruz. Ancak model adındaki “pretrained” keyword’ü, bize bu modelin hazır bir model olarak değil, tam aksine Fine Tune edilmek için sunulan bir model olabileceğini söylüyor.

gurkan08/turkish-ner:

3 etiket bazında eğitilen BERT modeli

Model çıktıları sadece B ve O formatında olduğu için, test ettiğimiz verilerdeki bütün I ile başlayan etiketler, B ile başlayacak şekilde değiştirildi.

Bu modelde I- etiketi olmadığı için, verideki tamlamaları bir bütün olarak tespit etme becerisine sahip değil. Yani “Mustafa Kemal Atatürk” ismini bir bütün olarak değil, her kelimeyi ayrı bir isim olarak alıyor. Bu yüzden NerData üzerinde sonuçları maalesef iyi değil. Bir önceki modelde olduğu gibi, bu model için de maalesef dökümantasyon mevcut değil.

Aynı zamanda bütün modellerin, kendi verimizin Test kısmında da test etmek istedik. Bu sonuçlar aşağıda görülebilir.

SumNER f1 precision recall
Location 93.92% 92.98% 94.87%
Organization 89.08% 86.90% 91.37%
Person 95.97% 95.52% 96.42%
OVERALL 93.63% 92.57% 94.70%
savasy/
bert-base-turkish-ner-cased
f1 precision recall
Location 76.01% 73.05% 79.21%
Organization 48.74% 36.39% 73.77%
Person 77.90% 86.79% 70.66%
OVERALL 68.08% 62.66% 74.52%
beyhan/
bert-base-turkish-ner-cased-pretrained
f1 precision recall
Location 61.37% 76.55% 51.21%
Organization 36.02% 65.58% 24.82%
Person 72.76% 83.18% 64.66%
OVERALL 61.52% 78.32% 50.65%
gurkan08/
turkish-ner
f1 precision recall
Location 50.84% 50.83% 50.85%
Organization 46.44% 66.40% 35.71%
Person 73.98% 76.51% 71.62%
OVERALL 60.21% 65.67% 55.59%

Bu karşılaştırmaların ardından, modelimizin NerData üzerinde sonuçlarının %89 olduğunu gördüğümüzde, NerData ile eğitilen bir Summarify modelinin, Summarify tarafından hazırlanan SumDATA üzerindeki sonuçlarını da görmek istedik.

Bu doğrultuda, NerData verisini 60/40 olacak şekilde ikiye ayırdık ve iki modelin de sonuçlarını %40’lık Test verisinde performansını ölçtük. (Yazıda çok fazla tablo olmaması için Train, Eval ve Test olarak ayırmak yerine sadece Train ve Test olarak ayırmaya karar verdik.)

NerData Test kısmında sonuçlar:

SumDATA ile eğitilen SumNER modeli f1 precision recall
Location 90.45% 90.72% 90.17%
Organization 83.86% 82.69% 85.06%
Person 93.47% 93.25% 93.70%
Overall 89.94% 89.58% 90.31%
NERDATA ile eğitilen Summarify modeli f1 precision recall
Location 94.94% 94.67% 95.22%
Organization 93.79% 93.67% 93.91%
Person 96.18% 96.01% 96.36%
OVERALL 95.17% 94.98% 95.36%

Tabloya bakıldığında, SumNER modelini, NerData’nın tamamında test ettiğimizdeki sonuçlara yakın sonuçlar alıyoruz. Bu durum bize NerData verisinin kendi içinde tutarlı olacak şekilde hazırlandığını olduğunu gösteriyor.

Tabloda NerData ile eğitilen Summarify modelinin sonuçlarına baktığımızda (Tabloda ikinci kısım) bu modelin kendi verisinde %95.17 F1 olmak üzere çok iyi bir sonuç elde ettiğini görüyoruz.

Bunun ardından iki modeli de Summarify tarafından hazırlanan SumDATA üzerinde test ettiğimizde sonuçlar aşağıdaki tabloda görülebilir:

SumDATA ile eğitilen SumNER modeli f1 precision recall
Location 93.92% 92.98% 94.87%
Organization 89.08% 86.90% 91.37%
Person 95.97% 95.52% 96.42%
OVERALL 93.63% 92.57% 94.70%
NERDATA ile eğitilen Summarify modeli f1 precision recall
Location 84.81% 80.50% 89.61%
Organization 75.07% 81.60% 69.50%
Person 87.98% 83.76% 92.66%
Overall 84.13% 82.09% 86.27%

Bu sonuçlarda ise, kendi verisi içinde eğitilip test edilen SumNER modelinin daha iyi sonuçlar aldığını görüyoruz.

İki modeli de yabancı olduğu verilerde karşılaştırdığımızda (Yani SumDATA ile eğitilen SumNER modelinin NerData üzerindeki sonuçlarında ve NerData ile eğitilen Summarify modelinin SumData üzerindeki sonuçlarında) SumNER modelinin daha yüksek sonuçlar aldığı görülüyor. Bu da SumNER modelinin genelleme becerisinin daha yüksek olduğunu gösteriyor.

Test Adresi

Ner Demo

13 Etiketli modelimizi denemek isterseniz alttaki kanallardan birini kullanabilirsiniz