Telegram Web Link
1 сентября мы напоминаем о сайд-проектах, также поддерживаемых командой RusVectōrēs:
RusNLP - это поисковик по статьям, опубликованным на российских конференциях по компьютерной лингвистике: "Диалог", AIST, AINL.

Мы обкачали все публикации на этих конференциях, начиная с 2001 года, и тщательно разметили статьи по авторам и их аффилиациям.

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

Он назван в честь покемона Шифтри (англ. shift - «сдвиг»), внешне похожего на японских тэнгу. Мы используем диахронические дистрибутивные модели, обученные на большом корпусе русскоязычных новостных текстов, опубликованных в период с 2010 по 2020 год.
Также мы планируем отметить начало осени существенным пополнением парка дистрибутивных моделей на основном сайте RusVectōrēs, следите за новостями!
​​Обучаем Word2vec: практикум по созданию векторных моделей языка
#knowhow

Как использовать в своей повседневной работе векторные семантические модели и библиотеку Word2Vec? Это несложно: понадобится немного кода на Python и готовые векторные модели — например, с сайта RusVectores.

Word2vec — библиотека для получения векторных представлений слов на основе их совместной встречаемости в текстах. Системный Блокъ уже писал ранее о том, как работают эти модели, и вы можете освежить в памяти механизмы работы Word2vec, прочитав нашу статью.

Сейчас мы займемся более практичными и приземленными вещами: научимся использовать Word2vec в своей повседневной работе. Мы будем использовать реализацию Word2vec в библиотеке Gensim для языка программирования Python.

Что мы научимся делать

• В первой части мы научимся предобрабатывать текстовые файлы и самостоятельно тренировать векторную модель на своих данных.

• Во второй части мы разберёмся, как загружать уже готовые векторные модели и работать с ними. Например, мы научимся выполнять простые операции над векторами слов, такие как «найти слово с наиболее близким вектором» или «вычислить коэффициент близости между двумя векторами слов».

• Также мы рассмотрим более сложные операции над векторами, например, «найти семантические аналоги» или «найти лишний вектор в группе слов».

Для прохождения тьюториала мы рекомендуем использовать Python3. Работоспособность кода для Python2 не гарантируется. Код из этого тьюториала также доступен в формате jupyter-тетрадки.

https://sysblok.ru/knowhow/obuchaem-word2vec-praktikum-po-sozdaniju-vektornyh-modelej-jazyka/

Елизавета Кузьменко
Forwarded from Irina Nikishina
Дорогие участники AIST-2020!

На сайте aistconf.org открыта регистрация. Участие в конференции бесплатное.

Также на сайте доступна предварительная программа: https://aistconf.org/program/program/

Ждем всех 15-16 октября онлайн!
1. Модели на GeoWAC

Это модели с идентификаторами geowac_lemmas_none_fasttextskipgram_300_5_2020 и geowac_tokens_none_fasttextskipgram_300_5_2020. В них много нового.

Во-первых, они обучены на корпусе GeoWAC, который мы до этого не использовали. На сайте GeoWAC есть больше подробностей, но в основе своей это дампы CommonCrawl для конкретного языка ( в данном случае, русского). Но не просто дампы, а хорошо почищенные и географически сбалансированные.

Сбалансированность тут означает, что создатели корпуса попытались не просто взять случайные страницы на русском из Интернета, а сэмплировать их географически по принципу "чем больше в этой стране процент русскоговорящего населения, тем больше русских текстов из этой страны должно быть в нашем корпусе". Соответственно, в итоге в русском GeoWAC примерно в равной степени представлены русскоязычные тексты из России, Казахстана, Украины и Беларуси. Дальше со всё уменьшающейся долей идут Киргизия, Латвия, Эстония, Узбекистан и так далее. Общий размер корпуса - около 2.1 миллиарда слов.

