January 5th, 2019

Бритоголовый и С1-97

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

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

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

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

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).