Telegram Group & Telegram Channel
3. Библиотека simple_elmo

Итак, третий и последний на сегодня пост про наши обновления.

На RusVectōrēs уже представлено 4 контекстуализированных модели, обученных при помощи архитектуры ELMo. Напомним, что ELMo (как и последовавший за ней BERT) порождает разные эмбеддинги для одного и того же слова в зависимости от входного контекста. Это открывает широчайшие возможности для NLP и уже существенно улучшило результаты в типичных задачах обработки языка.

Хотя BERT сейчас на слуху больше, чем ELMo, напомним, что он далеко не всегда работает лучше (но всегда медленнее 😐) . Вот лишь пара примеров для русского: тут ELMo оказывается лучше BERT для word sense disambiguation, а вот тут они на одном уровне в детектировании семантических сдвигов. В общем, лидерство неоднозначно (честные сравнения часто затруднены разными обучающими корпусами: роль играет не только сама архитектура).

Как ни парадоксально, несмотря на широкую распространенность ELMo, до сих пор имелась некоторая проблема с простыми способами использовать эти модели. Для статических эмбеддингов типа word2vec и fastText все (и мы в том числе) используют Gensim и это удобно. Но Gensim не поддерживает ELMo и вообще глубокие нейронные сети.

Есть изначальный код ELMo на TensorFlow, который использовали Мэттью Петерс и компания в своей уже классической статье Deep Contextualized Word Representations, получившей best paper на NAACL2018. Но репозиторий находится в живописном беспорядке, код сложен для использования не-программистами и не обновлялся с того самого 2018 года. Это приводит к тому, что при запуске на современных версиях TensorFlow этот код изрыгает невероятное количество предупреждений и ошибок, а на TensorFlow 2 не работает вообще. Также есть модуль ELMo в библиотеке AllenNLP, но он тянет за собой весь, собственно, AllenNLP. Не все этого хотят.

В связи с этим, мы решили сделать собственную библиотеку. Она называется simple_elmo, и вы можете установить её прямо сейчас простым pip install simple_elmo.

Строго говоря, это даже не библиотека, а обновленный изначальный код ELMo, завернутый в удобный питоновский пакет. Нашей целью было сделать работу с моделями (в первую очередь, получение самих контекстуализированных эмбеддингов для слов) максимально простой и понятной.

Что мы изменили в оригинальном коде ⚡️:
1) адаптировали его под современные версии TensorFlow и заставили его работать в том числе в TensorFlow 2
2) добавили лёгкую и прозрачную работу со сжатыми данными (вряд ли вы хотите хранить корпус на 10 миллиардов слов в несжатом виде)
3) сделали удобные методы для загрузки моделей с диска (в том числе прямо из zip-архивов с RusVectōrēs) и извлечения контекстуализированных векторов из входного текста
4) завернули всё это в pypi-пакет.

Текущая версия simple_elmo 0.6.0, не забывайте периодически обновляться: мы ведём активную разработку. У вас должен быть установлен TensorFlow версии не ниже 1.14. Для работы с большими объёмами текста настоятельно рекомендуется GPU, но для простых экспериментов всё должно без особых задержек работать и на CPU.

Все инструкции по использованию есть на сайте simple_elmo, но вот совсем краткий сниппет, чтобы показать, насколько всё просто. Например, вы скачали модель ruwikiruscorpora_tokens_elmo_1024_2019 - это файл под названием 195.zip (можно распаковать его, тогда загрузка будет происходить существенно быстрее, а можно и не распаковывать). Запускаем python:
In [1]: from simple_elmo import ElmoModel
In [2]: model = ElmoModel()
In [3]: model.load("195.zip")
Out[3]:
"The model is now loaded."

Модель загружена и готова принимать на вход тексты. Давайте скормим ей три предложения (каждое в виде списка слов).

продолжение...



tg-me.com/rusvectores/62
Create:
Last Update:

3. Библиотека simple_elmo

Итак, третий и последний на сегодня пост про наши обновления.

