Перейти к содержанию

Скорость и память

Разбор и лемматизация в ruMorph в 6-8 раз быстрее, чем в pymorphy3 с ускорением pymorphy3[fast], и в 31-63 раза быстрее, чем в pymorphy3 без него; inflect и agree - в 15-18 раз. Списки слов разбираются без GIL, поэтому несколько потоков с одним анализатором работают параллельно. Словарь загружается за 5 мс, в 6 раз быстрее, чем в pymorphy3, и занимает в памяти меньше, чем у pymorphy3[fast]; процессы делят словарь, поэтому каждый следующий процесс с анализатором занимает около 1,4 МБ.

Скорость

Тысяч слов или разборов в секунду, больше - лучше:

Операция ruMorph pymorphy3 pymorphy3[fast]
Разбор словоформы: analyze в цикле, parse 629 20 105
Разбор списка: analyze_many 641 - -
Лемматизация: lemmatize, parse(word)[0].normal_form 1 391 22 170
Лемматизация в 4 потоках: lemmatize 4 210 - -
Форма по признакам: inflect(Case="Gen"), inflect({"gent"}) 1 338 76 76
Согласование с количеством: agree(5), make_agree_with_number(5) 1 284 85 85
Формы лексемы: forms(), lexeme 62 32 32

Загрузка и память

ruMorph pymorphy3 pymorphy3[fast]
Импорт и загрузка словаря 5 мс 30 мс 31 мс
Прирост памяти процесса 16,2 МБ 34,5 МБ 25,5 МБ
Каждый следующий процесс 1,4 МБ 32,5 МБ 23,1 МБ

Анализаторы с одним файлом словаря в процессе делят словарь. Файл словаря отображается в память, поэтому процессы multiprocessing, joblib или воркеры веб-сервера делят и его: каждый следующий процесс добавляет только собственные таблицы анализатора.

Как измерено

  • Компьютер - Apple M3 Pro, macOS 26, Python 3.11; ruMorph 0.2.0.dev1, pymorphy3 2.0.6 со словарем pymorphy3-dicts-ru 2.4.417150.4580142; pymorphy3[fast] - то же с расширением DAWG на C++.
  • Слова - 128 251 словоформа тестовой части UD_Russian-SynTagRus без знаков препинания, в порядке текста. Время - лучшее из трех прогонов в одном потоке, кроме строки с потоками.
  • inflect - родительный падеж первых разборов с падежом, agree - первые разборы существительных с числом 5, forms - первые разборы первых 20 000 слов.
  • Память - прирост резидентной памяти процесса (ps -o rss) после импорта библиотеки и создания анализатора, время - импорт, создание анализатора и первый разбор. Следующий процесс - прирост памяти, которую процесс не делит с другими (USS), в каждом из четырех процессов multiprocessing с анализатором.