POS Tagging dengan NLTK dan Chunking di NLP [CONTOH]

⚡ Ringkasan Cerdas

Penandaan POS (Part of Speech) menetapkan bagian ujaran untuk setiap kata dalam kalimat, sementara Chunking mengelompokkan kata-kata yang telah ditandai tersebut menjadi frasa yang bermakna seperti frasa nomina, menambahkan struktur dangkal yang dibangun NLTK dengan ekspresi reguler. Python.

  • Penandaan POS: Setiap kata menerima token gramatikal seperti NN, VB, atau JJ dari konteksnya.
  • 🌿 Potongan: Kata-kata yang diberi tag dikelompokkan menjadi frasa, sebuah proses yang juga disebut penguraian dangkal (shallow parsing).
  • 🔤 Alur kerja: Pertama-tama, lakukan tokenisasi teks, kemudian terapkan pos_tag, lalu uraikan dengan tata bahasa RegexpParser.
  • 📊 Menghitung Tag: Counter dan FreqDist mengungkapkan frekuensi tag dan kata untuk rekayasa fitur.
  • 🔗 Kolokasi: Bigram dan trigram menggabungkan pasangan kata dan tiga kata untuk fitur teks yang lebih kuat.
  • 🤖 Penggunaan AI: Pembelajaran mesin dan penanda berbasis HMM menangani kata-kata ambigu secara probabilistik.

Penandaan POS dengan NLTK dan Chunking dalam NLP

Penandaan POS

Penandaan POS (Penandaan Bagian Ucapan) adalah proses untuk menandai kata-kata dalam format teks untuk bagian ucapan tertentu berdasarkan definisi dan konteksnya. Proses ini bertanggung jawab untuk membaca teks dalam suatu bahasa dan menetapkan token spesifik (Bagian Ucapan) untuk setiap kata. Proses ini juga disebut penandaan tata bahasa.

Mari kita belajar dengan contoh Part of Speech dari NLTK:

Input: Everything to permit us.
Output: [('Everything', NN),('to', TO), ('permit', VB), ('us', PRP)]

Langkah-langkah yang Terlibat dalam Contoh Penandaan POS

  • Tokenisasi teks (word_tokenize)
  • Terapkan pos_tag pada langkah di atas, yaitu nltk.pos_tag(tokenize_text)

Berikut adalah contoh tag POS NLTK:

singkatan Arti
CC konjungsi koordinatif
CD angka kardinal
DT penentu
EX eksistensial di sana
FW kata asing
IN kata depan/konjungsi bawahan
JJ kata sifat
JJR kata sifat, perbandingan
JJS kata sifat, superlatif
LS daftar pasar
MD modal
NN kata benda, tunggal
NNS kata benda jamak
NNP kata benda khusus, tunggal
NNPS kata benda khusus, jamak
PDT penentu awal
POS akhiran posesif
PRP kata ganti pribadi
PRP$ kata ganti posesif
RB kata keterangan
RBR kata keterangan, perbandingan
RBS kata keterangan, superlatif
RP partikel
UNTUK penanda tak terbatas
UH kata seru
VB kata kerja
GBV kata kerja gerund
VBD kata kerja bentuk lampau
VBN kata kerja bentuk lampau
VBP kata kerja, bentuk present tense bukan orang ketiga tunggal
VBZ kata kerja, bentuk present tense dengan orang ketiga tunggal
WDT penentu wh
WP kata ganti wh
WRB kata keterangan wh

Daftar tag POS NLTK di atas berisi semua Tag POS NLTK. Tagger POS NLTK digunakan untuk memberikan informasi tata bahasa pada setiap kata dalam kalimat. Instalasi, impor, dan pengunduhan semua paket POS NLTK kini telah selesai.

Apa itu Chunking di NLP?

Memotong Dalam NLP, chunking adalah proses mengambil potongan-potongan kecil informasi dan mengelompokkannya menjadi unit-unit besar. Penggunaan utama chunking adalah untuk membuat kelompok "frasa nomina". Chunking digunakan untuk menambahkan struktur pada kalimat dengan mengikuti penandaan POS (Part-of-Speech) yang dikombinasikan dengan ekspresi reguler. Kelompok kata yang dihasilkan disebut "chunk". Chunking juga disebut shallow parsing.

Dalam penguraian dangkal, terdapat maksimal satu tingkat antara akar dan daun, sedangkan penguraian dalam mencakup lebih dari satu tingkat. Penguraian dangkal juga disebut penguraian ringan atau pengelompokan.

Aturan untuk Memotong

