Anda di halaman 1dari 40

Extracting Information from Text (2)

PENGAMPU

Dr. Fajar Astuti Hermawati, S.Kom.,M.Kom. Luvia Narulita, S.ST., MT

Ir. Sugiono, MT Naufal Abdillah, S.Kom., M.Kom.

Universitas 17 Agustus 1945 Surabaya Teknik Informatika


Capaian Pembelajaran
• Mampu menjelaskan konsep pemrosesan dan pemahaman teks
melakukan praproses dan memperdebatkan data teks yang noisy
melalui stemming, lemmatization, tokenization, penghapusan stop-
words dan banyak lagi serta mampu memproses data teks dan string,
dan melakukan pencocokan pola dengan ekspresi reguler di Python
[C2,C4,A3,P3]
Indikator
• Ketepatan mendefinisikan pola hubungan entitas tertentu dan
mengekstraksinya menggunakan NLTK
• Ketepatan dalam mengevaluasi hasil ekstraksi Named Entity Relation
Developing and Evaluating Chunkers
• Setelah kita mengetahui apa yang dilakukan chunking, bagaimana
cara mengevaluasi chunker.
• Dalam hal ini kita membutuhkan korpus beranotasi yang sesuai.
• Kita mulai dengan melihat mekanisme mengubah format IOB
menjadi pohon NLTK, lalu bagaimana hal ini dilakukan dalam skala
yang lebih besar menggunakan korpus yang dipotong.
• Kita akan melihat cara menilai keakuratan chunker relatif terhadap
korpus, lalu melihat beberapa cara berbasis data lainnya untuk
mencari chunk NP.
Evaluation Metric : Accuracy
• Metrik paling sederhana yang dapat digunakan untuk
mengevaluasi pengklasifikasi, dengan mengukur
persentase masukan dalam set pengujian yang diberi label
dengan benar oleh pengklasifikasi.
• Misalnya, pengklasifikasi jenis kelamin nama yang
memprediksi nama yang benar sebanyak 60 kali dalam set
pengujian yang berisi 80 nama akan memiliki akurasi 60/80
= 75%.
Evaluation Metric : Accuracy
• Metrik paling sederhana yang dapat digunakan untuk
mengevaluasi pengklasifikasi, dengan mengukur
persentase masukan dalam set pengujian yang diberi label
dengan benar oleh pengklasifikasi.
• Misalnya, pengklasifikasi jenis kelamin nama yang
memprediksi nama yang benar sebanyak 60 kali dalam set
pengujian yang berisi 80 nama akan memiliki akurasi 60/80
= 75%.
Evaluation Metric : Accuracy
• Yang perlu diperhatikan dalam penggunaan metrik akurasi adalah jumlah dari
label kelas yang akan kita ukur.
• Misalnya, kita akan mengukur akurasi dari hasil pencarian kata “bank” yang
kata tersebut kita ambil dari dataset berita perbankan, dimaka kata bank
muncul sebanyak 19 kali dari 20 kata yang ada dalam berita tersebut.
• Hal ini tentu akan menghasilkan akurasi yang sangat tinggi mendekati 100%.
• Kemudian dengan dataset perbankan yang sama, kita mencari kata “ball”,
dimana kata tersebut berhubungan dengan olahraga, maka kemungkinan
akurasinya = 0% karena tidak ada kata tersebut dalam dataset.
Evaluation Metric : Precision and Recall
• Contoh lain di mana skor akurasi dapat menyesatkan
adalah dalam tugas "pencarian", seperti pengambilan
informasi, di mana kita mencoba menemukan dokumen
yang relevan dengan tugas tertentu.
• Karena jumlah dokumen yang tidak relevan jauh melebihi
jumlah dokumen yang relevan, skor akurasi untuk model
yang melabeli setiap dokumen sebagai tidak relevan akan
sangat mendekati 100%.
Evaluation Metric : Precision and Recall
• Oleh karena itu konvensional untuk menggunakan
serangkaian ukuran yang berbeda untuk tugas pencarian,
berdasarkan jumlah item di masing-masing dari empat
kategori sebagai berikut:
Evaluation Metric : Precision and Recall
• True Positive adalah item relevan yang kita identifikasi
dengan benar sebagai relevan.
• True negative adalah item tidak relevan yang kita
identifikasi dengan benar sebagai tidak relevan.
• False Positive (atau error Tipe I) adalah item tidak relevan
yang secara keliru kita identifikasi sebagai relevan.
• False negative (atau error Tipe II) adalah item relevan yang
salah diidentifikasi sebagai tidak relevan.
Evaluation Metric : Precision and Recall
• Dengan empat angka ini, kita dapat menentukan metrik
berikut:
• Precision, yang menunjukkan berapa banyak item yang
kita identifikasi relevan : TP / (TP + FP)
• Recall, yang menunjukkan berapa banyak item relevan
yang kita identifikasi : TP / (TP + FN)
• F-Measure (atau F-Score), yang menggabungkan presisi
dan recall untuk memberikan skor tunggal, didefinisikan
sebagai mean harmonis dari presisi dan recall
(2 × Precision × Recall) / (Precision + Recall).
Reading IOB Format dan the CoNLL 2000 Corpus