Самое главное для нас - это относительно современный русский язык в таком виде, в каком он представлен в Сети. В корпусах вроде НКРЯ или Тайги доминируют художественные тексты, и это делает их более "классическими". Есть веб-корпус Araneum, но ему всё-таки уже более 4 лет, и он постепенно устаревает. GeoWAC же совсем свежий (хоть и поменьше Araneum по объёму). Это сразу видно по выдаче моделей, обученных на GeoWAC (смотрите картинку ниже). Это единственная модель из представленных сейчас в веб-интерфейсе RusVectōrēs, которая "видит" семантическую неоднозначность слова "мышь": это и грызун, и компьютерный манипулятор. Модели, обученные на НКРЯ, Тайге и Аранеуме, "не в курсе" о втором значении.

Мы предполагаем, что модели на GeoWAC будут более полезны в задачах, где требуется обработка именно современного русского языка. Впрочем, на наших стандартных тестах SimLex965 и Google Analogies они тоже показывают неплохие результаты.

Во-вторых, сами модели тоже необычны. Их две: первая обучена на леммах, вторая на сырых токенах. Это значит, что во второй модели есть предобученные вектора для словоизменительных форм ("столов", "мыши"). То есть, вы можете не лемматизировать ваши тексты перед извлечением векторов. Конечно, модели обучены при помощи fastText, и, строго говоря, для них вообще нет "незнакомых слов". Однако, вектора для слов, которые модель всё же видела в процессе обучения, почти всегда будут лучше, чем вектора, сгенерированные на основе символьных н-грамм. Это первые не-лемматизированные "статические" эмбеддинги на RusVectōrēs.

Заметим, что лемматизированная версия всё же показывает лучшие результаты на тестовых сетах. Но если вам важнее минимизировать предобработку, модель на токенах к вашим услугам.
Кроме того, из обучающих корпусов для обеих моделей не удалялись функциональные части речи (только пунктуация). Если для вашей задачи важны предлоги и союзы - в моделях имеются вектора для них.

Разумеется, обе модели можно скачать, а с лемматизированной, вдобавок - поэкспериментировать прямо на сайте RusVectōrēs.

В следующем посте мы расскажем о новой модели ELMo.
Наконец-то мы понимаем, что "мышь" - это не только грызун.
Новая модель geowac_lemmas_none_fasttextskipgram_300_5_2020
2. Новая ELMo-модель на Araneum

Продолжаем рассказ об обновлениях. Мы выложили контекстуализированные эмбеддинги, обученные при помощи модели ELMo на корпусе Araneum Russicum Maximum: araneum_lemmas_elmo_2048_2020.

Зачем эта модель? Во-первых, нас неоднократно просили "сделать ELMo на Аранеуме". Во-вторых, это действительно самый большой корпус русского языка, имеющийся в нашем распоряжении, и хорошо иметь контекстуализированную модель, использующую этот прекрасный ресурс. Корпус состоит из лемм, функциональные части речи и пунктуация были удалены (вообще для контекстуализированных моделей их лучше бы не удалять, но данный корпус доступен нам только в таком виде).

Как видно из результатов оценки этой модели на задачах Word Sense Disambiguation (датасет RUSSE'18) и Paraphrase Detection (датасет ParaPhraser), особых чудес не произошло. В задаче WSD модель на Аранеуме уступает модели на Тайге, а в задаче определения парафраза - модели на НКРЯ и Википедии. Тем не менее, попробуйте эту модель на ваших задачах: вполне возможно, что для она окажется лучше прочих.

Как всегда, модель распространяется в виде zip-архива. Внутри него (помимо стандартных метаданных) вы найдёте саму модель (model.hdf5), её параметры (options.json), использованный при обучении словарь (vocab.txt) и чекпойнты TensorFlow по состоянию на конец обучения.

Мы по-прежнему планируем интегрировать поддержку контестуализированных моделей в веб-интерфейс RusVectōrēs (по аналогии со статическими моделями). Если у вас есть идеи и предложения по этому поводу, или если вы хотите посотрудничать с нами в реализации этого - пишите в личку или оставьте комментарий прямо тут под постом 👇
В следующем посте (сегодня чуть позже) мы расскажем о simple_elmo - простой питоновской библиотеке для работы с моделями ELMo.
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."

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

продолжение...
начало здесь

In [4]: texts = [['мама', 'мыла', 'раму'], ['лук', 'это', 'овощ'], ['тараканов', 'обычно', 'травят', 'дустом']]
In [5]: vectors = model.get_elmo_vectors(texts)
INFO : Warming up ELMo on 3 sentences...
INFO : Warming up finished.
INFO : Texts in the current batch: 3
In [6]: vectors.shape
Out[6]: (3, 4, 1024)

Как видим, метод get_elmo_vectors() выдал нам нам трехмёрный тензор размерности 3 на 4 на 1024. Легко догадаться, что 3 - это число наших предложений, 4 - максимальное количество слов в предложении, а 1024 - это размерность ELMo-вектора для каждого слова в данной модели. Например, вот так вы можете получить вектор для слова "тараканов" (третье предложение, первое слово):

In [11]: vectors[2,0,:]
Out[11]:
array([ 0.86000252, 0.90977991, 0.03276846, ..., 0.4229666 , -0.31060731, -0.09132621])

Мы также предоставляем метод get_elmo_vector_average(), который генерирует средний вектор для каждого предложения (если вас интересуют они, а не отдельные слова):
In [13]: sentence_vectors = model.get_elmo_vector_average(texts)
2020-10-23 21:46:45,807 : INFO : Warming up ELMo on 3 sentences...
2020-10-23 21:46:46,442 : INFO : Warming up finished.
2020-10-23 21:46:46,443 : INFO : Sentences in this batch: 3
In [14]: sentence_vectors.shape
Out[14]: (3, 1024)

Ну а дальше делайте с этими векторами всё, что вам заблагорассудится. Для быстрого старта мы подготовили три скрипта с примерами использования simple_elmo:

1) Генерация векторов слов для корпуса из файла на диске
2) Оценка качества модели на задаче классификации текстов
3) Оценка качества модели на задаче word sense disambiguation

Последние два скрипта позволят вам при желании воспроизвести результаты наших моделей на датасетах RUSSE'18 и ParaPhraser.

Вот и всё на сегодня. Если у вас есть вопросы - пишите в комментарии 👇 или в issues в репозитории simple_elmo.
Многие из наших лучших моделей обучены на Национальном Корпусе Русского Языка (НКРЯ). К сожалению, много лет он оставался недоступным для скачивания: можно было только искать примеры через веб-интерфейс.
Мы долго вели интенсивные переговоры с мэйнтейнерами НКРЯ, и теперь, наконец-то, они привели к результату:

Практически все тексты НКРЯ теперь выложены для свободного скачивания (без разметки). Мы надеемся, что вскоре ссылки появятся и на официальном сайте НКРЯ, но сейчас их можно найти здесь:

https://rusvectores.org/static/corpora/

Мы благодарны коллегам из НКРЯ за сотрудничество и надеемся, что частичное открытие корпуса будет полезным для всех NLP-исследователей, работающих с русским языком.
Скачивание моделей с RusVectōrēs временно приоставлено из-за переезда сервера.
В ближайшие дни переезд закончится, и всё вернётся на свои места.
Скачивание моделей восстановлено (на самом деле уже неделю назад, но мы забыли вовремя сообщить об этом :))
А также поздравляем всех наших пользователей с Новым Годом! Ждите новых фич и моделей на RusVectōrēs в 2021!
На RusVectōrēs добавлена поддержка контекстуализированных моделей! Теперь вы можете проводить лингвистические и не только эксперименты не только со статическими моделями, но и с моделями ELMo. Также мы надеемся, что новый сервис пригодится в преподавании NLP-дисциплин.

Почему именно ELMo на рекуррентных нейронных сетях? Качество моделей ELMo зачастую наравне с Трансформерами наподобие BERT, однако в то же время они значительно быстрее, а значит, вам будет удобнее ими пользоваться!

Как устроен новый сервис: вы можете ввести фразу или предложение (оптимально от 5 до 15 слов). Для каждого слова из вашего запроса мы генерируем контекстуализированные вектора при помощи модели ruwikiruscorpora_tokens_elmo_1024_2019 (модель на основе данных НКРЯ и русской Википедии). Для каждого полученного вектора мы ищем наиболее похожие слова среди 10 тысяч самых частотных слов в словаре этой же модели. Резонный вопрос: откуда берутся "общие" бесконтекстные вектора слов? Их мы генерируем путём усреднения контекстных векторов каждого вхождения этих слов в обучающем корпусе модели.

