Техническое. Бенчмарки по опечаткам
Наконец-то я прогнал несколько полноценных тестов по оптимизированному алгоритму и словарю в 1 361 764 слов (1.3 миллиона слов) — спасибо Андрею Сатеренко за словари с скрипт по генерации словоформ. Далее результаты бенчмарков и комментарии.
Как работает алгоритм: алгоритм работает по принципу расчёта edit distance (расстояния Левенштейна) с предварительной фильтрацией словаря под слово. Время его работы складывается из времени получения отфильтрованной выборки из БД и время на рассчёт расстояния Левенштейна для каждого из её элементов.
Как проводился бенчмарк.
1. Словарь в 1 361 764 был загружен в БД, данные реорганизованы для оптимальной работы алгоритма, проставлены нужные для его работы индексы.
2. По другому словарю в 100 000 слов, лишь частично пересекающемуся с первым, была создана выборка слов с однократно внесённой опечаткой. Поскольку не все слова есть в обоих словарях, то у части слов в результате не находится слов близких — так и должно быть.
3. Для каждого слова из выборки с опечатками прогонялся алгоритм который замерял время получения выборки из БД и время рассчёта edit distance.
4. В файл результатов вносились: оригинальное слово, слово с опечаткой, длина слова, время на выполнение SQL запроса, время на сравнение, сколько всего слов было получено из БД, сколько слов подошли под заданное edit distance и результаты через запятую.
В файле результатов, а его можно скачать здесь, spellcheck_mssql_11c.xls бенчмарки только для слов от 11 символов. Для слов меньшего размера результаты лучше, если будет интересно приведу и их тоже.
Комментарии с результатам:
- Результаты даже лучше чем я ожидал, хотя и не без сюрпризов.Изначально тесты я проводил как с MySQL, так и с MSSQL. При этом, оказалось что для MySQL время построения фильтрующей выборки линейно к размеру словаря и, если для словаря в 100 000 слов, время SQL запроса было 0,2 секунды, то для 1 300 000 слов — это 25 секунд, что неприемлимо много. В итоге результаты для MySQL я не привожу — они очень плохи, но для MS SQL 2005 Express Edition результаты оказались ожидаемо быстрыми. Осталось теперь только подобрать кроссплатформенную БД способную решать эту же задачу столько же быстро — PostgreSQL или Oracle.
- Среднее время работы алгоритма в пределах 0.1-0.3 секунды на слово. Во многих случаях гораздо быстрее и реже чуть медленнее.
- Выборка по нескольким словам (5-6 словам) происходила по 2-3 секунды, но это, похоже, недоработка стенда поскольку последующая их перепроверка показывала средние времена. Для идеального теста, конечно, нужен выделенный сервер занятый решением только этой задачи.
- Плюсом алгоритма оказывается простая маштабируемость как в рамках одного сервера так и горизонтально со многими серверами.
- Минусом алгоритма является зависимость от движка СУБД. Этот минус можно перекрыть реализовав его индексы на C или другом языке с возможностью быстрой работы со структурами данных, но большой вопрос нужно ли это вообще. Другой минус в том что для подготовки алгоритма требуется время на построение индексов.
- Этот алгоритм является заменой полного скана с проверкой всех слов в словаре на расстояние Левенштейна от рассматриваемого. В реальной работе словари могут быть значительно уменьшены, в десятки раз соответственно изменится и скорость поиска.
- Для каждого L и для каждого словаря требуется однократная подготовительная работа и построение специальной схемы адаптированной под выборку. Этот процесс может занимать до нескольких дней, но, единожды его проделав повторять его необходимости нет.
И, пробежав ещё раз по публикациям на эту же тему пока не удалось найти аналогичного подхода, видимо можно уже писать научную работу:) Шучу, дело долгое и совершенно нет на это времени.
Поделиться в соц. сетях
Microsoft Translate
Рубрики
- BI (3)
- CEP (1)
- IBM (13)
- Novell (6)
- WTF (1)
- apple (3)
- blogging (61)
- couchdb (3)
- data.gov.ru (250)
- datasets (104)
- diagramming (11)
- e-Government (927)
- eGov (946)
- google (33)
- gtd (5)
- links (65)
- linux (19)
- microsoft (47)
- not so wtf yet (3)
- opengovdata.ru (198)
- opensource (56)
- productivity (2)
- saas (4)
- second life (2)
- security (6)
- semweb (15)
- sun (13)
- virtualization (16)
- vista (2)
- web (223)
- web 2.0 (108)
- wikileaks (1)
- yahoo (11)
- Без рубрики (4)
- Енот Поискун (17)
- Общественное благо (12)
- алгоритмы (73)
- алгоритмы (51)
- аналитика (19)
- антисео (5)
- бывает и такое (8)
- виртуализация (21)
- вопросы (20)
- госзаказ (172)
- идеи (29)
- из жизни (95)
- инновации (27)
- интересные проекты (7)
- информация (108)
- книги (2)
- метапост (1)
- открытое государство (51)
- открытые данные (10)
- поиск (93)
- почти несерьёзно (16)
- размышления (127)
- расшифровка реальности (10)
- робототехника (1)
- руководство проектами (3)
- скиур (19)
- социальные сети (45)
- социоранк (9)
- стандарты (22)
- стоит почитать (21)
- футуристика (1)
- электронное государство (945)
- юзабилити (25)
- юмор (14)
Метки
антиспам госзакупки гослюди госуслуги датасеты дебаты извлечение информации инновации кузьминов метаданные навальный открытое государство открытые данные поиск почти без иронии публичность раскрытие информации расшифровка реальности систематизация социоранг социоранк стартапы форматы файлов футуристика #belyh #rucamp #socamp 94-ФЗ antispam apps4russia icamp icamp2009 md5 ogp open government searchme semweb sha1 ssl usability