Tidak ada aturan yang telah ditentukan sebelumnya, tetapi Anda dapat menggabungkannya sesuai kebutuhan dan persyaratan. Misalnya, anggaplah Anda perlu memberi tag pada kata benda, kata kerja (bentuk lampau), kata sifat, dan kata hubung koordinatif dari sebuah kalimat. Anda dapat menggunakan aturan di bawah ini:

chunk:{***?}

Tabel berikut menunjukkan arti dari berbagai simbol:

Nama simbol Deskripsi
. Karakter apa pun kecuali baris baru
* Cocokkan 0 atau lebih pengulangan
? Cocokkan 0 atau 1 pengulangan

Sekarang mari kita tulis kodenya untuk memahami aturan tersebut dengan lebih baik.

from nltk import pos_tag
from nltk import RegexpParser
text ="learn php from guru99 and make study easy".split()
print("After Split:",text)
tokens_tag = pos_tag(text)
print("After Token:",tokens_tag)
patterns= """mychunk:{***?}"""
chunker = RegexpParser(patterns)
print("After Regex:",chunker)
output = chunker.parse(tokens_tag)
print("After Chunking",output)

Keluaran:

After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy']
After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')]
After Regex: chunk.RegexpParser with 1 stages:
RegexpChunkParser with 1 rules:
       '***?'>
After Chunking (S
  (mychunk learn/JJ)
  (mychunk php/NN)
  from/IN
  (mychunk guru99/NN and/CC)
  make/VB
  (mychunk study/NN easy/JJ))

Kesimpulan dari penandaan Part of Speech di atas Python Contohnya adalah "make" adalah kata kerja yang tidak termasuk dalam aturan, jadi tidak diberi tag sebagai mychunk.

Kasus Penggunaan Chunking

Chunking digunakan untuk deteksi entitas. Entitas adalah bagian dari kalimat yang digunakan mesin untuk mendapatkan nilai dari suatu maksud.

Example:
Temperature of New York.
Here Temperature is the intention and New York is an entity.

Dengan kata lain, chunking digunakan untuk memilih subset token. Silakan ikuti kode di bawah ini untuk memahami bagaimana chunking digunakan untuk memilih token. Dalam contoh ini, Anda akan melihat grafik yang sesuai dengan sebuah bagian dari frasa nomina.

 import nltk
text = "learn php from guru99"
tokens = nltk.word_tokenize(text)
print(tokens)
tag = nltk.pos_tag(tokens)
print(tag)
grammar = "NP: {
?*}" cp =nltk.RegexpParser(grammar) result = cp.parse(tag) print(result) result.draw() # It will draw the pattern graphically which can be seen in Noun Phrase chunking

Keluaran:

['learn', 'php', 'from', 'guru99']  -- These are the tokens
[('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')]   -- These are the pos_tag
(S (NP learn/JJ php/NN) from/IN (NP guru99/NN))        -- Noun Phrase Chunking

Grafik Pemotongan Frase Kata Benda

Grafik chunking Frase Kata Benda

Dari grafik, kita dapat menyimpulkan bahwa “learn” dan “guru99” adalah dua token yang berbeda tetapi dikategorikan sebagai Frasa Kata Benda, sedangkan token “from” tidak termasuk dalam Frasa Kata Benda. Chunking digunakan untuk mengkategorikan token yang berbeda ke dalam chunk yang sama. Hasilnya akan bergantung pada tata bahasa yang telah dipilih. Lebih lanjut, Chunking dalam NLTK digunakan untuk menandai pola dan untuk mengeksplorasi korpus teks.

Menghitung Tag POS

Berbagai macam sudah kami bahas pos_tag nilai-nilai sebelumnya. Di sini Anda akan mempelajari cara menghitung tag-tag ini. Menghitung tag sangat penting untuk klasifikasi teks dan untuk mempersiapkan fitur untuk operasi bahasa alami. Pertama, kita akan menulis kode yang berfungsi dan kemudian menjelaskan langkah-langkahnya.

from collections import Counter
import nltk
text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online."
lower_case = text.lower()
tokens = nltk.word_tokenize(lower_case)
tags = nltk.pos_tag(tokens)
counts = Counter( tag for word,  tag in tags)
print(counts)

Keluaran:

Counter({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1, 'DT': 1, 'JJS': 1, 'JJ': 1, 'JJR': 1, 'IN': 1, 'VB': 1, 'RB': 1})

Penjelasan kode:

  1. Gunakan paket Counter dari modul collections. Counter adalah subkelas dictionary yang menyimpan elemen sebagai kunci dan jumlahnya sebagai nilai.
  2. Impor nltk untuk melakukan tokenisasi teks.
  3. Tulis teks yang pos_tagnya ingin Anda hitung.
  4. Ubah semua kata menjadi huruf kecil sebelum tokenisasi.
  5. Lewatkan kata-kata melalui word_tokenize dan hitung pos_tag dari setiap token.
  6. Counter kemudian menghitung total kemunculan setiap tag dalam teks.

