功能包裝的Python軟件包和矢量存儲文件格式,用於以可塑性開發的快速,高效和簡單的方式利用機器學習模型中的矢量嵌入。它主要打算是Gensim的更簡單 /更快的替代方法,但可以用作NLP外部域的通用鍵矢量存儲。它提供了獨特的功能,例如煙囪外的查找和大型模型的流媒體流式傳輸。發表在我們的論文上,網址為EMNLP 2018,可在Arxiv上找到。
您可以使用pip安裝此軟件包:
pip install pymagnitude # Python 2.7
pip3 install pymagnitude # Python 3Google Colagoratory由於依賴性衝突而存在一些依賴性問題。您可以使用以下片段在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. " 向量空間嵌入模型在機器學習中變得越來越普遍,傳統上在自然語言處理應用中很受歡迎。缺乏一種有效消耗這些大型矢量空間嵌入模型的快速,輕巧的工具。
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拼寫錯誤的鍵和連接多個向量模型。它還旨在與可能不適合內存的大型向量模型一起使用。
它使用SQLite(快速,流行的嵌入式數據庫)作為基礎數據存儲。它使用索引進行快速鑰匙查找,並使用內存映射,SIMD說明和空間索引,以在矢量空間中的快速相似性搜索偏離磁盤中,甚至在多個過程之間都具有良好的內存性能。此外,內存圖在運行之間被緩存,因此即使關閉了一個過程,也可以收穫速度提高。
| 公制 | 大小的光 | 大小介質 | 大小重 | 大小流 |
|---|---|---|---|---|
| 初始加載時間 | 0.7210 | ━1 | ━1 | 7.7550 |
| 冷單密鑰查詢 | 0.0001s | ━1 | ━1 | 1.6437 |
| 溫暖的單鍵查詢 (與冷查詢相同的鑰匙) | 0.00004 | ━1 | ━1 | 0.0004 |
| 冷的多個密鑰查詢 (n = 25) | 0.0442s | ━1 | ━1 | 1.7753 |
| 溫暖多個密鑰查詢 (n = 25)(與冷查詢相同的鍵) | 0.00004 | ━1 | ━1 | 0.0001s |
首先是most_similar搜索查詢(n = 10)(最壞情況) | 247.05s | ━1 | ━1 | - |
首先是most_similar搜索查詢(n = 10)(平均情況)(w/ disk持續緩存) | 1.8217 | ━1 | ━1 | - |
隨後的most_similar搜索(n = 10)(與第一個查詢不同的密鑰) | 0.2434 | ━1 | ━1 | - |
隨後的熱量most_similar搜索(n = 10)(與第一個查詢相同的密鑰) | 0.00004 | 0.00004 | 0.00004 | - |
首先most_similar_approx搜索查詢(n = 10,努力= 1.0)(最壞情況) | N/A。 | N/A。 | 29.610 | - |
首先most_similar_approx搜索查詢(n = 10,工作= 1.0)(平均情況)(w/ disk持續緩存) | N/A。 | N/A。 | 0.9155 | - |
後續most_similar_approx搜索(n = 10,努力= 1.0)(與第一個查詢不同的密鑰) | N/A。 | N/A。 | 0.1873 | - |
後續most_similar_approx搜索(n = 10,努力= 0.1)(與第一個查詢不同的密鑰) | N/A。 | N/A。 | 0.0199 | - |
溫暖隨後的most_similar_approx搜索(n = 10,努力= 1.0)(與第一個查詢相同的密鑰) | N/A。 | N/A。 | 0.00004 | - |
| 文件大小 | 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 )之間的通用格式(.hdf5) | ✅ | ✅ | ✅ | ✅ |
| 簡單,pythonic界面 | ✅ | ✅ | ✅ | ✅ |
| 很少的依賴項 | ✅ | ✅ | ✅ | ✅ |
| 支持更大的內存模型 | ✅ | ✅ | ✅ | ✅ |
| 盡可能懶惰的加載速度和性能 | ✅ | ✅ | ✅ | ✅ |
優化用於threading和multiprocessing | ✅ | ✅ | ✅ | ✅ |
| 帶有填充,截斷,佔位符和特徵支持的散裝和多個鑰匙查找 | ✅ | ✅ | ✅ | ✅ |
| 將多個向量模型串聯在一起 | ✅ | ✅ | ✅ | ✅ |
| 基本的唱機鑰匙鑰匙查找 (字符n-gram功能哈希) | ✅ | ✅ | ✅ | ✅ |
| 高級唱歌式鑰匙查找,並支持拼寫錯誤 (字符n-gram特徵哈希與類似的唱機內密鑰) | ✅ | ✅ | ✅ | |
| 大約用煩惱索引近似最相似的搜索 | ✅ | ✅ | ||
| 新車型的內置培訓 |
1:與上一列相同的值
2:使用mmap從磁盤讀取,因此在可用內存時,操作系統仍將分配內存頁面,但是可以在過程之間共享,並且在每個過程中都不能在每個過程中對非常大的文件進行管理,這是性能勝利
*:所有基準測試均在Google新聞預訓練的單詞矢量( GoogleNews-vectors-negative300.bin )上使用MacBook Pro(Retina,15英寸,2014年中期)2.2GHz四核Intel Core Intel Core i7 @ 16GB RAM在SSD上的16GB RAM,而平均可行性。
流行的嵌入模型已預先轉換為用於免疫下載和用法的.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 | 英語Wikipedia 2017 16b | 300d | 300d | 300d |
| Facebook -fastText | 英語Wikipedia 2017 +子字16B | 300d | 300d | 300d |
| Facebook -fastText | 普通爬網600B | 300d | 300d | 300d |
| AI2 -Allennlp Elmo | Elmo模型 | Elmo模型 | Elmo模型 | Elmo模型 |
| Google -Bert | 即將推出... | 即將推出... | 即將推出... | 即將推出... |
下面有指令將任何.bin , .txt , .vec , .hdf5文件轉換為.magnitude文件。
您可以創建一個像這樣的幅度對象:
from pymagnitude import *
vectors = Magnitude ( "/path/to/vectors.magnitude" )如果需要,為方便起見,您也可以直接打開.bin , .txt , .vec , .hdf5文件。但是,對於大型模型而言,這是效率較低且非常慢,因為它將將文件轉換為第一個運行中的.magnitude文件,轉換為臨時目錄。當您的計算機重新啟動時,臨時目錄不能保證會持續存在,並且不會持續。您應該在帶有python -m pymagnitude.converter文件中預先轉換.bin , .txt .vec .hdf5文件,通常用於更快的速度,但是此功能對於一次性用例很有用。直接用.bin , .txt , .vec , .hdf5實例化幅度對象時,將產生警告。您可以通過將supress_warnings參數設置為True來表示警告。
lazy_loading參數傳遞給具有-1值的構造函數,以禁用所有向量,並將所有向量預留到內存中(a la gensim), 0 (默認值)以啟用使用無基金會的內存中的LRU緩存或更大的lru X的懶惰加載,以啟用與lazy lrrrruse的內存更大的lrru cache,以啟用lrry X cache的零件。most_similar函數的數據,請eager設置為True 。lazy_loading設置為-1或將eager設置為True數據設置為真實數據,也將在後台線程中預處理到內存中,以防止構造函數阻止大型模型幾分鐘。如果您確實想要阻止行為,則可以將True於blocking參數。normalized False 。use_numpy設置為False 。case_insensitive Truepad_to_length參數,該參數將指定長度的所有示例,如果通過多個示例,則應填充所有示例。任何長於墊長度的示例都將被截斷。truncate_left參數設置為True ,以防指定時pad_to_length時間更長。pad_left參數設置為True 。placeholders參數,這將通過placeholders的數量增加每個向量的維度,從而將這些額外的尺寸零蓋。這很有用,如果您打算向向量添加其他值和信息,並希望為向量預先分配的空間以提高效率。language參數,如果您將幅度用於單詞矢量,則可以確保庫尊重該語言的詞乾和其他特定於語言的功能。默認en英語。如果您不為單詞向量使用幅度,則也可以None傳遞。dtype參數,該參數將使您控制按大小返回的numpy陣列的數據類型。devices參數,該參數將使您在基礎模型支持GPU使用時控制GPU的使用情況。該參數應該是整數列表, 1每個整數代表GPU設備編號( 0等)。temp_dir參數,該參數可讓您控制將使用臨時目錄幅度的位置。log參數,該參數將在進行緩慢操作時具有幅度的日誌進度到標準錯誤。您可以像這樣查詢文件中的向量總數:
len ( vectors )您可以像這樣查詢向量的尺寸:
vectors . dim您可以檢查鍵是否在詞彙中,也可以這樣:
"cat" in vectors您可以通過類似的所有鍵和向量迭代:
for key , vector in vectors :
...您可以查詢這樣的密鑰的向量:
vectors . query ( "cat" )您可以為n-the鍵和向量索引這樣的索引:
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您可以查詢兩個或多個鍵的距離:
vectors . distance ( "cat" , "dog" )
vectors . distance ( "cat" , [ "dog" , "tiger" ])您可以查詢兩個或多個鍵的相似性:
vectors . similarity ( "cat" , "dog" )
vectors . similarity ( "cat" , [ "dog" , "tiger" ])您可以在給定鍵的鍵列表中查詢最相似的鍵:
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 and 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中訪問模型中的所有基礎向量len(vectors) x vectors.emb_dim
vectors . get_vectors_mmap ()您可以清理所有關聯的資源,打開的文件和數據庫連接,例如:
vectors . close ()對於單詞矢量表示,處理量量的鍵鍵對於處理而不是在訓練有素的模型中,處理錯誤和錯別字的新單詞很重要,並使對矢量表示一般的模型通常更健壯。
通過分配隨機矢量值來處理量不計鍵的鍵。但是,隨機性是確定性的。因此,如果遇到了兩次相同的唱片內鍵,則將分配相同的隨機矢量值,以便能夠在這些磁盤外鍵上訓練。此外,如果兩個磁盤外鍵共享相似的字符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-gram,因此可以在某種程度上複製效果(但不是完美地複制)在未經Word2vec和word2vec和glove的字符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)您只需將更多的參數傳遞給構造函數即可加入兩個以上的向量模型。
您可以自動從可能具有的其他功能中創建向量,例如語音依賴性信息的一部分,或使用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對像以減少哈希碰撞的機會,將自動分配多少維度幅度。 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鑑於此輸出,機器學習模型現在可以訪問語音信息的一部分和語法依賴性信息,而不是僅僅是單詞向量信息。在這種情況下,此附加信息可以使神經網絡更強,以獲得語義信息,並減少訓練數據的需求。
大小使快速構建和迭代需要使用矢量表示的模型,通過處理許多預處理代碼將文本(或鍵)數據集轉換為向量來使用矢量表示。此外,它可以使這些模型更加強大,以使其範圍內的單詞和拼寫錯誤。
在下面的一些流行的機器學習庫中,使用幅度使用大小的尺寸來為ATIS(航空旅行信息系統)數據集建立意圖分類模型(Train/Test)。
您可以在此Google合同的Python筆記本上訪問與Keras(支持Tensorflow,Tensorflow,Tensorflow,Tensorflow,Teneano,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參數下載模型的域。
您可以使用批處理創建用於X和y數據的batchify生成器,例如:
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單熱數組,例如:
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.]])您可以從一個速度的numpy陣列轉換回具有from_categorical的類整數的1D numpy數組,例如:
y_c = [[ 0. , 1. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 1. ]]
MagnitudeUtils . from_categorical ( y_c )
# Returns:
# array([1., 5.]) 庫是線程安全的(它使用與每個線程的基礎存儲的不同連接),僅讀取,並且從未寫入文件。由於使用光內存的使用情況,您還可以在多個過程(或使用multiprocessing )中運行具有不同地址空間的多個過程,而無需在其他庫中復制數據,而無需創建多過程共享變量,因為數據是越野讀取的數據,並且每個進程都保留了自己的LRU內存cache。對於較重的功能,像most_similar一樣,創建了共享內存映射的文件來共享進程之間的內存。
幅度軟件包使用.magnitude文件格式而不是.bin , .txt , .vec或.hdf5 ,例如Word2Vec,Glove,FastText和Elmo(例如Word2Vec,glove,fastText和elmo)。包含一個命令行實用程序,用於將Word2Vec,Glove,FastText和Elmo文件轉換為幅度文件。
您可以像這樣轉換:
python -m pymagnitude.converter -i < PATH TO FILE TO BE CONVERTED > -o < OUTPUT PATH FOR MAGNITUDE FILE >輸入格式將自動由輸入文件的擴展名 /內容確定。您只需要對模型執行一次轉換。轉換後,幅度文件格式是靜態的,不會對其進行修改或編寫以使並發讀取訪問安全。
pymagnitude.converter的標誌在下面指定:
-h標誌以尋求幫助並列出所有標誌。-p <PRECISION>標誌來指定要保留的小數精度(選擇較低的數字將創建較小的文件)。實際的基礎值是作為整數而不是浮子存儲的,因此對於較小的模型足跡,這本質上是量化的。-a標誌將大約最近的鄰居索引添加到文件(增加大小),該標誌將啟用most_similar_approx函數。當與-a標誌結合使用時, -t <TREES>標誌控制著大約鄰居鄰居索引中的樹數(較高更準確)(如果未提供,則將自動確定樹的數量)。-s標誌傳遞給文件中添加子詞信息(這將使文件較小)禁用,但是禁用高級唱機量大鍵鍵支持。-v標誌以及通往另一個級別文件的路徑傳遞,您想從中獲取詞彙。可選地,您可以通過傳遞輸入文件夾和輸出文件夾而不是輸入文件和輸出文件來轉換許多文件。輸入文件夾中的所有.txt , .bin , .vec , .hdf5文件將轉換為輸出文件夾中的.magnitude文件。在大量轉換操作之前,必須存在輸出文件夾。
您可以指示從Mater的遠程存儲庫而不是本地文件路徑中下載並打開模型。該文件將在第一次運行中自動下載到~/.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 。
大小模型通常是大型文件(多個GB),即使.magnitude格式使使用向量很快,但仍佔用了許多磁盤空間。大小可以選擇通過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 downloaded您可以在Google Colagoratory Python筆記本中進行演示。
如果您的計算環境是資源約束(低RAM和低磁盤空間),則此功能非常有用,您想在不下載和設置大型模型文件的情況下快速嘗試矢量,或者您正在訓練小型型號。儘管數據正在流傳輸,但雖然添加了一些網絡延遲,但幅度仍將使用lazy_loading constructor參數指定的內存中緩存。由於語言通常具有zipf-ian分佈,因此在少量次數後,網絡延遲在高速緩存後不應該是問題。
他們將使用HTTP範圍請求標頭直接從靜態HTTP Web服務器上查詢它們。但是,所有級別的方法都支持流媒體,但是, most_similar和most_similar_approx可能會很慢,因為它們尚未針對流媒體進行優化。您可以看到此流媒體模式在基準測試中的當前表現如何,但是,隨著我們將來對其進行優化,它將變得更快!
目前尚無其他文檔。如果您需要有關方法的參數或希望查看所有支持的功能的更多信息,請直接查看源文件(已予以評論)。
當前,我們僅在此頁面上提供英語單詞矢量模型,該模型預先轉換為.magnitude格式。但是,您仍然可以將大小與其他語言的單詞向量一起使用。 Facebook已經培訓了許多不同語言的FastText載體。您可以使用所需的任何語言的.vec文件,然後使用轉換器將其轉換為.magnitude 。
當前,讀取幅度文件僅在Python中支持,因為它已成為機器學習的事實上語言。對於大多數用例,這足夠了。將文件格式擴展到其他語言並不困難,因為SQLITE具有本機C實現,並且在大多數語言中具有綁定。閱讀此存儲庫的源代碼時,文件格式本身和閱讀和搜索的協議也相當簡單。
當前,自然語言處理是最受歡迎的域,它使用預訓練的矢量嵌入模型作為單詞矢量表示。但是,還有其他諸如計算機視覺的領域已經開始使用預訓練的矢量嵌入模型(例如Deep1b)進行圖像表示。該庫打算將不可知論留在各個域中,而是提供一個對所有域都有用的通用密鑰向量存儲和接口。
該項目的主要存儲庫可以在GitLab上找到。 GitHub存儲庫只是一面鏡子。 Gitlab上歡迎進行更多測試,更好的測試,更好的錯誤檢查,錯誤修復,改進性能或文檔或添加其他功能 /功能。
您可以通過[email protected]與我們聯繫。
most_similar_approx優化用於流媒體most_similar查找的限制。.bin格式most_similar_approx提供動力。感謝作家埃里克·伯恩哈德森(Erik Bernhardsson)的作者,幫助您介紹了大小與煩惱之間的一些集成細節。 如果您想在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-LLD引用和其他引用。
該存儲庫是根據此處找到的許可證獲得許可的。
名詞項目的Johnnyzi撰寫的“地震”圖標。