• Dengan menggunakan modul corpora, kita dapat memuat


teks Wall Street Journal yang telah diberi tag kemudian
dipotong (chunking) menggunakan notasi IOB.
• Kategori potongan (chunk) yang disediakan dalam korpus
ini adalah NP, VP, dan PP.
• Seperti yang telah kita lihat, setiap kalimat diwakili
menggunakan banyak baris, seperti yang ditunjukkan di
sini:
he PRP B-NP
accepted VBD B-VP
the DT B-NP
position NN I-NP
Reading IOB Format dan the CoNLL 2000 Corpus
>>> text = '''
... he PRP B-NP
• Fungsi konversi ... accepted VBD B-VP
... the DT B-NP
chunk.conllstr2tree()memban ... position NN I-NP
gun representasi pohon (tree) ...
...
of IN B-PP
vice NN B-NP
dari salah satu string multiline ...
...
chairman NN I-NP
of IN B-PP
ini. ... Carlyle NNP B-NP
... Group NNP I-NP
• Selain itu, ini memungkinkan ... , , O
... a DT B-NP
kita untuk memilih subset dari ... merchant NN I-NP
tiga jenis potongan untuk ...
...
banking NN I-NP
concern NN I-NP
digunakan, misalkan hanya ...
...
. . O
'''
untuk potongan NP:
Reading IOB Format dan the CoNLL 2000 Corpus

>>> nltk.chunk.conllstr2tree(text, chunk_types=['NP']).draw()


Reading IOB Format dan the CoNLL 2000 Corpus

• Kita dapat menggunakan modul korpus NLTK untuk


mengakses teks chunk dalam jumlah yang lebih besar.
• CoNLL-2000 Chunking Corpus berisi 270ribu kata teks Wall
Street Journal, dibagi menjadi bagian "train" dan "test",
dianotasi dengan tag part-of-speech dan chunk tag dalam
format IOB.
• Kita dapat mengakses data tersebut menggunakan
nltk.corpus.conll2000.
Reading IOB Format dan the CoNLL 2000 Corpus

• Berikut adalah contoh yang membaca kalimat ke-100


bagian “train" dari korpus:
Reading IOB Format dan the CoNLL 2000 Corpus

• CoNLL-2000 Chunking Corpus berisi tiga tipe chunk:


• NP chunks, yang telah kita lihat;
• VP chunks, seperti has already delivered
• PP chunks, seperti because of
• Jika kita hanya tertarik pada NP chunks sekarang, kita dapat menggunakan
argumen chunk_types untuk memilihnya:
Simple Evaluation and Baselines
• Sekarang setelah kita dapat mengakses corpus yang telah dipotong, kita dapat
mengevaluasi chunker.
• Kita memulai dengan menetapkan baseline untuk trivial cp parser chunks yang
tidak membuat chunk:
Simple Evaluation and Baselines

• Akurasi tag IOB menunjukkan bahwa lebih dari sepertiga kata-kata yang diberi
tag dengan O, yaitu, bukan dalam NP chunks.
• Namun, karena tagger kita tidak menemukan chunk apa pun, presisi,
perolehan, dan pengukuran F semuanya nol.
• Sekarang mari kita coba pemecah ekspresi reguler naif yang mencari tag yang
diawali dengan huruf yang merupakan karakteristik dari tag frase kata benda
(misalnya, CD, DT, dan JJ).
Simple Evaluation and Baselines

• Seperti yang Anda lihat, pendekatan ini mencapai hasil yang layak.
• Namun, kita dapat meningkatkannya dengan mengadopsi lebih banyak
pendekatan berbasis data, di mana kita menggunakan korpus pelatihan untuk
menemukan tag chunk (I, O, atau B) yang paling mungkin untuk setiap tag POS.
• Dengan kata lain, kita dapat membangun sebuah chunker menggunakan
penanda unigram.
• Namun alih-alih mencoba menentukan tag part-of-speech yang benar untuk
setiap kata, kita mencoba menentukan tag chunk yang benar, dengan
memberikan tag bagian-of-speech setiap kata.
UnigramChunker
• Dalam Contoh dibawah, kita mendefinisikan kelas UnigramChunker, yang
menggunakan tagger unigram untuk melabeli kalimat dengan tag chunk.
UnigramChunker
• Sebagian besar kode di kelas ini hanya digunakan untuk mengkonversi bolak-
balik antara representasi chunk tree yang digunakan oleh antarmuka
ChunkParserI NLTK, dan representasi IOB yang digunakan oleh tagger
tertanam.
• Kelas mendefinisikan dua metode: konstruktor (1), yang dipanggil saat kita
membangun UnigramChunker baru; dan metode parse(3), yang digunakan
untuk memotong kalimat baru.
• Konstruktor (1) mengharapkan daftar kalimat pelatihan, yang akan berbentuk
chunk tree. Ini pertama-tama mengonversi data pelatihan ke bentuk yang
sesuai untuk melatih tagger, menggunakan tree2conlltags untuk
memetakan setiap chunk tree menjadi daftar kata, tag, chunk tiga kali lipat.
• Ini kemudian menggunakan data pelatihan yang dikonversi untuk melatih
unigram tagger, dan menyimpannya di self.tagger untuk digunakan nanti.
UnigramChunker
• Metode parse (3) mengambil kalimat yang diberi tag sebagai masukannya, dan
dimulai dengan mengekstrak tag POS dari kalimat tersebut.
• Kemudian menandai tag POS dengan tag chunk IOB, menggunakan tagger
self.tagger yang dilatih di konstruktor.
• Selanjutnya, ia mengekstrak tag chunk, dan menggabungkannya dengan
kalimat asli, untuk menghasilkan conlltag.
• Akhirnya, menggunakan conlltags2tree untuk mengubah hasilnya kembali
menjadi chunk tree.
UnigramChunker
• Sekarang kita memiliki UnigramChunker, kita dapat melatihnya menggunakan
CoNLL-2000 Chunking Corpus, dan menguji kinerja yang dihasilkan:
UnigramChunker
• Chunker ini bekerja dengan cukup baik, mencapai skor F-measure keseluruhan
83%.
• Mari kita lihat apa yang dipelajari, dengan menggunakan tagger unigram untuk
menetapkan tag ke setiap tag bagian dari ucapan yang muncul di korpus:
UnigramChunker
• Telah ditemukan bahwa sebagian besar tanda baca muncul di luar potongan
NP, dengan pengecualian # dan $, keduanya digunakan sebagai penanda mata
uang.
• Ditemukan juga bahwa determiners (DT) dan posesif (PRP $ dan WP $) terjadi
di awal potongan NP, sedangkan jenis kata benda (NN, NNP, NNPS, NNS)
sebagian besar terjadi di dalam potongan NP.
Named Entity Recognition
• Di awal bab ini, secara singkat
diperkenalkan entitas bernama
(Named Entity/ NE).
• Entitas bernama adalah frasa kata
benda pasti yang merujuk pada
tipe individu tertentu, seperti
organisasi, orang, tanggal, dan
sebagainya.
• Tabel disamping mencantumkan
beberapa jenis NE yang lebih
umum digunakan.
Named Entity Recognition
• Tujuan dari sistem pengenalan entitas (NER) adalah untuk mengidentifikasi
semua sebutan tekstual dari entitas bernama, yang terdiri dari dua tugas:
• mengidentifikasi batas-batas NE, dan
• mengidentifikasi jenisnya.
• Meskipun pengenalan entitas bernama sering kali menjadi pendahuluan untuk
mengidentifikasi relasi di Ekstraksi Informasi, ia juga dapat berkontribusi untuk
tugas lain.
• Misalnya, dalam Question Menjawab (QA), kita mencoba meningkatkan
ketepatan Pengambilan Informasi dengan memulihkan tidak seluruh halaman,
tetapi hanya bagian yang berisi jawaban atas pertanyaan pengguna.
• Sebagian besar sistem QA mengambil dokumen yang dikembalikan oleh
Information Retrieval standar, dan kemudian mencoba untuk memisahkan
potongan teks minimal dalam dokumen yang berisi jawabannya.
Named Entity Recognition
• Sekarang anggaplah pertanyaannya adalah Siapa Presiden pertama AS ?, dan
salah satu dokumen yang diambil berisi bagian berikut:
• The Washington Monument is the most prominent structure in
Washington,
D.C. and one of the city’s early attractions. It was built in honor of George
Washington, who led the country to independence and then became its
first
President.
• Analisis pertanyaan mengarahkan kita untuk mengharapkan bahwa jawaban
harus dalam bentuk X adalah Presiden pertama AS, di mana X bukan hanya
frase kata benda, tetapi juga mengacu pada entitas bernama tipe PER. Ini akan
memungkinkan kita untuk mengabaikan kalimat pertama dalam bagian
tersebut.
• Meskipun berisi dua kejadian Washington, pengenalan entitas bernama harus
memberi tahu kita bahwa tidak satu pun dari mereka memiliki jenis yang
Named Entity Recognition
• Bagaimana cara kita mengidentifikasi entitas bernama?
• Salah satu opsinya adalah mencari setiap kata dalam daftar nama yang sesuai.
• Misalnya, dalam kasus lokasi, kita dapat menggunakan gazetteer, atau kamus
geografis, seperti Alexandria Gazetteer atau Getty Gazetteer.
• Namun pekerjaan ini merupakan pekerjaan yang ‘blindly run’, seperti contoh
gambar:
Named Entity Recognition
• Perhatikan bahwa gazetteer memiliki cakupan lokasi yang baik di banyak
negara, dan salah menemukan lokasi seperti Sanchez di Republik Dominika
dan Di Vietnam.
• Kita dapat menghilangkan lokasi seperti itu dari gazetteer, tetapi kemudian kita
tidak akan dapat mengidentifikasinya ketika mereka muncul dalam dokumen.
• Lebih sulit lagi dalam hal nama untuk orang atau organisasi. Daftar nama-nama
seperti itu mungkin memiliki cakupan yang buruk. Organisasi baru muncul
setiap hari, jadi jika kita mencoba berurusan dengan newswire atau entri blog
kontemporer, kecil kemungkinannya kita dapat mengenali banyak entitas
menggunakan pencarian gazetteer.
Named Entity Recognition
• Tantangan lebih lanjut diajukan oleh nama multiword seperti Universitas
Stanford, dan oleh nama yang mengandung nama lain, seperti Perpustakaan
Cecil H. Green dan Pusat Layanan Konferensi Desa Escondido.
• Oleh karena itu, dalam pengenalan entitas bernama, kita harus dapat
mengidentifikasi awal dan akhir rangkaian multitoken.
• Pengenalan entitas bernama adalah tugas yang sangat sesuai dengan jenis
pendekatan berbasis pengklasifikasi yang kami lihat untuk penggabungan frasa
kata benda.
• Secara khusus, kita dapat membuat tagger yang memberi label pada setiap
kata dalam kalimat menggunakan format IOB, di mana potongan diberi label
menurut jenisnya yang sesuai.
Named Entity Recognition
• Berikut adalah bagian dari data pelatihan CONLL 2002 (conll2002) Belanda:

• Dalam representasi ini, ada satu token per baris, masing-masing dengan tag
part-of-speech dan tag entitas bernama.
• Berdasarkan korpus pelatihan ini, kita dapat membuat tagger yang dapat
digunakan untuk memberi label pada kalimat baru, dan menggunakan fungsi
nltk.chunk.conlltags2tree () untuk mengubah urutan tag menjadi pohon chunk.
Named Entity Recognition
• NLTK menyediakan pengklasifikasi yang telah dilatih untuk mengenali entitas
bernama, diakses dengan fungsi nltk.ne_chunk ().
• Jika kita menyetel parameter binary = True, maka entitas bernama hanya
diberi tag sebagai NE; jika tidak, pengklasifikasi menambahkan label kategori
seperti PERSON, ORGANIZATION, dan GPE.
Relation Extraction
• Setelah entitas bernama telah diidentifikasi dalam teks, kemudian
mengekstrak hubungan yang ada di antara mereka.
• Seperti yang ditunjukkan sebelumnya, kita biasanya akan mencari hubungan
antara jenis entitas bernama tertentu.
• Salah satu cara untuk melakukan tugas ini adalah dengan mencari semua
bentuk tripel (X, α, Y), di mana X dan Y adalah entitas bernama dari tipe yang
diperlukan, dan α adalah rangkaian kata yang memisahkan X dan Y.
• Kemudian kita dapat menggunakan ekspresi reguler untuk menarik hanya
contoh α yang mengekspresikan hubungan yang kita cari.
• Contoh berikut menelusuri string yang berisi kata in. Ekspresi reguler khusus
(?! \ B. + Ing \ b) adalah pernyataan lookahead negatif yang memungkinkan
kita mengabaikan string seperti keberhasilan mengawasi transisi dari, where in
is diikuti oleh gerund.
Relation Extraction
• Contoh berikut menelusuri string yang berisi kata in. Ekspresi reguler khusus
(?! \ B. + Ing \ b) adalah pernyataan lookahead negatif yang memungkinkan
kita mengabaikan string seperti keberhasilan mengawasi transisi dari, dimana
in diikuti oleh gerund.
Relation Extraction
• Pencarian untuk kata kunci dalam bekerja dengan cukup baik, meskipun juga
akan mendapatkan positif palsu seperti [ORG: House Transportation
Committee] , secured the most money in the [LOC: New York];
tidak mungkin ada metode berbasis string sederhana untuk mengecualikan
string pengisi seperti ini.
• Seperti yang diperlihatkan sebelumnya, bagian bahasa Belanda dari CoNLL
2002 Named Entity Corpus tidak hanya berisi anotasi entitas bernama, tetapi
juga tag bagian-of-speech.
• Ini memungkinkan kita untuk merancang pola yang sensitif terhadap tag ini,
seperti yang ditunjukkan pada contoh berikutnya. Metode show_clause ()
mencetak relasi dalam bentuk klausa, di mana simbol relasi biner ditetapkan
sebagai nilai parameter relsym.
Relation Extraction

Anda mungkin juga menyukai