Distribusi Frekuensi

Distribusi Frekuensi mengacu pada jumlah kali suatu hasil percobaan terjadi. Ini digunakan untuk menemukan frekuensi kemunculan setiap kata dalam sebuah dokumen. Metode ini menggunakan... Jarak Frekuensi kelas yang didefinisikan oleh nltk.probabilitas modul. Hitungan bertambah satu setiap kali sampel diambil.

Untuk setiap kata, kita dapat memeriksa berapa kali kata tersebut muncul dalam sebuah dokumen. Misalnya:

  • Metode Penghitungan: freq_dist.count('and') mengembalikan jumlah kemunculan 'and'. Ini disebut metode count.
  • Metode Frekuensi: freq_dist.freq('and') mengembalikan frekuensi dari sampel tertentu.

Kita akan menulis program kecil yang menghitung distribusi frekuensi setiap kata dalam teks.

import nltk
a = "Guru99 is the site where you can find the best tutorials for Software Testing     Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please     visit the site guru99.com and much more."
words = nltk.tokenize.word_tokenize(a)
fd = nltk.FreqDist(words)
fd.plot()

Penjelasan kode:

  1. Impor modul nltk.
  2. Tulis teks yang distribusi katanya perlu Anda temukan.
  3. Tokenisasi setiap kata dalam teks, yang berfungsi sebagai input untuk modul FreqDist dari nltk.
  4. Terapkan setiap kata ke nltk.FreqDist dalam bentuk daftar.
  5. Plot kata-kata dalam grafik menggunakan fungsi plot().

CATATAN: matplotlib harus diinstal agar grafik dapat dilihat. Matplotlib menghitung kemunculan setiap kata dalam teks dan membantu dalam analisis sentimen berbasis teks. Istilah kuncinya adalah "tokenisasi": setelah tokenisasi, setiap kata diperiksa untuk menentukan berapa kali kata tersebut muncul.

Kolokasi: Bigram dan Trigram

Kolokasi adalah pasangan kata yang muncul bersamaan berkali-kali dalam sebuah dokumen. Kolokasi dihitung dengan rasio antara jumlah pasangan kata yang muncul bersamaan dengan jumlah total kata dalam dokumen tersebut.

Perhatikan kata-kata seperti sinar ultraviolet dan sinar inframerah. Kata ultraviolet dan sinar tidak digunakan secara terpisah dan karenanya dapat dianggap sebagai kolokasi. Contoh lain adalah CT Scan, karena kita tidak mengatakan CT dan Scan secara terpisah. Kolokasi dapat dikategorikan menjadi dua jenis:

  • Bigram: kombinasi dua kata
  • Trigram: kombinasi tiga kata

Bigram dan Trigram memberikan fitur yang lebih bermakna dan bermanfaat untuk fitur tersebut, misalnya.tractahap ini. Ini sangat berguna dalam analisis sentimen berbasis teks.

Contoh Bigram Code:

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.bigrams(Tokens))
print(output)

Keluaran:

[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]

Contoh Trigram Code:

Terkadang menjadi penting untuk melihat sepasang tiga kata dalam sebuah kalimat untuk analisis statistik dan penghitungan frekuensi. Ini sekali lagi memainkan peran penting dalam pembentukan NLP (pemrosesan bahasa alami) fitur serta prediksi sentimen berbasis teks. Kode yang sama dijalankan untuk menghitung trigram.

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.trigrams(Tokens))
print(output)

Keluaran:

[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]

Menandai Kalimat

Pemberian tag pada kalimat merujuk pada penambahan label seperti kata kerja atau kata benda berdasarkan konteks kalimat. Mengidentifikasi tag POS (Part-of-Speech) itu rumit, sehingga pemberian tag generik secara manual tidak mungkin dilakukan, karena beberapa kata memiliki makna yang ambigu tergantung pada struktur kalimat. Mengubah teks menjadi daftar merupakan langkah penting sebelum pemberian tag, karena setiap kata diulang dan dihitung untuk tag tertentu.

import nltk
text = "Hello Guru99, You have to build a very good site, and I love visiting your site."
sentence = nltk.sent_tokenize(text)
for sent in sentence:
	 print(nltk.pos_tag(nltk.word_tokenize(sent)))

Code Penjelasan:

  1. Code untuk mengimpor nltk (Natural) Language Toolkit, yang berisi submodul seperti tokenisasi kalimat dan tokenisasi kata).
  2. Teks yang tagnya akan dicetak.
  3. Tokenisasi Kalimat.
  4. Sebuah perulangan for diimplementasikan di mana kata-kata dipecah menjadi token dari kalimat dan tag dari setiap kata dicetak sebagai output.

