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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

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

Предисловие

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

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

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

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

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

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

Но печатать текст - это не так сложно, как разговаривать. При печати у меня больше времени на подумать и исправить. Если я хочу большего реализма, то мне нужно говорить - я зачитываю свой ответ в микрофон, модель распознавания речи (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 как простую болталку. А чтобы не повторять каждый раз задание, под начало диалога с коррекциями от модели, я выделил отдельную кнопку. В боте стоят фильтры на обработчик текста или аудио, можно общаться как удобно. И вот, что получилось при запуске:

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

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

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

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

Сервер
Сервер

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

Выводы

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

Источник: https://habr.com/ru/post/726244/


Интересные статьи

Интересные статьи

В этот раз у DotNext непривычный формат: сначала два дня в онлайне, а позже офлайн-день в Петербурге (первая за два года возможность встретиться на DotNext очно!) Для тех, кто не может добраться до Пи...
В этом месяце было решено изучить тему, которая привлекает лично меня – e2e-тестирование веб-приложений. Я хочу перейти от изучения основных концепций и инструментов к реализации эффективных стратегий...
Задача распознавания семантического следования (textual entailment), или импликации (natural language inference), в текстах на естественном языке состоит в определении того, может ли част...
Одна из важнейших задач при изучении иностранного языка – это не только практика с грамматикой, но и расширение словарного запаса. Чем больше слов вы знаете, тем в большем количестве ситуаций...
Один из самых острых вопросов при разработке на Битрикс - это миграции базы данных. Какие же способы облегчить эту задачу есть на данный момент?