Комментарии 41
С нетерпением жду следующих частей. Спасибо, очень интересно!
«Маша Саше хочет помочь кормить крокодила» будет правильнее записать как «Маша хочет помочь Саше кормить крокодила», и тогда с алгоритмом всё будет в порядке :)

А вот случай с «он увидел её перед своими глазами» действительно завораживает. Спасибо!
голландский: «ik Cecilia Henk de nijlpaarden zag helpen voeren»
досл: «я Цецилия Хенк гиппопотамы видел помочь кормить»
русский: «я видел (как) Цецилия помогает Хенку кормить гиппопотамов»

15.55 КБ

я тут хомского курить думаю что :)
цитата и картинка из диссертации
Ralph Debusmann — «Extensible Dependency Grammar:
A Modular Grammar Formalism Based OnMultigraph Description»
Да, эта фраза в разном виде гуляет по источникам.
Тут вот какая штука: в русском проблема непроективности, насколько я чувствую, не столь важна (непроективные конструкции довольно странно звучат по-русски).
Но в немецком и родственных языках это актуально. Может, тут есть специалисты… в статьях, которые я читал, описывается такая проблема. В придаточных предложениях (Х в фразах вида «Я видел как X») субъекты, объекты и обстоятельства сбрасываются в левую часть в определённом порядке, а в правую часть (называемую «глагольным кластером») идут все глаголы в почти произвольном порядке. Оттуда и непроективность.
да, это и есть пример глагольного кластера.

в немецком также существует явление глаголов с отделяемыми приставками:
приставка таких глаголов ставится в конец предложения, но образует с глаголом практически фактически одно слово.
www.studygerman.ru/online/manual/verb3.html

тут тоже большая проблема с проективностью.
Я, конечно, абсолютно не знаком с голландским, но рискну предположить, что это типовая последовательность слов тамошнего предложения. Отталкиваясь от этих данных уже можно совершенствовать алгоритм. А я говорил о том, что русское «правильное» (в прямом порядке) правописание совпадает с оптимальным для алгоритма раскладом, не совпадает лишь слегка некорректно приведенная фраза :)
Я тоже не знаком, но если понял из источников, проблема в том, что в некоторых случаях там порядок слов очень свободный (см. мой коммент выше). Поэтому выбрать чёткие правила трудно.
я привёл пример, где фраза переписанная в прямом порядке не является «более правильной».
аналогичный случай см в комменте выше с немецкими разделяемыми глаголами —
одно _слово_ раскидывается по разным местам в предложении, и это грамотно.

кроме того,
«Маша Саше хочет помочь кормить крокодила» — это вполне понятная фраза на русском.
и парсер должен уметь её отпарсить.

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

[Douglas R. Hofstadter, “Гёдель, Эшер, Бах”]
На самом деле, мне кажется, не стоит привязывать слова/понятия к узлам дерева — узлами дерева должны быть анонимные объекты — абстрактные отношения. Т.е. вариант с машей и сашей в таком случае должен легко парситься в проективное дерево:

{ кто: Маша, кому: Саше, что_делает: { что_делает: хочет, что: { что_делать: помочь, что: { что_делать: кормить, кого: крокодила } } } }

А про «пе'ред»: если бы в речи не было случаев, когда только ударением или интонацией уточнялся бы смысл, не возникло бы бытовых жаргонизмов наподобие слова «доку'менты», означающего не произвольные документы в ассортименте, а только правоустанавливающие документы.
Видите ли, в чём проблема — в памяти компьютера можно держать сколь угодно абстрактную модель, но ведь создавать её приходится на основе реальных слов фразы. И если предполагать, что любое слово фразы может соотноситься с любым анонимным объектом — мы выходим на ту же NP-complete задачу.

Жаргонизмы и прочее, конечно, затрудняют разбор, но и без них в языке хватает неоднозначностей. Это называется «каламбур», целый пласт юмора на этом явлении построен :)
> мы выходим на ту же NP-complete задачу

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

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

«Склонять фразы» — не берусь судить.
«Склонять имена» — умеют, см. часть про морфологический анализ. В русском языке иностранные имена склоняются так же, как и все прочие слова. Ну, может, с отдельными исключениями :)
Недавно встретил: «эти типы стали есть на складе»
Вот эти две фразы, как мне кажется, о многом говорят: «если разрешено пытаться клеить любое слово к любому другому, мы тут же выходим за все предусмотренные вежливостью нормы по объёму вычислений»
«При этом для той же чешской коллекции документов «не по зубам» этому ограниченному анализатору будет уже всего лишь 0.5% предложений.»
Я думаю, что здесь и кроется одна из главных проблем. Формализовать знания о языке в принципе можно. Но для использования на практике этой формализованной системы нужно будет слишком уж неприличные объемы вычислительных ресурсов, особенно в сравнении с системами, использующими мягкие вычисления, коими являются статистические и обучаемые системы.
По правде говоря, я не думаю, что здесь лежит основное поле битвы между статистикой и правилами. В конце концов, никакая статистика не поможет понять, что подразумевается под «девушкой с косой». Если фраза неоднозначна, она неоднозначна что по правилам, что по статистике.

Вообще критикуя статистику, я говорил прежде всего о «наивной статистике». Грамматические правила тоже могут быть извлечены статистическим путём. Но потом парсеру всё равно надо с ними работать, и проблемы у него будут те же самые (ему-то какая разница, написаны правила вручную или извлечены из наблюдений).
угу-угу, видимо слово «стекло» и прочее относится как раз к тем 0,5%.

Все же интересно, какое практическое значение этих «неразбираемых» предложений — там и индусов можно подключить, и ручные словари составить :)
а что не так со «стеклом»? ну многозначное слово, это ерунда :)

0,5% — это непроективные конструкции, которые остаются формально недоступными для «ограниченного» парсера, но по-прежнему доступны «неограниченному» (NP-полному).
Ну это то же самое, что «он увидел её перед своими глазами» :)
Проблема множественного разбора — но непроективности тут нет, к счастью!
Спасибо за топики, очень интересно, читается на одном дыхании :)
(пока дочитал только до финского)
всвязи с чем возникло любопытство об особенностях синтаксического и морфологического разбора
агглютинативных языков.
тогоже финского.
про лексикализацию както не до конца понятно…
в чём принципиалное отличие то, кроме размеров словаря/грамматики?
Принципиальная разница:

В правилах лексикализованной грамматики В ЯВНОМ ВИДЕ присутствуют слова языка.
В нелексикализованных грамматиках слова не фигурируют, есть лишь абстрактные понятия.
«абстрактные понятия» это уже как-то ближе к семантике

нельзяли пример грамматического разбора в двух «системах»?
Да вроде ближе… это чисто грамматические понятия. Например, «существительное мужского рода».
На выходе получаются деревья одного и того же вида, различия лишь в том, как парсер устроен изнутри. Классический нелексикализованный анализатор описан здесь. Он изучает размеченный корпус текстов (трибанк), и далее для входной фразы пытается построить дерево, статистически наиболее близкое к деревьям в трибанке, если я правильно понимаю механику. Например, изучив трибанк, парсер может для себя вывести следующие правила (по Хомскому):

S → NP VP
NP → pron
VP → v NP
NP → det n

Т.е. тут нет конкретных слов, есть только части речи, синтаксические составляющие и т.п.

Лексикализованный парсер так или иначе опирается на конкретные свойства конкретных слов языка.
В диссере Какконена об этом хорошо написано (поиск по слову unlexicalized, а про лексикализацию тоже много где есть, см. стр. 35, к примеру)
[отвлечённо от темы конкретно этой части]

А когда парсер пытается определить смысл, каким образом он его «запоминает»? Как вообще вглядит в теории осознание и перевод с одного языка на другой?

Возможно ли первоначальное возведение смысла текста в некий абстрактный универсальный язык, не имеющий живых аналогов, чтобы потом уже привести этот смысл к требуемому языку? Или при переводе всегда используются пары (язык X) <=> (язык Y)?
Парсер не пытается определить смысл. Его задача — это выявление связи между словами, семантика слов — это не по его части. Впрочем, об этом ещё поговорим. Возможность перевести на «универсальный» язык есть. Например, для этого существует Интерлингва. Но на практике это всё достаточно плохо работает. Представьте себе, что «сёгун и его самураи» будет переведено как «князь и его дружина» :)
Есть еще такой язык как аймара

цитата: «Так вот, можно ли гарантировать, что открытия масштаба неевклидовой геометрии не появятся на суахили? Почему бы и нет. Скажем, для составления карты климатов Африки, прямо связанных с долгосрочными прогнозами погоды и для нашей страны, сотрудникам Института географии Академии наук СССР пришлось обработать записи на 25 языках, в том числе и совсем редких.
Сообщений такого рода в последнее время появляется все больше. Так, в 1985 году группа боливийских электронщиков программистов под руководством А. Гусман де Рохаса объявила о создании высокоэффективной системы перевода с одного из 5 мировых языков на другой. Ее окрестили ЭВМ аймара – по названию одного из языков индейцев Боливии и Перу. В прошлом он считался неперспективным, однако внутренняя четкость и простота построения подали ученым идею использовать его в качестве посредника. Скажем, английский текст переводится на язык аймара, чтобы уже с него быть переведенным на французский. Выяснилось, что индейский язык в данном случае не только превосходит общепринятый в этих странах испанский, но и может сравниться со специально созданными для перевода искусственными языками программирования.»

Дмитрий Леонидович Спивак
«Как стать полиглотом»
«сёгун и его самураи» будет переведено как «князь и его дружина»

Ну почему же, согласно википедии, в Интерлингву включаются слова, заимствованные основными языками, то есть «сёгун», «самурай», «гейша», а также «сауна» в языке есть. По идее и «борщ» должен быть, но в словаре не обнаружил :)

А вот аймара — это интересно. Говорится, что в этом языке тройственная логика, что приводит к образованию любопытных неологизмов. К сожалению, примеров не нашёл, может быть, Вы поясните, как это?

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

Зато пишут, что аймара очень логичен по постоению, что и позволяет ему тягаться со специально созданными для перевода языками, как указал nepster.
тоже хотел бы увидеть примеры «тройственной логики»
да и вообще как «разрядность» логики проявляется в языке?
Про логику аймары… Там довольно сложное описание, но я так понимаю, что ничего сверъестественного, просто есть категория «возможности» на том же уровне, что и «да/нет».

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

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

Например, диалектное слово в одном языке должно быть переведено не просто диалектным словом в другом языке, но и вызывающим правильные (требуемые) ассоциации.

а вы дочитали статью до конца?
нет?
значит, недочитали.

в бинарной логике отрицание означает «противоположное значение», которое всего одно.
неправда, что дочитали — значит недочитали.

в троичной логике «противоположных значений» два. и, соответственно, отрицаний два.
«нeправда, что дочитали» — может означать:
либо «недочитали»
либо «наврядли дочитали»

в аймара на вопрос «а вы дочитали?» три варианта ответа:
«jisa» (да, дочитал), «jani»(нет, недочитал), «ina»(типа того)

если я вас спрошу «а вы разьве[возможность] не[отрицание]дочитали статью до конца?»
и вы ответите «типа того»
мне сложно не только выразить словами что на самом деле,
но даже как-то представить это в голове :)
Я думаю, по-русски это тоже работает, хотя и несколько иначе:

— ты дочитал статью?
— иди на ...!

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

выражение «City = 'Paris'» по идее, равно TRUE или FALSE. Но если поле city не заполнено (NULL), возникает третье логическое значение UNKNOWN.

Причём значение UNKNOWN действительно логическое, и оно дальше может участвовать в выражениях языка («City = 'Paris' OR Balance < 0.0»)
всегда подозревал, но не знал этого факта.

кстати, хороший пример, практического применения троичной логики.
Вы удивительно ладно пишете. Респектую и читаю с удовольствием :)
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.