WordSyn: новый виток эволюции
Рынок синонимайзеров растет и развивается не по дням, а по часам. Все, кому не лень, пишут свои синонимайзеры, продвигают их, хвалят, и при этом пытаются рассказать о том, что их продукт на порядок лучше продуктов конкурентов. Но опытный пользователь, попробовавший несколько синонимайзеров, понимает, что, в принципе, все они на одно лицо, и что принцип действия всех синонимайзеров одинаков до безобразия.
Дело в том, что все известные мне синонимайзеры работают по одному и тому же принципу: текст разбивается на слова, а потом для каждого из слов показываются все известные программе синонимы. Причем синонимы подбираются без учета контекста. Кроме того, только один синонимайзер (и тот - мой) работает с морфологией, то есть может приводить любой синоним к грамматической форме того слова, чьим синонимом оно является. К сожалению, мой синонимайзер работает по тому же принципу, и, по большому счету, ничем не отличается от продуктов моих конкурентов.
Придя к такому невеселому заключению, я целую неделю раздумывал над тем, как улучшить качество синонимизации, и наконец-то придумал. Решение лежало на поверхности, а я его не замечал. Итак, (фанфары!), решение: нужно подбирать синонимы для слов на основании статистических данных об использовании пар существительное-прилагательное (с-п), прилагательное-существительное (п-с), существительное-глагол (с-г), глагол-существительное (г-с), глагол-прилагательное (г-п) и делать это в пределах каждого из предложений, из которых состоит текст.
Поясню на примере. Допустим, у нас есть следующий текст:
мягкие игрушки дарят детям радость
После прохода синонимиайзера мы получаем вот такую формулу:
{нежные|приятные|пухлые|снисходительные} {игрушечки|развлечения} дарят детям {веселье|восторг|ликование|потеха|развлечение}.
Рассмотрим первую пару из этой формулы: {нежные|приятные|пухлые|снисходительные} {игрушечки|развлечения}. Опыт подсказывает нам, что не бывает пухлых развлечений, так же как не бывает и снисходительных игрушечек. Зато и игрушечки, и развлечения бывают и нежными, и приятными. Следовательно, мы должны преобразовать формулу вот в такую: {нежные|приятные} {игрушечки|развлечения}. Вручную сделать это очень просто: мы знаем, какие пары слов имеют право на существование, а какие - нет. У программы же этих знаний нет, так как она этому не обучена. Но кто же мешает сделать это? Никто.
Научить программу делать выбор нужных пар достаточно легко. Все, что нам нужно сделать для этого, так это дать программе информацию о том, какие пары слов встречаются, а какие - нет. Для этого необходимо написать маленькую программку, которая будет “кушать” тексты, разбирать их на слова, а пары слов, принадлежащие указанным выше парам частей речи, записывать в базу. После обработки пары сотен больших текстов у нас будет достаточно большая база пар слов, которую мы сможем использовать для подбора наиболее подходящих кандидатов из списка синонимов.
Таким образом, читабельность текстов будет повышена в разы, и в текстах никогда не встретятся ни “пухлые развлечения”, ни “снисходительные игрушечки”.
К сожалению, задача разделения текста на пары по грамматическим признакам под силу только той программе, которая работает с морфологией. Я повторюсь, что из всех известных мне программ, только мой вордсин умеет работать с морфологией, то есть он запросто определяет, к какой части речи принадлежит каждое из слов, а также приводит синонимы любого слова к нужной грамматической форме. Именно поэтому я не опасаюсь выкладывать эту идею на блоге - никто из моих конкурентов не сможет реализовать ее без использования грамматической библиотеки. Кроме того, даже если это и будет сделано, то перечисление пар слов во всех грамматических формах может увеличить словарь этих программ до нескольких сотен мегабайт.
Разработка программы для разбора словосочетаний может занять от одной до трех недель. Обработка необходимого количества текстов может занять от трех до шести недель - это будет зависеть от скорости компа, на котором я буду это дело делать. Внедрение базы в синонимайзер может занять от двух до четырех недель, так как придется достаточно сильно переделывать существующий подход к синонимизации, использованный в программе. В общем, через пару-тройку месяцев должна появиться новая версия синонимайзера WordSyn, которая будет делать абсолютно читаемые тексты. Следите за новостями!



24.11.2008 в 17:31
Ура, ты наконец дошел до этого
Я именно с этого и начинал - потому как простая замена слов (даже с учетом морфологии) - тупиковый путь.
24.11.2008 в 21:42
Мне постоянно говорили, что надо делать еще и синонимизацию словосочетаний. Но это тоже не совсем то, так как статистические методы намного более точны, чем случайные.
А у тебя тоже есть свой синонимайзер?
24.11.2008 в 23:00
Синонимизация словосочетаний (даже при условии хранения слов в “базовой форме”) не спасает от проблем с согласованием родов, чисел и времен во всем предложении.
Так что просто “обучив” синонимайзер мы просто будем отбрасывать варианты, которые не использует человек. По качеству будет почти как в 1 случае, но намного менее трудоемко.
Так что пути ровно 2:
1. Полный разбор предложений и построение дерева зависимости слов. При изменении - согласование со всеми связанными. Тут для начала изучать AOT.ru и много думать.
2. Статистика. Не зря Марков дает согласованный текст
Синонимайзер у меня в процессе написания. Пока обкатываю разные способы и мысли. И вобще - буду к тебе в аську стучать
25.11.2008 в 00:56
Согласен - построение синтаксического дерева предложения - та еще задача, хоть и выполнимая для большинства предложений. Со сложноподчиненными предложениями сложнее, но и тут задача решима.
Если сравнивать предложенные тобой варианты, то первый окажется более трудоемким, и не факт, что получится хорошо. Во втором случае можно ожидать неизменность грамматической структуры предложения, но результат будет достаточно ожидаем, причем качество результата будет находиться в пределах статистической погрешности, допущенной во время поиска грамматических пар.
Жду в аське. В рабочее время я доступен постоянно. В остальное - не всегда. Буду рад пообщаться!
07.12.2008 в 11:11
добавлю свои 5 коп.
в попытке подбирать синонимы путем нахождения их повторяемости есть одно логическое несоответствие:
по определению синоним - другое обозначение такого же понятия. Если мы пытаемся сохранить смысл (а это является 1-й задачей при синонимизации) понятия не должны меняться, и, следовательно если два синонима вместе не употребляются, значит это не синонимы, понимаете? В Вашем примере: приятный и мягкий - синонимами назвать ну никак нельзя. Вопрос в другом, как составить правильный алгоритм сверки и где найти адекватную базу синонимов?
07.12.2008 в 21:21
На самом деле стоит задача поиска повторяемости пар слов, а не слов самих по себе. Именно эту задачу я и описал в этом посте. Кстати, на данный момент обработано 200 миллионов слов, а база пар слов составляет около 25 миллионов пар. Теперь осталось дождаться окончания обработки хотя бы половины текстов, затем выбрать наиболее употребимые пары и найти все синонимы для этих пар. Думаю, еще пара-тройка недель, и все будет готово.