В результате вы получаете лексические подстановки - слова, которые можно было подставить на место соответствующего слова в предложении. Подстановки изменяются в зависимости от контекста, в котором находится слово. Это вы можете проверить экспериментально при помощи нашего сервиса!

Слова в запросе и сами подстановки выделены разным цветом в зависимости от их частотности в исходном корпусе, точно так же как и в остальных сервисах RusVectōrēs: красные слова низкочастотные, голубые - со средней частотностью, зелёные - высокочастотные. Также с помощью размера шрифта мы отображаем косинусную близость между вектором слова из запроса и предсказанной подстановкой. Чем меньше шрифт, тем менее модель уверена в этой подстановке.

Небольшое демо-видео, показывающее работу нашего сервиса, можно найти тут (на английском языке).
Выглядит это примерно так
Поскольку RusVectōrēs тоже в каком-то смысле сервис популяризации науки, то мы поддерживаем эту декларацию:

Декларация ученых и популяризаторов науки

В настоящее время на рассмотрении в Государственной Думе находится Законопроект № 1057895-7 «О внесении изменений в Федеральный закон «Об образовании в Российской Федерации»». Этот документ создает правовую базу для лицензирования и иных способов регламентации любой просветительской деятельности. Налицо попытка государства взять под контроль свободу распространения знаний. У нас нет сомнений в том, что принятие Законопроекта № 1057895-7 крайне негативно скажется на развитии науки, культуры и технологий в нашей стране.

Знание – одна из базовых ценностей нашей цивилизации. Для нас – ученых, журналистов, преподавателей, представителей других профессий – приумножение и распространение знания стало делом жизни. Просветительство и популяризация науки – наш профессиональный и гражданский долг, для выполнения которого нам не требуется чье-либо разрешение. Сама постановка вопроса о лицензировании или иной регламентации просветительской деятельности со стороны государственных структур глубоко оскорбительна для нас.

Руководствуясь ст. 29 Конституции РФ, гарантирующей нам свободу слова и отсутствие цензуры, мы, нижеподписавшиеся, заявляем, что в случае принятия Законопроекта № 1057895-7:

- Мы продолжим заниматься просветительской деятельностью, не признавая правомочности тех ограничительных мер, которые могут быть введены на основе этого закона.
- Мы не будем обращаться за каким-либо видом лицензии, если таковая будет введена законом или подзаконными актами.
- Мы не будем предоставлять предварительные тексты выступлений или презентаций для согласования с государственными органами.

Мы считаем глубоко порочной саму концепцию Законопроекта № 1057895-7, которая не может быть улучшена отдельными поправками. Мы требуем немедленного отзыва этого позорного законопроекта из Государственной Думы.
Forwarded from RuShiftEval
Соревнование RuShiftEval проходит в 2021 году для сравнения различных методов для определения семантических сдвигов в диахронических корпусах. В 2020 году с успехом прошли две аналогичные дорожки: SemEval Task 1 где использовались английские, немецкие, шведские и латинские корпуса и DIACR-Ita на материале итальянского языка.
RuShiftEval - это первое соревнование такого рода для русского.

В отличие от предыдущих дорожек, мы используем не два, а три временных периода, которые естественным образом вытекают из истории русского языка:

досоветский (1700-1916),
советский (1918-1991),
постсоветский (1992-2016).

Дорожка пройдет в рамках 27-й международной конференции "Диалог". Статьи с описанием решений будут опубликованы в трудах конференции.

Важные даты

20 января
- анонс соревнования, начало тренировочной фазы
1 февраля - публикация отладочного датасета, начало отладочной фазы
22 февраля - публикация тестового датасета, начало тестовой фазы
28 февраля - завершение тестовой фазы, закрытие загрузки ответов
1 марта - оглашение результатов соревнования
20 марта - срок подачи статей
2024/05/23 23:45:56
Back to Top
HTML Embed Code: