Діарізація мовця, важливий процес аналізу аудіо, сегментує аудіофайл на основі ідентичності мовця. У цьому дописі йдеться про інтеграцію PyAnnote Hugging Face для щоденника диктора з Amazon SageMaker асинхронні кінцеві точки.
Ми надаємо вичерпний посібник із розгортання рішень сегментації динаміків і кластеризації за допомогою SageMaker у хмарі AWS. Ви можете використовувати це рішення для додатків, які мають справу з аудіозаписами з кількома динаміками (понад 100).
Огляд рішення
Амазонська розшифровка це основний сервіс для діаризації доповідачів у AWS. Однак для непідтримуваних мов ви можете використовувати інші моделі (у нашому випадку PyAnnote), які будуть розгорнуті в SageMaker для висновку. Для коротких аудіофайлів, де висновок займає до 60 секунд, ви можете використовувати висновок у реальному часі. Більше 60 секунд, асинхронний слід використовувати висновок. Додатковою перевагою асинхронного висновку є економія коштів завдяки автоматичному масштабуванню кількості екземплярів до нуля, коли немає запитів для обробки.
Обіймати обличчя це популярний центр з відкритим кодом для моделей машинного навчання (ML). AWS і Hugging Face мають a партнерство що забезпечує плавну інтеграцію через SageMaker із набором контейнерів AWS Deep Learning Containers (DLC) для навчання та висновків у PyTorch або TensorFlow, а також оцінювачів і предикторів Hugging Face для SDK SageMaker Python. Функції та можливості SageMaker допомагають розробникам і дослідникам даних легко розпочати роботу з обробки природної мови (NLP) на AWS.
Інтеграція цього рішення передбачає використання попередньо навченої моделі діаризації мовця Hugging Face за допомогою Бібліотека PyAnnote. PyAnnote — це набір інструментів з відкритим вихідним кодом, написаний на Python для діаризації доповідачів. Ця модель, навчена на зразковому наборі аудіоданих, забезпечує ефективне розділення динаміків в аудіофайлах. Модель розгортається на SageMaker як асинхронне налаштування кінцевої точки, що забезпечує ефективну та масштабовану обробку завдань діаризації.
Наступна діаграма ілюструє архітектуру рішення.
Для цієї публікації ми використовуємо наступний аудіофайл.
Стерео- або багатоканальні аудіофайли автоматично мікшуються до моно шляхом усереднення каналів. Під час завантаження аудіофайли, відібрані з іншою частотою, автоматично змінюються до 16 кГц.
Переконайтеся, що обліковий запис AWS має квоту обслуговування для розміщення кінцевої точки SageMaker для екземпляра ml.g5.2xlarge.
Створіть функцію моделі для доступу до діаризації мовця PyAnnote із Hugging Face
Ви можете використовувати Hugging Face Hub, щоб отримати доступ до потрібного попередньо навченого Модель діаризації спікера PyAnnote. Ви використовуєте той самий сценарій для завантаження файлу моделі під час створення кінцевої точки SageMaker.
Дивіться наступний код:
from PyAnnote.audio import Pipeline
def model_fn(model_dir):
# Load the model from the specified model directory
model = Pipeline.from_pretrained(
"PyAnnote/speaker-diarization-3.1",
use_auth_token="Replace-with-the-Hugging-face-auth-token")
return model
Запакуйте код моделі
Підготуйте такі важливі файли, як inference.py, який містить код висновку:
%%writefile model/code/inference.py
from PyAnnote.audio import Pipeline
import subprocess
import boto3
from urllib.parse import urlparse
import pandas as pd
from io import StringIO
import os
import torch
def model_fn(model_dir):
# Load the model from the specified model directory
model = Pipeline.from_pretrained(
"PyAnnote/speaker-diarization-3.1",
use_auth_token="hf_oBxxxxxxxxxxxx)
return model
def diarization_from_s3(model, s3_file, language=None):
s3 = boto3.client("s3")
o = urlparse(s3_file, allow_fragments=False)
bucket = o.netloc
key = o.path.lstrip("/")
s3.download_file(bucket, key, "tmp.wav")
result = model("tmp.wav")
data = {}
for turn, _, speaker in result.itertracks(yield_label=True):
data[turn] = (turn.start, turn.end, speaker)
data_df = pd.DataFrame(data.values(), columns=["start", "end", "speaker"])
print(data_df.shape)
result = data_df.to_json(orient="split")
return result
def predict_fn(data, model):
s3_file = data.pop("s3_file")
language = data.pop("language", None)
result = diarization_from_s3(model, s3_file, language)
return {
"diarization_from_s3": result
}
Підготуйте a requirements.txt файл, який містить необхідні бібліотеки Python, необхідні для виконання висновку:
with open("model/code/requirements.txt", "w") as f:
f.write("transformers==4.25.1n")
f.write("boto3n")
f.write("PyAnnote.audion")
f.write("soundfilen")
f.write("librosan")
f.write("onnxruntimen")
f.write("wgetn")
f.write("pandas")
Нарешті, стисніть inference.py та файли requirements.txt і збережіть його як model.tar.gz:
!tar zcvf model.tar.gz *
Налаштуйте модель SageMaker
Визначте ресурс моделі SageMaker, вказавши URI зображення, розташування даних моделі Служба простого зберігання Amazon (S3) і роль SageMaker:
import sagemaker
import boto3
sess = sagemaker.Session()
sagemaker_session_bucket = None
if sagemaker_session_bucket is None and sess is not None:
sagemaker_session_bucket = sess.default_bucket()
try:
role = sagemaker.get_execution_role()
except ValueError:
iam = boto3.client("iam")
role = iam.get_role(RoleName="sagemaker_execution_role")["Role"]["Arn"]
sess = sagemaker.Session(default_bucket=sagemaker_session_bucket)
print(f"sagemaker role arn: {role}")
print(f"sagemaker bucket: {sess.default_bucket()}")
print(f"sagemaker session region: {sess.boto_region_name}")
Завантажте модель на Amazon S3
Завантажте заархівований файл моделі PyAnnote Hugging Face у відро S3:
Налаштуйте асинхронну кінцеву точку для розгортання моделі на SageMaker за допомогою наданої конфігурації асинхронного висновку:
from sagemaker.huggingface.model import HuggingFaceModel
from sagemaker.async_inference.async_inference_config import AsyncInferenceConfig
from sagemaker.s3 import s3_path_join
from sagemaker.utils import name_from_base
async_endpoint_name = name_from_base("custom-asyc")
# create Hugging Face Model Class
huggingface_model = HuggingFaceModel(
model_data=s3_location, # path to your model and script
role=role, # iam role with permissions to create an Endpoint
transformers_version="4.17", # transformers version used
pytorch_version="1.10", # pytorch version used
py_version="py38", # python version used
)
# create async endpoint configuration
async_config = AsyncInferenceConfig(
output_path=s3_path_join(
"s3://", sagemaker_session_bucket, "async_inference/output"
), # Where our results will be stored
# Add nofitication SNS if needed
notification_config={
# "SuccessTopic": "PUT YOUR SUCCESS SNS TOPIC ARN",
# "ErrorTopic": "PUT YOUR ERROR SNS TOPIC ARN",
}, # Notification configuration
)
env = {"MODEL_SERVER_WORKERS": "2"}
# deploy the endpoint endpoint
async_predictor = huggingface_model.deploy(
initial_instance_count=1,
instance_type="ml.xx",
async_inference_config=async_config,
endpoint_name=async_endpoint_name,
env=env,
)
Перевірте кінцеву точку
Оцініть функціональність кінцевої точки, надіславши аудіофайл для діаризації та отримавши вихідні дані JSON, які зберігаються в указаному вихідному шляху S3:
# Replace with a path to audio object in S3
from sagemaker.async_inference import WaiterConfig
res = async_predictor.predict_async(data=data)
print(f"Response output path: {res.output_path}")
print("Start Polling to get response:")
config = WaiterConfig(
max_attempts=10, # number of attempts
delay=10# time in seconds to wait between attempts
)
res.get_result(config)
#import waiterconfig
Щоб розгорнути це рішення в масштабі, ми пропонуємо використовувати AWS Lambda, Служба простих сповіщень Amazon (Amazon SNS), або Служба простої черги Amazon (Amazon SQS). Ці служби створені для масштабованості, керованих подіями архітектур та ефективного використання ресурсів. Вони можуть допомогти відокремити процес асинхронного висновку від обробки результатів, дозволяючи масштабувати кожен компонент незалежно та ефективніше обробляти пакети запитів на висновки.
результати
Вихідні дані моделі зберігаються в s3://sagemaker-xxxx /async_inference/output/. Результат показує, що аудіозапис сегментовано на три стовпці:
Ви можете встановити політику масштабування на нуль, встановивши MinCapacity на 0; асинхронний висновок дозволяє автоматично масштабувати до нуля без запитів. Вам не потрібно видаляти кінцеву точку, це ваги від нуля, коли знову знадобиться, зменшуючи витрати, коли не використовується. Перегляньте наступний код:
# Common class representing application autoscaling for SageMaker
client = boto3.client('application-autoscaling')
# This is the format in which application autoscaling references the endpoint
resource_id='endpoint/' + <endpoint_name> + '/variant/' + <'variant1'>
# Define and register your endpoint variant
response = client.register_scalable_target(
ServiceNamespace='sagemaker',
ResourceId=resource_id,
ScalableDimension='sagemaker:variant:DesiredInstanceCount', # The number of EC2 instances for your Amazon SageMaker model endpoint variant.
MinCapacity=0,
MaxCapacity=5
)
Якщо ви хочете видалити кінцеву точку, використовуйте такий код:
Рішення може ефективно обробляти кілька або великі аудіофайли.
У цьому прикладі використовується один екземпляр для демонстрації. Якщо ви хочете використовувати це рішення для сотень або тисяч відео та використовувати асинхронну кінцеву точку для обробки в кількох екземплярах, ви можете використовувати політика автоматичного масштабування, який розрахований на велику кількість вихідних документів. Автоматичне масштабування динамічно регулює кількість екземплярів, наданих для моделі, у відповідь на зміни у вашому робочому навантаженні.
Рішення оптимізує ресурси та зменшує навантаження на систему, відокремлюючи довгострокові завдання від висновків у реальному часі.
Висновок
У цій публікації ми запропонували простий підхід до розгортання моделі діаризації мовця Hugging Face на SageMaker за допомогою сценаріїв Python. Використання асинхронної кінцевої точки забезпечує ефективний і масштабований засіб для доставки прогнозів діаризації як служби, безперебійно задовольняючи одночасні запити.
Почніть вже сьогодні з асинхронної діаризації динаміків для ваших аудіопроектів. Зв’яжіться з нами в коментарях, якщо у вас виникнуть запитання щодо запуску та запуску власної асинхронної кінцевої точки діаризації.
Про авторів
Санджай Тіварі є спеціалізованим архітектором рішень AI/ML, який проводить свій час, працюючи зі стратегічними клієнтами, щоб визначити бізнес-вимоги, забезпечити сеанси L300 для конкретних випадків використання та розробити програми та послуги AI/ML, які є масштабованими, надійними та продуктивними. Він допоміг запустити та розширити сервіс Amazon SageMaker на базі AI/ML і реалізував кілька доказів концепції за допомогою служб Amazon AI. Він також розробив передову аналітичну платформу як частину шляху цифрової трансформації.
Кіран Чаллапаллі є розробником глибоких технологій у державному секторі AWS. Він має понад 8 років досвіду роботи зі штучним інтелектом/ML і 23 роки загального досвіду розробки програмного забезпечення та продажів. Kiran допомагає підприємствам державного сектора по всій Індії досліджувати та спільно створювати хмарні рішення, які використовують штучний інтелект, машинне навчання та технології генеративного штучного інтелекту, включаючи великі мовні моделі.