Учим английский с chatGPT

Kate

Administrator
Команда форума
Пожалуй, новости о языковых моделях и их использовании уже немного надоели, но лично я нашел для себя полезное применение - изучать английский, в том числе и разговорный. Посмотрим, что могут нам предложить в этом деле товарищи из openai: совместим gpt-3.5-turbo, whisper и telegram.

Предисловие​

Основная мотивация - нужно заговорить на английском. Мой уровень B1, почти B2, но преимущественно в чтении и письме. Уроки с учителем стоят довольно дорого, ходить в английские клубы я стесняюсь, да и вообще коммуницировать с людьми не люблю. Поэтому решил, что для начала я заставлю себя говорить, хотя бы плохо, а потом отшлифую уровень с живыми людьми.

Еще одним мотиватором было желание сделать свой личный проект с telegram-ботами и серверами. Идеи появлялись и раньше, но тратить деньги на сервер с бесполезным приложением не хотелось. А тут вроде и полезно.

Приводить код в статье, наверное, нет смысла. Интересующимся предлагаю заглянуть в репозиторий.

Постановка задачи​

Для начала нужно выяснить, а может ли вообще chatGPT помочь мне с английским. Мне нужна была не просто болталка, а коррекция моих фраз. Естественно, языковая модель прекрасно поняла правила игры:

feb8f9f5db587294d611700153da36d5.png

В ходе диалога модель что-то поправляла, что-то пропускала. Игнорирование моих ошибок было особенно заметно на длинных сообщениях.

Но печатать текст - это не так сложно, как разговаривать. При печати у меня больше времени на подумать и исправить. Если я хочу большего реализма, то мне нужно говорить - я зачитываю свой ответ в микрофон, модель распознавания речи (SAR) транскрибирует мою речь в текст, который и будет отправляться языковой модели. Быстрый гуглеж выдал уже готовые поделки, вроде voiceGPT. Но это приложение оказалось слишком неудобным для моих задач: запись голоса обрывалась при первом же распознавании части фразы, а постоянные проверки браузера при подключении к аккаунту openai раздражали. Я решил, что проще будет использовать любую хорошую модель SAR, тем более, что я уже запланировал реализовать передачу сообщений через отдельный сервер, чтобы общаться с ботом в телеграме, удобно развалившись вечером на диване.

Проверка моделей SAR​

Забегая вперед, скажу, что в итоге я использую модель whisper от того же openai через API. Но изначально я планировал загружать модель на сервере (тем более, что они работают на CPU), поэтому я пошел на hugginface и выбрал для себя несколько моделей для сравнения. Ниже представляю расшифровку текста задания для chatGPT, которую я надиктовал в диктофон:

  • facebook/wav2vec2-base-960h
    UNCLE SUGGEST A TOPIC FAL CONVERSATION AND YOU WILL ASK AQUATION ON IT THEN CHECK MY AUN SECAL GROMETICAL ERRORS AND OFFER THE CORRECT OPTION THEN YOU ASK THE NEXT COUATION LET'S GO
  • facebook/wav2vec2-large-960h-lv60-self
    I WILL SUGGEST A TOPIC FOR CONVERSATION AND YOU WILL ASK A QUESTION ON IT THEN CHECK MY ANSWER FOR GRAMMETICAL ERRORS AND OFFER THE CORRECT OPTION THEN YOU ASK THE NEXT QUESTION LET'S GO
  • jonatasgrosman/wav2vec2-large-xlsr-53-english
    i will suggest a topic for conversation and you will ask a quetion on it then check my alswey for gramatical errors and offer the correct option then you ask the next question let's go
  • openai/whisper-medium.en
    I will suggest a topic for conversation and you will ask a question on it. Then check my answer for grammatical errors and offer the correct option. Then you ask the next question. Let's go!
И снова openai оказался лучше всех, даже умеет поддерживать регистр и знаки препинания. Вообще, можно было бы и использовать последнюю модель, но на слабом процессоре сервера (к тому же единственном) расшифровка сообщения занимала примерно минуту, из-за чего диалог был похож на типичный диалог с приятелем в вк, который постоянно пропадает. В конце концов, 0.006 доллара за минуту расшифровки аудиосообщения не так уж много.

python-telegram-bot​

До этого я не писал телеграм-ботов, в связи с чем, возможно, выбрал не самую лучшую библиотеку. Кроме того, почти все примеры и решения на stackoverflow с использованием этой библиотеки были для старой версии (как будто бы все перестали писать телеграм-ботов). На самом деле, ничего принципиально нового здесь сказать не могу. Обычный бот, который принимает текстовые и аудио-сообщения и перенаправляет их по API. Ботом планирую пользоваться пока что только я, позже, возможно, добавлю жену, поэтому настройки безопасности довольно простые - все входящие сообщения фильтруются по моему телеграм-id.

Из интересного - в интернетах советуют настраивать вебхуки, чтобы не дожидаться опроса от серверов телеграма. На практике оказалось, что задержки по времени даже не заметны, и для таких мелких задач можно оставить и polling.

Собираем все вместе​

Очевидно, хотя сразу я об этом не подумал, что языковая модель не хранит в себе историю переписки, из-за чего при использовании gpt через API нужно каждый раз передавать весь свой диалог, как, например, в коде ниже (а ведь обещал без кода).

def process(self, message: str, role: str = "user") -> str:

self.query['messages'].append({"role": role, "content": message})
response = self.session.post(self.url, json=self.query)
if response.status_code == 200:
reply = json.loads(response.text)['choices'][0]['message']['content']
self.query['messages'].append({"role": "assistant", "content": reply})
return reply

return f"Something went wrong. {response.text}"
Для использования в одно лицо этого достаточно + кнопка сброса, которая очищает список запросов.

Функционал бота позволяет начать свободный диалог, используя gpt как простую болталку. А чтобы не повторять каждый раз задание, под начало диалога с коррекциями от модели, я выделил отдельную кнопку. В боте стоят фильтры на обработчик текста или аудио, можно общаться как удобно. И вот, что получилось при запуске:

9db96762f02a06f18dbef37ff11cd835.png

Модель приняла правила, но сделала это довольно сухо по сравнению с веб-версией. Она не предложила выбрать тему разговора и не дала понять, спрашивает ли она у меня что-либо в данный момент. Хотя ответы были связными и корректными, а при уходе от темы она это замечала. Но я заметил странное поведение, который требует от меня самого быть чуть более вежливым:

b2699cbf031d662f917cc54ec71d201b.png

Я сначала поздоровался и потребовал задание, и это привело к тому, что модель отреагировала почти так же, как в веб-версии, т.е. более развернуто и "по-человечески". Очевидно, это связано с необходимостью первым сообщением явно задавать модели роль ассистента. Еще из интересного - видно, как модель уводит в сторону и она начинает задавать дополнительные вопросы, хоть и по теме.

Выбор сервера​

Самый дешевый и самый слабый. Такой сервер обошелся мне в 1900 рублей в месяц, примерно как один урок в известной школе английского языка.

Сервер

Сервер
Никакого сложного администрирования я не делал, тем более, что не разбираюсь в этом, поэтому рекомендую обратиться к соответствующим статьям, как, например, эта.

Выводы​

А выводы очень простые - я потратил один день, чтобы написать интересную и полезную вещь, которая позволяет мне болтать с "иностранцем", который хоть и не всегда, но исправляет мою речь. Надеюсь, кому-нибудь такой опыт окажется полезным.

 
Сверху