В последнее время для оценки семантического сходства широкое распространение получили методы дистрибутивной семантики. Эти подходы хорошо показали себя в ряде практических задач, но они имеют ряд жёстких ограничений. Так, например, языковые контексты оказываются сильно схожими для эмоционально полярных слов. Следовательно, антонимы с точки зрения word2vec часто оказываются близкими словами. Также word2vec принципиально симметричен, ведь за основу берётся совстречаемость слов в тексте, а популярная мера сходства между векторами — косинусное расстояние — также не зависит от порядка операндов.

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

Почему дистрибутивная семантика «не видит» часть картины мира?


Письменный язык — это очень сильно сжатая информация. Чтобы распаковать её и понять суть мы подключаем дополнительные ресурсы — здравый смысл, наши знания о мире, культурный контекст. Если часть такой информации вам недоступна, например вы попали в новую компанию или погружаетесь в новую предметную область, вы будете вынуждены восполнять пробелы в знаниях, задавая вопросы или изучая дополнительные источники.

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

Что такое ассоциации?


Все в детстве играли в игру, когда один человек называет слово, сосед предлагает свою ассоциацию. Потом придумается ассоциация к ассоциации и т.д. Часто интересно не только услышать ассоциацию другого человека, но и понять ход его мыслей, как он пришёл к тому или иному слову. Это позволяет немного заглянуть в то, как мы мыслим.

Можно посмотреть на это и по-другому. Живые люди обладают наиболее актуальной и несжатой информацией о мире и о языке. С этим связана наша изумительная способность разрешать языковые неоднозначности. Любая модель языка будет срезом этой информации с неизбежными потерями. Дистрибутивные модели дают один срез, ассоциации позволяют взглянуть под другим углом. Возможно путь к чуть более объёмной языковой картинке лежит в использовании обеих моделей.

TL;DR или дайте ссылку на датасет


Собственно датасет, которым мы хотим поделиться с сообществом, представляет собой базу таких ассоциаций. Ниже мы расскажем об особенностях данных, но если вам не терпится — смело листайте вниз и переходите на Гитхаб, чтобы скачать базу.

Несимметричность матрицы ассоциаций


Ещё одной досадной особенностью дистрибутивных моделей является их симметричность. Т.е. СТУЛ и МЕБЕЛЬ окажутся похожими, но как понять отношение слов друг к другу? Немного помогает кластеризация поверх векторов, но в исходной модели этой информации нет.

Ассоциации несимметричны. Так, например, к слову ЛАЙМ будет сильная ассоциация ФРУКТ. Но обратное неверно — ЛАЙМ если и ассоциируется со словом ФРУКТ, то далеко не в первую очередь. Это связано как с обобщающей ролью слова ФРУКТ в языке, так и с актуальным культурным контекстом жителей России.

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

Что можно сделать с датасетом


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

Хочется надеяться, что дополнительные источники информации, которых для русского не так много, помогут учёным и исследователям продвинуться на этом пути. Ниже мы предложим несколько направлений исследований, которые показались нам достаточно интересными:

  • Реализовать алгоритм assoc2vec, взяв за основу идеи из GloVe и заменив контекстную совстречаемость ассоциативной.
  • Кластеризовать ассоциации в рамках каждого отдельного головного слова или датасета в целом, например чтобы выделить кластера отдельных значений слова.
  • Исследовать возможность автоматического построения тезауруса русского языка. (Наблюдение: в отличие от контекстов матрица ассоциаций асимметрична.)
  • Использовать срезы ассоциаций по гендеру для проведения социологического исследования.
  • Сделать интересную визуализацию самих ассоциаций и связей внутри датасета. (Например карту всевозможных путей между ассоциациями.)
  • Исследовать природу симметричности/асимметричности относительных частот зеркальных ассоциаций.

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

Ссылка на скачивание и лицензия


Датасет: ассоциации к словам и выражениям русского языка

Датасет распространяется по лицензии CC BY-NC-SA 4.0.

Комментарии (13)


  1. RomanL
    31.10.2017 22:47

    Это все прекрасно, но как вы сформировали этот датасет? Ничего не сказано же об этом. Из того что я вижу в assoc.csv — ну те же слова, выведенные через distance из тулчейна word2vec.

    Может быть вы как то использовали ранговую корреляцию в прямом ( изба -> дом, крыльцо, ...) и обратном ( дом->изба, крыльцо->изба, ...->изба) вычислении вектора наиболее похожих слов и это назвали «ассоциацией»? Или что? Где описание алгоритма?


    1. kdenisk Автор
      31.10.2017 23:02

      Явно упустили этот момент, потому что все спрашивают как собирали. Данные собирали краудсорсингом, построенном на базе игровой механики. Ассоциации называют живые пользователи по примеру игры, описанной в статье (смотрите реализацию здесь: Игра в ассоциации на Карте Слов).

      Т.е. это не вариация word2vec от слова совсем. Это скорее попытка получить дополнительные данные о языке, которых в дистрибутивных моделях не хватает.


      1. RomanL
        31.10.2017 23:08

        В таком случае могу только восхищаться объемом проделанной работы, но не могу избавиться от двух извечных вопросов «зачем и нафига».

        Какую задачу вы решали? Чем ваш датасет может помочь лучше чем предварительно морфологизированный word2vec на приличном исходном множестве текстов?


        1. kdenisk Автор
          01.11.2017 00:06

          Отличный вопрос вы спрашиваете! Отвечаем.

          word2vec это невероятно хороший, дешёвый и эффективный подход, который будет занимать весомое место в мире NLP ещё долгое время. Но слабость дистрибутивных моделей в том, что они заведомо работают со сжатым источником информации — письменным текстом. И это означает, что в данной парадигме часть задач по обработке языка мы никогда не решим.

          Например мы не сможем сделать анализ тональности, если у нас не будет заранее размеченного по сентименту датасета. Или мы не сможем автоматически составить тезаурус для новой предметной области. Даже задача поиска синонимов в рамках дистрибутивных моделей сталкивается с непреодолимыми трудностями.

          Возвращаясь к исходному вопросу. На практике имеет смысл использовать то, что уже себя зарекомендовало и хорошо работает. Например word2vec. Но хочется двигаться и к более глобальной цели — научить компьютер «думать» и, главное, научить его учиться как человек, задавая вопросы и накапливая знания. Нам видится, что этот датасет и набор по семантике (см. Научи бота! — разметка эмоций и семантики русского языка) помогут продвинуться в этом направлении. А там и практические применения подтянутся, но до этого нужно провести большую исследовательскую работу.


  1. RomanL
    01.11.2017 10:11

    Мне видится что вы не очень понимаете принципы использование датасетов в самообучающихся системах. Потому что если ваши «гипотезы», читай «веса синонимов» не будут находить подтверждение (а это, скорее всего так, потому что после 5-10 нормальных ассоциаций у вас идет, извините, бред, который приходится выдумывать) в реальном диалоге или текстах, то они вылетят из модели и останется только наиболее частотная «голова», которая не сильно отличается от того что дает word2vec.

    И я не понимаю как эти данные могут автоматически помочь в сентимент-анализе без разметки и в автоматическим составление тезауруса под новую предметную область.

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

    PS Кстати, о Glove. У меня сложилось впечатление что эта модель работает хуже чем word2vec. По крайней мере в моих тестах мне так показалось.


    1. kdenisk Автор
      01.11.2017 10:57

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


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


    1. kdenisk Автор
      01.11.2017 11:03

      GloVe и у меня в реальных задачах показывал себя хуже. К тому же он медленнее обучается. Мне кажется это связано с тем, что он работает со сжатой информацией. Допустим слово A встречается с X и Y 50 раз, а также с U и V 75 раз. Но со словами U/V и X/Y — никогда. Матрица совстречаемости, как мне кажется, такие закономерности не увидит.


      В случае с ассоциациями альтернативы нет — исходные данные уже представляют собой матрицу совстречаемости. К тому же GloVe лучше работает с редкими словами и здесь это может пригодиться.


  1. kdenisk Автор
    01.11.2017 10:52

    По первому вопросу. Надо экспериментировать и проверять. Учитывайте и тот момент, что в наборе приведены сырые данные, т.e. не аналог результата работы word2vec, а "мысленные контексты" на которых он обучился. Не исключено, что придётся заранее кластеризовать, ведь ассоциации идут к разным значениям слова.


  1. kdenisk Автор
    01.11.2017 14:06

    Справедливости ради расскажем где мы будем применять всё это на практике у себя. Мы занимаемся автоматическим составлением словарей-тезаурусов (Карта слов) и одной из интересных практических задач является машинный поиск синонимов и сходных по смыслу выражений. Дистрибутивные модели отлично справляются с поиском вариантов, но они всё сваливают в кучу — материальные предметы, события, свойства, процессы и т.д. Плюс ранее упомянутая проблема с эмоциональной полярностью, что для словарей оказывается критичным. По-умному это кластеризовать в рамках word2vec-подхода не получается — не хватает как раз той самой информации о мире, которой обладают люди.

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


    1. RomanL
      01.11.2017 15:28

      А как вы составляете «Каким бывает «счастье»»? Тоже вручную? Или анализируете словосочетания по правилам с ключевым словом?


      1. kdenisk Автор
        01.11.2017 15:41

        Здесь всё совсем просто. Берём биграммы, находим в них согласованные по роду-падежу-числу ADJ_NOUN пары, приводим их к базовой форме, считаем частоту и получаем результат. Чистая статистика совсем без магии.

        Есть задача распространить это на другие типы контекстов помимо AN, но руки всё не доходят.


        1. RomanL
          01.11.2017 15:42

          Ну я так и подумал, я тоже так делаю ))


  1. reinvent
    01.11.2017 14:17

    Все в детстве играли в игру, когда один человек называет слово, сосед предлагает свою ассоциацию. Потом придумается ассоциация к ассоциации и т.д. Часто интересно не только услышать ассоциацию другого человека, но и понять ход его мыслей, как он пришёл к тому или иному слову. Это позволяет немного заглянуть в то, как мы мыслим.

    Возможно, это позволяет заглянуть в то, как мыслит конкретный человек. Да, культура накладывает свой отпечаток на ассоциации, но насколько? Есть игра по ТВ, называется 100 к 1, полностью на ассоциации. Больше 45 % не получается.