Функциональный пакет 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 ) для векторных встроений предназначен для более эффективного формата универсального вектора, который позволяет ленивый загрузка для более быстрых запуска в разработку, кэширование памяти LRU для производительности в производстве, множественные ключевые запросы, прямое подразделение для входных данных для нейролеровой сети, такого же, как и другие, такие как на кромке, такие как к поручению. Сформулированные ключи и объединение нескольких векторных моделей вместе. Он также предназначен для работы с большими векторными моделями, которые могут не вписаться в память.
Он использует SQLite, быструю, популярную встроенную базу данных, в качестве основного хранилища данных. Он использует индексы для быстрого поиска клавиш, а также использует отображение памяти, инструкции SIMD и пространственную индексацию для быстрого поиска сходства в векторном пространстве вне диска с хорошей производительностью памяти даже между несколькими процессами. Кроме того, карты памяти кэшируются между прогонами, поэтому даже после закрытия процесса улучшения скорости получают.
| Показатель | Величина свет | Величина среда | Величина тяжелая | Поток величины |
|---|---|---|---|---|
| Начальное время загрузки | 0,7210 | ━ 1 | ━ 1 | 7,7550 |
| Холодный единственный ключевой запрос | 0,0001 с | ━ 1 | ━ 1 | 1.6437S |
| Теплый единственный ключевой запрос (тот же ключ, что и холодный запрос) | 0,00004 с | ━ 1 | ━ 1 | 0,0004 с |
| Холодный многократный запрос (n = 25) | 0,0442 с | ━ 1 | ━ 1 | 1.7753S |
| Теплый несколько ключевых запросов (n = 25) (те же ключи, что и холодный запрос) | 0,00004 с | ━ 1 | ━ 1 | 0,0001 с |
Первый most_similar поисковый запрос(n = 10) (худший случай) | 247.05S | ━ 1 | ━ 1 | - |
Первый most_similar поисковый запрос(n = 10) (средний случай) (с постоянным кешем диска) | 1.8217S | ━ 1 | ━ 1 | - |
Последующее most_similar поиска(n = 10) (отличный ключ, чем первый запрос) | 0,2434 с | ━ 1 | ━ 1 | - |
Теплый most_similar(n = 10) (тот же ключ, что и первый запрос) | 0,00004 с | 0,00004 с | 0,00004 с | - |
First most_similar_approx Поисковый запрос(n = 10, усилие = 1,0) (худший случай) | N/a | N/a | 29,610S | - |
First most_similar_approx Поисковый запрос(n = 10, усилие = 1,0) (средний случай) (с постоянным кешем диска) | 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,21 ГБ | 5,29 ГБ | 10,74 ГБ | 0,00 ГБ |
| Использование памяти процесса (ОЗУ) | 18 КБ | ━ 1 | ━ 1 | 1,71 МБ |
| Использование памяти процесса (ОЗУ) после 100 ключевых запросов | 168 КБ | ━ 1 | ━ 1 | 1,91 МБ |
| Использование памяти процесса (ОЗУ) после 100 ключевых запросов + поиск сходства | 342KB 2 | ━ 1 | ━ 1 | |
| Проверки целостности и тесты | ✅ | ✅ | ✅ | ✅ |
Универсальный формат между Word2VEC ( .txt , .bin ), Glove ( .txt ), FastText ( .vec ) и Elmo ( .hdf5 ) с утилитой преобразователя | ✅ | ✅ | ✅ | ✅ |
| Простой, питонический интерфейс | ✅ | ✅ | ✅ | ✅ |
| Несколько зависимостей | ✅ | ✅ | ✅ | ✅ |
| Поддержка моделей большего, чем память | ✅ | ✅ | ✅ | ✅ |
| Ленивая загрузка, когда это возможно, для скорости и производительности | ✅ | ✅ | ✅ | ✅ |
Оптимизирован для threading и multiprocessing | ✅ | ✅ | ✅ | ✅ |
| Объем и многократный поиск с ключами с заполнением, усечением, заполнителем и поддержкой фигуризации | ✅ | ✅ | ✅ | ✅ |
| Объединение нескольких векторных моделей вместе | ✅ | ✅ | ✅ | ✅ |
| Основной поиск ключей от вокалу (Хешинг характеристик N-грамма) | ✅ | ✅ | ✅ | ✅ |
| Усовершенствованный поиск по-вокабулярный ключ при поддержке Morppellings (Характер N-Gram Hashing с аналогичными вокабуляционными клавишами) | ✅ | ✅ | ✅ | |
| Приблизительный самый похожий поиск с раздражением индекса | ✅ | ✅ | ||
| Встроенное обучение для новых моделей |
1: то же значение, что и предыдущий столбец
2: использует mmap для чтения с диска, поэтому ОС по -прежнему будет выделять страницы памяти, когда память доступна, но ее можно разделить между процессами и не управляется в каждом процессе для чрезвычайно больших файлов, что является победой производительности
*: Все критерии были выполнены в предварительно обученных Vero Word Vectors Google News ( GoogleNews-vectors-negative300.bin ) с MacBook Pro (Retina, 15-дюймовая, середина 2014 года) 2,2 ГГц четырехъядерной intel Core I7 @ 16 ГБ ОЗУ на SSD в среднем испытаниях, где можно.
Популярные модели встраивания были предварительно преобразованы в .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 (Lemmatized по пластичности) | 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 | Эльмо модели | Эльмо модели | Эльмо модели | Эльмо модели |
| 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 обычно для более высоких скоростей, но эта функция полезна для одноразовых вариантов использования. Предупреждение будет генерироваться при создании объекта величины непосредственно с .bin , .txt , .vec , .hdf5 . Вы можете подавить предупреждения, установив аргумент supress_warnings в конструкторе True .
lazy_loading в конструктор со значением -1 , чтобы отключить ленивый загрузка и предварительную загрузку всех векторов в память (A La Gensim), 0 (по умолчанию), чтобы включить ленивую загрузку с неограниченным в память LRU Cache, или в целом больше, чем Zero X чтобы включить Lazy-Lauding, что Lazy-Lrues, которое используется в LASES, что используется в X CACHES CACHERS, что используется.most_similar функций были предварительно загружены при инициализации, установите eager к True .lazy_loading установлен на -1 , или eager устанавливается на True Data, будут предварительно загружены в память в фоновом потоке, чтобы предотвратить блокирование конструктора в течение нескольких минут для больших моделей. Если вы действительно хотите блокировать поведение, вы можете передать True с blocking аргументом.normalized в False если вы хотите получить необработанные ненормализованные векторы вместо этого.use_numpy на False , если вы хотите получить списки Python.case_insensitive к True , если вы хотите выполнить нечувствительные поиски.pad_to_length , который будет указывать длину. Любые примеры, которые длиннее длины прокладки, будут усечены.truncate_left на True , если вы хотите, чтобы начало списка клавиш в каждом примере было усечено вместо конца, если он будет длиннее, чем pad_to_length при указании.pad_left на True , если хотите, чтобы наполнение отображалась в начале по сравнению с END (что является по умолчанию).placeholders , который увеличит размеры каждого вектора на сумму placeholders , нулевая эти дополнительные измерения. Это полезно, если вы планируете добавить другие значения и информацию в векторы и хотите, чтобы пространство для предварительного выделения в векторах для эффективности.language с языковым кодом ISO 639-1, который, если вы используете величину для векторов слов, обеспечит уважение библиотеки и другие функции, специфичные для языка для этого языка. По умолчанию en для английского. Вы также можете пройти None , если вы не используете величину для векторов слов.dtype , который позволит вам управлять типом данных массивов Numpy, возвращаемых по величине.devices , который позволит вам контролировать использование графических процессоров, когда базовые модели поддерживают использование графического процессора. Этот аргумент должен быть списком целых чисел, где каждое целое число представляет номер устройства GPU ( 0 , 1 и т. Д.).temp_dir , который позволит вам использовать местоположение временного величины каталога.log , который будет иметь прогресс журнала величины до стандартной ошибки, когда будут происходить медленные операции.Вы можете запросить общее количество векторов в файле так:
len ( vectors )Вы можете запросить размеры векторов, как SO:
vectors . dimВы можете проверить, есть ли ключ в словарном запасе, как SO:
"cat" in vectorsВы можете перевернуть все клавиши и векторы, как SO:
for key , vector in vectors :
...Вы можете запросить вектор ключа, как SO:
vectors . query ( "cat" )Вы можете индексировать для N-T-Th Key и Vector Like:
vectors [ 42 ]Вы можете запросить вектор нескольких клавиш, как SO:
vectors . query ([ "I" , "read" , "a" , "book" ])2D -массив (ключи от векторов) будет возвращен.
Вы можете запросить вектор нескольких примеров, таких как SO:
vectors . query ([[ "I" , "read" , "a" , "book" ], [ "I" , "read" , "a" , "magazine" ]]) 3D -массив (примеры от ключей от векторов) будет возвращен. Если pad_to_length не указан, а размер каждого примера неровный, они будут пролаплены до длины самого длинного примера.
Вы можете индексировать ключи и векторы нескольких индексов, таких как SO:
vectors [: 42 ] # slice notation
vectors [ 42 , 1337 , 2001 ] # tuple notationВы можете запросить расстояние от двух или нескольких клавиш, например:
vectors . distance ( "cat" , "dog" )
vectors . distance ( "cat" , [ "dog" , "tiger" ])Вы можете запросить сходство двух или нескольких клавиш, как SO:
vectors . similarity ( "cat" , "dog" )
vectors . similarity ( "cat" , [ "dog" , "tiger" ])Вы можете запросить самый похожий ключ из списка ключей к данному ключу, как SO:
vectors . most_similar_to_given ( "cat" , [ "dog" , "television" , "laptop" ]) # dogВы можете запросить, какой ключ не соответствует списку ключей с данным ключом, как SO:
vectors . doesnt_match ([ "breakfast" , "cereal" , "dinner" , "lunch" ]) # cerealВы можете запросить самые похожие (ближайшие соседи), такие как SO:
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] действительны.
Вы также можете запросить самые похожие ключи, дающие положительные и отрицательные примеры (которые, кстати, решают аналогии), как SO:
vectors . most_similar ( positive = [ "woman" , "king" ], negative = [ "man" ]) # queen vectors.most_similar_cosmul vectors.most_similar .
vectors . most_similar_cosmul ( positive = [ "woman" , "king" ], negative = [ "man" ]) # queenВы также можете запросить самые похожие ключи, используя приблизительный индекс ближайших соседей, который намного быстрее, но не гарантирует точного ответа:
vectors . most_similar_approx ( "cat" )
vectors . most_similar_approx ( positive = [ "woman" , "king" ], negative = [ "man" ]) Необязательно, вы можете передать аргумент effort со значениями между [0.0-1.0] к функции most_similar_approx , которая даст вам компромисс времени выполнения. Значение по умолчанию для effort составляет 1,0, что займет самые длинные, но даст наиболее точный результат.
Вы можете запросить все ключи ближе к ключу, чем другой ключ, похож на так:
vectors . closer_than ( "cat" , "rabbit" ) # ["dog", ...] Вы можете получить доступ ко всем базовым векторам в модели в большом массиве размера numpy.memmap ( len(vectors) x vectors.emb_dim ) как SO:
vectors . get_vectors_mmap ()Вы можете очистить все связанные ресурсы, открытые файлы и подключения к базе данных, как SO:
vectors . close ()Для представлений об слов, обработка ключей от вокаблеров важна для обработки новых слов, не в подготовленной модели, обработки неправильных и опечаток, а также для того, чтобы сделать модели, обученные на словах вектора, более надежными в целом.
Ключи от вокабуляции обрабатываются путем назначения им случайного вектора. Однако случайность детерминированная. Таким образом, если один и тот же ключ от вокабуляции встречается дважды, ему будет присваивается одно и то же случайное значение вектора для возможности обучения на этих ключах вне вокалу. Более того, если два ключи от вокабуляции имеют сходные символы N-граммы («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-граммы используются для создания этого эффекта для вне вокабуляционных клавиш. Вдохновение для этой функции было взято из обогащающих векторов слов Facebook AI с информацией о подвесках, но вместо того, чтобы использовать N-граммы N-граммы во время поезда, N-граммы используются при выводе, чтобы эффект может быть несколько воспроизведен (но не идеально воспроизведен) в более старых моделях, которые не были обучены характером N-граммами, такими как Word2Vec и Glove.
Необязательно, вы можете объединить векторы из нескольких моделей, чтобы подавать более сильную информацию в модель машинного обучения, как SO:
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])Magnitude будет использовать трюк с функцией хэширования внутри, чтобы напрямую использовать хэш значения функции для создания уникального вектора для этого значения функции.
Первым аргументом для 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Модель машинного обучения, учитывая этот вывод, теперь имеет доступ к частям информации о речевой и синтаксической зависимости, а не только что Word Vector Information. В этом случае эта дополнительная информация может дать нейронные сети более сильный сигнал для семантической информации и уменьшить потребность в учебных данных.
Величина позволяет очень легко быстро построить и итерацию на моделях, которые необходимо использовать векторные представления, заботясь о большом количестве кода предварительной обработки для преобразования набора данных текста (или ключей) в векторы. Более того, это может сделать эти модели более надежными к необычным словам и ошибкам.
Существует пример кода, доступный с использованием величины для создания модели классификации намерений для набора данных ATIS (Travel Information Systems) (Train/Test), используемый для чат -ботов или разговорных интерфейсов, в нескольких популярных библиотеках машинного обучения ниже.
Вы можете получить доступ к руководству для использования величины с керами (которые поддерживают Tensorflow, Theano, CNTK) на этой записной книжке Google Colaboratory Python.
Гид Pytorch скоро появится.
Скоро наступит гид TFFLEARN.
Вы можете использовать класс MagnitudeUtils для удобного доступа к функциям, которые могут быть полезны при создании моделей машинного обучения.
Вы можете импортировать величины, как SO:
from pymagnitude import MagnitudeUtilsВы можете скачать модель величины из удаленного источника, как SO:
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" Вы можете преобразовать категориальные данные с целыми классами в одноказкие массивы Numpy с 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 в 1D Numpy массив класса целых чисел с from_categorical , как так:
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. Для более тяжелых функций, как и most_similar создан файл, отображенный общей памятью, создается для обмена памятью между процессами.
В пакете величины используется формат файла .magnitude вместо .bin , .txt , .vec или .hdf5 , как и другие векторные модели, такие как Word2VEC, Glove, Fasttext и Elmo. Существует включенная утилита командной строки для преобразования файлов Word2VEC, перчатки, фаст-текста и 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 . Флаг -t <TREES> контролирует количество деревьев в приблизительном индексе соседей (выше более точное) при использовании в сочетании с флагом -a (если не поставляется, количество деревьев определяется автоматически).-s , чтобы отключить добавление информации подножки в файл (который сделает файл меньше), но отключить расширенную поддержку из вокабережного ключа.-v вместе с путем к другому файлу величины, на котором вы хотели бы взять словарный запас. Необязательно, вы можете преобразовать множество файлов, передавая папку ввода и выводимость вместо входного файла и выходного файла. .bin .txt .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 делает его быстро использовать векторы. Величина имеет возможность транслировать эти большие файлы через 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 Colaboratory Python.
Эта функция чрезвычайно полезна, если ваша вычислительная среда ограничена ресурсами (с низким ОЗУ и низким дисковым пространством), вы хотите быстро экспериментировать с векторами без загрузки и настройки больших модельных файлов, или вы тренируете небольшую модель. Несмотря на то, что есть некоторая добавленная задержка сети с момента трансляции данных, величина все равно будет использовать кэш в памяти, как указано в параметре конструктора lazy_loading . Поскольку языки, как правило, имеют распределение Zipf-Ian, задержка сети в значительной степени не должна быть проблемой после того, как кэш нагревается после того, как его запросили небольшое количество раз.
Они будут запрошены непосредственно с статического веб -сервера HTTP с использованием заголовков запросов HTTP. Методы всех величин поддерживают потоковую передачу, однако, most_similar и most_similar_approx может быть медленным, поскольку они еще не оптимизированы для потоковой передачи. Вы можете увидеть, как этот режим потоковой передачи работает в настоящее время на критериях, однако он будет становиться быстрее, поскольку мы оптимизируем его в будущем!
Другая документация недоступна в настоящее время. Смотрите исходный файл напрямую (он хорошо прокомментирован), если вам нужна дополнительная информация о аргументах метода или вы хотите увидеть все поддерживаемые функции.
В настоящее время мы предоставляем только английские модели векторов слов на этой странице, предварительно преодоленной в .magnitude . Вы можете, однако, по -прежнему использовать величину с векторами слов других языков. Facebook обучил свои векторы быстротых на многих разных языках. Вы можете спустить файл .vec для любого языка, который вы хотите, а затем преобразовать его в .magnitude
В настоящее время чтение Files Files поддерживается только в Python, поскольку оно стало де-факто для машинного обучения. Этого достаточно для большинства вариантов использования. Расширение формата файла на другие языки не должно быть трудным, поскольку SQLite имеет собственную реализацию C и имеет привязки на большинстве языков. Сам формат файла и протокол для чтения и поиска также довольно просты при чтении исходного кода этого репозитория.
В настоящее время обработка естественного языка является наиболее популярной доменом, которая использует предварительно обученные модели векторного встраивания для представлений векторов слов. Однако существуют другие домены, такие как компьютерное зрение, которые начали использовать предварительно обученные модели векторного встраивания, такие как Deep1b для представления изображения. Эта библиотека намеревается оставаться агностикой для различных доменов и вместо этого предоставляет общий магазин ключевых векторов и интерфейс, который полезен для всех доменов.
Основной репозиторий для этого проекта можно найти на Gitlab. Репозиторий GitHub - это всего лишь зеркало. Получите запросы на дополнительные тесты, лучшую проверку ошибок, исправления ошибок, улучшение производительности или документацию или добавление дополнительных использования / функциональных возможностей приветствуется на Gitlab.
Вы можете связаться с нами по адресу [email protected].
most_similar_approx оптимизирован для потоковой передачиmost_similar ..bin Format most_similar_approx по величине, используя деревья случайной проекции и иерархические 2-массы. Спасибо автору Эрику Бернхардсу за помощь в некоторых деталях интеграции между величиной и раздражением. Если вы хотите процитировать нашу статью на 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 и другие цитаты.
Этот репозиторий лицензирован по лицензии, найденной здесь.
«Сейсмическая» икона Джоннизи из существительного проекта.