Kaiutindiarisointi, olennainen prosessi äänianalyysissä, segmentoi äänitiedoston puhujan identiteetin perusteella. Tämä viesti käsittelee Hugging Facen PyAnnoten integrointia kaiuttimien päiväkirjaan Amazon Sage Maker asynkroniset päätepisteet.
Tarjoamme kattavan oppaan kaiuttimien segmentointi- ja klusterointiratkaisujen käyttöönotosta SageMakerin avulla AWS-pilvessä. Voit käyttää tätä ratkaisua sovelluksissa, jotka käsittelevät usean kaiuttimen (yli 100) äänitallenteita.
Ratkaisun yleiskatsaus
Amazonin transkriptio on AWS:n kaiuttimien diarisointipalvelu. Ei-tuetuille kielille voit kuitenkin käyttää muita malleja (tässä tapauksessa PyAnnote), jotka otetaan käyttöön SageMakerissa johtopäätösten tekemiseen. Voit käyttää lyhyitä äänitiedostoja, joissa päättely kestää jopa 60 sekuntia reaaliaikainen johtopäätös. Yli 60 sekuntia, asynkroninen johtopäätöstä tulee käyttää. Asynkronisen päättelyn lisäetu on kustannussäästöt, jotka saadaan skaalaamalla ilmentymien lukumäärä automaattisesti nollaan, kun käsiteltäviä pyyntöjä ei ole.
Halaaminen kasvot on suosittu avoimen lähdekoodin keskus koneoppimismalleille (ML). AWS:llä ja Hugging Facella on a kumppanuus joka mahdollistaa saumattoman integroinnin SageMakerin kautta AWS Deep Learning Containers (DLC) -säilön kanssa PyTorch- tai TensorFlow-harjoittelua ja johtopäätöksiä varten sekä Hugging Face -estimaattorit ja ennustajat SageMaker Python SDK:ta varten. SageMakerin ominaisuudet ja ominaisuudet auttavat kehittäjiä ja datatieteilijöitä pääsemään alkuun luonnollisen kielen käsittelyn (NLP) kanssa AWS:ssä helposti.
Tämän ratkaisun integrointi sisältää Hugging Facen esikoulutetun kaiutindiarisointimallin käyttämisen PyAnnote-kirjasto. PyAnnote on avoimen lähdekoodin työkalusarja, joka on kirjoitettu Pythonissa puhujien päiväkirjaa varten. Tämä malli, joka on koulutettu esimerkkiäänitietojoukosta, mahdollistaa tehokkaan kaiuttimien osioinnin äänitiedostoissa. Malli on otettu käyttöön SageMakerissa asynkronisena päätepistekokoonpanona, joka tarjoaa tehokkaan ja skaalautuvan diarisointitehtävien käsittelyn.
Seuraava kaavio kuvaa ratkaisuarkkitehtuuria.
Tässä viestissä käytämme seuraavaa äänitiedostoa.
Stereo- tai monikanavaiset äänitiedostot alasmiksataan automaattisesti monoiksi laskemalla kanavien keskiarvo. Eri taajuudella näytteitetyt äänitiedostot näytteistetään automaattisesti 16 kHz:iin latauksen yhteydessä.
Varmista, että AWS-tilillä on palvelukiintiö SageMaker-päätepisteen isännöimiseksi ml.g5.2xlarge-esiintymää varten.
Luo mallitoiminto PyAnnote-kaiuttimen päiväkirjaan pääsemiseksi Hugging Facen kautta
Voit käyttää Hugging Face Hubia päästäksesi haluttuun esikoulutettuun PyAnnote-kaiuttimen diarisointimalli. Käytät samaa komentosarjaa mallitiedoston lataamiseen luodessasi SageMaker-päätepistettä.
Katso seuraava koodi:
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
Pakkaa mallikoodi
Valmistele tärkeät tiedostot, kuten inference.py, joka sisältää päättelykoodin:
%%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
}
Valmista a requirements.txt tiedosto, joka sisältää päätelmän suorittamiseen tarvittavat Python-kirjastot:
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")
Purista lopuksi inference.py ja követelmények.txt-tiedostot ja tallenna se nimellä model.tar.gz:
Määritä asynkroninen päätepiste mallin käyttöönottoa varten SageMakerissa käyttämällä toimitettua asynkronista päättelykokoonpanoa:
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,
)
Testaa päätepiste
Arvioi päätepisteen toiminnallisuus lähettämällä äänitiedosto diarisointia varten ja hakemalla määritettyyn S3-lähtöpolkuun tallennettu JSON-lähtö:
# 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
Jos haluat ottaa tämän ratkaisun käyttöön laajasti, suosittelemme käyttämään AWS Lambda, Amazonin yksinkertainen ilmoituspalvelu (Amazon SNS), tai Amazonin yksinkertainen jonopalvelu (Amazon SQS). Nämä palvelut on suunniteltu skaalautumiseen, tapahtumalähtöisiin arkkitehtuureihin ja tehokkaaseen resurssien käyttöön. Ne voivat auttaa erottamaan asynkronisen päättelyprosessin tulosten käsittelystä, jolloin voit skaalata jokaisen komponentin itsenäisesti ja käsitellä päättelypyyntöjen purskeita tehokkaammin.
tulokset
Mallin lähtö tallennetaan osoitteeseen s3://sagemaker-xxxx /async_inference/output/. Tulos näyttää, että äänitallenne on segmentoitu kolmeen sarakkeeseen:
Voit asettaa skaalauskäytännön nollaksi asettamalla MinCapacity-asetukseksi 0; asynkroninen päättely voit skaalata automaattisesti nollaan ilman pyyntöjä. Sinun ei tarvitse poistaa päätepistettä asteikot nollasta tarvittaessa uudelleen, mikä vähentää kustannuksia, kun sitä ei käytetä. Katso seuraava koodi:
# 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
)
Jos haluat poistaa päätepisteen, käytä seuraavaa koodia:
Ratkaisu pystyy käsittelemään tehokkaasti useita tai suuria äänitiedostoja.
Tämä esimerkki käyttää yhtä esiintymää esittelyyn. Jos haluat käyttää tätä ratkaisua satoihin tai tuhansiin videoihin ja käyttää asynkronista päätepistettä useiden esiintymien käsittelyyn, voit käyttää automaattinen skaalauskäytäntö, joka on suunniteltu suurelle määrälle lähdeasiakirjoja. Automaattinen skaalaus säätää dynaamisesti mallille varattujen ilmentymien määrää vasteena työmääräsi muutoksiin.
Ratkaisu optimoi resurssit ja vähentää järjestelmän kuormitusta erottamalla pitkäkestoiset tehtävät reaaliaikaisista päätelmistä.
Yhteenveto
Tässä viestissä tarjosimme suoraviivaisen lähestymistavan Hugging Facen kaiutindiarisointimallin käyttöönottamiseksi SageMakerissa Python-skriptien avulla. Asynkronisen päätepisteen käyttäminen tarjoaa tehokkaan ja skaalautuvan tavan toimittaa diarisaatioennusteita palveluna, joka vastaa samanaikaisiin pyyntöihin saumattomasti.
Aloita jo tänään asynkronisella kaiutinpäiväkirjauksella ääniprojekteihisi. Ota yhteyttä kommentteihin, jos sinulla on kysyttävää oman asynkronisen diarisoinnin päätepisteesi käyttöönotosta.
Tietoja Tekijät
Sanjay Tiwary on Specialist Solutions Architect AI/ML, joka työskentelee strategisten asiakkaiden kanssa määrittääkseen liiketoimintavaatimuksia, tarjotakseen L300-istuntoja tiettyihin käyttötapauksiin sekä suunnitellakseen AI/ML-sovelluksia ja -palveluita, jotka ovat skaalautuvia, luotettavia ja tehokkaita. Hän on auttanut käynnistämään ja skaalaamaan AI/ML-pohjaista Amazon SageMaker -palvelua ja toteuttanut useita konseptitodistuksia käyttämällä Amazon AI -palveluita. Hän on myös kehittänyt edistyneen analytiikan alustan osana digitaalisen transformaation matkaa.
Kiran Challapalli on syväteknologian liiketoiminnan kehittäjä AWS:n julkisella sektorilla. Hänellä on yli 8 vuoden kokemus AI/ML:stä ja 23 vuoden yleinen ohjelmistokehitys- ja myyntikokemus. Kiran auttaa julkisen sektorin yrityksiä kaikkialla Intiassa tutkimaan ja luomaan yhdessä pilvipohjaisia ratkaisuja, jotka käyttävät tekoälyä, ML:ää ja generatiivista tekoälyä – myös suuria kielimalleja – tekniikoita.