Где я могу найти реальную статистику о типовом мире?
Я пытаюсь сопоставить текст ввода с внутренними объектами, и люди склонны совершать орфографические ошибки.
Существует 2 типа ошибок:
-
typos
- "Helllo" вместо "Hello" / "Satudray" вместо "Saturday" и т.д. -
Spelling
- "Шикаго" вместо "Чикаго"
Я использую расстояние Дамерау-Левенштейна для опечаток и Double Metaphone для написания (реализации Python здесь и здесь).
Я хочу сосредоточиться на Damerau-Levenshtein (или просто edit-distance
). Реализации учебников всегда используют "1" для веса делеций, замен вставки и транспозиций. Хотя это просто и позволяет использовать хорошие алгоритмы, он не соответствует "реальности" / "реальным возможностям".
Примеры:
- Я уверен, что вероятность "Helllo" ( "Hello" ) больше, чем "Helzlo", но они оба находятся на расстоянии от редактирования.
- "Gello" ближе, чем "Qello" к "Hello" на QWERTY-клавиатуре.
- Юникодские транслитерации: что такое "реальное" расстояние между "Мюнхен" и "Мюнхен"?
Каким должен быть вес "реального мира" для делеций, вставок, замещений и транспозиций?
Даже Норвиг очень крутой корректор заклинаний использует невесомое расстояние редактирования.
BTW- Я уверен, что веса должны быть функциями, а не простыми поплавками (в соответствии с приведенным выше примеры)...
Я могу настроить алгоритм, но где я могу "узнать" эти веса? У меня нет доступа к данные Google-масштаба...
Должен ли я просто угадать их?
EDIT - попытка ответить на вопросы пользователя:
- Мой текущий невзвешенный алгоритм часто не работает, когда сталкивается с опечатками по вышеуказанным причинам. "Возвращение в четверг": каждый "настоящий человек" может легко сказать, что четверг более вероятно, чем во вторник, но они оба находятся на расстоянии 1-править на расстоянии! (Да, я регистрирую и измеряю свою производительность).
- Я разрабатываю поисковую систему NLP Travel, поэтому мой словарь содержит ~ 25 000 пунктов назначения (ожидается, что он вырастет до 100K), Time Expressions ~ 200 (ожидается 1K), выражения People ~ 100 (ожидается 300), Money Expressions ~ 100 (ожидается 500), "логические слова клея" ( "от", "красивая", "квартира" ) ~ 2K (ожидается 10K) и т.д.
- Использование расстояния редактирования отличается для каждой из вышеперечисленных групп слов. Я пытаюсь "автоматически корректировать, когда очевидно", например. 1 отредактируйте расстояние от 1 другого слова в словаре. У меня есть many другие настраиваемые вручную правила, например. Двойное исправление метафона, которое не более чем на 2 расстояния редактирования от словаря с длиной > 4... Список правил продолжает расти по мере того, как я узнаю из реального мира.
- "Сколько пар словарных статей находится в пределах вашего порога?": хорошо, это зависит от "причудливой системы взвешивания" и от реального мира (будущего) ввода, не так ли? Во всяком случае, у меня есть обширные модульные тесты, так что каждое изменение, которое я делаю в системе, только делает его лучше (на основе прошлых входов, конечно). Большинство букв под 6 букв находятся в пределах 1 расстояния редактирования от слова, которое находится на расстоянии 1 от другого словаря.
- Сегодня, когда есть два словарных словаря на одном и том же расстоянии от ввода, я пытаюсь применить различные статистические данные, чтобы лучше понять, что имел в виду пользователь (например, Париж, Франция, скорее всего, появится в моем поиске, чем Париз, Иран).
- Стоимость выбора неправильного слова возвращает полуслучайные (часто смешные) результаты для конечного пользователя и потенциальную потерю клиента. Стоимость непонимания немного дешевле: пользователю будет предложено перефразировать.
- Стоит ли стоить стоимости? Да, я уверен, что так оно и есть. Вы не поверили бы, что количество опечаток, которые люди бросают в систему, и ожидать, что это будет понятно, и я мог бы уверенно использовать повышение в Precision and Recall.