功能包装的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撰写的“地震”图标。