Pembelajaran fitur tanpa pengawasan untuk NER

11

Saya telah mengimplementasikan sistem NER dengan menggunakan algoritma CRF dengan fitur buatan tangan saya yang memberikan hasil yang cukup baik. Masalahnya adalah saya menggunakan banyak fitur berbeda termasuk tag POS dan lemmas.

Sekarang saya ingin membuat NER yang sama untuk bahasa yang berbeda. Masalahnya di sini adalah saya tidak bisa menggunakan tag POS dan lemmas. Saya mulai membaca artikel tentang pembelajaran yang mendalam dan pembelajaran fitur yang tidak diawasi.

Pertanyaanku adalah:

Apakah mungkin menggunakan metode untuk pembelajaran fitur tanpa pengawasan dengan algoritma CRF? Adakah yang mencoba ini dan mendapat hasil yang bagus? Apakah ada artikel atau tutorial tentang masalah ini?

Saya masih belum sepenuhnya memahami cara pembuatan fitur ini sehingga saya tidak ingin menghabiskan banyak waktu untuk sesuatu yang tidak akan berhasil. Jadi informasi apa pun akan sangat membantu. Untuk membuat keseluruhan sistem APM berdasarkan pembelajaran yang dalam adalah sedikit banyak untuk saat ini.

MaticDiba
sumber

Jawaban:

5

Ya, sangat mungkin untuk menggabungkan pembelajaran tanpa pengawasan dengan model CRF. Secara khusus, saya akan merekomendasikan Anda mengeksplorasi kemungkinan menggunakan fitur word2vec sebagai input untuk CRF Anda.

Word2vec melatih a untuk membedakan antara kata-kata yang sesuai untuk konteks tertentu dan kata-kata yang dipilih secara acak. Bobot pilih model kemudian dapat diartikan sebagai representasi vektor padat dari kata yang diberikan.

Vektor-vektor padat ini memiliki properti menarik yang kata-kata yang secara semantik atau sintaksis mirip memiliki representasi vektor yang serupa. Aritmatika vektor dasar bahkan mengungkapkan beberapa hubungan pembelajaran yang menarik antara kata-kata.
Misalnya, vektor ("Paris") - vektor ("Prancis") + vektor ("Italia") menghasilkan vektor yang sangat mirip dengan vektor ("Roma").

Pada tingkat tinggi, Anda dapat menganggap representasi word2vec mirip dengan representasi LDA atau LSA, dalam arti bahwa Anda dapat mengubah vektor input jarang menjadi vektor output padat yang berisi informasi kesamaan kata.

Dalam hal ini, LDA dan LSA juga merupakan opsi yang valid untuk pembelajaran fitur yang tidak diawasi - keduanya mencoba untuk mewakili kata-kata sebagai kombinasi dari "topik" dan representasi kata padat hasil.

Untuk teks bahasa Inggris Google mendistribusikan model word2vec yang dipra-pra-kan pada set data Google News 100 miliar kata yang sangat besar, tetapi untuk bahasa lain Anda harus melatih model Anda sendiri.

Madison May
sumber
Hei, kepalan tangan aku ingin mengucapkan terima kasih atas jawabanmu. Saya punya satu pertanyaan lagi. Vektor kata yang dikembalikan dari algoritma word2vec memiliki nilai float, jadi kata-kata seperti besar dan lebih besar akan memiliki vektor yang dekat dalam ruang vektor, tetapi nilai vektor bisa sangat berbeda. Misalnya besar = [0,1, 0,2, 0,3] dan lebih besar = [0,11, 0,21, 0,31]. Bukankah itu masalah untuk algoritma CRF, karena algoritma ini akan memperlakukan mereka sebagai tidak sama? Apakah ada proses tambahan yang harus dilakukan sebelum menggunakan kata vektor ini di CRF? Saya harap pertanyaan saya cukup jelas.
MaticDiba
4

Dalam makalah 2014 ini ( GitHub ), penulis membandingkan beberapa strategi menggabungkan embeddings kata dalam sistem NER berbasis CRF, termasuk embedding padat, embedded biner, embedding klaster, dan metode prototipe novel . Menggunakan vektor padat secara langsung seperti yang disarankan oleh vlad adalah cara yang paling mudah tetapi juga paling tidak efektif dalam beberapa evaluasi.

Saya menerapkan ide prototipe dalam proyek NER khusus domain saya dan itu bekerja cukup baik untuk saya.

pengguna2404894
sumber
3

Saya hanya terlambat 5 bulan tetapi dengan CRFSuite Anda benar-benar dapat menggunakan fitur float sebagai angka, bukan sebagai string. Untuk ini, Anda hanya perlu membuat label unik untuk setiap dimensi lalu menambahkan ":" diikuti nilainya.

Misalnya, kata "hutan" diwakili dalam 5 dimensi: 0,1 0,4 0,8 0,2 0,9

Maka CRFSuite akan menggunakan fitur + kata tersebut sebagai:

LABEL f1: 0,1 f2: 0,4 f3: 0,8 f4: 0,2 f5: 0,9

di mana tentu saja Anda mengganti `` LABEL '' dengan string aktual dan Anda memisahkan semua spasi dengan tab (itulah format untuk CRFSuite).

Tidak yakin untuk paket lain.

vlad
sumber