Как я делал голосового ассистента на NLP и не сошел с ума. nlp.. nlp. openai.. nlp. openai. python.. nlp. openai. python. rasa.. nlp. openai. python. rasa. whisper.. nlp. openai. python. rasa. whisper. голосовой ассистент.. nlp. openai. python. rasa. whisper. голосовой ассистент. Машинное обучение.. nlp. openai. python. rasa. whisper. голосовой ассистент. Машинное обучение. распознавание речи.. nlp. openai. python. rasa. 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

Источник

Рейтинг@Mail.ru
Rambler's Top100