Perangkat Bahasa Alami - Parsing
Parsing dan relevansinya di NLP
Kata 'Parsing' yang asalnya dari kata Latin ‘pars’ (yang berarti ‘part’), digunakan untuk menggambar makna yang tepat atau makna kamus dari teks. Ini juga disebut analisis sintaksis atau analisis sintaksis. Membandingkan aturan tata bahasa formal, analisis sintaksis memeriksa kebermaknaan teks. Kalimat seperti "Beri aku es krim panas", misalnya, akan ditolak oleh pengurai atau penganalisis sintaksis.
Dalam pengertian ini, kita dapat mendefinisikan parsing atau analisis sintaksis atau analisis sintaks sebagai berikut -
Ini dapat didefinisikan sebagai proses menganalisis string simbol dalam bahasa alami yang sesuai dengan aturan tata bahasa formal.
Kami dapat memahami relevansi parsing di NLP dengan bantuan poin-poin berikut -
Parser digunakan untuk melaporkan kesalahan sintaks apa pun.
Ini membantu untuk memulihkan dari kesalahan yang biasa terjadi sehingga pemrosesan sisa program dapat dilanjutkan.
Pohon Parse dibuat dengan bantuan parser.
Parser digunakan untuk membuat tabel simbol, yang berperan penting dalam NLP.
Parser juga digunakan untuk menghasilkan representasi perantara (IR).
Parsing Jauh Vs Dangkal
Parsing Dalam | Parsing Dangkal |
---|---|
Pada deep parsing, strategi pencarian akan memberikan struktur sintaksis yang lengkap pada sebuah kalimat. | Ini adalah tugas mengurai bagian terbatas informasi sintaksis dari tugas yang diberikan. |
Sangat cocok untuk aplikasi NLP yang kompleks. | Ini dapat digunakan untuk aplikasi NLP yang tidak terlalu rumit. |
Sistem dialog dan ringkasan adalah contoh aplikasi NLP yang menggunakan parsing dalam. | Ekstraksi informasi dan penambangan teks adalah contoh aplikasi NLP di mana parsing dalam digunakan. |
Ini juga disebut parsing penuh. | Ini juga disebut chunking. |
Berbagai jenis parser
Seperti dibahas, parser pada dasarnya adalah interpretasi tata bahasa prosedural. Ia menemukan pohon yang optimal untuk kalimat yang diberikan setelah menelusuri ruang dari berbagai pohon. Mari kita lihat beberapa parser yang tersedia di bawah ini -
Pengurai keturunan rekursif
Penguraian turunan rekursif adalah salah satu bentuk penguraian yang paling mudah. Berikut adalah beberapa poin penting tentang parser keturunan rekursif -
Ini mengikuti proses top down.
Ini mencoba untuk memverifikasi bahwa sintaks dari aliran input sudah benar atau tidak.
Itu membaca kalimat input dari kiri ke kanan.
Satu operasi yang diperlukan untuk parser keturunan rekursif adalah membaca karakter dari aliran input dan mencocokkannya dengan terminal dari tata bahasa.
Pengurai shift-kurangi
Berikut adalah beberapa poin penting tentang pengurai shift-kurangi -
Ini mengikuti proses bottom-up sederhana.
Ia mencoba menemukan urutan kata dan frase yang sesuai dengan sisi kanan produksi tata bahasa dan menggantinya dengan sisi kiri produksi.
Upaya di atas untuk menemukan urutan kata berlanjut hingga seluruh kalimat berkurang.
Dengan kata lain, parser shift-reduce dimulai dengan simbol input dan mencoba membangun pohon parser hingga simbol awal.
Pengurai bagan
Berikut adalah beberapa poin penting tentang pengurai grafik -
Ini terutama berguna atau cocok untuk tata bahasa yang ambigu, termasuk tata bahasa alam.
Ini menerapkan program dinamis untuk masalah parsing.
Karena pemrograman dinamis, sebagian hasil yang dihipotesiskan disimpan dalam struktur yang disebut 'bagan'.
'Grafik' juga bisa digunakan kembali.
Parser ekspresi reguler
Penguraian reguler adalah salah satu teknik penguraian yang paling banyak digunakan. Berikut adalah beberapa poin penting tentang parser Regexp -
Sesuai namanya, ini menggunakan ekspresi reguler yang ditentukan dalam bentuk tata bahasa di atas string yang diberi tag POS.
Ini pada dasarnya menggunakan ekspresi reguler ini untuk mengurai kalimat input dan menghasilkan pohon parse dari ini.
Contoh
Berikut adalah contoh kerja Regexp Parser -
import nltk
sentence = [
("a", "DT"),
("clever", "JJ"),
("fox","NN"),
("was","VBP"),
("jumping","VBP"),
("over","IN"),
("the","DT"),
("wall","NN")
]
grammar = "NP:{<DT>?<JJ>*<NN>}"
Reg_parser = nltk.RegexpParser(grammar)
Reg_parser.parse(sentence)
Output = Reg_parser.parse(sentence)
Output.draw()
Keluaran
Penguraian Ketergantungan
Dependency Parsing (DP), mekanisme parsing modern, yang konsep utamanya adalah bahwa setiap unit linguistik yaitu kata-kata berhubungan satu sama lain melalui tautan langsung. Tautan langsung ini sebenarnya‘dependencies’dalam linguistik. Misalnya, diagram berikut menunjukkan tata bahasa ketergantungan untuk kalimat tersebut“John can hit the ball”.
Paket NLTK
Kami telah mengikuti dua cara untuk melakukan parsing dependensi dengan NLTK -
Pengurai ketergantungan proyektif dan probabilistik
Ini adalah cara pertama kita melakukan parsing dependensi dengan NLTK. Tetapi parser ini memiliki batasan pelatihan dengan kumpulan data pelatihan terbatas.
Pengurai Stanford
Ini adalah cara lain kita dapat melakukan penguraian dependensi dengan NLTK. Stanford parser adalah pengurai dependensi yang canggih. NLTK memiliki pembungkus di sekelilingnya. Untuk menggunakannya kita perlu mengunduh dua hal berikut -
The Stanford CoreNLP parser .
Model bahasa untuk bahasa yang diinginkan. Misalnya model bahasa Inggris.
Contoh
Setelah Anda mengunduh model, kami dapat menggunakannya melalui NLTK sebagai berikut -
from nltk.parse.stanford import StanfordDependencyParser
path_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser.jar'
path_models_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser-3.4.1-models.jar'
dep_parser = StanfordDependencyParser(
path_to_jar = path_jar, path_to_models_jar = path_models_jar
)
result = dep_parser.raw_parse('I shot an elephant in my sleep')
depndency = result.next()
list(dependency.triples())
Keluaran
[
((u'shot', u'VBD'), u'nsubj', (u'I', u'PRP')),
((u'shot', u'VBD'), u'dobj', (u'elephant', u'NN')),
((u'elephant', u'NN'), u'det', (u'an', u'DT')),
((u'shot', u'VBD'), u'prep', (u'in', u'IN')),
((u'in', u'IN'), u'pobj', (u'sleep', u'NN')),
((u'sleep', u'NN'), u'poss', (u'my', u'PRP$'))
]