Как я делал голосового ассистента на NLP и не сошел с ума

в 16:38, , рубрики: nlp, OpenAI, python, Whisper, голосовой ассистент, машинное обучение, распознавание речи, синтез речи
Как я делал голосового ассистента на NLP и не сошел с ума - 1

Голосовые ассистенты давно перестали быть просто игрушкой — теперь это полноценные цифровые помощники, которые умеют общаться, искать информацию и даже шутить (иногда лучше некоторых людей). В этой статье разберём, как собрать своего кастомного ассистента с нуля на Python, используя современные NLP-инструменты. Без Siri, без Alexa, всё своё, родное.

Зачем всё это?

Когда голосовой ассистент отвечает тебе по делу — это магия. Но чтобы эта магия случилась, под капотом крутится куча хитрых технологий: автоматическое распознавание речи (ASR), обработка естественного языка (NLP), диалоговые модели, синтез речи (TTS)… и если хоть одна часть запнётся — привет, хаос. А ещё желательно, чтобы он не сливал все данные на сервера третьих лиц, да?

В этой статье покажу, как собрать своего ассистента, который будет работать локально, понимать речь, говорить в ответ и помнить, о чём вы с ним говорили. Всё на Python, по-взрослому.

Архитектура голосового ассистента

Вот базовые блоки системы:

  • ASR (Automatic Speech Recognition) — распознавание речи из микрофона.

  • NLP Engine — обработка текста, понимание намерений.

  • Dialogue Manager — управление диалогом, логикой взаимодействия.

  • TTS (Text-to-Speech) — озвучивание ответа.

  • API Layer — если ассистенту нужно что-то искать или выполнять действия.

Мы будем использовать:

  • Whisper от OpenAI для распознавания речи.

  • Rasa в качестве движка для диалогов и NLP.

  • pyttsx3 для синтеза речи.

  • SpeechRecognition для захвата голоса.

Часть 1: Распознавание речи с Whisper

Whisper — это модель от OpenAI, которая умеет распознавать аудио. Можно использовать её локально через whisper или faster-whisper.

Пример кода на Python:

import whisper
import sounddevice as sd
import numpy as np
import scipy.io.wavfile

model = whisper.load_model("base")

def record_audio(duration=5, fs=16000):
    print("Говори...")
    audio = sd.rec(int(duration * fs), samplerate=fs, channels=1, dtype='int16')
    sd.wait()
    return np.squeeze(audio)

def save_wav(filename, audio, fs=16000):
    scipy.io.wavfile.write(filename, fs, audio)

audio = record_audio()
save_wav("temp.wav", audio)

result = model.transcribe("temp.wav")
print("Ты сказал:", result["text"])

Часть 2: NLP с Rasa

Rasa позволяет строить полноценные диалоговые системы с определением намерений, слотов, контекста.

# nlu.yml
version: "3.1"

nlu:
- intent: greet
  examples: |
    - Привет
    - Здравствуй
    - Доброе утро

- intent: ask_weather
  examples: |
    - Какая погода?
    - Что там с погодой?
    - Будет дождь?

# domain.yml
intents:
  - greet
  - ask_weather

responses:
  utter_greet:
    - text: "Привет! Чем могу помочь?"
  utter_weather:
    - text: "Погода отличная, солнышко светит!"

Дальше пишем stories, запускаем rasa train, и всё — диалоговая логика работает.

Часть 3: Синтез речи

Для TTS можно использовать pyttsx3, он работает оффлайн и довольно шустрый.

import pyttsx3

engine = pyttsx3.init()
engine.say("Привет! Я твой голосовой ассистент.")
engine.runAndWait()

Можно выбрать голос, скорость, тональность. На винде и маке разные голоса, но общее API — одинаковое.

Часть 4: Склеиваем всё вместе

Теперь мы можем построить полный цикл:

  1. Голос → текст (Whisper)

  2. Текст → интент (Rasa)

  3. Ответ → текст (Rasa)

  4. Текст → речь (pyttsx3)

# main.py
from rasa.core.agent import Agent
from whisper import load_model
import pyttsx3

agent = Agent.load('models')  # путь к модели rasa
asr_model = load_model("base")
tts = pyttsx3.init()

while True:
    audio = record_audio()
    save_wav("temp.wav", audio)
    result = asr_model.transcribe("temp.wav")
    user_text = result["text"]

    response = agent.handle_text(user_text)
    if response:
        reply = response[0]['text']
        print(f"Ассистент: {reply}")
        tts.say(reply)
        tts.runAndWait()

Что можно улучшить?

  • Заменить pyttsx3 на Coqui TTS или VITS для более человеческого голоса.

  • Добавить память и историю диалога с базой данных.

  • Подключить внешние API — погоду, календари, заметки.

Заключение

Сделать своего голосового ассистента — это не так сложно, как может показаться. Главное — не пытаться сделать сразу как у Google или Amazon. Маленькими шагами можно дойти до вполне приличного помощника. И самое главное — он будет именно таким, как тебе нужно.

А потом можно уже и добавить ему характер. Пусть бурчит по утрам или говорит «Мастер, вы сегодня великолепны».

Если статья оказалась полезной — попробуйте реализовать хотя бы базовую версию ассистента. Поверьте, это очень затягивает. Особенно, когда ассистент впервые называет вас по имени.

Автор: kris_petrova

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js