Webvectors adalah perangkat untuk menyajikan model semantik vektor (khususnya, penyematan kata berbasis prediksi, seperti pada word2vec atau ELMo ) melalui web, sehingga memudahkan untuk mendemonstrasikan kemampuannya kepada masyarakat umum. Ini memerlukan Python >= 3.6, dan menggunakan Flask , Gensim dan simple_elmo di baliknya.
Demo kerja:
Layanan ini dapat diintegrasikan ke dalam server web Apache sebagai aplikasi WSGI atau dijalankan sebagai server mandiri menggunakan Gunicorn (kami merekomendasikan opsi terakhir).
Tambahkan baris berikut ke file konfigurasi Apache:
WSGIScriptAlias /WEBNAME "PATH/syn.wsgi"
, dengan WEBNAME adalah alias untuk layanan Anda yang berhubungan dengan root server (vektor web untuk http://example.com/webvectors
), dan PATH adalah jalur sistem file Anda ke direktori WebVectors .
Di semua file *.wsgi
dan *.py
di direktori WebVectors Anda, ganti webvectors.cfg
di string config.read('webvectors.cfg')
dengan jalur absolut ke file webvectors.cfg
.
Siapkan layanan Anda menggunakan file konfigurasi webvectors.cfg
. Pengaturan yang paling penting adalah:
Tag
Model dapat menggunakan tag arbitrer yang ditetapkan ke kata-kata (misalnya, tag part-of-speech, seperti pada boot_NOUN ). Jika model Anda dilatih tentang kata-kata dengan tag, Anda harus mengaktifkannya di webvectors.cfg
( variabel use_tags
). Kemudian, WebVectors akan memungkinkan pengguna memfilter kueri mereka berdasarkan tag. Anda juga harus menentukan daftar tag yang diizinkan (variabel tags_list
di webvectors.cfg
) dan daftar tag yang akan ditampilkan kepada pengguna (file tags.tsv
).
Daemon model
WebVectors menggunakan daemon, yang berjalan di latar belakang dan benar-benar memproses semua tugas terkait penyematan. Itu juga dapat dijalankan di mesin lain, jika Anda mau. Jadi, di webvectors.cfg
Anda harus menentukan host
dan port
tempat daemon ini akan mendengarkan. Setelah itu, jalankan skrip daemon sebenarnya word2vec_server.py
. Ini akan memuat model dan membuka soket pendengaran. Daemon ini harus aktif secara permanen, jadi Anda mungkin ingin meluncurkannya menggunakan screen atau semacamnya.
Model
Daftar model yang ingin Anda gunakan ditentukan dalam file models.tsv
. Ini terdiri dari bidang yang dipisahkan tab:
Pengidentifikasi model akan digunakan sebagai nama untuk kotak centang di halaman web, dan penting juga bahwa dalam file strings.csv
, pengidentifikasi yang sama digunakan saat menunjukkan nama model. Bahasa model digunakan sebagai argumen yang diteruskan ke fungsi lemmatizer, berupa string sederhana dengan nama bahasa (mis. "Inggris", "Rusia", "Perancis").
Model saat ini dapat dalam 4 format:
WebVectors akan secara otomatis mendeteksi format model dan memuat semuanya ke dalam memori. Pengguna akan dapat memilih di antara model yang dimuat.
Lokalisasi
WebVectors menggunakan file strings.csv
sebagai sumber string yang dilokalkan. Ini adalah file yang dipisahkan koma dengan 3 bidang:
Secara default, bahasa 1 adalah bahasa Inggris dan bahasa 2 adalah bahasa Rusia. Ini dapat diubah di webvectors.cfg
.
Templat
Halaman web sebenarnya yang ditampilkan kepada pengguna ditentukan dalam file templates/*.html
. Sesuaikan sesuai keinginan Anda. Menu utama didefinisikan di base.html
.
File statistik
Jika aplikasi Anda tidak menemukan file statis (skrip bootstrap dan js), edit variabel static_url_path
di run_syn.py
. Anda harus meletakkan jalur absolut ke folder data
di sana.
Petunjuk kueri
Jika Anda ingin petunjuk kueri berfungsi, jangan lupa untuk menyusun daftar petunjuk Anda sendiri (format JSON). Contoh daftar tersebut diberikan di data/example_vocab.json
. URL sebenarnya dari daftar ini harus dinyatakan dalam data/hint.js
.
Menjalankan WebVektor
Setelah Anda memodifikasi semua pengaturan sesuai dengan alur kerja Anda, memastikan templatnya sesuai untuk Anda, dan meluncurkan daemon model, Anda siap untuk benar-benar memulai layanan. Jika Anda menggunakan integrasi Apache , cukup restart/muat ulang Apache . Jika Anda lebih memilih opsi mandiri, jalankan perintah berikut di direktori root proyek:
gunicorn run_syn:app_syn -b address:port
di mana alamat adalah alamat tempat layanan harus aktif (bisa berupa localhost), dan port adalah port untuk mendengarkan (misalnya, 9999).
Dukungan untuk penyematan kontekstual Anda dapat mengaktifkan dukungan untuk model penyematan kontekstual (saat ini ELMo didukung). Untuk melakukan itu:
Instal paket simple_elmo
Unduh model ELMo pilihan Anda (misalnya, di sini).
Buat proyeksi berbasis tipe dalam format word2vec
untuk kumpulan kata terbatas (misalnya 10.000), dengan mempertimbangkan model ELMo dan korpus referensi. Untuk ini, gunakan skrip extract_elmo.py
yang kami sediakan:
python3 extract_elmo.py --input CORPUS --elmo PATH_TO_ELMO --outfile TYPE_EMBEDDING_FILE --vocab WORD_SET_FILE
Ini akan menjalankan model ELMo pada korpus yang disediakan dan menghasilkan penyematan tipe rata-rata statis untuk setiap kata dalam kumpulan kata. Mereka akan digunakan sebagai pengganti leksikal.
Siapkan kamus frekuensi untuk digunakan dengan visualisasi kontekstual, sebagai file teks biasa yang dipisahkan tab, dengan kolom pertama berisi kata-kata dan kolom kedua berisi frekuensinya dalam kamus referensi pilihan Anda. Baris pertama file ini harus berisi satu bilangan bulat yang cocok dengan ukuran korpus dalam token kata.
Di bagian [Token]
pada file konfigurasi webvectors.cfg
, alihkan use_contextualized
ke True dan nyatakan jalur ke token_model
Anda (ELMo terlatih), type_model
(proyeksi berbasis tipe yang Anda buat dengan skrip kami) dan freq_file
yang merupakan milik Anda kamus frekuensi.
Di bidang ref_static_model
, tentukan salah satu model penyematan kata statis Anda (hanya namanya), yang ingin Anda gunakan sebagai target hyperlink dari kata-kata di halaman visualisasi kontekstual.
Halaman dengan pengganti leksikal ELMo akan tersedia di http://YOUR_ROOT_URL/contextual/
Jika ada masalah, jangan ragu untuk menghubungi kami:
http://www.aclweb.org/anthology/E17-3025
http://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf
http://flask.pocoo.org/
http://radimrehurek.com/gensim/
http://gunicorn.org/