Dalam sebuah Korpus, terdapat dua jenis penanda POS:

1. Penanda POS Berbasis Aturan: Untuk kata-kata dengan makna ambigu, pendekatan berbasis aturan berdasarkan informasi kontekstual diterapkan. Hal ini dilakukan dengan menganalisis makna kata sebelumnya atau sesudahnya. Oleh karena itu, kata-kata diberi label berdasarkan aturan tata bahasa dari bahasa tertentu, seperti penggunaan huruf kapital dan tanda baca. Contohnya, penanda kata Brill.

2. Penanda POS Stokastik: Pendekatan seperti frekuensi atau probabilitas diterapkan dalam metode ini. Jika sebuah kata sebagian besar diberi tag tertentu dalam set pelatihan, maka kata tersebut akan diberi tag tersebut dalam kalimat uji. Tag kata tidak hanya bergantung pada tagnya sendiri tetapi juga pada tag sebelumnya, sehingga metode ini tidak selalu akurat.

Penandaan POS dengan Model Markov Tersembunyi

Masalah pemberian tag juga dapat dimodelkan menggunakan Model Markov Tersembunyi (HMM). Model ini memperlakukan token input sebagai urutan yang dapat diamati, sedangkan tag dianggap sebagai keadaan tersembunyi, dan tujuannya adalah untuk menentukan urutan keadaan tersembunyi tersebut. Misalnya, x = x1,x2,…,xn, di mana x adalah urutan token, sedangkan y = y1,y2,y3,y4…yn adalah urutan tersembunyi.

Bagaimana Model Markov Tersembunyi (HMM) Bekerja?

HMM menggunakan distribusi gabungan P(x, y), di mana x adalah urutan token masukan dan y adalah urutan tag. Urutan tag untuk x akan menjadi argmax atas y1…yn dari p(x1,x2,…xn,y1,y2,y3,…). Kami telah mengkategorikan tag dari teks, tetapi statistik dari tag tersebut sangat penting, jadi bagian selanjutnya adalah menghitung tag-tag ini untuk studi statistik.

Pertanyaan Umum Demo Slot

Penandaan POS (Part of Speech) memberi label pada setiap kata dengan bagian katanya, seperti kata benda atau kata kerja. Chunking melangkah lebih jauh dan mengelompokkan kata-kata yang telah ditandai tersebut menjadi frasa seperti frasa kata benda, sehingga memberikan struktur yang dangkal pada kalimat.

Penguraian dangkal, juga disebut pengelompokan atau penguraian ringan, mempertahankan maksimal satu level antara akar dan daun. Penguraian ini mengidentifikasi batas frasa tanpa membangun pohon penguraian lengkap, sehingga lebih cepat daripada penguraian mendalam.

Chunking mengelompokkan kata-kata yang diberi tag menjadi frasa, yang memungkinkan sistem mendeteksi entitas seperti orang, lokasi, tanggal, atau produk. Pengenalan entitas bernama bergantung pada chunk ini untuk mengekstrak informasi.tract nilai bermakna dari teks mentah.

Fungsi nltk.pos_tag() menetapkan tag bagian ucapan. Anda pertama-tama melakukan tokenisasi teks dengan word_tokenize, kemudian meneruskan daftar token ke pos_tag, yang mengembalikan setiap kata yang dipasangkan dengan tagnya seperti NN, VB, atau JJ.

Ya. Penanda AI modern yang dilatih dengan pembelajaran mesin dan jaringan saraf dalam (deep neural networks) menyelesaikan kata-kata ambigu dengan mempelajari konteks dari korpus besar, mencapai akurasi yang lebih tinggi daripada metode berbasis aturan pada teks dunia nyata.

Penanda stokastik menggunakan probabilitas yang dipelajari dari data pelatihan. Pembelajaran mesin memperkirakan seberapa besar kemungkinan setiap tag untuk suatu kata berdasarkan tag di sekitarnya, kemudian memilih urutan dengan probabilitas keseluruhan tertinggi.

Selain NLTK, pilihan populer meliputi spaCy untuk alur produksi yang cepat, Stanford CoreNLP, dan Hugging Face Transformers untuk penandaan berbasis transformer.

Dalam tata bahasa chunk, titik cocok dengan karakter apa pun kecuali baris baru, tanda bintang cocok dengan nol atau lebih pengulangan, dan tanda tanya cocok dengan nol atau satu pengulangan pola tag POS sebelumnya.

Ringkaslah postingan ini dengan: