[PYTHON] Erweiterter Wortschatz mit Cloud Text-to-Speech

Hintergrund

Irgendwann fragte mich mein Sohn Kun, mein Vater.

Sohn Kun: "Papa, wie erinnerst du dich an englische Wörter?" Dad: Nun, liest du in Schulklassen laut vor? Dann trainierst du vielleicht, laut zu singen? Sohn Kun: "Nun, Leute, die es tun, tun es ..." Vater: "Werden Sie in der Lage, zuerst Lehrbücher zu übersetzen, damit Sie es sagen können, ohne es im nächsten Schritt anzusehen. Diese Art von Training ist effektiv." Sohn Kun: "Das ... ich kann es nicht singen." Papa: "Was ?! Wenn du es oft singst, kannst du dich an ein wenig erinnern, wenn nicht an alles, oder?" Sohn Kun: "Ein bisschen, aber ich werde müde, nachdem ich es oft gemacht habe, also bin ich nicht motiviert ..." Papa: (Im Ernst, das ist Akan, ich hasse es zu lernen, orz)

背景_図.png

Anforderungsanalyse

Die Praxis des "Lernens englischer Wörter" ist ein steiler Weg, den jeder einschlagen kann, es sei denn, er ist Eingeborener oder Rückkehrer. Es scheint, dass sein Sohn Kun bereits die Wand getroffen hat. Es gibt viele Möglichkeiten, sich an Wörter zu erinnern. Lassen Sie uns sie also ein wenig sortieren.

Der grundlegende Ansatz besteht darin, "englische Wörter zu lesen und sie zu trainieren, um sie ins Japanische zu übersetzen". Wenn Sie sich wiederholt daran gewöhnen, sollten Sie sich daran gewöhnen, wenn Sie sich daran erinnern.

Die folgenden Methoden sind typisch für das Auswendiglernen von Wörtern, aber da mein Sohn Kun nicht gut darin ist, wäre die Richtung von "1 englisches Wort" gut.

  1. Denken Sie als englisches Wort daran
  2. Denken Sie in Beispielsätzen daran
  3. Denken Sie im Text daran

Es gibt die folgenden Methoden, um den Körper und nicht das Gehirn zu infiltrieren.

  1. Schreiben und merken
  2. Erinnere dich laut
  3. Hören Sie zu und erinnern Sie sich mit einer Tonquelle wie einer CD

Nach vielen Recherchen scheint "2 Voice" in Bezug auf Effizienz und Praktikabilität gut zu sein. Sein Sohn Kun sagt jedoch auch, dass er nicht singen kann. Wenn es darum geht, scheint es auch unwahrscheinlich, dass die "Stimme von 2" machbar ist.

"1 schreiben" wird zeitlich schwierig sein. Was bleibt, ist die Verwendung von "3 Schallquellen", und es wäre besser, dies so weit wie möglich durch Abhören der Lückenzeit zu beheben. Aber wie organisieren Sie die Tonquellen? Viele der CDs im Anhang des Wortbuchs haben nur "englische Stimme". Es gibt eine Tonquelle, die eine Reihe von Englisch und Japanisch wiederholt, aber mein Sohn Kun sagt, er mag den Rhythmus nicht. In der Äußerung "worauf zu achten ist" beklagte er sich sogar darüber, dass "was" hartnäckig sei.

Was für ein Monsterkunde!

要求分析_図.png

Strategie zur Stärkung des Wortschatzes

Wenn Produkte anderer Unternehmen oder im Handel erhältliche Produkte nicht verwendet werden können, bearbeiten Sie die Tonquelle selbst? Nein, selbst der Vater eines Ingenieurs, der die Welt durchquert, hat nicht so viel Zeit.

Ja, fragen wir den Google-Lehrer.

Dann kam eine Methode namens Hyakushiki English Words heraus. Das Wiederholen von englischen und japanischen Tonquellen ist gut. Oh, aber mein Sohn Kun ist kein Schüler. Gibt es keine andere Wahl, als die Tonquelle selbst herzustellen?

Sie können die Wörter angeben, an die Sie sich erinnern, und die Geschwindigkeit der Tonquelle anpassen. In einigen Fällen wäre es hilfreich, zwischen Englisch-> Japanisch und Japanisch-> Englisch zu wechseln.

In diesem Sinne dachte ich an die folgende Methode.

大作戦_図.png

Vorbereitung

"Einrichten der Authentifizierung" im Artikel [Text-to-Speech-Client-Bibliotheken] von Google (https://cloud.google.com/text-to-speech/docs/reference/libraries?hl=JA) durchgeführt , Holen Sie sich die JSON-Datei, die den Dienstkontoschlüssel enthält. Geben Sie diese Datei als Argument des Programms an. Dieser Dienst scheint kostenlos zu sein, um bis zu 1 Million Zeichen zu verwenden.

Implementierung

Word-Definitionsdatei

Die CSV-Datei hat das folgende Format.

Flagge Id3tag_artist Id3tag_album Id3tag_title english japanese output loop_count
y Papas Englisch part1 0001 begin Start ./mp3/kihon78/0001.mp3 2

Bild zur Erzeugung von Audiodateien

発声の構成図.png

Parameter

Der Wert, mit dem Sie die Einstellung für jedes Wort ändern möchten, wird auf die Wortdefinitionsdatei festgelegt, und der Wert, der für jede Datei gut zu sein scheint, wird als Parameter festgelegt (Befehlszeilenargument). Es ist erforderlich, diesen Bereich entsprechend dem Bereich zu gestalten, in dem die Einstellungselemente angewendet werden sollen, z. B. ob er während der Systemdefinition, Anwendungsdefinition, Instanzdefinition oder aktiviert geändert werden kann. Dies hängt vom erwarteten Betrieb ab.

Generierung von Audiodateien


def create_audio(
        output_path,
        text,
        params_language_code,
        params_name,
        params_speaking_rate):
    client = texttospeech.TextToSpeechClient.from_service_account_json(
        option.servicekey_of_file)
    s_input = texttospeech.types.SynthesisInput(text=text)
    voice_params = texttospeech.types.VoiceSelectionParams(
        language_code=params_language_code, name=params_name)
    audio_config = texttospeech.types.AudioConfig(
        audio_encoding=texttospeech.enums.AudioEncoding.MP3,
        speaking_rate=params_speaking_rate)
    response = client.synthesize_speech(
        s_input, voice_params, audio_config)
    with open(output_path, 'wb') as out:
        out.write(response.audio_content)

Kombinieren Sie Audiodateien

def synthesize_audio(
        input_en_path,
        input_jp_path,
        loop_count,
        output_path,
        option):
    loop_max = int(loop_count.strip())

    audio_en = AudioSegment.from_mp3(input_en_path)
    audio_jp = AudioSegment.from_mp3(input_jp_path)

    opening_margin = AudioSegment.silent(duration=100)
    between_sentences = AudioSegment.silent(duration=option.between_sentences)
    between_the_loop = AudioSegment.silent(duration=option.between_the_loop)

    if option.japanese_top:
        audio = opening_margin + audio_jp + between_sentences + audio_en
        if loop_max > 1:
            for li in range(loop_max - 1):
                audio += between_the_loop + audio_jp + between_sentences + audio_en
    else:
        audio = opening_margin + audio_en + between_sentences + audio_jp
        if loop_max > 1:
            for li in range(loop_max - 1):
                audio += between_the_loop + audio_en + between_sentences + audio_jp

    audio.export(output_path, format='mp3')
    os.remove(input_en_path)
    os.remove(input_jp_path)

Satz von Quellen

Die vollständigen Implementierungen finden Sie auf github. Wenn Sie möchten, lesen Sie diese bitte.

ear-studies

Future Work

Recommended Posts

Erweiterter Wortschatz mit Cloud Text-to-Speech
[Paketwolke] Verwalten Sie Python-Pakete mit der Paketwolke
Führen Sie XGBoost mit Cloud Dataflow (Python) aus.