Я постоянно пишу с ошибками. Поэтому хочу рассказать про крутой сервис, который мне помогает. Заодно и пропиарить опенсорс альтернативу корпоративным облакам.
С машинным обучением проверка правописания стала сильно умнее, чем то, что раньше было в 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/
Я давно еще на Мак поставил приложуху FridayGPT - это по факту клавиатурный ассистент, который применяет промпты к выделенному тексту. Грамар чек и рерайт стали самым частым юзкейсом. Работает на удивление очень быстро (главное юзать простую модель), правда тербует АПИ ключ к ОпенАИ/Клауде. Я теперь вери флуент спикер в Слаке.
Топ за свои, реально лайфченджер. Намного удобнее того же Грамарли, который назойливо пихает свою иконку во все щели, но все же эта апка его полностью не заменила мне.
Писал об этой апке еще давно у себя в конале. Там еще есть код на скидос, сама апка не очень дорогая - 30 баксов.
Пробовал одно время. Советую DeepL/Write ещё попробовать.
RayCast мне это всё заменил.
Конечно, всё отправляется на сервер openai/Claude, ждём когда Эпл выпустит свой приватный AI наконец.
А вот мой яндекс-ко^WДокерфайл:
https://github.com/shaman007/Dockerfiles/tree/main/languagetool
Выглядит интересно, но преимущество ChatGPT всё ещё в том, что он может не только проверить грамматику, но и заменить куски фраз на более идиоматические. Или для официальных переписок использовать бюрократическо-корпоративный тон конкретной страны если попросить его переписать текст так, как если бы он был образованным чилийцем, британцем или американцем. Раньше для этого приходилось подолгу гуглить в кавычках, чтобы проверить говорят ли так носители языка.