Dasar-dasar Pemberian Tag Part-of-Speech (POS)

Apa itu penandaan POS?

Pemberian tag, sejenis klasifikasi, adalah penetapan otomatis dari deskripsi token. Kami menyebutnya 'tag' deskriptor, yang mewakili salah satu bagian ucapan (kata benda, kata kerja, kata keterangan, kata sifat, kata ganti, kata sambung dan subkategorinya), informasi semantik, dan sebagainya.

Di sisi lain, jika kita berbicara tentang penandaan Part-of-Speech (POS), itu dapat didefinisikan sebagai proses mengubah kalimat dalam bentuk daftar kata, menjadi daftar tupel. Di sini tupelnya berbentuk (word, tag). Kita juga dapat menyebut penandaan POS sebagai proses penugasan salah satu bagian ucapan ke kata tertentu.

Tabel berikut mewakili notifikasi POS yang paling sering digunakan dalam Penn Treebank corpus -

Sr Tidak Menandai Deskripsi
1 NNP Kata benda yang tepat, tunggal
2 NNPS Kata benda yang tepat, jamak
3 PDT Penentu pra
4 POS Akhir yang posesif
5 PRP Kata ganti pribadi
6 PRP $ Kata ganti posesif
7 RB Kata keterangan
8 RBR Kata keterangan, komparatif
9 RBS Kata keterangan, superlatif
10 RP Partikel
11 SYM Simbol (matematika atau ilmiah)
12 UNTUK untuk
13 UH Kata seru
14 VB Kata kerja, bentuk dasar
15 VBD Kata kerja, bentuk lampau
16 VBG Kata kerja, gerund / present participle
17 VBN Kata kerja, masa lalu
18 WP A-kata ganti
19 WP $ Kata ganti wh posesif
20 WRB Adverb
21 # Tanda pound
22 $ Tanda dollar
23 . Tanda baca akhir kalimat
24 , Koma
25 : Usus besar, titik koma
26 ( Karakter tanda kurung kiri
27 ) Karakter kurung siku
28 " Kutipan ganda lurus
29 ' Kutipan tunggal terbuka kiri
30 " Kutipan ganda terbuka kiri
31 ' Kutipan tunggal dekat kanan
32 " Kutip ganda buka kanan

Contoh

Mari kita pahami dengan eksperimen Python -

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

Keluaran

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

Mengapa penandaan POS?

Penandaan POS adalah bagian penting dari NLP karena berfungsi sebagai prasyarat untuk analisis NLP lebih lanjut sebagai berikut -

  • Chunking
  • Penguraian Sintaks
  • Ekstraksi informasi
  • Mesin penerjemah
  • Analisis Sentimen
  • Analisis tata bahasa & disambiguasi arti kata

TaggerI - Kelas dasar

Semua pemberi tag berada dalam paket nltk.tag NLTK. Kelas dasar dari pemberi tag ini adalahTaggerI, berarti semua pemberi tag diwarisi dari kelas ini.

Methods - Kelas TaggerI memiliki dua metode berikut yang harus diimplementasikan oleh semua subkelasnya -

  • tag() method - Sesuai dengan namanya, metode ini mengambil daftar kata sebagai masukan dan mengembalikan daftar kata yang diberi tag sebagai keluaran.

  • evaluate() method - Dengan bantuan metode ini, kami dapat mengevaluasi keakuratan tagger.

Dasar dari Pemberian Tag POS

Baseline atau langkah dasar penandaan POS adalah Default Tagging, yang dapat dilakukan dengan menggunakan kelas DefaultTagger dari NLTK. Penandaan default hanya menetapkan tag POS yang sama untuk setiap token. Pemberian tag default juga memberikan dasar untuk mengukur peningkatan akurasi.

Kelas DefaultTagger

Penandaan default dilakukan dengan menggunakan DefaultTagging class, yang mengambil argumen tunggal, yaitu tag yang ingin kita terapkan.

Bagaimana cara kerjanya?

Seperti yang diceritakan sebelumnya, semua tagger diwarisi dari TaggerIkelas. ItuDefaultTagger diwarisi dari SequentialBackoffTagger yang merupakan subclass dari TaggerI class. Mari kita pahami dengan diagram berikut -

Sebagai bagian dari SeuentialBackoffTagger, itu DefaultTagger harus mengimplementasikan metode select_tag () yang mengambil tiga argumen berikut.

  • Daftar Token
  • Indeks token saat ini
  • Daftar token sebelumnya, yaitu sejarah

Contoh

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

Keluaran

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

Dalam contoh ini, kami memilih tag kata benda karena ini adalah jenis kata yang paling umum. Bahkan,DefaultTagger juga paling berguna saat kita memilih tag POS yang paling umum.

Evaluasi akurasi

Itu DefaultTaggerjuga merupakan dasar untuk mengevaluasi keakuratan pemberi tag. Itulah alasan kita bisa menggunakannya bersamaevaluate()metode untuk mengukur akurasi. Ituevaluate() Metode mengambil daftar token yang diberi tag sebagai standar emas untuk mengevaluasi pemberi tag.

Berikut adalah contoh di mana kami menggunakan tagger default kami, bernama exptagger, dibuat di atas, untuk mengevaluasi keakuratan subset dari treebank corpus tagged kalimat -

Contoh

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

Keluaran

0.13198749536374715

Output di atas menunjukkan itu dengan memilih NN untuk setiap tag, kami dapat mencapai sekitar 13% pengujian akurasi pada 1000 entri file treebank korpus.

Memberi tag pada daftar kalimat

Daripada menandai satu kalimat, NLTK's TaggerI kelas juga memberi kita a tag_sents()metode dengan bantuan yang kita dapat menandai daftar kalimat. Berikut adalah contoh di mana kami menandai dua kalimat sederhana

Contoh

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

Keluaran

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

Dalam contoh di atas, kami menggunakan tagger default yang kami buat sebelumnya bernama exptagger.

Menghapus tag pada kalimat

Kami juga dapat menghapus tag pada kalimat. NLTK menyediakan metode nltk.tag.untag () untuk tujuan ini. Ini akan mengambil kalimat yang diberi tag sebagai masukan dan memberikan daftar kata tanpa tanda. Mari kita lihat contohnya -

Contoh

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

Keluaran

['Tutorials', 'Point']