Generate langauge training application data with ChatGPT
Введение
У меня всегда был интерес к изучению языков. Несмотря на то, что особыми успехами во владении иностранными языками я никогда не отличался, мне доставляло удовольствие собирать смыслы из кирпичиков слов и проводить разного рода параллели.
Например, приложением Duolingo я пользовался через веб версию еще до появления у меня смартфона.
Изучать языки в интерактивном формате достаточно интересно. Плюсом добавляется геймификация и относительно рандомные задания.
Первое языковое приложение
В 2019 году мы с @snchz29 написали бота для VK, который создает сессии из игр “угадай слово”. В пуле было 12 языков, которые, честно говоря, выбирались нами изначально просто наугад.
languages = ['en', 'uk', 'pl', 'fr', 'de', 'it', 'es', 'ar', 'zh-cn', 'ja', 'ko']
У игрока была возможность выбрать пару языков из пула и начать бесконечную сессию “вопрос-ответ” с ботом.
Пул слов был проаннотирован частями речи (сразу оговорюсь, что это были категории из индо-европейской семьи) и варианты ответа выбирались из слов той же части речи, что и загаданное слово.
Создание базы слов
Наибольшую ценность подобных приложений составляет база знаний, которая в случае приложения выше представляла собой массив проаннотированных слов с переводами на разные языки.
Для генерации подобной базы был взят список из ~5000 наиболее частотных слов русского языка с информацией
о части речи. Далее мы прогнали этот список через API Google Translate и получили нужный список.
Стоит отметить, что в то время для многих пар [слово на русском]:[перевод на язык n]
API возвращал
либо некорректный ответ, либо просто пустое значение.
Несмотря на это, для популярных пар языков бот работал достаточно стабильно и мой личный опыт залипания в самописную
игрушку могу оценить исключительно положительно.
Вот пример того, как мы хранили данные:
стать:to become:devenir:um zu werden:divenire:to favorecer:se tornar:变成, :から似合われた:나타난다:стати:zostać:verb
Не могу прокомментировать, что написано на азиатских языках. Машинный перевод такой машинный перевод.
Бота в общий доступ мы так и не выпустили, но неплохо попрактиковались в написании подобных программ. Примечательно, что это было на первом курсе университета. Как много времени уже прошло…
Второй виток самописных игрушек
После года жизни за рубежом, в братской Сербии, я ощутил нехватку чего-то подобного для местного языка. Приложений для изучения сербского не так уж много. По крайней мере, я не нашел сербского (сербо-хорвато-боснийско-черногорско-…) в популярных языковый приложениях. Параллельно с этим росла проблема развития словарного запаса. И если для изучения грамматики я мог посмотреть видео на youtube или полистать учебник, то вокабуляр таким образом расширять гораздо сложнее. К тому же и грамматические правила можно завернуть в более живой формат.
Переварив эту идею, первым делом в голову пришла мысль сделать фронтенд в виде телеграмм бота. Стало примерно понятно с чего начать, как организовать сценарий диалога (стэйт-машину, мы ведь с вами люди образованные, в конце-то концов), какие визуальные элементы добавить (клавиатура с вариантами выбора, эмодзи и пр.), но возник вопрос где взять данные.
Голова моя тыква и последнее оказалось нетривиальным. Пользоваться Google Translate API стало достаточно сложнее и качестве перевода ru-rs и en-rs оставляет желать лучшего. Контекстуальные переводчики вроде Glosbe чаще всего не предоставляют API и использовать их для каких-то больших батч-переводов непросто.
Мытарство мое по поводу поиска контента длилось не долго, ибо не могло пройти и дня без упоминания новых языковых моделей вроде ChatGPT, и понял я, что все не так уж и безнадежно.
Генерируем данные с помощью ChatGPT
Будем использовать языковую модель для генерации языковых данных. Попросим построить таблицу с падежными окончаниями в сербском и русском.
Вот что сгенерировала модель на запрос
can you provide examples for serbian and russian as well as noun endings for each case.can you present this as a table?
:
Case | Serbian Endings | Serbian Example | Russian Endings | Russian Example |
---|---|---|---|---|
Nominative | -a (feminine) | knjiga (book) | -а/-я (feminine) | книга (book) |
-o (neuter) | -о/-е (neuter) | |||
-i (masculine) | -й/-ь/-ъ (masculine) | |||
Genitive | -e (feminine) | knjige (book’s) | -ы/-и (feminine) | книги (book’s) |
-a (neuter) | -а/-я (neuter) | |||
-a/i (masculine) | -а/-я/-ей (masculine) | |||
Dative | -i (feminine) | knjizi (to/for book) | -е/-у (feminine) | книге (to/for book) |
-u (neuter) | -у/-ю (neuter) | |||
-u/-ima (masculine) | -у/-ю/-ам (masculine) | |||
Accusative | -u (feminine) | knjigu (book) | -у/-ю (feminine) | книгу (book) |
-o (neuter) | -о/-е (neuter) | |||
-a/-e (masculine) | -а/-я/-й/-ь/-ъ (masculine) | |||
Vocative | -o (feminine) | knjigo (book) | -о/-е (feminine) | книга (book) |
-o (neuter) | -о/-е (neuter) | |||
-i (masculine) | -й/-ь/-ъ (masculine) | |||
Locative | -i/-u (feminine) | knjizi (on/in/at book) | -е/-у (feminine) | книге (on/in/at book) |
-u/-i (neuter) | -е/-и (neuter) | |||
-u/-ima (masculine) | -е/-ах/-ях (masculine) | |||
Instrumental | -om (feminine) | knjigom (with book) | -ой/-ей (feminine) | книгой (with book) |
-om (neuter) | -ом/-ем (neuter) | |||
-im/-em (masculine) | -ом/-ем/-ами (masculine) | |||
Я пользователь-любитель и не знаю всех секретов “промптинга”, но результат получился довольно симпатичный.
Попробуем попросить проспрягать нам самые частотные глаголы
can you provide 20 the most frequent serbian verbs, all forms. format as a table
:
Infinitive | Ja | Ti | On/ona/ono | Mi | Vi | Oni/one/ona |
---|---|---|---|---|---|---|
biti | sam | si | je | smo | ste | su |
imati | imam | imaš | ima | imamo | imate | imaju |
hteti | hoću | hoćeš | hoće | hoćemo | hoćete | hoće |
raditi | radim | radiš | radi | radimo | radite | rade |
reći | kažem | kažeš | kaže | kažemo | kažete | kažu |
videti | vidim | vidiš | vidi | vidimo | vidite | vide |
znati | znam | znaš | zna | znamo | znate | znaju |
hteti | hoću | hoćeš | hoće | hoćemo | hoćete | hoće |
uraditi | uradim | uradiš | uradi | uradimo | uradite | urade |
trebati | trebam | trebaš | treba | trebamo | trebate | trebaju |
moći | mogu | možeš | može | možemo | možete | mogu |
čuti | čujem | čuješ | čuje | čujemo | čujete | čuju |
jesti | jedem | jedeš | jede | jedemo | jedete | jedu |
dati | dajem | daješ | daje | dajemo | dajete | daju |
pitati | pitam | pitaš | pita | pitamo | pitate | pitaju |
voleti | volim | voliš | voli | volimo | volite | vole |
govoriti | govorim | govoriš | govori | govorimo | govorite | govore |
nositi | nosim | nosiš | nosi | nosimo | nosite | nose |
Есть повторения вроде raditi/uraditi, но результат все также неплох. В последующих ответах на тот же запрос встречаются повторы, даже несмотря на условие не повторять глаголы из прошлых ответов, но это можно уже исправить при обработке этих данных.
И что-нибудь совсем попсовое напоследок:
Замечательно!
Если что-нибудь из этого получится, напишу пост с продолжением. Спасибо, что дочитали до конца.