Используйте Google Cloud Platform для оценки акцентов на более чем 20 языках

Человек, не являющийся носителем языка, изучает испанский язык. Как вы могли бы использовать машинное обучение, чтобы обеспечить живую обратную связь об их произношении? В этом посте мы расскажем, как этого можно добиться на более чем 20 языках с помощью API Google для преобразования речи в текст.

Если бы у вас был доступ к базе данных с записями неродного и родного голоса для заданных слов, распознавание акцента можно было бы выполнить довольно легко. На самом деле машинное обучение может даже не понадобиться — можно было бы сравнить спектрограммы и кепстральные коэффициенты Mel-частоты аудиоклипов. Для тех из вас, кто не знаком, спектрограммы и коэффициенты Мела представляют частоты/высоты звука, присутствующие в аудиозаписи. Простое сравнение коэффициентов из собственных и неродных записей может помочь.

На фото две спектрограммы «Hola». Первая спектрограмма показывает неправильный акцент, а вторая правильный акцент. Можно вычислить разницу между двумя графиками, чтобы количественно оценить сходство произношения. Однако такой подход не является надежным. Различная высота голоса может изменить расчет, а также скорость речи. Кроме того, как упоминалось ранее, для этого подхода требуется база данных записей носителей языка.

Однако без базы данных записей мы должны принять другое решение. Вместо того, чтобы создавать собственную модель, мы можем использовать API Google для преобразования речи в текст. Модели Google были обучены голосам носителей языка и, следовательно, способны распознавать только те записи, которые достаточно похожи на голос носителя языка. Таким образом, если модель преобразования текста в речь Google может определить наше произношение, мы должны предположить, что мы произнесли слово правильно. Как мы увидим, если мы предоставим аудиоклип с резким акцентом, модель не сможет распознать речь.

Давайте начнем

1. Если у вас еще нет учетной записи Google Cloud, обязательно сначала создайте ее. https://cloud.google.com/

2. Создайте новый проект в Google Cloud (это можно сделать из консоли Google Cloud).

3. Включите преобразование речи в текст API https://console.cloud.google.com/apis/library/speech.googleapis.com

4. Запишите, как вы читаете испанское слово, и сохраните аудиоклип в формате MP3.

5. Установите библиотеку google-cloud-speech python.

pip install google-cloud-speech

6. Если у вас нет ключа приложения, создайте его. https://cloud.google.com/docs/authentication/getting-started.

7. Добавьте эту строку в начало вашего файла Python, чтобы использовать ключ

import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = PATH TO YOUR APPLICATION KEY.json

7. Добавьте этот код Python для распознавания речи в текст. Эта функция расшифрует аудио и даст оценку достоверности.

from google.cloud import speech_v1p1beta1
client = speech_v1p1beta1.SpeechClient()
def sample_recognize(local_file_path):
    """
    Print confidence level for individual words in a transcription of a short audio
    file.
Args:
      local_file_path Path to local audio file, e.g. /path/audio.wav or .mp3
    """
client = speech_v1p1beta1.SpeechClient()
# When enabled, the first result returned by the API will include a list
# of words and the confidence level for each of those words.
   
    enable_word_confidence = True
# The language of the supplied audio
    language_code = "es-ES"
    config = {
        "enable_word_confidence": enable_word_confidence,
        "language_code": language_code,
        "encoding": "MP3",
        "audio_channel_count": 2
}
    with io.open(local_file_path, "rb") as f:
        content = f.read()
    audio = {"content": content}
    response = client.recognize(config, audio, )
    if len(response.results == 0):
        return "FAILED"
    result = response.results[0]
    alternatives = result.alternatives[0]
    
    return result

Обратите внимание на несколько элементов:

  • установив enable_word_confidence = True, модель будет выводить вероятность для каждого слова, что позволяет нам более точно увидеть, насколько хорошо работает пользователь.
  • language_code = es-ES устанавливает испанский язык из Испании. Если вы хотите изменить язык или страну, используйте коды языков https://cloud.google.com/speech-to-text/docs/languages.
  • «audio_channel_count»: 2 соответствует настройке вашего микрофона. Большинство компьютеров используют запись стереозвука (2 канала), но вам может потребоваться изменить это, если ваш компьютер записывает только в 1 канал.
  • обратите внимание, что если API Google не может распознать слово, он возвращает пустой список, поэтому if len(response.results) == 0
  • переменная альтернативы предоставляет список альтернативных результатов, которые не используются в этой функции

Проверяя, соответствует ли вывод этой функции слову, которое вы пытались произнести, вы можете оценить свой акцент. Для более точной оценки вы можете использовать слово «уверенность», включенное в результат.

Я реализовал этот алгоритм распознавания акцента на реактивном веб-сайте: https://hablame.org/accent.

Код для приложения Flask с программным обеспечением для распознавания акцента: https://github.com/DanielLongo/AccentRecognition