Не так давно я переехал в Финляндию и решил, что местный язык знать нужно. Занимаюсь с учителем онлайн, всё идёт хорошо, язык оказался не таким сложным, как казалось, но, пожалуй, самая большая проблема — увеличение словарного запаса. Сначала я решил пользоваться теми решениями, что есть. Но быстро понял, что они мне не очень подходят.
Пришлось самому написать небольшой бот для Телеграма, который можно использовать для изучения практически любого языка.
Что уже есть и почему мне это не понравилось.
Во-первых, для финского языка не так уж много языковых приложений. Изучать язык по приложениям, построенным вокруг статичного контента я не хочу — есть у меня свои интересы, потребности и желания, которые, как правило, не совпадают с тем, что предлагают авторы таких приложений.
Поэтому решил посмотреть в сторону простых программ для запоминания лексики. Пробовал работать с Lexilize Flashcards, Quizlet и, конечно, Anki.
Не буду подробно разбирать все их плюсы и минусы, так как они, уверен, большинству знакомы, суть их проста, а проблемы одинаковы. Напомню лишь, что это программы для запоминания неких концепций (не только слов иностранного языка), основанные на идее flash cards и интервального повторения.
Я довольно упорно пытался заниматься по этим приложениям, но быстро заметил, что значительное время уходит на собственно создание самих словарных карточек. Использовать готовые наборы тоже не получалось, так как они не вполне соответствовали моим задачам — каких-то слов там не было, а какие-то слова, которые в наборах присутствовали, мне были не нужны.
Я также заметил, что для создания карточек в основном пользуюсь таким словарным ресурсом, как Wiktionary. Естественно, если чем-то постоянно пользуешься, то стоит задуматься об автоматизации этого процесса.
Поэтому задача была создать такое приложение, которое помогало бы с созданием словарных карточек, было простым и полезным.
Что я делал
Сразу оговорюсь — я не программист и в плане кодинга мне делиться нечем. Именно поэтому я решил максимально использовать готовые решения и не изобретать велосипед.
Чтобы не заниматься фронт-эндом я решил написать бот для Телеграма, так как слышал, что именно эта платформа наиболее удобна для написания ботов (если ошибаюсь, напишите в комментариях). В качестве языка программирования выбрал Python 3.7 и обёртку Telegram bot API под названием aiogram.
Так как раньше я ничего подобного не писал, пришлось немного почитать, поэкспериментировать и за несколько дней удалось написать бот.
Что получилось
Получился полезный (как минимум, для меня) инструмент для пополнения словарного запаса.
Основные функции:
- загрузка значений из Wiktionary
- интервальное повторение
- формирование навыка узнавания слова (пассивное владение)
- формирование навыка написания (активное владение)
- работа с ошибками пассивного и активного владения
- возможность добавления произвольных значений (если в Wiktionary нет информации, что обычно бывает с фразами и редкими составными словами и неологизмами)
- возможность работы с разными языками
Далее я покажу, как работает бот, но не буду утомлять примерами из финского языка, а покажу, как работает бот с английским языком.
Как это работает
Бот пока имеет интерфейс только на английском языке и значения слов тоже на английском. Поэтому он подходит больше тем, у кого уже есть определенный уровень владения английским языком, без него пользоваться ботом не получится.
После того, как пользователь запустил бота командой /start и прочитал небольшой хэлп по его командам (также доступный в любой момент по команде /help), нужно выбрать язык, который он будет изучать (/setlanguage). Название языка нужно писать на английском языке, поэтому, например, пишу Finnish, а не Suomi, когда изучаю финские слова.
После выбора языка можно приступить к добавлению слов /addwords. Всё просто — пишите слово, а Wiktionary выдаёт список значений (на английском).
После добавления слов можно приступить к изучению лексики (/learn) и выбрать то количество слов, с которым хотелось бы поработать на этот раз. Алгоритм интервального повторения выберет самые «забытые» слова (или только что добавленные) и предложит их изучить. Если «забытых» слов не осталось, можно повторить выученные командой /test.
Само изучение слов начинается с формирования пассивного навыка — узнавание слова. Бот показывает слово и задача пользователя вспомнить его значение. Если пользователь уверен, что помнит слово, то нажимает I remember, если не уверен в своих знаниях — Show meaning.
Если показанное значение слова оказалось не тем, о котором думал пользователь, то стоит это честно признать — No, I forgot it. Если же что-то похожее вертелось на языке, можно сообщить об этом боту — Yes, I knew it.
После того, как вы стали уверенно узнавать слова, бот предложит перейти к формированию навыка написания слова по его значению. Пользователю предлагается вспомнить, как пишется слово.
Как видно на скриншоте выше, я сделал ошибку в слове. В этом случае бот предложит ввести его ещё раз, до тех пор пока я не перестану делать ошибки. Обычно на второй или третий раз получается записать любое слово. Ну разве что самые заковыристые и длинные финские слова могут потребовать несколько больше усилий.
Но даже после того, как пользователь справится со всеми словами, бот от него не отступится. Ещё же работа над ошибками! После завершения основного цикла, бот предложит лёгкое повторение только что пройденного на основе обнаруженных ошибок.
Получилось вполне удобное и полезное как минимум для меня простое приложение. Ничего революционного в нём нет, но мне удалось сократить время и усилия на добавление слов. При этом я не жертвую персонализацией обучения, что неизбежно происходит, когда вам приходится добавлять списки слов, сделанные кем-то другим.
Работа над ошибками тоже мне кажется вполне полезным добавлением к интервальному повторению, так как позволяет исправить ошибку и закрепить слово сразу, в течение одной сессии. Это очень важно, так как неисправленная вовремя ошибка может «жить» долго и даже перерасти в неправильно сформированный навык.
Понятно, что можно было бы сделать больше заданий. Как вы думаете, что ещё стоило бы добавить?
Что дальше
У всех подобных систем, при всей их очевидно полезности, есть свои большие недостатки. И связаны они, в первую очередь, с отсутствием контекста изучаемых слов.
Многих очень привлекает наивная по сути своей идея, что, например, изучая, по 10 слов в день, через месяц я буду знать 300 слов, а через год — три с половиной тысячи! Увы, нет. Простая «загрузка» десятков и сотен слов в голову не работает. Мозг за миллионы лет эволюции научился эффективно избавляться от хлама: всё, что не используется, — забывается.
Поэтому правильное использование инструментов типа моего бота заключается в том, что они должны помогать запоминать уже контекстуализированную лексику.
То есть, алгоритм может быть примерно таким — сначала вы берёте текст, пытаетесь его понять. Потом новую и наиболее важную лексику изучаете в «запоминалках» вроде моего бота. И после этого продолжаете изучать слово в контексте — например, составляете свои тексты, пересказываете, делаете диалоги.
Только так будет возможно движение вперёд и слова не будут казаться вашему мозгу ненужным хламом. Именно из-за отсутствия контекста плохо работают списки слов, составленные кем-то другим. Создавайте свои наборы слов, контекст которых понятен вам.
Но не создавайте «тематические» наборы слов (например, по темам «цвета» или «домашние животные»). Лучше делать списки «ситуационными», то есть такими, где слова описывают какую-то ситуацию (например, «чёрная», «собака», «лает», «кошка»). Естественным образом такие списки получаются, когда вы работаете с текстом, пусть даже очень простым и маленьким. Текст сам по себе является контекстом для всех слов в нём.
Из этого следует, что можно сделать ещё один шаг в автоматизации обучения. Можно добавлять слова сразу из текста. То есть, пользователь просто добавляет текст, а система сама определяет, какие слова стоит оттуда взять (необязательно все, есть различные критерии важности слов в тексте). Что думаете по поводу такой фичи? Было бы это полезно?
Чуть не забыл. Имя бота @OppiWordsBot. Буду рад, если вы его протестируете и напишите мне свои замечания, предложения и комментарии.
UPDATE
Создал группу в Телеграме для общения по поводу бота. Заходите) https://t.me/OppiWords
UPDATE
Теперь можно выбирать сразу несколько значений и добавлять свои собственные.
Комментарии (48)
VolCh
14.10.2019 19:16+2Думаю очень полезно было бы сначала добавить кусок текста (предложение, например), а потом выделить как-то нужные слова и словосочетания (фразовые глаголы те же, будь они не ладны) для запоминания.
tezer Автор
14.10.2019 19:19+1Да, я это и планирую сделать. Выбирать слова вручную в интерфейсе Телеграма будет непросто, но я думаю об автоматическом предложении слов пользователю для изучения.
tulevaisuus
14.10.2019 21:05+1И после этого продолжаете изучать слово в контексте — например, составляете свои тексты, пересказываете, делаете диалоги.
А что мешает всё обучение проводить в таком формате? Слова будут запоминаться быстрее и прочнее. Тем более, финский. Как Вы, например, существительные добавляете? Сразу в 16 падежах (допустим, даже если в 13-ти), в единственном и множественном числе?tezer Автор
14.10.2019 21:55+1Есть идея именно в таком формате проводить все обучение) Сейчас над этим как раз и работаем.
Финские существительные я добавляю либо в словарной форме, либо в форме того падежа, который мне встретился в тексте (особенно, если я никак не могу запомнить эту форму и часто делаю в ней ошибки).
dominigato
15.10.2019 01:12+1Сочуствую насчет финского.
По-моему как раз последняя идея о добавлении слов из текста имеет смысл. Я так делал с фильмами — брал субтитры, выделял из них все слова, выучивал неизвестные и смотрел фильм без субтитров. Если не понимал (то есть не разобрал слово), смотрел уже в субтитры. Сначала работаем на что-то одно (значение слов), потом на что-то другое (аудирование).
Так же само можно делать с текстом. Сначала учим слова, потом читаем текст.
Единственное что, нужно не просто слова разделить пробелами, а учитывать семантику. Например «don't take it out on me» перейдет в «don't», «take», «it», «out», «on», «me» в котором каждое слово вам понятно. А смысл совершенно не очевидный. Фразальные глаголы, идиомы и т.д.
Keyten
15.10.2019 15:36+1Есть для этого лайфхак: задержка субтитров. Слышишь текст, понимаешь, через пару секунд видишь.
dominigato
15.10.2019 15:48Боюсь что мне будет тяжелее, так как через пару секунд уже будет говорится другое, когда я буду отвлечен на чтение субтитров. Но для коротких разговоров может подойти.
BkmzSpb
15.10.2019 10:35+1С учетом того, что автор переехал в Финляндию, а я учил-учил финский, но так толком ничего и не осилил, решил попробовать бота с финским языком.
Нужно немного допилить, наверное
Из плюсов — раньше я не знал значения слова quire.tezer Автор
15.10.2019 14:48да, это непросто, но реально сделать. В планах это тоже есть, так как сам периодически с этим мучаюсь
tezer Автор
15.10.2019 14:49кстати, баг с kirja поправил, но выложить смогу только ночью, так сейчас много людей работают с ботом
loony_dev
15.10.2019 11:07Встречал как-то интересную технику для изучения языка. Берем какую-то книгу которую хотим прочитать (или субтитры к фильму и т.д.). Загружаем текст в приложение, оно считает топ 100-1к слов и превращает их в карточки. После изучения этого набора, прочитать\посмотреть фильм не составит труда. Можно добавить типо такого режима и тогда отпадет нужда заставлять пользователей выбирать слова.
Вообще, если вы зальете код на гитхаб, я думаю многие кто предлагал здесь идеи сможет допилить их самостоятельно. Так вы снимите с себя большую часть работы.tezer Автор
15.10.2019 12:02Да, про текст замысел именно такой.
loony_dev
15.10.2019 12:16Хорошо, а что на счет опенсорса?
tezer Автор
15.10.2019 12:38ох, это сначала надо код привести в порядок, задокументировать, сделать девелоперскую инфраструктуру (бд для разработки, тестовый бот и пр).
Такой план есть, но мне, непрограммисту, это пока сложно сделать. Буду думать.loony_dev
15.10.2019 12:44+1Каждый может себе развернуть своего бота. Собственно, многие кто выкладывает ботов именно так и делают. Просто идей тут много и уверен, что одному это пилить очень долго и можно просто сломаться, а бот интересный и полезный, обидно будет
dominigato
15.10.2019 14:28+1, это сначала надо
Нет, не надо. Для этого и есть опенсорс, там вам могут помочь это все сделать.tezer Автор
15.10.2019 14:45это хорошо) Думаю, что выложу в ближайшее время — всё-таки хочется код в порядок привести хоть немного
maragn
15.10.2019 12:46идея с предизучением очень крутая и главное простая в реализации.
loony_dev
15.10.2019 12:51Есть такое, но я помню искал какие-то онлайн решения для pdf, ничего на тот момент годного не нашел. Так что, если бы был бот, которому отправляешь pdf, а он тебе карточки режет, да еще и помогает изучить… Уф. Сам бы такое закодил, но увы, времени не так много.
Dudinofs
15.10.2019 12:43+2Спасибо за работу! Отличная идея по сути и по форме, как раз искала что-нибудь подобное.
Планируется ли возможность вручную дополнить/уточнить выбранный вариант перевода?tezer Автор
15.10.2019 12:47+1Пока можно ввести только свой вариант перевода, если бот не смог найти значения. Можно, я думаю, добавить и функцию добавления своего перевод к предложенным.
Не могли бы Вы описать кейс, где Вам потребовалось править предложенные значения?Dudinofs
15.10.2019 13:29+1Пример (японский язык): ?? — short, brief. Однако, это прилагательное не употребляется для описания роста. Хотелось бы сделать себе сответствующую пометку.
Пока искала, обнаружила еще один кейс: если у слова несколько значений на Wiktionary (Etymology 1,2 ит.д. в случае омонимов), второе значение вообще не предлагается.
Пример (эстонский язык): kurk — горло и огурец, выдает только «горло». Аналогично с финским kurkku.
akdes
15.10.2019 14:54я правильно понимаю, что каждый юзвер добавляет свои слова, которые хочет учить и к ним бот подтягивает варианты ответа/перевода?
Как храните список добавленных слов? по айди юзера в файлик или база?
Для информации: На сколько я помню, телеграм предупреждал об использовании айди, т.к. боты должны быть стэйтлес, не исключено, что айди могут поменятся. Хотя конечно же я это практически исключаю — просто сталкивался с этой информацией 2 года назад.tezer Автор
15.10.2019 15:11да, правильно, каждый пользователь добавляет свои слова.
слова и прогресс по ним хранятся в MySQL для каждого пользователя по его Telegram id
Про смену id ничего не слышал, надеюсь, ничего такого не случится, иначе будет грустно…akdes
15.10.2019 15:58+1поискал… полного подтверждения к сожалению не нашёл, но вот:
Код Telegram user ID уникален. Для каждого сообщества, которое вы создаете, он свой.
Т.е. исходя из этой информации, это не единный идентификатор, а смесь реального айди (который никому не известен), какие то идентификаторы вашего бота и наверное что-то ещё.
Удачи Вам в развитии бота. Идея достойная!
prog666
15.10.2019 15:41Не понял в чем смысл если я слова сам добавляю, как я могу добавить слова которых я не знаю? А если я их уже встретил где-то и запомнил то соответственно их и учить не надо.
tezer Автор
15.10.2019 15:44«встретил и запомнил» — это мало, у кого так получается) обычно — «встретил, не понял и забыл») Вот для таких случаев этот бот и нужен.
Keyten
15.10.2019 16:15+1Тоже в какой-то момент перестало хватать существующих приложений, пошёл делать своё :)
Мне очень хорошо заходили Flash Cards на мемрайзе (особенно тот факт, что их можно составлять себе самому), но очень не хватало возможности комбинировать их друг с другом, чтобы изучать отдельные слова в предложениях и в контексте.
Например: я хочу создать набор «еда» со словами «apple», «meat» и «fruit», а затем набор «предложения с едой» со словами «to like {{еда}}», «to eat {{еда}}», «to prepare {{еда}}». Вместо «еда» будет вставляться рандомное (а лучше — выбранное по каким-то алгоритмам) слово из нужного набора, получаем предложения «to like apple», «to prepare meat», «to eat fruit» и так далее. Можно делать и больше уровень вложенности.
Таки получилось, работает неплохо, живёт сейчас на lango-application.herokuapp.comtezer Автор
15.10.2019 16:28я тоже думал на тему такой «искусственной» контекстуализации. Проблема в том, что придется либо делать очень сложный набор эвристик и заморачиваться с определением значения слова, либо смешить людей странными марковскими цепочками или выхлопом нейронки. Последние два решения не очень сложные, но выдают порой весьма странные перлы)
Keyten
15.10.2019 16:37Я в итоге пришёл к тому, что это вовсе не плохо, и выражения вроде «Меня съел розовый слон» ничуть не хуже других тренируют язык.
А вообще их все можно отловить и убрать большим количеством наборов слов под все случаи жизни. «Вот эти объекты можно есть, вот эти собирать, а вот эти жечь» — в итоге всё будет хорошо и правильно. Только наборов много. Например, сейчас там есть в миниатюре такое разбиение на много наборов: 2 набора французских глаголов, одни начинаются на гласную, а другие на согласную. Поэтому в комбинациях из них всё гладко: J'apprends, J'etudie, но Je mange и Je cours.
dominigato
16.10.2019 02:03+1По-моему легче уже просто поискать готовые тексты на определенную тему: еда, знакомство, гостинница и т.д., их не проблема найти. Во всяком случае они будут хотя бы осмысленными.
gecube
Идея очень неплохая. Нужно развивать. Но мне больше зашёл duolinguo.
Даже несмотря на то, что это отдельное приложение.
Плюсы последнего:
— если знаешь английский хоть чуточку, то там куча языковых пар.
— если учить, например, немецкий на английском, то будешь подтягивать оба
— есть картинки. Это позволяет сразу построить правильную ассоциацию. Текст — в — текст сложнее запоминать.
— есть произношение
И многое другое
tezer Автор
Спасибо)
А мне Duolingo не зашёл, хоть я несколько раз пытался там учить языки. Слишком всё по-школярски: есть один курс, последовательность шагов, по ним и иди. Как по учебнику. Очень быстро надоедает.
gecube
Чтоб не надоело — там внесли элементы геймификации. Те же ачивки за пройденные курсы, возможность иногда выбирать текущую веточку, страйки, если щанимаешь регулярно. К тому же — зубрить слова — это совсем не весело и в принципе не может быть весело, если у Вас нет преподавателя противоположного пола ))))))
Мне ещё в какой-то момент очень ЛингваЛео зашёл. именно из-за удобного способа заучивать слова ) за фрикадельки
tezer Автор
Ой, геимификация вещь опасная) Если она неправильно сделана, то начинает уводить пользователей в сторону. Я работал (давно, правда) в Лингуалео и помню, что некоторые пользователи больше увлекались накоплением фрикаделек, чем изучением языка. То есть игровая составляющая начала жить сама по себе, превратилась для этих пользователей в главную ценность сервиса.
EliasMath
Lingualeo мне, кстати, нравится. На фрикадельки, если честно, пофиг, но тексты и видео там очень полезны и поучительны (для меня). Прокачка слов.запаса и правда надоедает, поэтому иду по «ленивому» пути — учу английский, как он есть, без привязки к русскому:)
fesst
Я в своё время прошёл на дуолинго курс французского, геймификация там направлена на частоту занятий больше, ну в общем, читать и писать со словарём я могу. А вот речь и аудирование там не развил, хотя какая-то минимальная база, конечно, получилась: смог попросить красного вина в Париже у не говорящего по-английски продавца :)
tezer Автор
есть планы и по «перетаскиванию» обучения в разговорную практику.