Telegram бот для изучения языков
Не так давно я переехал в Финляндию и решил, что местный язык знать нужно. Занимаюсь с учителем онлайн, всё идёт хорошо, язык оказался не таким сложным, как казалось, но, пожалуй, самая большая проблема — увеличение словарного запаса. Сначала я решил пользоваться теми решениями, что есть. Но быстро понял, что они мне не очень подходят.
Пришлось самому написать небольшой бот для Телеграма, который можно использовать для изучения практически любого языка.
Что уже есть и почему мне это не понравилось.
Во-первых, для финского языка не так уж много языковых приложений. Изучать язык по приложениям, построенным вокруг статичного контента я не хочу — есть у меня свои интересы, потребности и желания, которые, как правило, не совпадают с тем, что предлагают авторы таких приложений.
Поэтому решил посмотреть в сторону простых программ для запоминания лексики. Пробовал работать с Lexilize Flashcards, Quizlet и, конечно, Anki.
Не буду подробно разбирать все их плюсы и минусы, так как они, уверен, большинству знакомы, суть их проста, а проблемы одинаковы. Напомню лишь, что это программы для запоминания неких концепций (не только слов иностранного языка), основанные на идее flash cards и интервального повторения.
Я довольно упорно пытался заниматься по этим приложениям, но быстро заметил, что значительное время уходит на собственно создание самих словарных карточек. Использовать готовые наборы тоже не получалось, так как они не вполне соответствовали моим задачам — каких-то слов там не было, а какие-то слова, которые в наборах присутствовали, мне были не нужны.
Я также заметил, что для создания карточек в основном пользуюсь таким словарным ресурсом, как Wiktionary. Естественно, если чем-то постоянно пользуешься, то стоит задуматься об автоматизации этого процесса.
Поэтому задача была создать такое приложение, которое помогало бы с созданием словарных карточек, было простым и полезным.
Что я делал
Сразу оговорюсь — я не программист и в плане кодинга мне делиться нечем. Именно поэтому я решил максимально использовать готовые решения и не изобретать велосипед.
Чтобы не заниматься фронт-эндом я решил написать бот для Телеграма, так как слышал, что именно эта платформа наиболее удобна для написания ботов (если ошибаюсь, напишите в комментариях). В качестве языка программирования выбрал Python 3.7 и обёртку Telegram bot API под названием aiogram.
Так как раньше я ничего подобного не писал, пришлось немного почитать, поэкспериментировать и за несколько дней удалось написать бот.
Что получилось
Получился полезный (как минимум, для меня) инструмент для пополнения словарного запаса.
Основные функции:
- загрузка значений из Wiktionary
- интервальное повторение
- формирование навыка узнавания слова (пассивное владение)
- формирование навыка написания (активное владение)
- работа с ошибками пассивного и активного владения
- возможность добавления произвольных значений (если в Wiktionary нет информации, что обычно бывает с фразами и редкими составными словами и неологизмами)
- возможность работы с разными языками
Далее я покажу, как работает бот, но не буду утомлять примерами из финского языка, а покажу, как работает бот с английским языком.
Как это работает
Бот пока имеет интерфейс только на английском языке и значения слов тоже на английском. Поэтому он подходит больше тем, у кого уже есть определенный уровень владения английским языком, без него пользоваться ботом не получится.
После того, как пользователь запустил бота командой /start и прочитал небольшой хэлп по его командам (также доступный в любой момент по команде /help), нужно выбрать язык, который он будет изучать (/setlanguage). Название языка нужно писать на английском языке, поэтому, например, пишу English, а не Suomi, когда изучаю финские слова.
После выбора языка можно приступить к добавлению слов /addwords. Всё просто — пишите слово, а Wiktionary выдаёт список значений (на английском). Выбрать можно одно значение.
После добавления слов можно приступить к изучению лексики (/learn) и выбрать то количество слов, с которым хотелось бы поработать на этот раз. Алгоритм интервального повторения выберет самые «забытые» слова (или только что добавленные) и предложит их изучить. Если «забытых» слов не осталось, можно повторить выученные командой /test.
Само изучение слов начинается с формирования пассивного навыка — узнавание слова. Бот показывает слово и задача пользователя вспомнить его значение. Если пользователь уверен, что помнит слово, то нажимает I remember, если не уверен в своих знаниях — Show meaning.
Если показанное значение слова оказалось не тем, о котором думал пользователь, то стоит это честно признать — No, I forgot it. Если же что-то похожее вертелось на языке, можно сообщить об этом боту — Yes, I knew it.
После того, как вы стали уверенно узнавать слова, бот предложит перейти к формированию навыка написания слова по его значению. Пользователю предлагается вспомнить, как пишется слово.
Как видно на скриншоте выше, я сделал ошибку в слове. В этом случае бот предложит ввести его ещё раз, до тех пор пока я не перестану делать ошибки. Обычно на второй или третий раз получается записать любое слово. Ну разве что самые заковыристые и длинные финские слова могут потребовать несколько больше усилий.
Но даже после того, как пользователь справится со всеми словами, бот от него не отступится. Ещё же работа над ошибками! После завершения основного цикла, бот предложит лёгкое повторение только что пройденного на основе обнаруженных ошибок.
Получилось вполне удобное и полезное как минимум для меня простое приложение. Ничего революционного в нём нет, но мне удалось сократить время и усилия на добавление слов. При этом я не жертвую персонализацией обучения, что неизбежно происходит, когда вам приходится добавлять списки слов, сделанные кем-то другим.
Работа над ошибками тоже мне кажется вполне полезным добавлением к интервальному повторению, так как позволяет исправить ошибку и закрепить слово сразу, в течение одной сессии. Это очень важно, так как неисправленная вовремя ошибка может «жить» долго и даже перерасти в неправильно сформированный навык.
Понятно, что можно было бы сделать больше заданий. Как вы думаете, что ещё стоило бы добавить?
Что дальше
У всех подобных систем, при всей их очевидно полезности, есть свои большие недостатки. И связаны они, в первую очередь, с отсутствием контекста изучаемых слов.
Многих очень привлекает наивная по сути своей идея, что, например, изучая, по 10 слов в день, через месяц я буду знать 300 слов, а через год — три с половиной тысячи! Увы, нет. Простая «загрузка» десятков и сотен слов в голову не работает. Мозг за миллионы лет эволюции научился эффективно избавляться от хлама: всё, что не используется, — забывается.
Поэтому правильное использование инструментов типа моего бота заключается в том, что они должны помогать запоминать уже контекстуализированную лексику.
То есть, алгоритм может быть примерно таким — сначала вы берёте текст, пытаетесь его понять. Потом новую и наиболее важную лексику изучаете в «запоминалках» вроде моего бота. И после этого продолжаете изучать слово в контексте — например, составляете свои тексты, пересказываете, делаете диалоги.
Только так будет возможно движение вперёд и слова не будут казаться вашему мозгу ненужным хламом. Именно из-за отсутствия контекста плохо работают списки слов, составленные кем-то другим. Создавайте свои наборы слов, контекст которых понятен вам.
Но не создавайте «тематические» наборы слов (например, по темам «цвета» или «домашние животные»). Лучше делать списки «ситуационными», то есть такими, где слова описывают какую-то ситуацию (например, «чёрная», «собака», «лает», «кошка»). Естественным образом такие списки получаются, когда вы работаете с текстом, пусть даже очень простым и маленьким. Текст сам по себе является контекстом для всех слов в нём.
Из этого следует, что можно сделать ещё один шаг в автоматизации обучения. Можно добавлять слова сразу из текста. То есть, пользователь просто добавляет текст, а система сама определяет, какие слова стоит оттуда взять (необязательно все, есть различные критерии важности слов в тексте). Что думаете по поводу такой фичи? Было бы это полезно?
Чуть не забыл. Имя бота @OppiWordsBot. Буду рад, если вы его протестируете и напишите мне свои замечания, предложения и комментарии.