На RusVectōrēs уже представлено 4 контекстуализированных модели, обученных при помощи архитектуры ELMo. Напомним, что ELMo (как и последовавший за ней BERT) порождает разные эмбеддинги для одного и того же слова в зависимости от входного контекста. Это открывает широчайшие возможности для NLP и уже существенно улучшило результаты в типичных задачах обработки языка.

Хотя BERT сейчас на слуху больше, чем ELMo, напомним, что он далеко не всегда работает лучше (но всегда медленнее 😐) . Вот лишь пара примеров для русского: тут ELMo оказывается лучше BERT для word sense disambiguation, а вот тут они на одном уровне в детектировании семантических сдвигов. В общем, лидерство неоднозначно (честные сравнения часто затруднены разными обучающими корпусами: роль играет не только сама архитектура).

Как ни парадоксально, несмотря на широкую распространенность ELMo, до сих пор имелась некоторая проблема с простыми способами использовать эти модели. Для статических эмбеддингов типа word2vec и fastText все (и мы в том числе) используют Gensim и это удобно. Но Gensim не поддерживает ELMo и вообще глубокие нейронные сети.

Есть изначальный код ELMo на TensorFlow, который использовали Мэттью Петерс и компания в своей уже классической статье Deep Contextualized Word Representations, получившей best paper на NAACL2018. Но репозиторий находится в живописном беспорядке, код сложен для использования не-программистами и не обновлялся с того самого 2018 года. Это приводит к тому, что при запуске на современных версиях TensorFlow этот код изрыгает невероятное количество предупреждений и ошибок, а на TensorFlow 2 не работает вообще. Также есть модуль ELMo в библиотеке AllenNLP, но он тянет за собой весь, собственно, AllenNLP. Не все этого хотят.

В связи с этим, мы решили сделать собственную библиотеку. Она называется simple_elmo, и вы можете установить её прямо сейчас простым pip install simple_elmo.

Строго говоря, это даже не библиотека, а обновленный изначальный код ELMo, завернутый в удобный питоновский пакет. Нашей целью было сделать работу с моделями (в первую очередь, получение самих контекстуализированных эмбеддингов для слов) максимально простой и понятной.

Что мы изменили в оригинальном коде ⚡️:
1) адаптировали его под современные версии TensorFlow и заставили его работать в том числе в TensorFlow 2
2) добавили лёгкую и прозрачную работу со сжатыми данными (вряд ли вы хотите хранить корпус на 10 миллиардов слов в несжатом виде)
3) сделали удобные методы для загрузки моделей с диска (в том числе прямо из zip-архивов с RusVectōrēs) и извлечения контекстуализированных векторов из входного текста
4) завернули всё это в pypi-пакет.

Текущая версия simple_elmo 0.6.0, не забывайте периодически обновляться: мы ведём активную разработку. У вас должен быть установлен TensorFlow версии не ниже 1.14. Для работы с большими объёмами текста настоятельно рекомендуется GPU, но для простых экспериментов всё должно без особых задержек работать и на CPU.

Все инструкции по использованию есть на сайте simple_elmo, но вот совсем краткий сниппет, чтобы показать, насколько всё просто. Например, вы скачали модель ruwikiruscorpora_tokens_elmo_1024_2019 - это файл под названием 195.zip (можно распаковать его, тогда загрузка будет происходить существенно быстрее, а можно и не распаковывать). Запускаем python:
In [1]: from simple_elmo import ElmoModel
In [2]: model = ElmoModel()
In [3]: model.load("195.zip")
Out[3]:
"The model is now loaded."

Модель загружена и готова принимать на вход тексты. Давайте скормим ей три предложения (каждое в виде списка слов).

продолжение...

BY RusVectōrēs




Share with your friend now:
tg-me.com/rusvectores/62

View MORE
Open in Telegram


RusVectōrēs Telegram | DID YOU KNOW?

Date: |

RusVectōrēs from tw


Telegram RusVectōrēs
FROM USA