Paket Python yang penuh fitur dan format file penyimpanan vektor untuk memanfaatkan embeddings vektor dalam model pembelajaran mesin dengan cara yang cepat, efisien, dan sederhana yang dikembangkan oleh plastisitas. Ini terutama dimaksudkan untuk menjadi alternatif yang lebih sederhana / lebih cepat untuk Gensim, tetapi dapat digunakan sebagai toko vektor kunci generik untuk domain di luar NLP. Ini menawarkan fitur unik seperti pencarian out-of-vocabulary dan streaming model besar di atas HTTP. Diterbitkan dalam makalah kami di EMNLP 2018 dan tersedia di ARXIV.
Anda dapat menginstal paket ini dengan pip :
pip install pymagnitude # Python 2.7
pip3 install pymagnitude # Python 3Google Colaboratory memiliki beberapa masalah ketergantungan dengan menginstal besarnya karena ketergantungan yang bertentangan. Anda dapat menggunakan cuplikan berikut untuk menginstal besarnya di Google Colaboratory:
# Install Magnitude on Google Colab
! echo " Installing Magnitude.... (please wait, can take a while) "
! (curl https://raw.githubusercontent.com/plasticityai/magnitude/master/install-colab.sh | /bin/bash 1> /dev/null 2> /dev/null)
! echo " Done installing Magnitude. " Model embedding ruang vektor telah menjadi semakin umum dalam pembelajaran mesin dan secara tradisional telah populer untuk aplikasi pemrosesan bahasa alami. Alat yang cepat dan ringan untuk mengonsumsi model embedding ruang vektor besar ini secara efisien kurang.
The Magnitude file format ( .magnitude ) for vector embeddings is intended to be a more efficient universal vector embedding format that allows for lazy-loading for faster cold starts in development, LRU memory caching for performance in production, multiple key queries, direct featurization to the inputs for a neural network, performant similiarity calculations, and other nice to have features for edge cases like handling out-of-vocabulary keys or Kunci yang salah eja dan menggabungkan beberapa model vektor bersama -sama. Ini juga dimaksudkan untuk bekerja dengan model vektor besar yang mungkin tidak sesuai dengan memori.
Ini menggunakan SQLite, database tertanam yang cepat dan populer, sebagai penyimpanan data yang mendasarinya. Ini menggunakan indeks untuk pencarian kunci cepat serta menggunakan pemetaan memori, instruksi SIMD, dan pengindeksan spasial untuk pencarian kesamaan yang cepat di ruang vektor di luar disk dengan kinerja memori yang baik bahkan di antara beberapa proses. Selain itu, peta memori di -cache di antara berjalan sehingga bahkan setelah menutup suatu proses, peningkatan kecepatan dituai.
| Metrik | Lampu Besarnya | Medium magnitudo | Besarnya berat | Aliran magnitudo |
|---|---|---|---|---|
| Waktu pemuatan awal | 0.7210S | ━ 1 | ━ 1 | 7.7550 -an |
| Kueri kunci tunggal dingin | 0,0001S | ━ 1 | ━ 1 | 1.6437S |
| Kueri kunci tunggal hangat (Kunci yang sama dengan kueri dingin) | 0,00004S | ━ 1 | ━ 1 | 0,0004S |
| Kueri Kunci Berganda Dingin (n = 25) | 0,0442S | ━ 1 | ━ 1 | 1.7753S |
| Permintaan utama yang hangat (n = 25) (tombol yang sama dengan permintaan dingin) | 0,00004S | ━ 1 | ━ 1 | 0,0001S |
Kueri Pencarian most_similar Pertama(n = 10) (kasus terburuk) | 247.05S | ━ 1 | ━ 1 | - |
Kueri Pencarian most_similar Pertama(n = 10) (kasus rata -rata) (w/ disk cache persisten) | 1.8217S | ━ 1 | ━ 1 | - |
Pencarian most_similar berikutnya(n = 10) (kunci berbeda dari kueri pertama) | 0.2434S | ━ 1 | ━ 1 | - |
Pencarian most_similar yang Hangat Selanjutnya(n = 10) (kunci yang sama dengan kueri pertama) | 0,00004S | 0,00004S | 0,00004S | - |
Kueri pencarian paling banyak most_similar_approx(n = 10, usaha = 1.0) (kasus terburuk) | N/a | N/a | 29.610S | - |
Kueri pencarian paling banyak most_similar_approx(n = 10, usaha = 1.0) (kasus rata -rata) (w/ disk cache persisten) | N/a | N/a | 0.9155S | - |
Pencarian most_similar_approx berikutnya(n = 10, usaha = 1.0) (kunci berbeda dari kueri pertama) | N/a | N/a | 0.1873S | - |
Pencarian most_similar_approx berikutnya(n = 10, usaha = 0,1) (kunci berbeda dari kueri pertama) | N/a | N/a | 0,0199S | - |
Pencarian most_similar_approx yang hangat berikutnya(n = 10, usaha = 1.0) (kunci yang sama dengan kueri pertama) | N/a | N/a | 0,00004S | - |
| Ukuran file | 4.21GB | 5.29GB | 10.74GB | 0,00GB |
| Proses memori (RAM) pemanfaatan | 18KB | ━ 1 | ━ 1 | 1.71MB |
| Proses Memori (RAM) Pemanfaatan Setelah 100 kueri utama | 168KB | ━ 1 | ━ 1 | 1.91MB |
| Proses Memori (RAM) Pemanfaatan Setelah 100 kueri kunci + pencarian kesamaan | 342KB 2 | ━ 1 | ━ 1 | |
| Pemeriksaan dan tes integritas | ✅ | ✅ | ✅ | ✅ |
Format universal antara Word2vec ( .txt , .bin ), Glove ( .txt ), FastText ( .vec ), dan Elmo ( .hdf5 ) dengan utilitas konverter | ✅ | ✅ | ✅ | ✅ |
| Antarmuka Pythonic yang sederhana | ✅ | ✅ | ✅ | ✅ |
| Sedikit ketergantungan | ✅ | ✅ | ✅ | ✅ |
| Dukungan untuk model memori yang lebih besar dari | ✅ | ✅ | ✅ | ✅ |
| Pemuatan malas jika memungkinkan untuk kecepatan dan kinerja | ✅ | ✅ | ✅ | ✅ |
Dioptimalkan untuk threading dan multiprocessing | ✅ | ✅ | ✅ | ✅ |
| Pencarian Kunci Massal dan Berganda dengan Padding, Pemotongan, Penempatan, dan Dukungan Fiturisasi | ✅ | ✅ | ✅ | ✅ |
| Menggabungkan beberapa model vektor bersama | ✅ | ✅ | ✅ | ✅ |
| Pencarian Kunci Dasar Out-of-Vocabulary (Karakter N-Gram Hashing) | ✅ | ✅ | ✅ | ✅ |
| Pencarian Kunci Out-of-Vocabulary Lanjutan dengan Dukungan untuk salah ejuk (Karakter N-Gram Fitur Hashing ke kunci in-vokabulary yang serupa) | ✅ | ✅ | ✅ | |
| Perkiraan pencarian paling mirip dengan indeks gangguan | ✅ | ✅ | ||
| Pelatihan bawaan untuk model baru |
1: Nilai yang sama seperti kolom sebelumnya
2: Menggunakan mmap untuk dibaca dari disk, sehingga OS masih akan mengalokasikan halaman memori saat memori tersedia, tetapi dapat dibagi antara proses dan tidak dikelola dalam setiap proses untuk file yang sangat besar yang merupakan kemenangan kinerja
*: Semua tolok ukur dilakukan pada vektor kata pra-terlatih Google News ( GoogleNews-vectors-negative300.bin ) dengan MacBook Pro (retina, 15-inci, pertengahan 2014) 2.2GHz quad-core core i7 @ 16GB RAM pada SSD atas rata-rata uji coba di mana layak.
Model embedding populer telah dikonversi dengan format .magnitude untuk pengunduhan dan penggunaan secara langsung:
| Penyumbang | Data | Lampu (Dukungan dasar untuk kunci out-of-vocabulary) | Sedang (direkomendasikan) (Dukungan lanjutan untuk kunci out-of-vocabulary) | Berat (Dukungan lanjutan untuk kunci out-of-vocabulary dan lebih cepat most_similar_approx ) |
|---|---|---|---|---|
| Google - Word2Vec | Google News 100B | 300D | 300D | 300D |
| Stanford - Sarung Tangan | Wikipedia 2014 + Gigaword 5 6B | 50d, 100d, 200d, 300d | 50d, 100d, 200d, 300d | 50d, 100d, 200d, 300d |
| Stanford - Sarung Tangan | Wikipedia 2014 + Gigaword 5 6B (Lemmatisasi dengan plastisitas) | 50d, 100d, 200d, 300d | 50d, 100d, 200d, 300d | 50d, 100d, 200d, 300d |
| Stanford - Sarung Tangan | Common Crawl 840b | 300D | 300D | 300D |
| Stanford - Sarung Tangan | Twitter 27b | 25d, 50d, 100d, 200d | 25d, 50d, 100d, 200d | 25d, 50d, 100d, 200d |
| Facebook - FastText | Bahasa Inggris Wikipedia 2017 16b | 300D | 300D | 300D |
| Facebook - FastText | Bahasa Inggris Wikipedia 2017 + Subword 16b | 300D | 300D | 300D |
| Facebook - FastText | Perayapan Umum 600B | 300D | 300D | 300D |
| AI2 - Allennlp Elmo | Model Elmo | Model Elmo | Model Elmo | Model Elmo |
| Google - Bert | Segera hadir... | Segera hadir... | Segera hadir... | Segera hadir... |
Ada instruksi di bawah ini untuk mengonversi file .bin , .txt , .vec , .hdf5 ke file .magnitude .
Anda dapat membuat objek besar seperti itu:
from pymagnitude import *
vectors = Magnitude ( "/path/to/vectors.magnitude" ) Jika diperlukan, dan disertakan untuk kenyamanan, Anda juga dapat membuka file .bin , .txt , .vec , .hdf5 langsung dengan besarnya. Namun, ini kurang efisien dan sangat lambat untuk model besar karena akan mengonversi file menjadi file .magnitude pada ras pertama ke direktori sementara. Direktori sementara tidak dijamin bertahan dan tidak bertahan saat komputer Anda reboot. Anda harus melakukan pra-konversi .bin , .txt , .vec , .hdf5 file dengan python -m pymagnitude.converter biasanya untuk kecepatan yang lebih cepat, tetapi fitur ini berguna untuk kasus penggunaan satu kali. Peringatan akan dihasilkan saat instantiasi objek besarnya secara langsung dengan .bin , .txt , .vec , .hdf5 . Anda dapat menekan peringatan dengan mengatur argumen supress_warnings dalam konstruktor ke True .
lazy_loading opsional ke konstruktor dengan nilai -1 untuk menonaktifkan pemuatan malas dan pra-memuat semua vektor ke dalam memori (a la gensim), 0 (default) untuk memungkinkan pemuatan malas dengan cake lru yang tidak ada yang tidak X yang X ada yang lebih besar dari lazy-loading.most_similar menjadi pra-muatan dengan penuh semangat pada inisialisasi, aturlah yang eager -benar True .lazy_loading diatur ke -1 atau eager diatur ke data True akan dimuat sebelumnya ke dalam memori di utas latar belakang untuk mencegah konstruktor memblokir selama beberapa menit untuk model besar. Jika Anda benar -benar ingin perilaku memblokir, Anda dapat True argumen blocking .normalized menjadi False jika Anda ingin menerima vektor mentah non-dinormalisasi sebagai gantinya.use_numpy ke False jika Anda ingin menerima daftar python sebagai gantinya.case_insensitive ke True jika Anda ingin melakukan pencarian case-tidak sensitif.pad_to_length yang akan menentukan panjang semua contoh harus di -empuk jika lulus dalam contoh multple. Setiap contoh yang lebih panjang dari panjang bantalan akan terpotong.truncate_left ke True jika Anda menginginkan awal daftar kunci dalam setiap contoh untuk dipotong alih -alih akhir jika lebih panjang dari pad_to_length saat ditentukan.pad_left ke True jika Anda ingin padding muncul di awal versus akhir (yang merupakan default).placeholders , yang akan meningkatkan dimensi masing-masing vektor dengan jumlah placeholders , nol-padding dimensi ekstra tersebut. Ini berguna, jika Anda berencana untuk menambahkan nilai dan informasi lain ke vektor dan menginginkan ruang untuk yang dialokasikan sebelumnya dalam vektor untuk efisiensi.language dengan kode bahasa ISO 639-1, yang, jika Anda menggunakan magnitudo untuk vektor kata, akan memastikan perpustakaan menghormati yang berasal dari dan fitur khusus bahasa lainnya untuk bahasa itu. Standarnya en untuk bahasa Inggris. Anda juga tidak dapat meneruskan None jika Anda tidak menggunakan vektor kata besar.dtype yang akan memungkinkan Anda mengontrol tipe data dari array numpy yang dikembalikan berdasarkan besarnya.devices yang akan memungkinkan Anda mengontrol penggunaan GPU ketika model yang mendasarinya mendukung penggunaan GPU. Argumen ini harus berupa daftar bilangan bulat, di mana setiap bilangan bulat mewakili nomor perangkat GPU ( 0 , 1 , dll.).temp_dir yang akan memungkinkan Anda mengontrol lokasi magnitudo direktori sementara yang akan digunakan.log yang akan memiliki kemajuan log besar -besaran ke kesalahan standar saat operasi lambat terjadi.Anda dapat menanyakan jumlah total vektor dalam file seperti itu:
len ( vectors )Anda dapat menanyakan dimensi vektor seperti itu:
vectors . dimAnda dapat memeriksa apakah kunci ada dalam kosakata seperti itu:
"cat" in vectorsAnda dapat mengulangi semua kunci dan vektor seperti itu:
for key , vector in vectors :
...Anda dapat meminta vektor kunci seperti itu:
vectors . query ( "cat" )Anda dapat mengindeks untuk kunci dan vektor ke-n seperti itu:
vectors [ 42 ]Anda dapat meminta vektor beberapa kunci seperti SO:
vectors . query ([ "I" , "read" , "a" , "book" ])Array 2D (kunci oleh vektor) akan dikembalikan.
Anda dapat meminta vektor beberapa contoh seperti SO:
vectors . query ([[ "I" , "read" , "a" , "book" ], [ "I" , "read" , "a" , "magazine" ]]) Array 3D (contoh dengan kunci oleh vektor) akan dikembalikan. Jika pad_to_length tidak ditentukan, dan ukuran masing -masing contoh tidak rata, mereka akan empuk dengan panjang contoh terpanjang.
Anda dapat mengindeks untuk kunci dan vektor dari beberapa indeks seperti SO:
vectors [: 42 ] # slice notation
vectors [ 42 , 1337 , 2001 ] # tuple notationAnda dapat menanyakan jarak dua atau beberapa kunci seperti itu:
vectors . distance ( "cat" , "dog" )
vectors . distance ( "cat" , [ "dog" , "tiger" ])Anda dapat menanyakan kesamaan dua atau beberapa kunci seperti SO:
vectors . similarity ( "cat" , "dog" )
vectors . similarity ( "cat" , [ "dog" , "tiger" ])Anda dapat meminta kunci yang paling mirip dari daftar kunci ke kunci yang diberikan seperti itu:
vectors . most_similar_to_given ( "cat" , [ "dog" , "television" , "laptop" ]) # dogAnda dapat meminta kunci mana yang tidak cocok dengan daftar kunci dengan kunci yang diberikan seperti itu:
vectors . doesnt_match ([ "breakfast" , "cereal" , "dinner" , "lunch" ]) # cerealAnda dapat meminta kunci yang paling mirip (tetangga terdekat) seperti itu seperti:
vectors . most_similar ( "cat" , topn = 100 ) # Most similar by key
vectors . most_similar ( vectors . query ( "cat" ), topn = 100 ) # Most similar by vector Secara opsional, Anda dapat meneruskan argumen min_similarity ke most_similar . Nilai dari [-1.0-1.0] valid.
Anda juga dapat meminta kunci yang paling mirip dengan memberikan contoh positif dan negatif (yang, secara kebetulan, memecahkan analogi) seperti itu:
vectors . most_similar ( positive = [ "woman" , "king" ], negative = [ "man" ]) # queen Mirip dengan vectors.most_similar , ada fungsi vectors.most_similar_cosmul .
vectors . most_similar_cosmul ( positive = [ "woman" , "king" ], negative = [ "man" ]) # queenAnda juga dapat meminta kunci yang paling mirip menggunakan perkiraan indeks tetangga terdekat yang jauh lebih cepat, tetapi tidak menjamin jawaban yang tepat:
vectors . most_similar_approx ( "cat" )
vectors . most_similar_approx ( positive = [ "woman" , "king" ], negative = [ "man" ]) Secara opsional, Anda dapat melewati argumen effort dengan nilai-nilai antara [0,0-1.0] ke fungsi most_similar_approx yang akan memberi Anda pertukaran runtime. Nilai default untuk effort adalah 1.0 yang akan memakan waktu terpanjang, tetapi akan memberikan hasil yang paling akurat.
Anda dapat menanyakan semua kunci yang lebih dekat ke kunci daripada kunci lain adalah seperti itu:
vectors . closer_than ( "cat" , "rabbit" ) # ["dog", ...] Anda dapat mengakses semua vektor yang mendasari dalam model dalam numpy.memmap besar len(vectors) x vectors.emb_dim
vectors . get_vectors_mmap ()Anda dapat membersihkan semua sumber daya terkait, membuka file, dan koneksi basis data seperti itu:
vectors . close ()Untuk representasi vektor kata, menangani kunci out-of-vocabulary adalah penting untuk menangani kata-kata baru yang tidak dalam model terlatih, menangani kesalahan dan kesalahan ketik, dan membuat model yang dilatih pada representasi vektor kata lebih kuat secara umum.
Kunci out-of-vocabulary ditangani dengan menetapkan nilai vektor acak. Namun, keacakan itu deterministik. Jadi, jika kunci out-of-vocabulary yang sama ditemui dua kali, itu akan diberi nilai vektor acak yang sama demi kemampuan untuk melatih pada kunci out-of-vocabulary. Selain itu, jika dua kunci out-of-vocabulary berbagi karakter N-gram yang sama ("UberX", "UberXL") mereka akan ditempatkan dekat satu sama lain bahkan jika keduanya tidak ada dalam kosakata:
vectors = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
"uberx" in vectors # False
"uberxl" in vectors # False
vectors . query ( "uberx" ) # array([ 5.07109939e-02, -7.08248823e-02, -2.74812328e-02, ... ])
vectors . query ( "uberxl" ) # array([ 0.04734962, -0.08237578, -0.0333479, -0.00229564, ... ])
vectors . similarity ( "uberx" , "uberxl" ) # 0.955000000200815Jika menggunakan file magnitudo dengan dukungan out-of-vokabulary canggih (sedang atau berat), tombol out-of-vocabulary juga akan tertanam dekat dengan tombol yang sama (ditentukan oleh kesamaan string) yang ada dalam kosakata:
vectors = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
"uberx" in vectors # False
"uberification" in vectors # False
"uber" in vectors # True
vectors . similarity ( "uberx" , "uber" ) # 0.7383483267618451
vectors . similarity ( "uberification" , "uber" ) # 0.745452837882727 Ini juga membuat besarnya kuat untuk banyak kesalahan ejaan:
vectors = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
"missispi" in vectors # False
vectors . similarity ( "missispi" , "mississippi" ) # 0.35961736624824003
"discrimnatory" in vectors # False
vectors . similarity ( "discrimnatory" , "discriminatory" ) # 0.8309152561753461
"hiiiiiiiiii" in vectors # False
vectors . similarity ( "hiiiiiiiiii" , "hi" ) # 0.7069775034853861Karakter N-gram digunakan untuk membuat efek ini untuk kunci out-of-vocabulary. Inspirasi untuk fitur ini diambil dari vektor kata yang memperkaya Facebook AI Research dengan informasi subword, tetapi alih-alih memanfaatkan karakter N-gram pada waktu kereta api, karakter-N-gram digunakan pada inferensi sehingga efeknya dapat agak direplikasi (tetapi tidak direplikasi dengan sempurna) pada model yang lebih lama yang tidak dilatih dengan karakter n-gram seperti word2vec dan glove.
Secara opsional, Anda dapat menggabungkan vektor dari beberapa model untuk memasukkan informasi yang lebih kuat ke dalam model pembelajaran mesin seperti itu:
from pymagnitude import *
word2vec = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
glove = Magnitude ( "/path/to/glove.6B.50d.magnitude" )
vectors = Magnitude ( word2vec , glove ) # concatenate word2vec with glove
vectors . query ( "cat" ) # returns 350-dimensional NumPy array ('cat' from word2vec concatenated with 'cat' from glove)
vectors . query (( "cat" , "cats" )) # returns 350-dimensional NumPy array ('cat' from word2vec concatenated with 'cats' from glove)Anda dapat menggabungkan lebih dari dua model vektor, hanya dengan memberikan lebih banyak argumen kepada konstruktor.
Anda dapat secara otomatis membuat vektor dari fitur tambahan yang mungkin Anda miliki seperti bagian dari bicara, informasi ketergantungan sintaks, atau informasi lain menggunakan kelas FeaturizerMagnitude :
from pymagnitude import *
pos_vectors = FeaturizerMagnitude ( 100 , namespace = "PartsOfSpeech" )
pos_vectors . dim # 4 - number of dims automatically determined by Magnitude from 100
pos_vectors . query ( "NN" ) # - array([ 0.08040417, -0.71705252, 0.61228951, 0.32322192])
pos_vectors . query ( "JJ" ) # - array([-0.11681135, 0.10259253, 0.8841201 , -0.44063763])
pos_vectors . query ( "NN" ) # - array([ 0.08040417, -0.71705252, 0.61228951, 0.32322192]) (deterministic hashing so the same value is returned every time for the same key)
dependency_vectors = FeaturizerMagnitude ( 100 , namespace = "SyntaxDependencies" )
dependency_vectors . dim # 4 - number of dims automatically determined by Magnitude from 100
dependency_vectors . query ( "nsubj" ) # - array([-0.81043793, 0.55401352, -0.10838071, 0.15656626])
dependency_vectors . query ( "prep" ) # - array([-0.30862918, -0.44487267, -0.0054573 , -0.84071788])Besarnya akan menggunakan trik hashing fitur secara internal untuk secara langsung menggunakan hash dari nilai fitur untuk membuat vektor unik untuk nilai fitur itu.
Argumen pertama yang menjadi FeaturizerMagnitude harus merupakan perkiraan yang terikat atas pada jumlah nilai untuk fitur tersebut. Karena ada <100 bagian tag bicara dan <100 dependensi sintaksis, kami memilih 100 untuk keduanya dalam contoh di atas. Nilai yang dipilih akan menentukan berapa banyak dimensi yang akan secara otomatis menetapkan objek FeaturizerMagnitude khusus untuk mengurangi kemungkinan tabrakan hash. Argumen namespace dapat berupa string apa pun yang menjelaskan fitur tambahan Anda. Ini opsional, tetapi sangat dianjurkan.
Anda kemudian dapat menggabungkan fitur -fitur ini untuk digunakan dengan objek magnitudo standar:
from pymagnitude import *
word2vec = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
pos_vectors = FeaturizerMagnitude ( 100 , namespace = "PartsOfSpeech" )
dependency_vectors = FeaturizerMagnitude ( 100 , namespace = "SyntaxDependencies" )
vectors = Magnitude ( word2vec , pos_vectors , dependency_vectors ) # concatenate word2vec with pos and dependencies
vectors . query ([
( "I" , "PRP" , "nsubj" ),
( "saw" , "VBD" , "ROOT" ),
( "a" , "DT" , "det" ),
( "cat" , "NN" , "dobj" ),
( "." , "." , "punct" )
]) # array of size 5 x (300 + 4 + 4) or 5 x 308
# Or get a unique vector for every 'buffalo' in:
# "Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo"
# (https://en.wikipedia.org/wiki/Buffalo_buffalo_Buffalo_buffalo_buffalo_buffalo_Buffalo_buffalo)
vectors . query ([
( "Buffalo" , "JJ" , "amod" ),
( "buffalo" , "NNS" , "nsubj" ),
( "Buffalo" , "JJ" , "amod" ),
( "buffalo" , "NNS" , "nsubj" ),
( "buffalo" , "VBP" , "rcmod" ),
( "buffalo" , "VB" , "ROOT" ),
( "Buffalo" , "JJ" , "amod" ),
( "buffalo" , "NNS" , "dobj" )
]) # array of size 8 x (300 + 4 + 4) or 8 x 308Model pembelajaran mesin, mengingat output ini, sekarang memiliki akses ke bagian -bagian informasi pidato dan informasi ketergantungan sintaks, bukan hanya informasi vektor kata. Dalam hal ini, informasi tambahan ini dapat memberikan jaringan saraf yang lebih kuat untuk informasi semantik dan mengurangi kebutuhan untuk data pelatihan.
Besarnya membuatnya sangat mudah untuk dengan cepat membangun dan mengulangi model yang perlu menggunakan representasi vektor dengan mengurus banyak kode pra-pemrosesan untuk mengonversi dataset teks (atau kunci) menjadi vektor. Selain itu, ini dapat membuat model-model ini lebih kuat untuk kata-kata dan salah ejaan yang tidak mampu.
Ada contoh kode yang tersedia menggunakan magnitudo untuk membangun model klasifikasi niat untuk dataset ATIS (Airline Travel Information Systems) (kereta/tes), yang digunakan untuk chatbots atau antarmuka percakapan, di beberapa pustaka pembelajaran mesin populer di bawah ini.
Anda dapat mengakses panduan untuk menggunakan magnitudo dengan keras (yang mendukung TensorFlow, Theano, CNTK) di Google Colaboratory Python Notebook ini.
Panduan Pytorch akan segera hadir.
Panduan TFLEARN akan segera hadir.
Anda dapat menggunakan kelas MagnitudeUtils untuk akses yang nyaman ke fungsi yang mungkin berguna saat membuat model pembelajaran mesin.
Anda dapat mengimpor besarnya seperti itu:
from pymagnitude import MagnitudeUtilsAnda dapat mengunduh model besarnya dari sumber jarak jauh seperti itu:
vecs = Magnitude ( MagnitudeUtils . download_model ( 'word2vec/heavy/GoogleNews-vectors-negative300' )) Secara default, download_model akan mengunduh file dari http://magnitude.plasticity.ai ke folder ~/.magnitude yang dibuat secara otomatis. Jika file sudah diunduh, itu tidak akan diunduh lagi. Anda dapat mengubah direktori folder unduhan lokal menggunakan argumen download_dir opsional. Anda dapat mengubah domain dari mana model akan diunduh dengan argumen remote_path opsional.
Anda dapat membuat generator batch untuk data X dan y dengan batchify , seperti itu:
X = [ .3 , .2 , .7 , .8 , .1 ]
y = [ 0 , 0 , 1 , 1 , 0 ]
batch_gen = MagnitudeUtils . batchify ( X , y , 2 )
for X_batch , y_batch in batch_gen :
print ( X_batch , y_batch )
# Returns:
# 1st loop: X_batch = [.3, .2], y_batch = [0, 0]
# 2nd loop: X_batch = [.7, .8], y_batch = [1, 1]
# 3rd loop: X_batch = [.1], y_batch = [0]
# next loop: repeats infinitely... Anda dapat menyandikan label kelas untuk bilangan bulat dan kembali dengan class_encoding , seperti itu:
add_class , class_to_int , int_to_class = MagnitudeUtils . class_encoding ()
add_class ( "cat" ) # Returns: 0
add_class ( "dog" ) # Returns: 1
add_class ( "cat" ) # Returns: 0
class_to_int ( "dog" ) # Returns: 1
class_to_int ( "cat" ) # Returns: 0
int_to_class ( 1 ) # Returns: "dog"
int_to_class ( 0 ) # Returns: "cat" Anda dapat mengonversi data kategorikal dengan bilangan bulat kelas menjadi array numpy satu-panas dengan to_categorical , seperti itu:
y = [ 1 , 5 , 2 ]
MagnitudeUtils . to_categorical ( y , num_classes = 6 ) # num_classes is optional
# Returns:
# array([[0., 1., 0., 0., 0., 0.]
# [0., 0., 0., 0., 0., 1.]
# [0., 0., 1., 0., 0., 0.]]) Anda dapat mengonversi dari array numpy satu-panas kembali ke sederetan bilangan bulat kelas 1D dengan from_categorical , seperti itu:
y_c = [[ 0. , 1. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 1. ]]
MagnitudeUtils . from_categorical ( y_c )
# Returns:
# array([1., 5.]) Perpustakaan ini aman (menggunakan koneksi yang berbeda ke toko yang mendasari per utas), hanya baca, dan tidak pernah menulis ke file. Karena penggunaan memori ringan, Anda juga dapat menjalankannya dalam beberapa proses (atau menggunakan multiprocessing ) dengan ruang alamat yang berbeda tanpa harus menduplikasi data dalam memori seperti dengan perpustakaan lain dan tanpa harus membuat variabel bersama multi-proses karena data dibacakan di luar disk dan setiap proses menyimpan cache memori LRU sendiri. Untuk fungsi yang lebih berat, seperti most_similar file yang dipetakan memori bersama dibuat untuk berbagi memori antar proses.
Paket magnitudo menggunakan format file .magnitude alih -alih .bin , .txt , .vec , atau .hdf5 seperti dengan model vektor lainnya seperti Word2Vec, Glove, FastText, dan Elmo. Ada utilitas baris perintah yang disertakan untuk mengonversi word2vec, sarung tangan, fasttext, dan file elmo menjadi file magnitudo.
Anda dapat mengubahnya seperti itu:
python -m pymagnitude.converter -i < PATH TO FILE TO BE CONVERTED > -o < OUTPUT PATH FOR MAGNITUDE FILE >Format input akan secara otomatis ditentukan oleh ekstensi / isi file input. Anda hanya perlu melakukan konversi ini sekali untuk model. Setelah mengonversi, format file magnitudo statis dan tidak akan dimodifikasi atau ditulis untuk membuat akses baca bersamaan aman.
Bendera untuk pymagnitude.converter ditentukan di bawah ini:
-h untuk bantuan dan untuk mendaftar semua bendera.-p <PRECISION> untuk menentukan presisi desimal untuk dipertahankan (memilih angka yang lebih rendah akan membuat file yang lebih kecil). Nilai -nilai yang mendasari aktual disimpan sebagai bilangan bulat alih -alih mengapung sehingga ini pada dasarnya adalah kuantisasi untuk jejak kaki model yang lebih kecil.-a yang akan memungkinkan penggunaan fungsi most_similar_approx . Bendera -t <TREES> mengontrol jumlah pohon dalam perkiraan indeks tetangga tetangga (lebih tinggi lebih akurat) bila digunakan bersama dengan bendera -a (jika tidak disediakan, jumlah pohon ditentukan secara otomatis).-s untuk menonaktifkan penambahan informasi subword ke file (yang akan membuat file lebih kecil), tetapi nonaktifkan dukungan kunci out-of-vocabulary yang canggih.-v bersama dengan jalur ke file besarnya lain yang ingin Anda ambil dari kosakata. Secara opsional, Anda dapat mengonversi banyak file dengan mengirimkan folder input dan folder output alih -alih file input dan file output. Semua .txt , .bin , .vec , file .hdf5 di folder input akan dikonversi ke file .magnitude di folder output. Folder output harus ada sebelum operasi konversi curah.
Anda dapat menginstruksikan unduhan besarnya dan membuka model dari repositori jarak jauh Magnitude alih -alih jalur file lokal. File akan secara otomatis diunduh secara lokal pada run pertama ke ~/.magnitude/ dan kemudian melewatkan unduhan jika file sudah ada secara lokal.
vecs = Magnitude ( 'http://magnitude.plasticity.ai/word2vec/heavy/GoogleNews-vectors-negative300.magnitude' ) # full url
vecs = Magnitude ( 'word2vec/heavy/GoogleNews-vectors-negative300' ) # or, use the shorthand for the url Untuk kontrol lebih lanjut atas domain unduhan jarak jauh dan direktori unduhan lokal, lihat cara menggunakan MagnitudeUtils.download_model .
Model magnitudo umumnya adalah file besar (beberapa GB) yang memakan banyak ruang disk, meskipun format .magnitude membuatnya cepat untuk memanfaatkan vektor. Besarnya memiliki opsi untuk mengalirkan file -file besar ini melalui HTTP. Ini secara eksplisit berbeda dari fitur pemuatan jarak jauh, karena modelnya bahkan tidak perlu diunduh sama sekali. Anda dapat segera mulai menanyakan model tanpa ruang disk yang digunakan sama sekali.
vecs = Magnitude ( 'http://magnitude.plasticity.ai/word2vec/heavy/GoogleNews-vectors-negative300.magnitude' , stream = True ) # full url
vecs = Magnitude ( 'word2vec/heavy/GoogleNews-vectors-negative300' , stream = True ) # or, use the shorthand for the url
vecs . query ( "king" ) # Returns: the vector for "king" quickly, even with no local model file downloadedAnda dapat bermain -main dengan demo ini di notebook Python Google Colaboratory.
Fitur ini sangat berguna jika lingkungan komputasi Anda dibatasi sumber daya (RAM rendah dan ruang disk rendah), Anda ingin bereksperimen dengan cepat dengan vektor tanpa mengunduh dan menyiapkan file model besar, atau Anda melatih model kecil. Meskipun ada beberapa latensi jaringan yang ditambahkan karena data sedang dialirkan, besarnya masih akan menggunakan cache dalam memori sebagaimana ditentukan oleh parameter konstruktor lazy_loading . Karena bahasa umumnya memiliki distribusi ZIPF-ian, latensi jaringan sebagian besar seharusnya tidak menjadi masalah setelah cache dihangatkan setelah ditanya beberapa kali.
Mereka akan ditanya langsung dari server web HTTP statis menggunakan header permintaan rentang HTTP. Semua metode magnitudo mendukung streaming, bagaimanapun, most_similar dan most_similar_approx mungkin lambat karena belum dioptimalkan untuk streaming. Anda dapat melihat bagaimana mode streaming ini berkinerja saat ini dalam tolok ukur, namun, ini akan menjadi lebih cepat saat kami mengoptimalkannya di masa depan!
Dokumentasi lain tidak tersedia saat ini. Lihat file sumber secara langsung (dikomentari dengan baik) jika Anda memerlukan informasi lebih lanjut tentang argumen metode atau ingin melihat semua fitur yang didukung.
Saat ini, kami hanya menyediakan model vektor kata bahasa Inggris di halaman ini yang telah dikonversi ke format .magnitude . Namun, Anda masih dapat menggunakan besarnya dengan vektor kata bahasa lain. Facebook telah melatih vektor FastText mereka untuk berbagai bahasa. Anda dapat menurunkan file .vec untuk bahasa apa pun yang Anda inginkan dan kemudian mengonversinya menjadi .magnitude dengan konverter.
Saat ini, file magnitudo membaca hanya didukung dalam python, karena telah menjadi bahasa de-facto untuk pembelajaran mesin. Ini cukup untuk sebagian besar kasus penggunaan. Memperluas format file ke bahasa lain seharusnya tidak sulit karena SQLite memiliki implementasi C asli dan memiliki ikatan di sebagian besar bahasa. Format file itu sendiri dan protokol untuk membaca dan mencari juga cukup mudah setelah membaca kode sumber repositori ini.
Saat ini, pemrosesan bahasa alami adalah domain paling populer yang menggunakan model embedding vektor pra-terlatih untuk representasi vektor kata. Namun, ada domain lain seperti visi komputer yang sudah mulai menggunakan model embedding vektor pra-terlatih seperti Deep1b untuk representasi gambar. Perpustakaan ini bermaksud untuk tetap agnostik ke berbagai domain dan sebagai gantinya menyediakan toko dan antarmuka vektor kunci generik yang berguna untuk semua domain.
Repositori utama untuk proyek ini dapat ditemukan di GitLab. Repositori GitHub hanyalah cermin. Tarik permintaan untuk lebih banyak tes, pengecekan kesalahan yang lebih baik, perbaikan bug, peningkatan kinerja, atau dokumentasi atau menambahkan utilties / fungsi tambahan dipersilakan di GitLab.
Anda dapat menghubungi kami di [email protected].
most_similar_approx dioptimalkan untuk streamingmost_similar yang awalnya lambat..bin most_similar_approx besarnya menggunakan pohon proyeksi acak dan 2-means hierarkis. Terima kasih kepada penulis Erik Bernhardsson karena telah membantu dengan beberapa detail integrasi antara besarnya dan gangguan. Jika Anda ingin mengutip makalah kami di EMNLP 2018, Anda dapat menggunakan kutipan Bibtex berikut:
@inproceedings{patel2018magnitude,
title={Magnitude: A Fast, Efficient Universal Vector Embedding Utility Package},
author={Patel, Ajay and Sands, Alexander and Callison-Burch, Chris and Apidianaki, Marianna},
booktitle={Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing: System Demonstrations},
pages={120--126},
year={2018}
}atau ikuti tautan Google Cendekia untuk cara lain untuk mengutip kertas.
Jika Anda ingin mengutip repositori ini, Anda dapat menggunakan lencana doi berikut:
Mengklik lencana akan mengarah ke halaman yang akan membantu Anda menghasilkan kutipan bibtex yang tepat, kutipan JSON-LD, dan kutipan lainnya.
Repositori ini dilisensikan di bawah lisensi yang ditemukan di sini.
Ikon "Seismic" oleh Johnnyzi dari proyek kata benda.