Статьи Обо мне

Протокол — голосовой бот с киберпанк-идентичностью

Сегодня я хочу рассказать вам историю создания моего детища — Протокола, голосового бота с киберпанк-идентичностью, который стал моим личным вызовом и уроком. В этой статье я поделюсь проблемами, которые мы решили, подробностями реализации и честными выводами о том, что пошло не так.

Проблема

За несколько лет работы с AI и голосовыми ботами меня все больше раздражало однообразие и отсутствие индивидуальности в существующих решениях. Большинство голосовых ассистентов — это безликие роботы, которые говорят все одним и тем же монотонным голосом и не имеют собственной идентичности. Я захотел создать бота, который бы выделялся на фоне конкурентов и имел свою уникальную киберпанк-идентичность.

Решение

Моей целью было создать бота, который:

  1. Имел бы голос, отличающийся от привычных стандартных вариантов.
  2. Мог бы общаться в стиле киберпанка, используя специфические термины и выражения.
  3. Обладал бы способностью генерировать уникальные и остроумные ответы на основе контекста разговора.

Реализация

Голос бот

Для реализации уникального голоса мы воспользовались технологией генерации голоса на основе текста (Text-to-Speech). Мы протестировали несколько библиотек и решений, но в конечном итоге остановились на портфолио голосов от Google Text-to-Speech и Microsoft Azure Text to Speech, которые позволили нам получить наиболее реалистичные и отличающиеся друг от друга голоса.

Чтобы придать голосу киберпанк-идентичность, мы проанализировали типичные характеристики голосов в киберпанк-фильмах и играх — грубый, хриплый, немного роботизированный голос. Мы настраивали параметры голоса, такие как тембр, темпоритм и диапазон тональности, чтобы достичь желаемого звучания.

from google.cloud import texttospeech

def synthesize_speech(text, voice_name):
    client = texttospeech.TextToSpeechClient()
    input_text = texttospeech.SynthesisInput(text=text)
    voice = texttospeech.VoiceSelectionParams(language_code="en-US", name=voice_name)
    audio_config = texttospeech.AudioConfig(audio_encoding=texttospeech.AudioEncoding.MP3)

    response = client.synthesize_speech(input=input_text, voice=voice, audio_config=audio_config)
    with open("output.mp3", "wb") as out:
        out.write(response.audio_content)

synthesize_speech("Готов к миссии, босс.", "en-US-Wavenet-D")

Киберпанк-идентичность

Для придания боту киберпанк-идентичности мы создали словарь специфических терминов и выражений, которые он мог бы использовать в разговоре. Мы также настроили его, чтобы он отвечал на стандартные фразы, подобные "Привет" или "Как дела?", в стиле киберпанка.

Примерно так мы добавляли новые слова и фразы в словарь бота:

{
  "привет": "Привет, босс. Система активна и готова к взаимодействию.",
  "как дела": "Функционирую нормально, босс. Мониторю окружающую среду и жду команд.",
  "спасибо": "Нет проблем, босс. Ваша признательность записана в мои лог-архивы."
}

Генерация уникальных ответов

Чтобы бот мог генерировать уникальные и остроумные ответы, мы использовали модель трансформатора (Transformer) от Hugging Face. Модель была обучена на больших корпусах текста, содержащих множество киберпанк-источников, таких как книги Уильяма Гибсона, фильмы и видеоигры в стиле киберпанка.

Мы создали специальный API, который принимал последние сообщения из чата и использовал модель, чтобы сгенерировать уникальный ответ в стиле киберпанка.

import transformers

model = transformers.BlenderbotForConditionalGeneration.from_pretrained("facebook/blenderbot-400M-distill")
tokenizer = transformers.BlenderbotTokenizer.from_pretrained("facebook/blenderbot-400M-distill")

def generate_response(chat_history):
    input_ids = tokenizer.encode(chat_history, return_tensors="pt")
    generated_ids = model.generate(input_ids, max_length=50, num_beams=5, early_stopping=True)
    response = tokenizer.decode(generated_ids[0], skip_special_tokens=True)
    return response

Результат

В результате мы получили Протокола — голосового бота с киберпанк-идентичностью, который отличался от других голосовых ассистентов по звучанию и стилю общения. Он генерировал уникальные и остроумные ответы на основе контекста разговора, а также обладал способностью использовать специфические термины и выражения в стиле киберпанка.

Выводы

Успехи

  1. Уникальный голос: Протокол действительно обладал уникальным звучанием, которое выделяло его среди других голосовых ассистентов.
  2. Киберпанк-идентичность: Бот успешно общался в стиле киберпанка, используя специфические термины и выражения.
  3. Генерация уникальных ответов: Модель трансформатора позволила боту генерировать уникальные и остроумные ответы на основе контекста разговора.

Провалы и ошибки

  1. Генерация голоса: Несмотря на наши усилия, голос Протокола все еще звучал несколько неестественно и отличался от настоящего человеческого голоса. Это было особенно заметно при чтении длинных текстов.
  2. Генерация ответов: Хотя модель трансформатора и позволяла генерировать уникальные ответы, качество ответов было непостоянным, иSometimes они были неконтекстуальными или неадекватными.
  3. Обучение модели: Обучение модели на больших корпусах текста заняло много времени и потребовало значительных вычислительных ресурсов.

В целом, создание Протокола было захватывающим приключением, которое научило меня многому о создании голосовых ботов и AI-систем. Несмотря на некоторые трудности, мы создали уникального бота с киберпанк-идентичностью, который выделялся на фоне конкурентов. В будущем я планирую продолжать работать над Протоколом и verbessern его, чтобы приблизиться к моей изначальной цели — создать бот с настоящей киберпанк-идентичностью.

📋 Копировать для: