可塑性によって開発された高速で効率的でシンプルな方法で、機械学習モデルのベクトル埋め込みを利用するための機能満載のPythonパッケージとベクトルストレージファイル形式。これは主に、Gensimの代替品である /より高速なものになることを目的としていますが、NLP以外のドメインの一般的なキーベクトルストアとして使用できます。それは、HTTPを介した大規模なモデルのストリーミングや、外れている外観やストリーミングなどのユニークな機能を提供します。 EMNLP 2018の論文で公開され、Arxivで入手可能。
このパッケージをpipでインストールできます。
pip install pymagnitude # Python 2.7
pip3 install pymagnitude # Python 3Google Colaboratoryには、矛盾が矛盾するため、規模のインストールに依存関係の問題がいくつかあります。次のスニペットを使用して、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. " ベクトル空間埋め込みモデルは機械学習でますます一般的になっており、伝統的に自然言語処理アプリケーションに人気がありました。これらの大きなベクトル空間埋め込みモデルを効率的に消費する高速で軽量なツールが不足しています。
ベクトル埋め込みのマグニチュードファイル形式( .magnitude )は、開発中のより速いコールドスタートのための怠zyなロードを可能にするより効率的なユニバーサルベクター埋め込み形式であることを目的としています。間違いのあるキーと複数のベクトルモデルを連結します。また、メモリに収まらない可能性のある大きなベクトルモデルで動作することを目的としています。
基礎となるデータストアとして、高速で人気のある埋め込みデータベースであるSQLiteを使用しています。高速キールックアップにインデックスを使用し、メモリマッピング、SIMD命令、および複数のプロセス間でもメモリパフォーマンスが良好なベクトル空間オフディスクで高速類似性検索に空間インデックスを使用します。さらに、メモリマップは実行の間にキャッシュされるため、プロセスを閉じた後でも、速度の改善が拡大します。
| メトリック | 大きさの光 | マグニチュード媒体 | 大きさが重い | マグニチュードストリーム |
|---|---|---|---|---|
| 初期負荷時間 | 0.7210S | ━1 | ━1 | 7.7550S |
| コールドシングルキークエリ | 0.0001S | ━1 | ━1 | 1.6437S |
| 温かいシングルキークエリ (コールドクエリと同じ鍵) | 0.00004S | ━1 | ━1 | 0.0004S |
| コールドマルチキークエリ (n = 25) | 0.0442S | ━1 | ━1 | 1.7753S |
| 複数のキークエリを温めます (n = 25)(コールドクエリと同じキー) | 0.00004S | ━1 | ━1 | 0.0001S |
最初のmost_similar検索クエリ(n = 10)(最悪の場合) | 247.05s | ━1 | ━1 | - |
最初のmost_similar検索クエリ(n = 10)(平均ケース)(ディスクの永続的なキャッシュ付き) | 1.8217S | ━1 | ━1 | - |
その後のmost_similar検索(n = 10)(最初のクエリとは異なるキー) | 0.2434S | ━1 | ━1 | - |
暖かい後続のmost_similar検索(n = 10)(最初のクエリと同じキー) | 0.00004S | 0.00004S | 0.00004S | - |
最初のmost_similar_approx検索クエリ(n = 10、努力= 1.0)(最悪の場合) | n/a | n/a | 29.610S | - |
最初のmost_similar_approx検索クエリ(n = 10、努力= 1.0)(平均ケース)(ディスクの永続的なキャッシュ) | n/a | n/a | 0.9155S | - |
その後のmost_similar_approx検索(n = 10、努力= 1.0)(最初のクエリとは異なるキー) | n/a | n/a | 0.1873S | - |
その後のmost_similar_approx検索(n = 10、努力= 0.1)(最初のクエリとは異なるキー) | n/a | n/a | 0.0199S | - |
温かい後続のmost_similar_approx検索(n = 10、努力= 1.0)(最初のクエリと同じキー) | n/a | n/a | 0.00004S | - |
| ファイルサイズ | 4.21GB | 5.29GB | 10.74GB | 0.00GB |
| プロセスメモリ(RAM)利用 | 18kb | ━1 | ━1 | 1.71MB |
| 100のキークエリ後のプロセスメモリ(RAM)利用 | 168kb | ━1 | ━1 | 1.91MB |
| 100キークエリ +類似性検索後のプロセスメモリ(RAM)利用 | 342kb 2 | ━1 | ━1 | |
| 整合性チェックとテスト | ✅ | ✅ | ✅ | ✅ |
Word2vec( .txt 、 .bin )、Glove( .txt )、fastText( .vec )、およびelmo( .hdf5 )の間のユニバーサル形式とコンバーターユーティリティ | ✅ | ✅ | ✅ | ✅ |
| シンプルなPythonicインターフェイス | ✅ | ✅ | ✅ | ✅ |
| 依存関係はほとんどありません | ✅ | ✅ | ✅ | ✅ |
| メモリモデルよりも大きいサポート | ✅ | ✅ | ✅ | ✅ |
| 可能な限り、速度とパフォーマンスのために怠zyな読み込み | ✅ | ✅ | ✅ | ✅ |
threadingとmultiprocessing用に最適化されています | ✅ | ✅ | ✅ | ✅ |
| パディング、切り捨て、プレースホルダー、および特集サポートを備えたバルクと複数のキールックアップ | ✅ | ✅ | ✅ | ✅ |
| 複数のベクトルモデルを一緒に連結します | ✅ | ✅ | ✅ | ✅ |
| 基本的な表記外のキールックアップ (文字n-gram機能ハッシュ) | ✅ | ✅ | ✅ | ✅ |
| スペルミスのサポートを備えた高度な表記外のキールックアップ (文字n-gramの特徴は、同様の音節内キーにハッシュします) | ✅ | ✅ | ✅ | |
| イライラインデックスで最も類似した検索を概算します | ✅ | ✅ | ||
| 新しいモデル向けの組み込みトレーニング |
1:前の列と同じ値
2: mmapを使用してディスクから読み取ります。そのため、OSはメモリが利用可能になったときにメモリのページを割り当てますが、プロセス間で共有でき、パフォーマンスの勝利である非常に大きなファイルのために各プロセス内で管理されません
*:すべてのベンチマークは、MacBook Pro(Retina、15インチ、2014年半ば)2.2GHz Quad-Core Intel Core i7を使用して、Google News Pre-Trained Word Vectors( GoogleNews-vectors-negative300.bin )で実行されました。
人気のある埋め込みモデルは、midmediateダウンロードと使用のために.magnitude形式に事前に変換されています。
| 貢献者 | データ | ライト (表記キー外の基本的なサポート) | 中くらい (推奨) (表記外のキーの高度なサポート) | 重い (表記外のキーとより速い most_similar_approxの高度なサポート) |
|---|---|---|---|---|
| Google -Word2vec | Google News 100B | 300d | 300d | 300d |
| スタンフォード - グローブ | Wikipedia 2014 + Gigaword 5 6b | 50d、100d、200d、300d | 50d、100d、200d、300d | 50d、100d、200d、300d |
| スタンフォード - グローブ | Wikipedia 2014 + Gigaword 5 6b (可塑性によってレンマ化) | 50d、100d、200d、300d | 50d、100d、200d、300d | 50d、100d、200d、300d |
| スタンフォード - グローブ | 一般的なクロール840b | 300d | 300d | 300d |
| スタンフォード - グローブ | Twitter 27b | 25d、50d、100d、200d | 25d、50d、100d、200d | 25d、50d、100d、200d |
| Facebook -FastText | 英語ウィキペディア2017 16b | 300d | 300d | 300d |
| Facebook -FastText | 英語ウィキペディア2017 +サブワード16b | 300d | 300d | 300d |
| Facebook -FastText | 一般的なクロール600b | 300d | 300d | 300d |
| ai2 -allennlp elmo | ELMOモデル | ELMOモデル | ELMOモデル | ELMOモデル |
| Google-バート | 近日公開... | 近日公開... | 近日公開... | 近日公開... |
任意の.bin 、 .txt 、 .vec 、 .hdf5ファイルを.magnitudeファイルに変換するための手順があります。
次のようなマグニチュードオブジェクトを作成できます。
from pymagnitude import *
vectors = Magnitude ( "/path/to/vectors.magnitude" )必要に応じて、便利なために含まれている場合は、マグニチュードで直接.bin 、 .txt 、 .vec 、 .hdf5ファイルを開くこともできます。ただし、これは、ファイルを一時的なディレクトリに最初に実行すると、ファイルを.magnitudeファイルに変換するため、効率が低く、非常に遅いです。一時的なディレクトリは持続することを保証されておらず、コンピューターの再起動時に持続しません。 .bin 、 .txt 、 .vec 、 .hdf5ファイルをpython -m pymagnitude.converterを使用して、通常、より速い速度で転換する必要がありますが、この機能は1回限りのユースケースに役立ちます。 .bin 、 .txt 、 .vec 、 .hdf5でマグニチュードオブジェクトを直接インスタンス化すると、警告が生成されます。コンストラクターのsupress_warnings引数をTrueに設定することにより、警告を抑制できます。
lazy_loading引数を値-1でコンストラクターに渡すことができます。レイジーロードを無効にし、すべてのベクトルをメモリ(a la gensim)、 0 (デフォルト)にプリロードして、無制限のインメモリLRUキャッシュ、またはゼロXよりもゼロXよりもゼロXよりもゼロXよりもゼロXよりもゼロをゼロにすることを可能にします。most_similar関数のデータを初期化時に事前にプリロードする必要がある場合は、 Trueにeager設定します。lazy_loadingが-1に設定されている場合でも、 eager Trueデータに設定されている場合でも、大きなモデルの場合、コンストラクターが数分間ブロックするのを防ぐために、バックグラウンドスレッドのメモリにプリロードされます。ブロッキング動作が本当に必要な場合は、 blocking引数にTrue渡すことができます。Falseにnormalizedオプションの引数を設定します。use_numpy Falseに設定します。case_insensitive Trueに設定します。pad_to_length引数を含めることができます。パッドの長さよりも長い例は切り捨てられます。pad_to_lengthよりも長い場合に備えて、各例のキーのリストの先頭が端ではなく切り捨てられる場合は、 truncate_left引数をTrueに設定できます。pad_left引数をTrueに設定できます。placeholders引数を渡すことができます。これにより、各ベクトルの寸法がplaceholders量によって増加し、それらの余分な寸法をゼロにします。これは、他の値と情報をベクターに追加し、効率のためにベクターで事前に割り当てられたスペースを必要とする場合に役立ちます。language引数を渡すことができます。これは、単語ベクトルに大きさを使用している場合、ライブラリがその言語のステミングやその他の言語固有の機能を尊重することを保証します。デフォルトは英語のenです。単語ベクトルに大きさを使用していない場合は、渡すこともできませNone 。dtype引数を渡すことができます。これにより、マグニチュードで返されるnumpyアレイのデータ型を制御できます。devices引数を渡すことができます。この引数は、各整数1 GPUデバイス番号( 0など)を表す整数のリストである必要があります。temp_dir引数を渡すことができます。これにより、一時的なディレクトリのマグニチュードの位置を制御できます。log引数を渡すことができます。ファイルのベクトルの総数を次のようにクエリすることができます。
len ( vectors )次のようなベクトルの寸法を照会できます。
vectors . dimキーがそのような語彙にあるかどうかを確認できます。
"cat" in vectorsあなたはそうするようなすべてのキーとベクトルを反復させることができます:
for key , vector in vectors :
...あなたは次のようなキーのベクトルをクエリすることができます:
vectors . query ( "cat" )n番目のキーとベクトルのようにインデックスを付けることができます。
vectors [ 42 ]次のような複数のキーのベクトルをクエリすることができます:
vectors . query ([ "I" , "read" , "a" , "book" ])2D配列(ベクトルによるキー)が返されます。
次のような複数の例のベクトルをクエリすることができます。
vectors . query ([[ "I" , "read" , "a" , "book" ], [ "I" , "read" , "a" , "magazine" ]]) 3D配列(ベクトルによるキーによる例)が返されます。 pad_to_lengthが指定されておらず、各例のサイズが不均一である場合、それらは最も長い例の長さにパッドにされます。
次のような複数のインデックスのキーとベクトルのインデックスを作成できます。
vectors [: 42 ] # slice notation
vectors [ 42 , 1337 , 2001 ] # tuple notation次のような2つまたは複数のキーの距離を照会できます。
vectors . distance ( "cat" , "dog" )
vectors . distance ( "cat" , [ "dog" , "tiger" ])次のような2つまたは複数のキーの類似性を照会できます。
vectors . similarity ( "cat" , "dog" )
vectors . similarity ( "cat" , [ "dog" , "tiger" ])あなたは、SOのような特定のキーにキーのリストから最も類似したキーをクエリすることができます:
vectors . most_similar_to_given ( "cat" , [ "dog" , "television" , "laptop" ]) # dogキーがキーのリストを特定のキーに一致させないかどうかは、次のようにクエリできます。
vectors . doesnt_match ([ "breakfast" , "cereal" , "dinner" , "lunch" ]) # cerealあなたはそうするような最も類似した(最も近い隣人)キーをクエリすることができます:
vectors . most_similar ( "cat" , topn = 100 ) # Most similar by key
vectors . most_similar ( vectors . query ( "cat" ), topn = 100 ) # Most similar by vectorオプションで、 min_similarity引数をmost_similarに渡すことができます。 [-1.0-1.0]の値は有効です。
また、次のように、ポジティブな例と否定的な例(偶然には類推を解決する)を与える最も類似したキーをクエリすることもできます。
vectors . most_similar ( positive = [ "woman" , "king" ], negative = [ "man" ]) # queen vectors.most_similarと同様に、 vectors.most_similar_cosmul関数は、LevyとGoldbergの3Cosmul関数を使用する関数が存在します。
vectors . most_similar_cosmul ( positive = [ "woman" , "king" ], negative = [ "man" ]) # queenまた、はるかに高速な近似最寄りの隣人インデックスを使用して、最も類似したキーをクエリすることもできますが、正確な答えは保証されません。
vectors . most_similar_approx ( "cat" )
vectors . most_similar_approx ( positive = [ "woman" , "king" ], negative = [ "man" ])オプションで、[0.0-1.0]の間の値を持つeffort引数をmost_similar_approx関数に渡すことができます。これにより、ランタイムのトレードオフが得られます。 effortのデフォルト値は1.0で、最長になりますが、最も正確な結果が得られます。
別のキーよりもキーに近いすべてのキーをクエリすることができます。
vectors . closer_than ( "cat" , "rabbit" ) # ["dog", ...]モデル内のすべての基礎となるベクトルに大きなnumpy.memmap size( len(vectors) x vectors.emb_dim )でアクセスできます。
vectors . get_vectors_mmap ()関連するすべてのリソース、オープンファイル、およびデータベース接続をクリーンアップできます。
vectors . close ()単語ベクトル表現の場合、訓練されたモデルではなく新しい単語を処理し、誤ったペルリングやタイプミスを処理し、単語ベクトル表現のトレーニングを一般的により堅牢に訓練するために、表記外のキーを処理することが重要です。
電子会議キーは、ランダムベクトル値を割り当てることにより処理されます。ただし、ランダム性は決定論的です。したがって、同じ表記外のキーが2回遭遇した場合、それらの表記キーでトレーニングできるために、同じランダムベクトル値が割り当てられます。さらに、2つの表記外のキーが同様の文字n-grams( "uberx"、 "uberxl")を共有する場合、それらは両方とも語彙にない場合でも、互いに近くに配置されます。
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.955000000200815高度な表記のサポート(中または重い)を備えたマグニチュードファイルを使用すると、語彙にある同様のキー(文字列類似性で決定)の近くに埋め込まれます。
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 これにより、多くのスペルエラーに対してマグニチュードが堅牢になります。
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.7069775034853861文字n-Gramsは、表記外のキーにこの効果を作成するために使用されます。この機能のインスピレーションは、Facebook AI Researchの濃縮ワードベクトルからサブワード情報を備えていましたが、列車の時間に文字n-gramsを使用する代わりに、文字n-gramsが推論で使用されるため、Word2vecのようなキャラクターn-gramsのような文字n-gramsでトレーニングされていない古いモデルでは、効果を多少再現できます(完全に複製されません)。
オプションで、複数のモデルからベクトルを組み合わせて、より強力な情報を機械学習モデルにフィードすることができます。
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)単に、より多くの引数をコンストラクターに渡すだけで、2つ以上のベクトルモデルを連結できます。
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])マグニチュードは、機能値のハッシュを内部的に使用して、機能値のハッシュを直接使用して、その機能値の一意のベクトルを作成します。
FeaturizerMagnitudeに対する最初の引数は、機能の値の数に関する近似上にある必要があります。音声タグの100部未満と<100の構文依存関係があるため、上記の例では両方に100を選択します。選択した値は、ハッシュ衝突の可能性を減らすために、特定のfeaturizermagnitudeオブジェクトに特定のFeaturizerMagnitudeオブジェクトに自動的に割り当てられる次元の数を決定します。 namespace引数は、追加の機能を説明する任意の文字列にすることができます。オプションですが、強くお勧めします。
その後、標準のマグニチュードオブジェクトで使用するためにこれらの機能を連結できます。
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 308この出力を考慮した機械学習モデルは、単語ベクトル情報ではなく、音声情報と構文依存情報の一部にアクセスできるようになりました。この場合、この追加情報は、セマンティック情報のニューラルネットワークに強力な信号を提供し、データのトレーニングの必要性を減らすことができます。
Mignitudeを使用すると、テキスト(またはキー)のデータセットをベクトルに変換するために多くの前処理コードを処理することにより、ベクトル表現を使用する必要があるモデルを迅速に構築および反復します。さらに、これらのモデルを、表記外の単語や間違いに対してより堅牢にすることができます。
マグニチュードを使用して利用可能なサンプルコードがあります。これは、以下のいくつかの人気のある機械学習ライブラリに、チャットボットまたは会話インターフェイスに使用されるATIS(航空会社の旅行情報システム)データセット(トレイン/テスト)の意図分類モデルを構築します。
このGoogle Colaboratory Pythonノートブックで、Keras(Tensorflow、Theano、CNTKをサポートする)でマグニチュードを使用するためのガイドにアクセスできます。
Pytorchガイドはまもなく登場します。
Tflearnガイドはまもなく登場します。
MagnitudeUtilsクラスを使用して、機械学習モデルを作成するときに役立つ機能への便利なアクセスを行うことができます。
次のように大きさをインポートできます。
from pymagnitude import MagnitudeUtils次のようなリモートソースからマグニチュードモデルをダウンロードできます。
vecs = Magnitude ( MagnitudeUtils . download_model ( 'word2vec/heavy/GoogleNews-vectors-negative300' ))デフォルトでは、 download_model http://magnitude.plasticity.aiから~/.magnitudeフォルダーから自動的に作成されたファイルをダウンロードします。ファイルが既にダウンロードされている場合、再びダウンロードされません。オプションのdownload_dir引数を使用して、ローカルダウンロードフォルダーのディレクトリを変更できます。オプションのremote_path引数でモデルがダウンロードされるドメインを変更できます。
batchifyを使用してXおよびyデータ用のバッチジェネレーターを作成できます。
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...クラスラベルを整数にエンコードし、 class_encodingでバックをエンコードできます。
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"クラス整数を持つカテゴリデータを、 to_categoricalを使用して1ホットのnumpyアレイに変換できます。
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.]]) 1ホットのnumpy配列から、 from_categoricalを使用してクラス整数の1D数字アレイに変換できます。
y_c = [[ 0. , 1. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 1. ]]
MagnitudeUtils . from_categorical ( y_c )
# Returns:
# array([1., 5.]) ライブラリはスレッドセーフであり(スレッドごとに基礎となるストアへの別の接続を使用しています)、読み取り専用であり、ファイルに書き込むことはありません。ライトメモリの使用のため、他のライブラリと同様にメモリ内のデータを複製することなく、データがオフディスクを読み取ることなく、 multiprocessingプロセス共有変数を作成することなく、複数のプロセスで異なるアドレススペースで複数のプロセスで実行する(またはマルチプロセッシングを使用)することもできます。より重い関数の場合、 most_similarのように、プロセス間でメモリを共有するために共有メモリマッピングファイルが作成されます。
マグニチュードパッケージは、Word2Vec、Glove、FastText、Elmoなどの他のベクトルモデルと同様に.bin 、 .txt 、 .vec 、または.hdf5の代わりに.magnitudeファイル形式を使用します。 Word2Vec、Glove、FastText、およびElmoファイルをMignitutionファイルに変換するためのコマンドラインユーティリティが含まれています。
あなたはそれらのようにそれらを変換することができます:
python -m pymagnitude.converter -i < PATH TO FILE TO BE CONVERTED > -o < OUTPUT PATH FOR MAGNITUDE FILE >入力形式は、入力ファイルの内容 /内容によって自動的に決定されます。モデルに対して一度この変換を実行する必要があるはずです。変換後、マグニチュードファイル形式は静的であり、同時読み取りアクセスを安全にするために変更または書き込まれません。
pymagnitude.converterのフラグは、以下に指定されています。
-hフラグを支援し、すべてのフラグをリストすることができます。-p <PRECISION>フラグを使用して小数の精度を指定して保持できます(より低い数字を選択すると、小さなファイルが作成されます)。実際の基礎となる値は、フロートの代わりに整数として保存されるため、これは本質的に小さなモデルフットプリントの量子化です。most_similar_approx関数の使用を可能にする-aフラグを使用して、ファイルに近似近隣のインデックス(サイズを増やす)を追加できます。 -t <TREES>フラグは、 -aフラグと一緒に使用すると、近隣の近隣インデックス(より高い方が正確になります)の木の数を制御します(供給されない場合、木の数は自動的に決定されます)。-sフラグを渡して、サブワード情報の追加をファイルに無効にすることができます(ファイルが小さくなります)が、高度な表記のキーサポートを無効にします。-vフラグを渡すことができます。オプションで、入力ファイルと出力ファイルの代わりに入力フォルダーと出力フォルダーを渡すことにより、多くのファイルをバルク変換できます。入力フォルダー内のすべての.txt 、 .bin 、 .vec 、 .hdf5ファイルは、出力フォルダーの.magnitudeファイルに変換されます。バルク変換操作の前に出力フォルダーが存在する必要があります。
マグニチュードのダウンロードを指示し、ローカルファイルパスではなく、Magnitudeのリモートリポジトリからモデルを開くことができます。ファイルは、最初の実行時に~/.magnitude/に自動的にダウンロードされ、その後、ファイルが既に局所的に存在する場合はダウンロードをスキップします。
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リモートダウンロードドメインとローカルダウンロードディレクトリをさらに制御するには、 MagnitudeUtils.download_modelの使用方法を参照してください。
マグニチュードモデルは、一般に、 .magnitudeフォーマットがベクトルを利用するのが高速になっている場合でも、多くのディスクスペースを占有する大きなファイル(複数GB)です。 Mignitudeには、これらの大きなファイルをHTTPでストリーミングするオプションがあります。これは、モデルをダウンロードする必要さえないという点で、リモートロード機能とは明示的に異なります。ディスクスペースがまったく使用されずに、すぐにモデルのクエリを開始できます。
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 downloadedGoogle Colaboratory Python Notebookでこれのデモで遊ぶことができます。
この機能は、コンピューティング環境がリソース制約(低RAMと低ディスクスペース)である場合、大きなモデルファイルをダウンロードしてセットアップせずにベクターをすばやく試験するか、小さなモデルをトレーニングしている場合に非常に便利です。データがストリーミングされているため、ネットワーク遅延が追加されていますが、Mignitudeはlazy_loadingコンストラクターパラメーターで指定されているように、インメモリキャッシュを使用します。言語には一般にZIPF-IAN分布があるため、ネットワークの遅延は、少数回照会された後、キャッシュが温められた後、ほとんど問題ではないはずです。
HTTP範囲要求ヘッダーを使用して、静的HTTP Webサーバーから直接クエリが表示されます。すべてのマグニチュードメソッドはストリーミングをサポートしていますが、 most_similarとmost_similar_approx 、まだストリーミングに最適化されていないため、遅い場合があります。このストリーミングモードが現在ベンチマークでどのように機能するかを見ることができますが、将来最適化するにつれてより速くなります!
現時点では、他のドキュメントは利用できません。メソッドの引数に関する詳細情報が必要な場合、またはサポートされているすべての機能を確認したい場合は、ソースファイルを直接参照してください(よくコメントされています)。
現在、このページの英語の単語ベクトルモデルのみを提供しています.magnitudeただし、他の言語の単語ベクトルでマグニチュードを使用できます。 Facebookは、さまざまな言語用にFastTextベクターをトレーニングしています。必要な言語の.vecファイルをダウンしてから、コンバーターで.magnitudeに変換できます。
現在、マグニチュードファイルの読み取りは、機械学習のためのデファクト言語になっているため、Pythonでのみサポートされています。これはほとんどのユースケースで十分です。 SQLiteにはネイティブCの実装があり、ほとんどの言語でバインディングがあるため、ファイル形式を他の言語に拡張することは難しくありません。このリポジトリのソースコードを読み取ると、ファイル形式自体と読み取りと検索のプロトコルもかなり簡単です。
現在、自然言語処理は、単語ベクトル表現に事前に訓練されたベクトル埋め込みモデルを使用する最も人気のあるドメインです。ただし、画像表現のためにDeep1bのような事前に訓練されたベクトル埋め込みモデルの使用を開始したコンピュータービジョンのような他のドメインがあります。このライブラリは、さまざまなドメインに不可知論され、代わりにすべてのドメインに役立つ一般的なキーベクトルストアとインターフェイスを提供します。
このプロジェクトの主なリポジトリは、GitLabにあります。 GitHubリポジトリは鏡のみです。より多くのテスト、より良いエラーチェック、バグの修正、パフォーマンスの改善、ドキュメントのリクエストをプルするか、GitLabでUtiltie /機能を追加することを大歓迎します。
[email protected]でお問い合わせください。
most_similar_approxストリーミングに最適化しますmost_similarアップの制約を削除する「滑dic」フレーバーを追加します。.bin形式をサポートしますmost_similar_approx背後にある近似近隣のアルゴリズムを大きくします。著者のエリック・ベルンハードソンに感謝します。マグニチュードとイライラの統合の詳細のいくつかを手伝ってくれました。 EMNLP 2018で私たちの論文を引用したい場合は、次のBibtex引用を使用できます。
@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}
}または、論文を引用する他の方法については、Google Scholarリンクに従ってください。
このリポジトリを引用したい場合は、次のDOIバッジを使用できます。
バッジをクリックすると、適切なBibtexの引用、JSON-LD引用、その他の引用を生成するのに役立つページが表示されます。
このリポジトリは、ここにあるライセンスに基づいてライセンスされています。
名詞プロジェクトのJohnnyziによる「地震」アイコン。