Обобщение знаменитого предложения Хомского на синтаксические сингулярные векторы.
Рассмотрим предложение Хомского:
Бесцветные зеленые идеи яростно спят.
Предложение грамматически правильное (синтаксис), но бессмысленное (семантика). Трудно представить идею, одновременно зеленую и бесцветную, и идею, которая может спать с яростью. Оно было сформулировано как предложение, которое никогда раньше не произносилось в английском языке, и без конструкции Хомского, вероятно, никогда бы не было. Оно прекрасно в своей абсурдности, так давайте творить больше!
Обработка естественного языка сложна, поэтому давайте ограничимся проблемой главного проекта — Colorless green idea
. Это именное словосочетание , имеющее структуру JJ JJ NN*
, где JJ
относится к прилагательному, а NN*
относится к любому варианту существительного (синтаксис WordNet). Если бы у нас был большой корпус текста, мы могли бы найти все именные фразы типа JJ ... JJ NN*
и связать каждое прилагательное с соответствующим существительным, по сути, это база данных биграмм.
Если цель состоит в том, чтобы создать бессмысленные именные группы, база данных биграмм не даст нам ничего, чего мы не видели раньше. Это неприемлемо. Поэтому мы ищем разложение и выполняем разложение по сингулярным значениям в нормализованной базе данных (существительное). Мы специально сохраняем объясненную дисперсию на несколько низком уровне: если бы она была слишком высокой, она просто воссоздала бы базу данных биграмм, а если бы она была слишком низкой, мы потеряли бы все словесные отношения. Это, естественно, искажает данные; левые векторы единственного числа представляют подпространство, в котором существительные коррелируют с другими существительными, которые имеют общие прилагательные, а правые векторы единственного числа представляют подпространство, в котором прилагательные коррелируют с другими прилагательными, которые имеют общее общее существительное. Просто, правда?
JJ JJ NN
Начиная с существительного NN
, мы выбираем набор прилагательных, находящихся «далеко» от этого существительного. Выбрав первое JJ1
, мы выбираем второе прилагательное JJ2
которое находится далеко от первого прилагательного JJ1
. Это дает нам оценку для каждой пары (JJ1,JJ2)
, (JJ1,NN)
и (JJ2,NN)
. Используя выборочную базу данных, человек произвольно решил, что комбинированный балл в диапазоне -0.075 < s < -0.010
является оптимальным. Зачем нужна нижняя граница? Оказывается, фразы с весьма абсурдными оценками — это просто обычные слова, ортогональные друг другу, как места и цвета, вывод правильный, но скучный. Я предпочитаю «промышленного законодательного сокола».
Вот некоторые из моих любимых:
-0.0290 severe municipal jazz
-0.0329 old sole beard
-0.0371 hot racial archbishop
-0.0428 municipal professional everything
-0.0427 legal high ballad
-0.0427 single spanish sin
-0.0420 successful specific seal
-0.0419 chief live foliage
-0.0417 spiritual guilty warship
-0.0393 agricultural professional click
-0.0382 possible urban king
-0.0381 coastal senior methodology
-0.0365 entire dry institutes
-0.0328 federal minor upbringing
-0.0308 secret psychological fragment
-0.0305 professional free gown
-0.0297 earliest electric litigation
Для начала создайте базу данных именных фраз. Я собрал свою версию из Википедии, а инструменты для нее можно найти в этом репозитории здесь. Если вы не хотите создавать свою собственную, вы можете использовать включенную базу данных JJ_noun_phrase.db
и просто запустить:
python absurd_noun_pairs.py
Множество модулей... pandas
, sqlite
, numpy
, sklearn
, BeautifulSoup
, nltk
, pattern.en
.