Integrazione della sintesi vocale e del riconoscimento vocale con ChatGPT: guida pratica in Python

AI, ESEMPI, INTELLIGENZA ARTIFICIALE

Negli ultimi mesi, ChatGPT è diventato sempre più rilevante e sta attirando l’attenzione di molte persone. In questo post, spiegherò cosa è ChatGPT, come funziona e come è possibile creare un chatbot conversazionale personalizzato integrato con la sintesi e il riconoscimento vocale.

Cosa è ChatGPT

ChatGPT è un sistema di elaborazione del linguaggio naturale basato su una rete neurale di tipo Transformer. È stato sviluppato da OpenAI, una società di ricerca di intelligenza artificiale, ed è stato addestrato su un vasto corpus di testo che comprende libri, articoli di giornale e pagine web.

Il modello ChatGPT utilizza tecniche di apprendimento automatico per generare testo coerente e plausibile in risposta a una domanda o a un input testuale fornito dall’utente. Grazie al suo addestramento su un vasto corpus di testo, ChatGPT è in grado di comprendere e rispondere in modo “intelligente” a una vasta gamma di domande e conversazioni.

Cosa sono i Transformer

I Transformer sono un tipo di rete neurale artificiale utilizzata per l’elaborazione del linguaggio naturale. Sono stati introdotti nel 2017 in un paper di Vaswani et al. e sono diventati uno dei modelli più popolari per l’elaborazione del linguaggio naturale.

A differenza di altre architetture di rete neurale, i Transformer non utilizzano reti ricorrenti o convoluzionali ma si basano su una struttura di auto attenzione che consente di catturare relazioni a lunga distanza tra le parole in una frase. Grazie a questa struttura, i Transformer sono in grado di gestire frasi molto lunghe e di comprendere le relazioni semantiche tra le parole in modo più efficace.

self attention

Perché usare chatbot conversazionali?

Con l’avvento delle nuove tecnologie, l’utilizzo dei chatbot conversazionali è diventato sempre più diffuso. Ma perché dovremmo utilizzarli? Quali sono i vantaggi che questi strumenti possono offrire alle aziende e agli utenti finali?

Innanzitutto, i chatbot consentono alle aziende di offrire un servizio di assistenza clienti 24 ore su 24, 7 giorni su 7. Questo significa che gli utenti possono contattare l’azienda in qualsiasi momento, ricevendo risposte immediate e precise alle loro domande. Grazie all’automazione del servizio di assistenza, le aziende possono migliorare l’esperienza dell’utente e ridurre i costi operativi, senza la necessità di disporre di un’equipe di assistenza clienti in presenza.

Inoltre, i chatbot possono essere utilizzati per automatizzare alcune attività, come la prenotazione di appuntamenti o la gestione delle prenotazioni. Ciò consente alle aziende di risparmiare tempo e risorse, migliorando l’efficienza dei propri processi aziendali.

Ma non solo le aziende possono beneficiare dell’utilizzo dei chatbot: anche gli utenti finali possono trarne vantaggio. Grazie ai chatbot, infatti, gli utenti possono ricevere risposte immediate e precise alle loro domande, migliorando la loro soddisfazione. Inoltre, i chatbot possono essere utilizzati per automatizzare alcune attività, come l’acquisto di prodotti o servizi online, semplificando così l’esperienza dell’utente.

In sintesi, l’utilizzo dei chatbot conversazionali può portare vantaggi significativi sia alle aziende che agli utenti finali, migliorando l’esperienza dell’utente, riducendo i costi operativi e aumentando l’efficienza dei processi aziendali.

Sul tema già nel 2015 avevo avviato lo sviluppo di un botAI di cui riporto il video di un vecchio test fatto in azienda.

Creare un chatbot conversazionale con interazione vocale: esempio pratico

Per creare un chatbot conversazionale integrato con la sintesi e il riconoscimento vocale, ho utilizzato il modello text-davinci-3 di ChatGPT e le librerie Python openai, speech_recognition e gTTS.

Il codice che ho sviluppato consente al chatbot di ricevere input vocale dall’utente, convertirlo in testo utilizzando la libreria speech_recognition, inviare il testo a ChatGPT per ottenere una risposta e convertire la risposta in audio utilizzando la libreria gTTS.

Per utilizzare il codice, è necessario installare le librerie Python openai, speech_recognition e gTTS. Questo può essere fatto aprendo il prompt dei comandi (su Windows) o il terminale (su Linux/Mac) ed eseguendo i seguenti comandi:

pip install openai

PyAudio – Questa libreria consente di accedere al microfono del computer per la registrazione vocale. Per installarla, eseguire il comando:

pip install pyaudio

SpeechRecognition – Questa libreria consente di convertire l’audio registrato in testo. Per installarla, eseguire il comando:

pip install SpeechRecognition

gTTS (Google Text-to-Speech) è una libreria Python che consente di convertire il testo in parlato utilizzando la tecnologia di sintesi vocale di Google. Per installarla, eseguire il comando:

pip install gtts

Una volta installate le librerie, è possibile procedere con la scrittura del codice.

Il codice che riporto di seguito è un esempio di chatbot conversazionale che utilizza la libreria OpenAI per generare risposte alle domande dell’utente. In particolare, il codice utilizza la versione di OpenAI chiamata “text-davinci-003” per generare le risposte ed è stato sviluppato seguendo i seguenti step:

  1. Impostazioni delle credenziali dell’API di OpenAI per accedere al servizio.
  2. Impostazioni del motore di sintesi vocale e il motore di riconoscimento vocale.
  3. Inizializzazione della variabile “conversation_history” per memorizzare la cronologia della conversazione.
  4. Creazione di una funzione per sintetizzare la risposta vocale utilizzando la libreria gTTS (Google Text-to-Speech).
  5. Creazione di una funzione per riconoscere il comando vocale dell’utente utilizzando la libreria SpeechRecognition.
  6. Creazione di  una funzione per ottenere una risposta da OpenAI utilizzando la libreria OpenAI.
  7. Avvio di  un ciclo principale in cui il programma aspetta il comando vocale dell’utente.
    1. Quando l’utente parla, il programma utilizza la funzione “listen()” per riconoscere il comando e lo aggiunge alla “conversation_history”.
    2. Il programma utilizza la funzione “get_openai_response()” per generare una risposta utilizzando il motore di OpenAI.
    3. La risposta viene quindi sintetizzata e riprodotta con la funzione “speak()”.
  8. Il ciclo principale continua fino a quando l’utente interrompe la conversazione o il programma viene chiuso.

Di seguito il codice testato:

import openai
import speech_recognition as sr
from gtts import gTTS
import os

# Configurazione per OpenAI
openai.api_key = "API_KEY"
model_engine = "text-davinci-003"
temperature = 0.5

# Configurazione per sintesi vocale
language = "it"

# Configurazione per riconoscimento vocale
r = sr.Recognizer()
r.energy_threshold = 4000
r.pause_threshold = 0.6

# Variabili per mantenere il contesto della conversazione
conversation_history = []
max_history_length = 5

# Funzione per sintetizzare la risposta vocale
def speak(text):
    tts = gTTS(text=text, lang=language)
    tts.save("response.mp3")
    os.system("mpg321 response.mp3")

# Funzione per riconoscere il comando vocale
def listen():
    with sr.Microphone() as source:
        audio = r.listen(source)
    try:
        command = r.recognize_google(audio, language="it-IT")
        print("Hai detto: " + command)
        return command
    except:
        return ""

# Funzione per ottenere una risposta da OpenAI
def get_openai_response(prompt, temperature):
    response = openai.Completion.create(
        engine=model_engine,
        prompt=prompt,
        max_tokens=1024,
        n=1,
        stop=None,
        temperature=temperature,
    )
    message = response.choices[0].text.strip()
    return message

# Loop principale per la conversazione

while True:
    # Richiedi un comando vocale all'utente
    prompt = "\nUtente: "
    user_input = listen()

    # Se il comando vocale è stato riconosciuto, aggiungilo alla conversazione e chiedi a OpenAI di generare una risposta
    if user_input:
        conversation_history.append(user_input)
        conversation_history = conversation_history[-max_history_length:]
        context = "\n".join(conversation_history[-max_history_length:])
        prompt += context + user_input + "\nAI: "
        response = get_openai_response(prompt, temperature)

        # Sintetizza la risposta vocale e riprodurla
        print("AI: " + response)
        speak(response)

    # Se non viene riconosciuto alcun comando vocale, continua ad ascoltare
    else:
        print("Scusa, non ho capito. Puoi ripetere?")
Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form

    0 0 votes
    Article Rating
    Subscribe
    Notificami
    guest
    0 Commenti
    Inline Feedbacks
    View all comments
    0
    Would love your thoughts, please comment.x