Kısmi Konuşma (POS) Etiketlemenin Temelleri

POS etiketlemesi nedir?

Bir tür sınıflandırma olan etiketleme, belirteçlerin açıklamasının otomatik olarak atanmasıdır. Tanımlayıcının konuşma bölümlerinden birini (isimler, fiil, zarflar, sıfatlar, zamirler, bağlaçlar ve bunların alt kategorileri), anlamsal bilgi vb. Temsil eden 'etiketi' olarak adlandırıyoruz.

Öte yandan, Konuşma Parçası (POS) etiketlemesinden bahsedecek olursak, bir sözcük listesi biçimindeki bir cümleyi bir demet listesine dönüştürme işlemi olarak tanımlanabilir. Burada demetler (kelime, etiket) biçimindedir. POS etiketlemeyi, konuşma bölümlerinden birini verilen kelimeye atama işlemini de adlandırabiliriz.

Aşağıdaki tablo Penn Treebank külliyatında en sık kullanılan POS bildirimini göstermektedir -

Sr.No Etiket Açıklama
1 NNP Uygun isim, tekil
2 NNPS Özel isim, çoğul
3 Pasifik yaz saati Ön belirleyici
4 POS İyelik sonu
5 PRP Şahıs zamiri
6 PRP $ İyelik zamiri
7 RB Zarf
8 RBR Zarf, karşılaştırmalı
9 RBS Zarf, en üstün
10 RP Parçacık
11 SYM Sembol (matematiksel veya bilimsel)
12 KİME -e
13 UH Ünlem
14 VB Fiil, temel biçim
15 VBD Fiil, geçmiş zaman
16 VBG Fiil, ulaç / şimdiki zaman ortacı
17 VBN Fiil, geçmiş
18 WP Wh zamiri
19 WP $ İyelik wh-zamiri
20 WRB Wh-zarf
21 # Diyez işareti
22 $ Dolar işareti
23 . Cümle sonu noktalama
24 , Virgül
25 : Kolon, noktalı virgül
26 ( Sol parantez karakteri
27 ) Sağ köşeli ayraç karakteri
28 " Düz çift tırnak
29 ' Sol açık tek alıntı
30 " Sola açık çift tırnak
31 ' Sağdan yakın tek tırnak
32 " Sağa açık çift tırnak

Misal

Bunu bir Python deneyiyle anlayalım -

import nltk
from nltk import word_tokenize
sentence = "I am going to school"
print (nltk.pos_tag(word_tokenize(sentence)))

Çıktı

[('I', 'PRP'), ('am', 'VBP'), ('going', 'VBG'), ('to', 'TO'), ('school', 'NN')]

Neden POS etiketlemesi?

POS etiketleme, NLP'nin önemli bir parçasıdır çünkü aşağıdaki gibi daha fazla NLP analizi için ön koşul olarak çalışır -

  • Chunking
  • Sözdizimi Ayrıştırma
  • Bilgi çıkarma
  • Makine Çevirisi
  • Duygu Analizi
  • Dilbilgisi analizi ve kelime anlamında belirsizlik giderme

TaggerI - Temel sınıf

Tüm etiketleyiciler NLTK'nın nltk.tag paketinde bulunur. Bu etiketleyicilerin temel sınıfıTaggerI, tüm etiketleyicilerin bu sınıftan miras aldığı anlamına gelir.

Methods - TaggerI sınıfı, tüm alt sınıfları tarafından uygulanması gereken aşağıdaki iki yönteme sahiptir -

  • tag() method - Adından da anlaşılacağı gibi, bu yöntem girdi olarak bir sözcük listesi alır ve çıktı olarak etiketlenmiş sözcüklerin bir listesini döndürür.

  • evaluate() method - Bu yöntem sayesinde etiketleyicinin doğruluğunu değerlendirebiliriz.

POS Etiketlemenin Temelleri

POS etiketlemenin temeli veya temel adımı Default Tagging, NLTK'nin DefaultTagger sınıfı kullanılarak gerçekleştirilebilir. Varsayılan etiketleme, her jetona aynı POS etiketini atar. Varsayılan etiketleme ayrıca doğruluk iyileştirmelerini ölçmek için bir temel sağlar.

DefaultTagger sınıfı

Varsayılan etiketleme kullanılarak gerçekleştirilir DefaultTagging sınıf, tek bağımsız değişkeni, yani uygulamak istediğimiz etiketi alan.

O nasıl çalışır?

Daha önce de belirtildiği gibi, tüm etiketleyiciler TaggerIsınıf. DefaultTagger miras kaldı SequentialBackoffTagger alt sınıfı olan TaggerI class. Bunu aşağıdaki diyagramla anlayalım -

Parçası olarak SeuentialBackoffTagger, DefaultTagger Aşağıdaki üç argümanı alan select_tag () yöntemini uygulamalıdır.

  • Token listesi
  • Mevcut jeton dizini
  • Önceki jeton listesi, yani geçmiş

Misal

import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag(['Tutorials','Point'])

Çıktı

[('Tutorials', 'NN'), ('Point', 'NN')]

Bu örnekte, en yaygın kelime türleri olduğu için bir isim etiketi seçtik. Dahası,DefaultTagger en yaygın POS etiketini seçtiğimizde de en kullanışlıdır.

Doğruluk değerlendirmesi

DefaultTaggerayrıca etiketleyicilerin doğruluğunu değerlendirmek için temeldir. Onu birlikte kullanabilmemizin nedeni budur.evaluate()doğruluğu ölçme yöntemi. evaluate() yöntemi etiketleyiciyi değerlendirmek için altın standart olarak etiketlenmiş belirteçlerin bir listesini alır.

Aşağıda, adlı varsayılan etiketleyicimizi kullandığımız bir örnek verilmiştir. exptagger, bir alt kümesinin doğruluğunu değerlendirmek için yukarıda oluşturulmuştur treebank corpus etiketli cümleler -

Misal

import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
from nltk.corpus import treebank
testsentences = treebank.tagged_sents() [1000:]
exptagger.evaluate (testsentences)

Çıktı

0.13198749536374715

Yukarıdaki çıktı şunu gösterir: NN Her etiket için, 1000 girişte yaklaşık% 13 doğruluk testi gerçekleştirebiliriz. treebank külliyat.

Bir cümle listesini etiketleme

Tek bir cümleyi etiketlemek yerine, NLTK'lar TaggerI sınıf ayrıca bize bir tag_sents()yardımı ile bir cümle listesini etiketleyebileceğimiz yöntem. İki basit cümleyi etiketlediğimiz örnek aşağıdadır

Misal

import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag_sents([['Hi', ','], ['How', 'are', 'you', '?']])

Çıktı

[
   [
      ('Hi', 'NN'), 
      (',', 'NN')
   ], 
   [
      ('How', 'NN'), 
      ('are', 'NN'),
      ('you', 'NN'), 
      ('?', 'NN')
   ]
]

Yukarıdaki örnekte, daha önce oluşturduğumuz varsayılan etiketleyicimizi kullandık. exptagger.

Bir cümlenin etiketini kaldırma

Ayrıca bir cümlenin etiketini kaldırabiliriz. NLTK, bu amaç için nltk.tag.untag () yöntemini sağlar. Giriş olarak etiketli bir cümleyi alacak ve etiketsiz kelimelerin bir listesini sağlayacaktır. Bir örnek görelim -

Misal

import nltk
from nltk.tag import untag
untag([('Tutorials', 'NN'), ('Point', 'NN')])

Çıktı

['Tutorials', 'Point']