Я постоянно пишу с ошибками. Поэтому хочу рассказать про крутой сервис, который мне помогает. Заодно и пропиарить опенсорс альтернативу корпоративным облакам.
С машинным обучением проверка правописания стала сильно умнее, чем то, что раньше было в Microsoft Word. Не просто описки в словах — но и ошибки в грамматике (типа неправильного склонения или забытого the).
Многие пользователи видели этих новых систем проверки орфографии на примере Grammarly. Это до сих пор лучшая проверка английского текста, но у неё есть две проблемы:
- она отправляет весь ваш текст на сервер. Если вы поставили расширение в браузер — то они могут знать всё, что вы пишете в браузере.
- она поддерживает только английский.
Поэтому я хочу рассказать о крутой альтернативе Grammarly — LanguageTool:
- Это такая же новая умная система проверки орфографии, которая подсказывает и по грамматике.
- Её можно (с некоторыми ограничениями) запустить локально и быть уверенным, что никто не читает ваши переписки.
- Она поддерживает кучу языков включая русский, украинский, белорусский, испанский, каталонский (привет, барселонские) и кучу ещё языков.
- Её можно интегрировать в браузер, VS Code, Obsidian, vim.
- Бо́льшая её часть — опенсорс. Тайный культ среди программистов будет доволен.
Да, она английский будет проверять хуже Grammarly (но не так сильно). Но для многих поддержка русского или испанского будет важнее. А важный текст на английском всегда можно загнать в Grammarly.
Пробуем
Если интересно, то так можно попробовать LanguageTool:
- На их сайте есть поле, куда можно вбить любой текст и посмотреть, насколько много ошибок она находит.
- Если понравилось, то можно поставить расширение в браузер (поддерживаются практически все) и в систему (Windows, Mac, iOS).
- Посмотрите список ПО, куда можно добавить LanguageTool. Например, там есть VS Code и vim.
Эти шаги включат проверку правописания в облаке — то есть они будут видеть, всё что вы пишите.
Поэтому, если она вам понравится, я бы рекомендовал подумать о том, чтобы запустить её локально.
Запускаем локально
Облако — это просто чей-то другой компьютер. Зачем там запускать то, что вы можете запускать локально.
LanguageTool с открытыми исходниками, а значит мы можем запустить её локально. Это даст нам:
- Безопасность. Никто не сможет читать наши переписки.
- Поддержка работы в офлайне (я, например, люблю писать документацию в самолёте).
- Скорость работы может вырасти (особенно если у вас не плохой интернет).
Увы, но версия в облаке чуть умнее, чем опенсорсная.
Я ставлю локально, а не использую Docker, так как большинство образов идут без fasttext — без него LanguageTool часто путает язык текста. Плюс образы часто устаревшие.
Инструкция будет для Fedora. Но по ней можно понять, что нужно делать в другом дистрибутиве Линукса или Windows и Mac.
LanguageTool становится умнее с огромными n-граммами — вероятностями появления сочетаний букв в языках. Посмотрите список на сайте и скачайте те языки, которые вам нужны.
mkdir -p ~/.local/share/ngrams
cd ~/.local/share/ngrams
wget https://languagetool.org/download/ngram-data/ngrams-en-20150817.zip
wget https://languagetool.org/download/ngram-data/untested/ngram-ru-20150914.zip
unzip ngrams-en-20150817.zip
unzip ngram-ru-20150914.zip
rm ngram*.zip
Наличие fasttext сильно улучшает автоопределение языка:
sudo dnf copr enable fcsm/fasttext
sudo dnf install fasttext
mkdir -p ~/.local/share/fasttext
cd ~/.local/share/fasttext
wget https://dl.fbaipublicfiles.com/fasttext/supervised-models/lid.176.bin
Для работы нужна будет Java:
sudo dnf install java-17-openjdk
Скачиваем сервер и ставим его в систему (он не обновляется сам и лучше повторять операцию раз в полгода):
wget https://languagetool.org/download/LanguageTool-stable.zip
unzip LanguageTool-stable.zip
rm LanguageTool-stable.zip
mkdir -p ~/.local/lib/languagetool
mv LanguageTool-*/* ~/.local/lib/languagetool
rm -R LanguageTool-*
Создаем файл настроек, где связываем компоненты. У меня он будет лежать в ~/.config/languagetool.properties
:
languageModel=/home/ai/.local/share/ngrams
fasttextModel=/home/ai/.local/share/fasttext/lid.176.bin
fasttextBinary=/usr/bin/fasttext
Создаём юнит systemd, чтобы запускать сервер автоматически — ~/.config/systemd/user/languagetool.service
:
[Unit]
Description=LanguageTool Server
[Service]
ExecStart=java -Xms512m -Xmx2g \
-cp .local/lib/languagetool/languagetool-server.jar \
org.languagetool.server.HTTPServer \
--config .config/languagetool.properties \
--port 8081 --allow-origin
[Install]
WantedBy=default.target
Включаем сервис:
systemctl --user enable --now languagetool.service
Открываем настройки всех расширений и меняем сервер с облака на localhost
.
Ну и помните, что опенсорнсый — не значит бесплатно и важно платить за себя, чтобы проект всегда был на плаву. Правда, при локальной установке, функции Premium всё равно не доступны. Но я плачу им за Premium, чтобы проект не закрылся.
Глянул, прикрутили ли они LLM, похоже, что только в облаке, а локально всё те же старые n-grams и fasttext. Они нормально справляются с опечатками в стиле fat fingers, но неправильный выбор слов не подсветят. Пользовался одно время LanguageTool, но забросил, т.к. n-grams занимают очень много места на диске и заметно тормозят при проверке.
Сейчас появилось несколько условно-опенсорсных LLM, которые работают локально на CPU, было бы любопытно что-то на их основе для локальной правки текстов попробовать
Смотрел и на languagetool, и на Grammarly в проекте по коррекции языка в статьях. К сожалению, у language tool было слишком много false positives. И по бенчмаркам, и субъективно Grammarly - state of the art пока. Мы еще смотрели на кучу сторонних решений, слушал штук 7 питчей. С LLM-ками все экспериментируют, но они слишком словоохотливы, порой могут все начисто переписать, где ты ждешь от них просто коррекции. Так что тут юзкейс больше как раз для специализированных DL-моделей и эвристик, а не LLM (что Grammarly и делает).
Из забавного, если вы живёте в Бранденбурге, то ваши налоги спонсировали разработку этого проекта. (но премиум вам бесплатно не дадут)
Спасибо! Но особое спасибо за заголовок поста. Это - идеальный заголовок. Все бы такие были.
Language Tool легко разворачивается на своем сервере в Docker. Можно и свой комп не ковырять, и получить (почти) все бенефиты сервиса не отдавая им свой текст.
Увы, для русского языка бесполезна, разве что опечатки в словах заменять, и то, только совсем явные (см.ниже), но это и так в ворде и браузерах встроено. Например, в первой части этого поста нашел как минимум 2 ошибки-описки (специально не искал, просто на глаза попались), но софтина (через поле на их сайте) этих ошибок не нашла, подсветила только "опенсорс".
А вот чатгпт нашел обе (1 и 5 пункт), и кроме того кое-где исправил выражения, хотя я не просил:
связанный проект недавно запостили https://vas3k.club/project/25144/
Пробовал одно время. Советую DeepL/Write ещё попробовать.
RayCast мне это всё заменил.
Конечно, всё отправляется на сервер openai/Claude, ждём когда Эпл выпустит свой приватный AI наконец.
А вот мой яндекс-ко^WДокерфайл:
https://github.com/shaman007/Dockerfiles/tree/main/languagetool
Выглядит интересно, но преимущество ChatGPT всё ещё в том, что он может не только проверить грамматику, но и заменить куски фраз на более идиоматические. Или для официальных переписок использовать бюрократическо-корпоративный тон конкретной страны если попросить его переписать текст так, как если бы он был образованным чилийцем, британцем или американцем. Раньше для этого приходилось подолгу гуглить в кавычках, чтобы проверить говорят ли так носители языка.