Pull to refresh
64
0
Денис Кулагин @kdenisk

Компьютерная лингвистика

Send message
Чем больше я занимаюсь естественным языком, тем больше он открывается как вполне логичная и стройная система, поддающаяся анализу и моделированию. Другой вопрос, что для сугубо практических применений гораздо дешевле и эффективнее использовать нейросетевые подходы, строящие свою внутреннюю модель, заточенную под конкретную задачу. В противовес построению generic-системы, воспроизводящей мышление в целом. Аналогичная картина наблюдается и в научных работах.

Процитирую замечательную книгу Т. Г. Скребцовой «Когнитивная лингвистика: классические теории, новые подходы»:
Подчеркивается центральная роль физического опыта взаимодействия человека с окружающим миром в организации его понятийной системы. Рационализму формальных теорий, основанных на дуалистической концепции Декарта (ср. картезианская лингвистика Хомского), противопоставляется эмпиризм как метод познания. В связи с этим выдвигается тезис о том, что мышление «воплощено» (embodied) [Johnson 1987; 1992; Lakoff 1987; Lakoff, Johnson 1999], т. е. неразрывно связано с телом человека, его анатомическими и физиологическими особенностями, перцептивным и моторным опытом. Подтверждение тому когнитивисты находят в языке, в частности при исследовании механизмов образности. Именно «воплощенностью» мышления, по их мнению, объясняются неудачи, связанные с моделированием искусственного интеллекта и автоматической обработкой языка.
Если взять уравнение линии на плоскости:

w_1 * x_1 + w_2 * x_2 + b = 0

То очевидно, что можно левую часть умножить на любое число, отличное от нуля, и уравнение при этом будет задавать ту же линию. Поэтому и требуется нормировка. С геометрической точки зрения это приведение нормали линии (w_1, w_2) к единичной длине, после чего модуль скалярного произведения даёт расстояние.

В коде нормировка намеренно опускается. Достаточно подобрать такой коэффициент при расчёте насыщенности цвета:

np.abs(value) / 30

чтобы продемонстрировать факт роста уверенности классификации при удалении от границы решений. Иначе говоря сделать картинку.

При этом в следующем параграфе даётся комментарий по поводу того, как рассчитывается корреляция расстояния и уверенности уже в задаче классификации.
Давайте смотреть.

# образец 1
def line1(w1, w2):
return -3 * w1 - 5 * w2 - 8


Линия задаётся уравнением: line(w1, w2) = 0

  • line(w1, w2) > 0 выполнено для точек по одну сторону линии
  • line(w1, w2) < 0 — по другую


# служебная функция в форме w2 = f1(w1) (для наглядности)
def line1_w1(w1):
return (-3 * w1 - 8) / 5


Служебная функция для отрисовки. Получается переносом w2 в правую часть уравнения -3 * w1 - 5 * w2 - 8 = 0 и приведением коэффициента к единице.

Удалось мне ответить на ваш вопрос?
Спасибо за содержательный комментарий! Действительно, активный словарь также создаётся краудсорсингом и такие моменты, как некорректное или устаревшее написание и паронимию, не учитывает. (Также это касается пар лен — лён, мед — мёд и т.д.) Это задача автоматики, которую нам предстоит решить, а пока будем отфильтровывать эти слова вручную и ваш список будет более чем полезен.
Очень крутой комментарий, спасибо!

1) Вы правы, семантик существует как минимум две — нативно-лингвистическая и энциклопедическая (те самые знания о мире). Вторую вычислять из текстов бессмысленно: на то они и знания о мире, что в общетематических текстах о них не написано, это и так всем известно.

Что касается синтаксиса — здесь он служит как вспомогательный инструмент, не более того. Хочется, чтобы компьютер понимал примерно такую цепочку: конструкция «убрать в рюкзак» возможна потому, что аргументом функции «убрать в X» частотно служат контейнеры, а рюкзак является таковым. Синтаксис позволяет понять только то, что на месте икса частотно стоит существительное в неодушевлённом винительном. Это слишком грубое знание, оставляющее массу неоднозначностей.

Касательно категории неодушевлённости — здесь речь идёт о настолько важной и частотной семантике, что язык «решил» её аж в синтаксис зашить. Но других таких случаев я не знаю. И опять же, в задачах синтаксической разметки один из самых сложных случаев — развести именительный неодушевлённый с совпадающим винительным неодушевлённым (пруфы: morphoRuEval-2017, Morphobabushka (M), стр. 19). Что говорит только об одном — эта задача решается человеком на уровень выше — на уровне семантики.



2) Да, действительно удивлюсь. Я очень много работал с word2vec в задаче кластеризации синонимов, крутил его и так и так, разговаривал на эту тему с создателями Watset. Не получается из него вытащить нужную информацию о семантических классах. Собственно данная работа не просто из вакуума появилась, а именно из fail'а при работе с дистрибутивными моделями. Поэтому я всегда сравниваю в статьях с word2vec'ом и делаю акцент на разнице в получаемой информации.

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

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

Причём даже в задачах компьютерного зрения машине объясняют: тут собака, тут кошка, здесь машина, а это — пешеход. Хотя визуальная информация уже априори более богатая, чем текстовая. Так откуда берётся эта непонятная надежда, что тексты, являющиеся жатым-пережатым источником, компьютер вдруг автомагически научится сам понимать!? Для меня это загадка.

P.S. Ещё раз моя вам благодарность за комментарий — он заставляет думать и задумываться. Все эмоции относятся только к сложности решаемой проблемы и никак не к участником этого обсуждения.
Согласны. Ничто не мешает для русского языка создавать датасеты и технологии не уступающие тем, что есть для английского и основных европейских языков. В особенности с учётом того, насколько у нас сильная лингвистическая школа.
Намёки, сарказм, каламбур, ирония, юмор в целом и метафора — это даже не следующий этап, а где-то очень-очень нескоро. Впрочем у Шелодона Купера тоже с пониманием сарказма не очень, но при этом он вполне себе обладает интеллектом.

Первостепенная задача научить машину понимать прямые, характерные контексты и строить поверх них несложные логические цепочки. А там уже видно будет.
Всё верно: можно разметить корпус и дальше использовать подходы, работающие сейчас для предсказания частеречной и морфологической разметки. Другое дело, что синтаксис и морфология хорошо изучены и более-менее понятно, какими классами размечать. Но даже там есть масса сложных случаев, требующих вдумчивости и специальных знаний (можно попробовать сложные задания на opencorpora.org).

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

  микроконтекст |          тип | значение |
                |              |          |
 отхлёбывать из |      VBP_РОД |   0.9990 |
    отпивать из |      VBP_РОД |   0.9989 |
      окунуть в | VBP_ВИН_НЕОД |   0.9986 |
      разлить в |      VBP_РОД |   0.9984 |
         мадеры |        XG_NG |   0.9981 |
           лака |        XG_NG |   0.9978 |
     порционный |          ADJ |   0.9978 |
   плюхнуться в | VBP_ВИН_НЕОД |   0.9978 |
     вариться в |     VBP_ПРЕД |   0.9978 |
   плескаться в |     VBP_ПРЕД |   0.9978 |
          плова |        XG_NG |   0.9977 |
        налитой |          ADJ |   0.9976 |
       макать в | VBP_ВИН_НЕОД |   0.9976 |
     политься в | VBP_ВИН_НЕОД |   0.9975 |
       долить в | VBP_ВИН_НЕОД |   0.9975 |
     кальвадоса |        XG_NG |   0.9974 |
     выложить в |      VBP_РОД |   0.9974 |
     умыться из |      VBP_РОД |   0.9973 |
           чачи |        XG_NG |   0.9973 |
      плевать в | VBP_ВИН_НЕОД |   0.9971 |
        термоса |        XG_NG |   0.9971 |
       отлить в | VBP_ВИН_НЕОД |   0.9969 |
         чернил |        XG_NG |   0.9969 |
    разложить в |      VBP_РОД |   0.9968 |
    процедить в | VBP_ВИН_НЕОД |   0.9968 |

Вполне себе рабочий семантический TF-IDF.
Да, это ли не мечта всех исследователей, работающих с языком! Спасибо за книгу, нужно будет прочитать.
С Прологом всё не так просто. Язык, да и мышление в целом, подчиняются нечёткой логике и в словоупотреблении встречается много ситуаций семантического блендинга — смешения в слове нескольких смыслов в неизвестных заранее пропорциях. Причём разные контексты «подсвечивают» разные смыслы в одном слове.

Например: «убрать книгу в рюкзак» — это про свойство быть контейнером, «купить рюкзак» — про свойство быть товаром, «взвалить рюкзак на плечи» — одновременно про свойство быть надеваемым и быть достаточно громоздким, «усесться на рюкзак» — про свойство быть предметом, достаточно твёрдым, чтобы служить сидением. В общем пока такое разнообразие компьютеру скорее не зубам.
Они устранимы и мы будем с ними работать, просто сейчас стоит другая задача. Нет никакого смысла размечать отдельные слова или даже отдельные значения — как потом такую разметку увязать с конкретным контекстом? Наша задача разметить понятия, концепты словами, примерами, чтобы потом в каждом конкретном случае употребления сказать — оно подходит под этот концепт, маркируем таким-то тегом.

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

Суть качественного скачка, которое сделало машинное обучение, именно в этом — не объяснять компьютеру в чём отличие кошек от собак, а показать 100 картинок тех и тех, а дальше он сам разберётся. Здесь та же идея, но с языковыми единицами.
Мы всецело заинтересованы в том, чтобы данные использовались максимально широко, а не пылились на ГХ. Но когда мы запускали проект были не вполне ясны его перспективы и потенциал для научных и коммерческих применений, поэтому выбрали наиболее строгий вариант лицензии — взять время на подумать, посмотреть что к чему и решить, решить куда хотим развиваться дальше.

Сейчас пришли к пониманию того, что лицензию через какое-то время можно будет сделать более свободной. При этом данные для коммерческих организаций можно получить уже сейчас: достаточно написать на kartaslov@mail.ru с описанием кейса или примерных целей использования и мы отправим своё согласие на использование.
Здравствуйте, помню вас. Спасибо, что помогали шером и распространением информации!

Что касается применимости. Познание внутренней структуры языка — это путь. И он не обещает быть ни простым, ни коротким. Сейчас мы пытаемся переложить тот пласт лингвистических исследований (в первую очередь когнитивистов), которые были сделаны в последние 50 лет, на современные технологические рельсы.

Опять же, какими бы ни были коммерческие процессы — это всегда взаимодействие субъектов, объектов (assets) и процессов. Возможность их эффективно вычленять из потока текстовой информации, отделять общеязыковые, каркасные единицы от тематических, специализированных и строить модели поверх более высокоуровневых, чем слова или символы объектов — чем не задача.

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

Спасибо за подсказку. Не смогу сейчас конструктивно прокомментировать — нужно разобраться что к чему в приведённом вами источнике, но посмотрю обязательно.

Создаётся упрощённая модель окружающей действительности и слова здесь уже служат скорее человекопонятными искусственными тегами той самой «внеязыковой действительности», чем лингвистическими объектами. Если это работает в точных науках, например физике, почему бы не попробовать такой подход при семантической разметке.
Хочется, чтобы люди могли загрузить датасет в Pandas прямо с ГХ, покрутить его 10 минут и начать работать. RDF на текущий момент будет overkill, хотя на будущее, особенно когда появятся графовые истории — я обязательно посмотрю в сторону этого формата. Так что спасибо за ценное замечание.
Оупенспейс оупенспейсу рознь. Если у тебя достаточно личного пространства, воздуха и света, а коллеги уносят громкие обсуждения в переговорки — всё нормально. Конечно должно быть более-менее изолированное пространство со светом, где можно посидеть и подумать. Кухня, например.

Проблемы начинаются, когда пытаются упаковать неадекватное количество народа на квадратный метр. Здесь уже и подумать спокойно негде, и кухня всё время перегружена, в результате начинается «перегрев» от постоянной толпы и рано или поздно хочется сбежать из такой обстановки.

Я с вами в корне не согласен. С помощью нейросетей мы можем имитировать общение, слепленное с диалогов конкретного человека. И, что дальше? Мы ведь понимаем, что это пустотелый сосуд — внутри нет никакого подобия мысли, только голая статистика.


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


Я убеждён в том, что без семантического каркаса мы не сможем подойти к решению задачи создания generic AI, а так и будем решать конкретные узконаправленные задачи.


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


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

1
23 ...

Information

Rating
Does not participate
Location
Железнодорожный (Московск.), Москва и Московская обл., Россия
Registered
Activity