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

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

> программа «мыслит по-человечески», а на выходе все-таки более вменяемый результат
Результат-то более вменяемый, но гораздо менее лояльный к более-менее авторским текстам. Ну, например: «А все ли иконки ворда освящатся после этого патча?».

Кроме того, программа мыслит совсем не по-человечески. По-человечески — это точно не сопоставить слово с таблицей на три с половиной тысячи записей.

Но в целом препроцессор штука прекрасная. Если не убивать сгнившие листья, а понижать им вес до _почти_ нуля.
Добрый вечер. Конечно, здесь в сообщении основная тема иная, никакой «человечности». Если говорить более точно, то я пишу о т. н. «классической» проблеме спеллчекеров — «неспособности» традиционных спеллчекеров автоматически исправлять ошибки с более менее высокой «валидностью».
Например, все «классические» спеллчекеры, в которых используются «алгоритмы Левенштейна», «расстояние Хэмминга» и даже «метод Soundex» на выходе явно избыточны. Так, ошибочное слово сравнивается тем или иным образом с «возможно истинным», определяя «расстояние», необходимое для перестановки букв, чтобы превратить какое-либо слово в набор «возможных» слов: возьмем ошибочные слова «колубель» и «преключение», на выходе программы aspell (или подобной) мы получим букет «возможных правок». Полученные варианты «правки» слова «преключение» компьютерными программами типа aspell, myspell: переключение, преклонение, приключение, перезаключение, приключении, приключений, переключен, переключенные — и это не все варианты! 
На «колубель» варианты следующие: колу-бель, колу бель, кобель, колебля, колеблешь, клубень, колыбель, колыбелью, колыбели, кабель, колыбелька, колыбельки, колыбельку & etc.
Как из «колубели» получается кобель и «заколебал» остается глубокой тайной работы современных программистов (хотя очевидно, что мы видим работу алгоритма Левенштейна).
В данном сообщении я пишу о возможных решениях этой проблемы, позволяющей с той или иной точностью решать задачи автоматической правки ошибочного написания слова. Что интересно — подобные вышеописанному алгоритмы с успехом будут править и слова с ошибочными двойными гласными, согласными и т.д.
Я обязательно продолжу эту тему, как только будет свободное время. Конечно, перейду к стохастическим грамматикам и биграммам, триграммам & etc
Чистого Левенштайна никто (надеюсь) не применяет, применяют Дамерау-Левенштайна, который, вообще-то тоже совсем не для этого. Надо измерять расстояние не просто против словарных вхождений, а против целого набора параметрических характеристик (например, упомянутых вами триграфов). Тогда по совокупности результат будет гораздо более внятный.

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

Я недавно поставил вычислительный эксперимент, а именно — обработал логи поисковых запросов Word2Vec. Получились весьма любопытные результаты:

Enter word or sentence (EXIT to break): колубель

Word: колубель Position in vocabulary: -1
Out of dictionary word!

Enter word or sentence (EXIT to break): преключение

Word: преключение Position in vocabulary: 124515

Word Cosine distance
— приключение 0.748698
преключения 0.726111
приключения 0.692828
приключеия 0.670168
прключение 0.666706
приключеня 0.663286
прключения 0.660438
приключени 0.659609
приклучения 0.650463
приклучение 0.649844
приклюения 0.637038
приклчения 0.630362
приключене 0.621822
приключния 0.621201
преклучение 0.617969
приклечение 0.607291
приключениия 0.606688
прикючения 0.602498
приклюния 0.600069
приключние 0.598981
прилючение 0.594954
приклюцение 0.594346
пиключения 0.593655
риключения 0.591968
приклбчение 0.590200
приклюение 0.589287
приключ 0.587898
прикдючения 0.585709
приклю 0.583770
прикльчения 0.581953
прикльючения 0.580703
приключенья 0.578545
пиключение 0.571432
прилючения 0.569031
приколючения 0.567267
приклоючения 0.566944
нриключения 0.560486
прикльчение 0.559658
приклчение 0.559222
прикллючение 0.558327



Это говорит о том, что слово «колубель» вообще ни разу не встретилось за несколько миллиардов уникальных запросов. Люди, ищущие колыбель, так не ошибаются. Они ошибаются так:

Enter word or sentence (EXIT to break): колыбель

Word: колыбель Position in vocabulary: 23910

Word Cosine distance
— калыбель 0.705157
колыбели 0.507207
колыбелька 0.483677
люлбка 0.471562
колыбельная 0.454978
эманация 0.444692
зыбка 0.440952
колыбел 0.439369
колыбелью 0.432894
кроватка 0.429658
качалка 0.428552
sip2132se 0.425523
электрокачель 0.425489
колыбельку 0.422677
качеля 0.419852
качель 0.414338
кокон 0.411337
кочалка 0.408711
колыбельные 0.407508
sip1728se 0.400879
сокровищница 0.395137
sih1528se 0.394529
люлька 0.394288
дневнего 0.394247
sih1730se 0.392788
спасительница 0.392640
sim924e 0.392407
империя 0.379475
h924rx 0.377885
кочель 0.377152
люлечка 0.376139
шезлонг 0.374627
древняй 0.374593
sih1226e 0.374286
качели 0.374042
хейзен 0.373382
sil924r 0.372253
богиня 0.370900
королевство 0.369769
древо 0.369519

К слову сказать, несколько лет назад С. А. Крылов из РГГУ предложил использовать поисковые технологии для создания лингвистических систем. Конечно, «в общем» эта идея очень интересна и привлекательна, но с некоторыми оговорками. Так, мы все понимаем, что «поисковик» (если говорить о Google), работая с массивами текстов, будет очевидно отражать какую-то «социолингвистическую» картину — как ее понимал наш российско-советский академик Ларин. То есть, Google на выходе можно использовать как статистический массив (как в вашем эксперименте с Word2Vec), но с определенного рода ограничениями. Однако даже в этом случае поисковик «исправляет» неправильное написание некоторых слов.
Это легко показать на следующих примерах: а)
«заборомлуг» — Гугль абсолютно логично выдаст следующий вариант «за забором – луг», опустив, правда, вариант «за бором луг»; б) «колубель» остается «колубелью», так как в кэше Гугля это слово есть, но «преключение» однозначно превращается в «приключение»; е) мировозрение — мировоззрение; рубак — рубаки, а не «рыбак» и т.д.; «тероррист» остается «терорристом», но «галюцинации» превращаются в «галлюцинации» и т. д.
Поэтому последние месяцы меня все более соблазняет мысль, что в программы проверки орфографии (и даже пунктуации) следует встраивать классы работы со статистическими массивами. В нашей программе мы реализовали поиск по биграммам и получили весьма любопытные результаты. По крайней мере «тесты» Штольке уже не показывают полную бессмыслицу.
Добро пожаловать на Хабр, коллега. интересно пишете
добрый день, Сергей. Ну, Диалог почти «погиб», так что решила здесь общаться
Вопрос к Автору. Не очень знаком с этой темой, но появилась идея. В подобных системах как то используют физическую раскладку клавиатуры? Например, буква А и П стоят рядом и, значит, вероятность того, что в обычном слове вместо правильной буквы А я случайно напишу П выше чем Ъ просто потому, что А и П рядом, а А и Ъ далеко на клавиатуре. Используется эта информация как то?
Доброй ночи. Это вопрос к Дмитрию Калашникову, см здесь orfogrammka.ru/
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории