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']