Как стать автором
Обновить

Комментарии 26

Спасибо за пост!

Можно ли это дело использовать для стеганографии: для построения качественных mimic functions?

+++
Сорсы выложите?
А глянуть на исходники вашей системы можно?

Планируете еще что-либо писать по данному направлению в плане статей?
К первой картинке вопрос: а почему «голосом» крепится к «громко», а не к «задал»?
А нету какого-нибудь открытого проекта по созданию аналогичной базы для русского языка?
По типу openstreetmap, например…
Для открытой базы думаю будет много желающих предоставить свои вычислительные ресурсы для наполнения базы.
Спасибо, автор! Очень ждем продолжения!
А именно — системам, способным к разбору и пониманию текста на русском языке.


Разбор — да, но о понимании, имхо, можно будет говорить только тогда, когда система сможет правильно отвечать на вопросы, заданные по разобранному ею тексту…
Можно ли это дело использовать для стеганографии


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

К первой картинке вопрос: а почему «голосом» крепится к «громко», а не к «задал»?


На картинке не видны типы связей между узлами дерева. Типы связей отвечают на вопросы.

Глагол «задал» — корневой, от него идут связи «кто сделал» (Он), «что сделал»(Задал) и «как сделал»(Громко).

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

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

А нету какого-нибудь открытого проекта по созданию аналогичной базы для русского языка?


Базы, именно в таком формате (микс из словарей, тезаурусов и статистики), насколько мне известно, нет. Но есть открытый корпус русского языка и другие ресурсы, ориентированные на лингвистов и подготовку размеченных корпусов в машиночитаемом формате.

Разбор — да, но о понимании, имхо, можно будет говорить только тогда, когда система сможет правильно отвечать на вопросы, заданные по разобранному ею тексту…


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

А глянуть на исходники вашей системы можно?


Я планирую их передать в общественное достояние после приведения в надлежащий вид.
Поставь в тупик Скайнет, расскажи ему анекдот:
Штирлиц выстрелил в упор. Упор упал.
В окно дуло. Штирлиц закрыл форточку – дуло исчезло.
Штирлиц стрелял двумя пистолетами по очереди. Очередь быстро редела.

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

Что такое «смысл»? Вы можете дать строгое формальное определение понятия «смысл»?
Смысл — это соответствие чего-то (утверждения, ответа и т.п.) чему-то (реальности, тексту и т.п.). «Есть смысл» означает «есть соответствие». Например, фразу «ваш ответ на вопрос по тексу имеет смысл» можно перефразировать следующим образом: «для вашего ответа на вопрос по тексту имеется соответствие в этом тексте».

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


Используйте силу нечётких вычислений, и подобные противоречия отпадут сами собой.
Да, смысл можно рассматривать как функцию. Но двоичная логика корректно описывает лишь крайне малое подмножество явлений реального мира. Все подобные противоречия возникают оттого, что двоичную логику пытаются применить к случаям, в которых она неприменима…
А что приемлемо?
Вы можете дать строгое формальное определение понятия «смысл»?


Нет. А зачем?

Никого не смущает отсутствие приемлемого определения понятий интеллект, разум, смысл. В отсутствии формального определения люди, тем не менее, понимают, о чём говорят. это и есть смысл.
Как успехи в конкурсе? И у вас уже есть какой то продукт на основе описанного алгоритма? Там есть трудность, когда одно слово соответствует по онтологии (как бы вы ее не получали) не одному слову, а группе слов (именной группе, высказыванию). И как строить те же N-граммы тогда?
Спасибо за интерес.

Как успехи в конкурсе?


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

И у вас уже есть какой то продукт на основе описанного алгоритма?


Нет, но разработка на месте не стоит, и медленными шагами приближаемся к задаче поддержки диалога.

Там есть трудность, когда одно слово соответствует по онтологии (как бы вы ее не получали) не одному слову, а группе слов (именной группе, высказыванию).


Это называется омнимия. Когда слова пишутся совершенно одинаково, а значат сильно разные вещи. Омнимичных слов, на самом деле, немного 1-2%, но их разделение является серьёзной проблемой. Чаще всего разделение проводят за счёт морфологического или синтаксического анализа — «Мы ели бульбу» и «В парке росли голубые ели». Поскольку качественную лемматизацию (приведение слова к базовой форме «ели» > «есть») без такого анализа тоже не сделаешь, вопрос решается сам собой.

И как строить те же N-граммы тогда?


Вопрос N-грамм — вопрос скорости их набора. Качественный, но очень медленный подход — разбирать синтаксически каждую фразу, снимать омнимию и вязать по леммам слов. Быстрый подход омнимию не снимает, соответственно, для некоторых слов N-граммы оказываются засорены. Тут уже вопрос подхода к N-граммам в целом. Я, например, использую N-граммы для выделения признаков слова. Например, слово «ели» будет обладать признаками и к пище («ели пищу») и к росту («росли ели»). Если использовать вычисление метрики а-ля Word2Vec, то эта омнимичная каша не позволит хорошо разделить «ели» и достоверно отнести их к одному из классов. А если выделять из всей совокупности признаков только требуемые — то эффект не так заметен. Я стараюсь идти по пути именно выделения признаков.
Нет, я не про омонимию спросил, но ответ тоже понравился — разделять омонимию по контекстным связям. Это интересный подход. Частично тоже применяю.
А так, насколько мне известно, такая омонимия неплохо разрешается статистическим таггером (Russian statistical taggers and parsers by Serge Sharoff).

Я спрашивал про другое — когда одно слово является определением группы слов, то есть имеет связь, но не с одним из них (например, с вершиной именной группы), а со всей группой как с совокупностью. Как в определениях, ну например, «лужайка — небольшое поле с травой». Тут не только связь лужайка — поле. Этого как раз мало, если только такие связи устанавливать, получается каша (все со всем связано).

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

П.С.2 очень странное поведение организаторов Диалога. У вас самая оригинальная разработка имхо из всех, и никакого места не дали. Остальные привезли давно опробованные технологии, которые как то типа доработали. Я вам отдаю второе место уверенно )) Ну только потому что Компренто переплюнуть трудно одному ))
«лужайка — небольшое поле с травой». Тут не только связь лужайка — поле. Этого как раз мало, если только такие связи устанавливать, получается каша (все со всем связано).


Я не совсем понял смысл вопроса, поэтому просто сообщу, как я такую ситуацию использую. Действительно, я специально формировал «определяющие слова». Для получения определяющих слов я брал большой объём статей из толковых словарей (с dic.academic.ru) и вычислял частоту каждого из слов, встречавшихся в определениях. Тогда, для каждого конкретного определения можно высчитать, насколько частота слова в этом определении больше средней частоты слова по всем определениям. И несколько наилучших результатов — запоминал в базе. По смыслу получается аналогом N-грамм. Связь один ко многим с весовыми коэффициентами.

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

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

В такой концепции наличие большого количества связей — несомненное благо.

люди в диалоге опираются на общую картину мира, которая не эксплициролована в диалоге


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

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

Если получится, будет похоже на разговор с сильно рассеянным человеком, который не помнит предысторию разговора, и не преследует в разговоре каких-то целей. На каждую реплику будет говорить первое, что пришло в голову, и всё. Но тем не менее, это будет уже диалог. Ну и отработка технологий, разумеется.
По ответу в принципе я понял, как Вы решаете этот вопрос. У Вас правда не сама «лужайка» получится, что является «определителем» этого определения, а например, «поле». Ну не суть. Я скорее про Ваш же пример «семейная большая машина» -> «минивэн» (сейчас прочитал). Вы там показали как эти связи можно было бы ловить. И по сути обратная задача тоже имеет место — «минивэн» активирует как бы связный «фрейм» «большая семейная машина». То же интересный результат ))

По поводу нейронных ансамблей, совершенно верно, с одним уточнением — есть распространенные слова, а есть специфические. Первые хороши для распространения активации, а вот вторые более ценны для выбора конкретного ответа. Для этого надо выравнивать их веса, чтобы распространенные, которые одинаково связаны со всем и вся, не «зашумляли» селективное действие специфических лемм. Кроме того, бОльшую роль должны имхо играть число связей, а не вес отдельных N-грамм. Вы уже играли с этим насколько я понял? И если не секрет, на какой базе можно все эти «распространения активации» учитывать и оперативно подсчитывать? Даже не представляю при нескольких миллионах слов и… много связей.

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


Играл. Получил первые обнадёживающие результаты. Всё сделано своими ручками, на чистом C, с примесями. В ближайшее время я выложу в открытый доступ тот пример, который реализует вопрос-ответное обучение по аналогии. Там есть несколько хитростей реализации, но никаких фундаментальных проблем. Всё выливается в сравнения больших сортированных массивов — довольно примитивно с точки зрения реализации.
Результаты игры — это именно то, что описано в презентациях? Или есть еще примеры? Обучение у вас как реализовано, так как описано в ЖЖ? Может есть смысл сделать прям такой интерфейс дообучения, я бы с удовольствием поучаствовал учителем ))

«Всё выливается в сравнения больших сортированных массивов» — в этом и вся суть подхода, ну и в данных. Мы не использем, например, гиперонимы из вики, только N-граммы из текстов. Вытащить точно связи из такого сильно связного массива очень непросто имхо. Тут как раз дело в тонкостях.Мне кажется Вы уже столкнулись с ними.

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


Можно. буду рад продолжение общения.

Обучение у вас как реализовано, так как описано в ЖЖ?


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

«В частности, я понял, что обучать вручную, давая на каждый из вариантов вопроса свой вариант ответа — путь тупиковый»

Это да, тут нужен массовый корпус для статистики. Например, на ответы@мейл ру как то обработать. Но там «слишком много букоф», надо выделять тогда что то простое и однотипное из вопросов и ответов.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории