О смягчении нравов, продолжение

Поиграл тут еще с некоторыми примерами от NLTK. Был неприятно удивлен производительностью и тем, как эта штука жрала память, урча маянезиком. Я пока особо не лез во внутренности nltk.probability.FreqDist (подозреваю, что во всем виноват этот класс), но кажется, это довольно примитивная обертка над обычным ассоциативным массивом — так что я удивлен вдвойне тем, что на небольшом, в общем-то, наборе данных отожралось 2-3 гигабайта памяти «на ровном месте». Задача в целом довольно тупая — надо найти в тексте наиболее часто встречающиеся последовательности из нескольких подряд идущих букв (это называется «символьные N-граммы» и иногда даже используется).

Задача в общем-то тривиальная, и на любом нормальном языке программирования решается почти элементарно — я оценил бы простое решение (без поддержки Unicode, только для одного-двух языков, etc) на plain C где-то в пару часов работы. Расход памяти — небольшой, сравнимый с объемом данных — думаю, что в мегабайт даже можно уложиться. Скорость работы — ну не знаю, сколько там времени надо на проход по массиву? Ну да, я понимаю, что показывать NLTK программистам нельзя — но вот я уже как-то сомневаюсь, что с его помощью можно решать задачи филологов.

Но самое важное — запускали мы это на Macbook Air 2015, кажется, года — и до вчерашнего дня его хозяйка не знала, какой там стоит процессор и сколько памяти. Для любых нормальных человеческих задач (ну там сайтики, кино, музыка) их в целом хватало. И вот с одной стороны, конечно, хорошо, что сейчас, в 2018 году, о том, что такое процессор, и сколько в твоем ноутбуке оперативной памяти, и даже о том, зачем она нужна, можно не задумываться. А с другой — даже эти невероятные по меркам двадцатилетней, скажем, давности (да, я такой старый, что у меня еще остались недоигранные партии в HoMM II) ресурсы все равно тратятся каким-то диким образом. Какой-нибудь примитивный байесовский классификатор (их с середины 90-х используют для определения, является ли email спамом или нет) требует для своего функционирования несусветных объемов памяти, а работает неприлично медленно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *