ailev.ru

Обсуждение

В архиве: 14 комментариев.

Читать и комментировать в ЖЖ ↗

Имя не сохранено · 28 мая 2012

Комментарий

Я кстати недавно задумывалсо об обработке естественного языка, но в несколько другом аспекте (поводом послужил "парсинг" фразы состоящий в основном из мата :)). Одним из отличий натурального языка от компьютерных является наличие "откатов". Т.е. добавление одного слова к валидному предложению может существенно поменять его синтаксическую структуру, что для компьютерного парсера означает необходимость "отката" то бишь признать уже запаршенную часть ошибочной и попробовать другой вариант. Традиционно откаты считаются нежелательными в формальных языках. Это связано с тем что раньше памяти у компов было мало, ну и процы были тормозные. Так что откатные грамматики будут жрать существенно больше ресурсов. Кроме того в формальных языках, синтаксическая структура предложений может быть весьма и весьма разветвленной (спагетти код к примеру). В натуральном языке, особенно разговорном сложные ветвистые структуры неприемлимы - человек их не поймет. Уж моск точно вскипит. Так что цена отката в натуральном языке не велика, ибо граниченно сравнительно короткой длинной понимабельного предложения. Кроме того, для формальных языков нетрудно подправить грамматику так чтобы для нее можно было (механически) построить эффективный парсер, работающий за линейное время от входа, ну и с небольшими требованиями к памяти (сильно меньше длинны входа, хотя формально и не ограниченно). При этом компьютер непоперхнется прожевать весьма и весьма разветвленные предложения - главное чтобы памяти хватило. Разумеется, выразительные возможности грамматик при этом сокращаются, но того что есть вполне хватает. Последнее время наметился отход от традиции избегать откаты. В частности комбинаторы парсеров (OMeta из этой же серии) часто реализуют с помощью откатов. Посему парсернокомбинаторный подход получается проще и выразительнее. А цена на данный момент для современного железа вполне приемлима - в худшем случае потребуется память пропорциональная длинне входа. Ибо обычно парсеры запоминают (memoize) пропаршенную структуру, так что при откате и последующем накате, берут значения их кэша, а не перевычисляют. Таким образом, время остается примерно пропорционально длине, хотя в каких-то случаях при откатных лавинах может быть и хуже. На практике, это не так критично, ибо плохопонимабельный код для парсера надо специально конструировать, человек такой писать не будет (естественно имеется в виду отлаженный парсер). Ну дык вот. В этом придании "естественности" формальным языкам мне видится большой резерв повышения эффективности труда программеров. Т.е. можно делать более выразительные языки, хотя возможно не все из них компилятор сумеет понять. Но это не такая уж и проблема ибо люди тоже далеко не все фразы способны понять :). Вобщем официально заявленная неполнота реализации языка (которая де-факто все равно всегда есть) - это весьма интересное и передовое развитие языков программирования. По крайней мере, практических :). Для computer science целей строгие формальные языки думаю все-таки останутся приоритетом.

Анатолий Левенчук · 28 мая 2012

Комментарий

Нам никуда от естественного языка не деться. И лучше бы им заняться раньше, чем позже. Если, конечно, сегодняшний день можно назвать "раньше" :-) Но мне кажется, что мы пока ещё никуда не опоздали. IBM Watson и клинические приложения CYC показали, что всё вполне достижимо методом грубой силы (хотя эта "грубая сила" достигается большим напряжением ума), но теперь самое время для резких прорывов в технологии. А то, что истина лежит где-то посредине между формальными и неформальными языками, это факт. Эдакая модальная пошаговая логика с метафорами, 4D типами и римфами (ну ладно, пусть не рифмами, а паттернами, что сути дела не меняет). Если, конечно, не займутся крепко чем-то типа теории категорий и не ограничатся при этом только функциональными языками, заодно выкинув её классическое математическое изложение.

Ответ на комментарий

Имя не сохранено · 30 мая 2012

Комментарий

Почитал текст лекции Барбары Парти про формальную семантику и понял что формальную семантику уже можно начинать считать инженерной дициплиной. В том смысле, что обработка какого-то приличного подмножества естественного языка с каким-то ограниченными целями - вполне себе программерский проект. Ну разве что сложный и требующий много ресурсов.

Ответ на комментарий

Анатолий Левенчук · 30 мая 2012

Комментарий

Я о том же. Нету уже дисциплины "искусственный интеллект". Есть просто computer science и software engineering. Ну, и сочувствующая им лингвистика...

Ответ на комментарий

Имя не сохранено · 31 мая 2012

Комментарий

solarix заточен на языковые манипуляции - анализ текстов и их изменение по правилам русского языка. То есть полноценной семантической модели там, насколько я знаю, не строится. Поэтому сравнивать его корректнее с NLTK или pymorphy. Код у solarix закрыт, но большая база для пользователей и API для программистов. И да, у меня тоже сложилось впечатление что там один разработчик

Ответ на комментарий

Анатолий Левенчук · 31 мая 2012

Комментарий

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

Ответ на комментарий

Имя не сохранено · 1 июня 2012

Комментарий

Семантическую модель не построить автоматически без качественного синтаксического и морфологического анализа. Некоторые задачи находятся на интересующем вас стыке. Например: - "Технология Compreno также успешно определяет и более сложные синтаксические связи, такие как замена слова «мальчик» на слово «он» в предложении (для специалистов: анафора): «Хоть мальчик и хотел поиграть, но он понимал, что у него мало времени»." http://www.abbyy.ru/science/technologies/business/compreno - "Результатом анализа предложения (цепочки предложений) должен быть не только синтаксический граф, но и набор подтвержденных гипотез типа "А.С.Пушкин=ФИО", "12.05.2012=Дата". При переходе от анализа изолированных предложений к полнотекстовому анализу в текущем контексте должны также раскрываться гипотезы типа "он=А.С.Пушкин"". http://kelijah.livejournal.com/45529.html Как я понимаю, для solarix и NLTK такие задачи - это "потолок", а для compreno и ontos - "линия старта". Проблема "тусовочной" разработки обычно заключается в слабой проработке или закрытости "данных" при неплохом качестве "кода". Чаще всего ценными для практического применения наработками, полученными на базе открытого кода, не делятся или показывают их ограниченному кругу лиц. Поэтому у NLTK движок может быть и конкурирует, но сравнивать нужно по качеству результата для русского языка, которое определяется базой правил разбора.

Ответ на комментарий

Анатолий Левенчук · 1 июня 2012

Комментарий

Вы очень точно определили ахиллесову пяту всех этих программ: не столько код важен, сколько данные и справочные данные для этих данных. Важно наличие корпусов текстов и настроечные данные к ним. В NLTK, кстати, с этим получше: там довольно много корпусов текстов поставляется прямо с этой библиотекой. Но фишка-то в том, что нужна настройка на конкретную предметную область. Это (насколько я знаю) в среднем от трёх до пяти тысяч слов и хитрых жаргонных словоупотреблений с ними, и вот эти-то доработки обычно полностью недоступны для широкой публики. Но этот аргумент верен и по отношению к "тусовочной" разработке, и по отношению к коммерческой разработке. Настройки на предметные области мы не найдём ни у пользователей NLTK (ибо это закрытые данные коммерческих фирм), ни у пользователей Compreno (по той же причине). Дальше весь вопрос в гибкости системы описания правил разбора (предел гибкости тут -- правила пишутся на мультипарадигмальном языке программирования, на котором и сам пакет написан, но не факт что эта гибкость означает также и лёгкость модификации и последующей отладки). Так что я пока не понимаю, как все эти платформы лингвистического программирования сравнивать для конкретных задач. Думаю, для разных задач нужны разные платформы. А идеальный случай -- это проход двумя-тремя-четырьмя разными программами, как это сделано у IBM Watson :-)

Ответ на комментарий

Имя не сохранено · 6 сентября 2013

Комментарий

Мне было бы интересно на основе NLTK книги сделать школьный кружок по компьютерной обработке текстов. Преподаю информатику в московской школе 1543. Не подскажете -- является ли NLTK полноценной средой для анализа *русских* текстов? Ссылку на морфологический анализатор я вижу --- правда он почему-то перестал развиваться... А как у NLTK с анализом синтаксической структуры предложений?

Имя не сохранено · 13 июля 2014

Комментарий

Нормально NLTK работает с версией 2.7. Для академических задач NLTK вполне хватает, а Compreno и прочие Ватсоны являются скорее "коммерческой наукой больших денег". Опять же, Питон достаточно далёк от идеала в смысле языка для написания высокопроизводительного лингвистического ПО, но для научных целей - самое оно.

Анатолий Левенчук · 13 июля 2014

Комментарий

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

Ответ на комментарий