Bagaimana cara membuat anotasi dokumen teks dengan meta-data?

18

Memiliki banyak dokumen teks (dalam bahasa alami, tidak terstruktur), apa cara yang memungkinkan untuk membuat anotasi dengan beberapa meta-data semantik? Misalnya, pertimbangkan dokumen pendek:

I saw the company's manager last day.

Untuk dapat mengekstraksi informasi darinya, harus dianotasi dengan data tambahan agar tidak ambigu. Proses menemukan meta-data tersebut tidak dipertanyakan, jadi anggap itu dilakukan secara manual. Pertanyaannya adalah bagaimana cara menyimpan data ini sedemikian rupa sehingga analisis lebih lanjut tentang hal itu dapat dilakukan dengan lebih mudah / efisien?

Pendekatan yang mungkin adalah dengan menggunakan tag XML (lihat di bawah), tetapi tampaknya terlalu bertele-tele, dan mungkin ada pendekatan / pedoman yang lebih baik untuk menyimpan meta-data tersebut pada dokumen teks.

<Person name="John">I</Person> saw the <Organization name="ACME">company</Organization>'s
manager <Time value="2014-5-29">last day</Time>.
Amir Ali Akbari
sumber
Salah satu tujuan utama SGML (hal yang sama berlaku untuk keturunannya, XML) adalah untuk menyediakan sarana untuk menandai dokumen teks (POS dan tag semantik).
Pemburu Rusa
Bisa lebih spesifik / restriktif tentang jenis metadata apa yang ingin Anda tambahkan? Dengan dua contoh Anda, saya ragu bahwa ada cara yang kurang jelas yang memiliki ekspresi umum yang sama dengan tag XML.
ojdo
@ojdo Sebagian besar meta-data adalah untuk disambiguasi (seperti waktu relatif), atau untuk menentukan entitas khusus (yaitu FK).
Amir Ali Akbari
2
Saya telah menggunakan brat.nlplab.org di masa lalu. Ada antarmuka yang bagus untuk berbagai jenis anotasi. Anotasi disimpan dalam file .annot yang terpisah yang merupakan daftar kata-kata yang dianotasi dan posisinya dalam dokumen.
user1893354
@ user1893354 Sangat membantu! Khususnya " format stand brat " yang digunakan tampaknya sangat cocok dengan kebutuhan saya. Saya sarankan memposting jawaban jika Anda mau.
Amir Ali Akbari

Jawaban:

15

Secara pribadi saya akan menganjurkan menggunakan sesuatu yang tidak spesifik untuk bidang NLP, dan sesuatu yang cukup umum sehingga masih dapat digunakan sebagai alat bahkan ketika Anda sudah mulai bergerak melampaui tingkat metadata ini. Saya terutama akan memilih format yang dapat digunakan terlepas dari lingkungan pengembangan dan yang dapat mempertahankan beberapa struktur dasar jika itu menjadi relevan (seperti tokenization)

Ini mungkin tampak aneh, tetapi saya akan dengan jujur ​​menyarankan JSON. Ini sangat didukung, mendukung banyak struktur, dan cukup fleksibel sehingga Anda tidak harus pindah dari itu karena tidak cukup kuat. Sebagai contoh Anda, sesuatu seperti ini:

{'text': 'I saw the company's manager last day.", {'Person': [{'name': 'John'}, {'indices': [0:1]}, etc...]}

Satu keuntungan besar yang Anda dapatkan dari format spesifik NLP di sini adalah JSONdapat diuraikan dalam lingkungan apa pun, dan karena Anda mungkin harus mengedit format Anda, JSON memberikan hasil edit sederhana yang memberi Anda jarak pendek ke format lain.

Anda juga dapat secara implisit menyimpan informasi tokenisasi jika Anda ingin:

{"text": ["I", "saw", "the", "company's", "manager", "last", "day."]}

EDIT: Untuk memperjelas pemetaan metadata cukup terbuka, tapi inilah contohnya:

{'body': '<some_text>',
 'metadata': 
  {'<entity>':
    {'<attribute>': '<value>',
     'location': [<start_index>, <end_index>]
    }
  }
}

Semoga itu bisa membantu, beri tahu saya jika Anda memiliki pertanyaan lain.

indico
sumber
Menjadi pengembang web, JSON tampaknya sepenuhnya masuk akal bagi saya, tetapi, dapatkah Anda menguraikan format pemetaan kata yang tepat ke entitas?
Amir Ali Akbari
@AmirAliAkbari Jawaban yang diperbarui untuk memasukkan lebih detail.
indico
7

Secara umum, Anda tidak ingin menggunakan tag XML untuk menandai dokumen dengan cara ini karena tag mungkin tumpang tindih.

Kerangka kerja UIMA , GATE , dan NLP serupa menunjukkan tag yang terpisah dari teks. Setiap tag, seperti Person, ACME, Johndll disimpan sebagai posisi yang tag dimulai dan posisi yang berakhir. Jadi, untuk tag ACME, itu akan disimpan sebagai memulai posisi 11 dan berakhir di posisi 17.

Christopher Louden
sumber
7

The alat anotasi anak nakal mungkin berguna untuk Anda sebagai per komentar saya. Saya telah mencoba banyak dari mereka dan ini adalah yang terbaik yang saya temukan. Ini memiliki antarmuka pengguna yang bagus dan dapat mendukung sejumlah jenis anotasi. Anotasi disimpan dalam file .annot yang terpisah yang berisi setiap anotasi serta lokasinya di dalam dokumen asli. Sekalipun begitu, jika Anda ingin memberi makan anotasi ke dalam classifier seperti alat NER Stanford maka Anda harus melakukan manipulasi untuk mendapatkan data ke dalam format yang akan diterima.

pengguna1893354
sumber
1

Untuk menggambarkan semua data yang ada itu tugas yang sangat sulit, tetapi kita dapat menggunakan model data: http://schema.org/ , di mana ada jenis struktural informasi. Eksekusi sebelumnya ditargetkan untuk mengimplementasikan teknologi MarkUp, jadi, sepertinya bisa berguna untuk tugas Anda.

Vasyl Lyashkevych
sumber