Audio AI Cortex¶
L’audio AI Cortex fournit des fonctionnalités avancées de traitement de l’audio alimentées par LLM dont :
Transcription : Convertir la langue conversationnelle en texte.
Identification du locuteur : déterminer qui parle dans chaque partie d’un fichier son avec plusieurs locuteurs.
Extraction d’horodatage : identifier l’horodatage de chaque mot prononcé.
Ces fonctionnalités sont disponibles via la fonction AI_TRANSCRIBE. parce que AI_TRANSCRIBE est géré et hébergé dans snowflake, vous pouvez facilement intégrer le traitement audio dans vos workflows de données sans configuration ni gestion d’infrastructure coûteuses.
Créer une zone de préparation pour le traitement audio¶
Avant de commencer le traitement des données audio, créez une zone de préparation adaptée au stockage des fichiers audio à traiter. La zone de préparation doit comporter une table de répertoire et un chiffrement côté serveur. Le SQL ci-dessous crée une zone de préparation interne appropriée :
CREATE OR REPLACE STAGE input_stage
DIRECTORY = ( ENABLE = true )
ENCRYPTION = ( TYPE = 'SNOWFLAKE_SSE' );
Le SQL suivant crée une zone de préparation externe sur Amazon S3. Les zones de préparation externes Azure et Google Cloud sont également prises en charge.
CREATE OR REPLACE STAGE input_stage
URL='s3://<s3-path>/'
DIRECTORY = ( ENABLE = true )
CREDENTIALS = (AWS_KEY_ID = <aws_key_id>
AWS_SECRET_KEY = <aws_secret_key>)
ENCRYPTION = ( TYPE = 'AWS_SSE_S3' );
Astuce
Pour actualiser automatiquement la table de répertoire de la zone de préparation externe lorsque des fichiers nouveaux ou mis à jour sont disponibles, définissez AUTO_REFRESH = TRUE lors de la création de la zone de préparation. pour plus d’informations, voir CREATE STAGE
AI_TRANSCRIBE¶
AI_TRANSCRIBE est une fonction SQL entièrement gérée qui transcrit les fichiers audio stockés dans une zone de préparation, en extrayant du texte, des horodatages et des informations sur le locuteur. dans les coulisses, elle orchestre les modèles AI optimisés pour la transcription et la diarisation des locuteurs, traitant des fichiers audio d’une durée maximale de deux heures. AI_TRANSCRIBE est évolutif horizontalement, ce qui permet un traitement par lots efficace en traitant plusieurs fichiers à la fois. L’audio peut être traité directement à partir du stockage d’objets pour éviter tout mouvement inutile de données.
Par défaut, AI_TRANSCRIBE convertit les fichiers audio en texte propre et lisible. Vous pouvez également spécifier une granularité d’horodatage afin d’extraire des horodatages pour chaque mot ou changement de locuteur. Les horodatages au niveau des mots sont utiles pour les applications telles que les sous-titres ou pour permettre à l’utilisateur de passer à des parties spécifiques de l’enregistrement en cliquant sur des mots dans la transcription. Les horodatages au niveau du locuteur sont utiles pour comprendre qui a dit quoi dans les réunions, les entretiens ou les appels téléphoniques.
Mode de granularité de l’horodatage |
Résultat |
---|---|
Par défaut |
Transcription de l’intégralité du fichier audio en une seule fois |
Mot |
Transcription avec des horodatages pour chaque mot |
Locuteur |
Indique qui parle, et un horodatage, à chaque changement de locuteur |
Langues acceptées¶
AI_TRANSCRIBE prend en charge les langues suivantes, qui sont automatiquement détectées. Les fichiers peuvent contenir plusieurs langues prises en charge.
Note
La détection de la langue nécessite que l’audio commence dans les cinq premières secondes du fichier. Pour de meilleurs résultats, supprimez les silences excessifs avant le chargement.
Arabe
Bulgare
Cantonais
Catalan
Chinois
Tchèque
Néerlandais
Anglais
Français
Allemand
Grec
Hongrois
Indonésien
Italien
Japonais
Coréen
Letton
Polonais
Portugais
Roumain
Russe
Serbe
Slovène
Espagnol
Suédois
Thaïlandais
Turc
Ukrainien
Limitations¶
Fonctionnalité |
Types de fichiers pris en charge |
Minutes par fichier |
Taille du fichier |
---|---|---|---|
Transcription de texte |
FLAC, MP3, Ogg, WAV, WebM |
120 |
700 MB |
Granularité de l’horodatage « mot » |
FLAC, MP3, OGG, WAV, WebM |
60 |
700 MB |
Granularité de l’horodatage « locuteur » |
FLAC, MP3, OGG, WAV, WebM |
60 |
700 MB |
Pour une détection précise de la langue, l’audio doit commencer dans les cinq premières secondes du fichier.
Exemples¶
Transcription de texte¶
l’exemple suivant transcrit :download :un fichier audio </samples/cortex/audio/consultation.wav>
stocké dans la zone de préparation financial_consultation
, renvoyant une transcription textuelle de l’ensemble du fichier. La fonction TO_FILE convertit le fichier en zone de préparation en une référence de fichier.
SELECT AI_TRANSCRIBE(TO_FILE(
'@financial_consultation', 'consultation.wav'));
Réponse :
{"audio_duration":321.78,"text":"Good afternoon, Robert. Thanks for calling in
today. I understand you had some concerns about your portfolio you wanted to
discuss. Yes, I'm really worried. I've been watching the news and the market's
been all over the place lately. I'm thinking maybe I should just sell
everything, all my stocks and mutual funds and put it all in bonds or CDs. At
least then I could sleep at night. I can definitely understand that concern,
Robert. Market volatility can be unsettling, especially when you're seeing
those daily swings in the headlines. Before we talk about any major moves, can
you help me understand what specifically is driving this anxiety? Is it the
recent tech sector pullback or something more general? It's everything. I'm 52
years old and I keep thinking about what happened in 2008. I lost so much then
and I'm worried we're heading for another crash with this new administration. I
can't afford to lose my retirement savings. Those are absolutely valid
concerns, and I appreciate you sharing that context. That was a really
challenging time for everyone. Let me ask you this. When we last reviewed your
portfolio in March, we had you allocated at about 70% equities and 30% bonds,
correct? And your target retirement age is still 62%. That's right. But
honestly, 70% in stocks feels way too risky right now. I'm thinking more like
20% stocks, 80% bonds, maybe even less in stocks. I understand that instinct,
Robert. Let's walk through this together. First, I want to remind you of
something important. Your current portfolio is already designed with volatility
in mind. You're not in individual stocks. You're in diversified index funds and
some actively managed funds across different sectors and even international
markets. but they're still going down. My quarterly statement showed I was down
8% this quarter alone. You're absolutely right, and that's painful to see, but
let's put this in perspective. Over the past 12 months, even with this recent
volatility, your portfolio is still up about 3%. The market has given back some
gains, but we're not in crisis territory. Remember, we built your allocation
specifically because you have 10 years until retirement. That time horizon is
actually your biggest asset here. So you're saying I should just do nothing?
Not exactly nothing, but I am suggesting we don't make dramatic changes based
on short-term market movements. However, I do hear your concern about risk
tolerance. What if we made a smaller adjustment? Instead of going to 20%
stocks, what if we moved to 60% stocks and 40% bonds? That would reduce your
equity exposure by 10%, which might help you sleep better, but wouldn't take
you completely out of the growth potential you need for retirement. That
actually sounds more reasonable, but I'm still worried about losing more
money. I understand completely. Let me ask you this. What's your bigger worry,
the volatility of the next year, two or two, or having enough money to retire
comfortably at 62? Because if we get too conservative now, inflation alone
could erode your purchasing power over the next decade. I didn't really thought
about inflation that way. I guess I've been so focused on not losing money that
I forgot about the money I might not make. Exactly. And remember, Robert,
you're not alone in this. I've had this conversation with many clients over the
past few weeks. The ones who stayed disciplined during previous market
downturns are generally glad they did. What if we also set up a plan where we
review your portfolio monthly for the next few months? That way you'll have
regular check-ins and won't feel like you're just riding this out blindly.
Monthly reviews would definitely help. And maybe the 60-40 split is a good
compromise. I just, I don't want to be stupid about this. Overt, wanting to
protect your retirement isn't stupid. It's exactly what you should be thinking
about. The key is making sure we're protecting it in the right way. Staying
invested in a diversified portfolio, even with some volatility, has
historically been the best way to preserve and grow wealth over time. okay, I
think I can live with moving to 60% stocks, but if things get really bad... If
things get really bad, we'll talk again. That's what I'm here for. And
remember, we'll be reviewing this monthly anyway. You're not locked into
anything forever. But I do want to emphasize that market timing is incredibly
difficult, even for professionals. The goal isn't to avoid all volatility.
It's to stay invested long enough to benefit from the market's long-term
upward trend. All right, Sarah, let's do the rebalancing to 60-40 and I'll try
to stop checking my account balance every day. It sounds like a solid plan,
Robert. And yes, definitely limit the daily balance checking. That's a recipe
for anxiety. I'll send you some research on historical market recoveries after
our call and we'll schedule our first monthly review for next month. How does
that sound? That sounds good. Thanks for talking me through this, Sarah. I feel
a lot better than when I call. I'm so glad to hear that, Robert. Remember,
staying invested requires patience, but your future self will thank you for it.
I'll have the rebalancing done by tomorrow morning, and you should see the
changes reflected in your account by Thursday. Perfect. Thanks again, Sarah. I
thank you deeply for your patience and understanding. I'll talk to you next
month."}
Segmentation au niveau des mots avec horodatages¶
Définissez la granularité de l’horodatage sur « mot » pour extraire des horodatages précis pour chaque mot prononcé, permettant ainsi des transcriptions interrogeables et navigables. Notez que ce fichier audio
est en espagnol.
SELECT AI_TRANSCRIBE(TO_FILE('@financial_consultation', 'consultation_3_sp.wav'),
{'timestamp_granularity': 'word'});
Réponse :
Note
La sortie est tronquée par souci de brièveté. La sortie complète contient un segment pour chaque mot mentionné dans le fichier audio.
{
"audio_duration": 150.66,
"segments": [
{
"end": 1.513,
"start": 0.031,
"text": "«Buenos"
},
{
"end": 2.034,
"start": 1.553,
"text": "días,"
},
{
"end": 2.334,
"start": 2.054,
"text": "doña"
},
{
"end": 4.457,
"start": 2.374,
"text": "Esperanza."
},
{
"end": 4.597,
"start": 4.477,
"text": "¿En"
},
{
"end": 4.857,
"start": 4.697,
"text": "qué"
},
{
"end": 5.118,
"start": 4.917,
"text": "puedo"
},
{
"end": 5.518,
"start": 5.178,
"text": "ayudarla"
},
{
"end": 6.5,
"start": 5.578,
"text": "hoy?»"
},
...
{
"end": 146.671,
"start": 146.551,
"text": "Ya"
},
{
"end": 147.234,
"start": 146.732,
"text": "veremos,"
},
{
"end": 147.837,
"start": 147.355,
"text": "Roberto."
},
{
"end": 148.581,
"start": 148.078,
"text": "Gracias"
},
{
"end": 148.822,
"start": 148.661,
"text": "por"
},
{
"end": 149.646,
"start": 148.902,
"text": "tu"
},
{
"end": 150.711,
"start": 150.249,
"text": "ayuda."
}
],
"text": "«Buenos días, doña Esperanza. ¿En qué puedo ayudarla hoy?» «Roberto, quiero
hacer un cambio grande en mi portafolio. Quiero vender todo y compra solo acciones
de Tesla». «¿Tesla? Doña Esperanza, usted tiene 72 años. ¿Por qué quiere poner todo
su dinero en una sola compañía?» «¿Por qué Tesla va a ser el futuro?» Un minuto me
explico que van a dominar los carros eléctricos. Dice que puedo triplicar mi dinero
en dos años. Entiendo que Tesla es una impresión innovador, pero poner todos sus
ajuros en una sola acción es muy arriesgado. ¿Qué pasa si Tesla baja? No va a bajar.
Elon Musk es un genio. Además, mi vecina compró Teslas. Teslas es tres años. Y Aorus
tiene el doble de dinero. Doña Esperanza, su vecina tuvo suerte, pero las yantes
individuales pueden ser muy volátiles. Usted necesita dinero estable para sus gastos
de retiro. Roberto, tengo $400,000 en mi cuenta. Si te la sube como dismi, voy a
tener más de un año. Podré dejarle más dinero a mi familia. Pero también podría
perder la mitad de su dinero o más. Te sabía Jairo 60% antes. No puedo recomendarle
que haga esto. Entonces no me dejas escuchando. Yo sé lo que quiero hacer con mi
dinero. Es mi decisión. Tienes razón, es su dinero. Pero como su asesor tengo que
decir que esto es extremamanda peligroso para alguien de su edad. Eva, no importa.
Quiero tomar este riesgo. Vas a Edom o no. Doña Esperanza, ¿qué tal si compramos
algo de Tesla perronoto? ¿Podríamos poner 10% en Tesla y el resto en versiones más
seguras? No, Roberto, quiero el 100% en Tesla. Si no me ayudas, voy a alcanzar otro
asesor. Que sí lo haga. Está bien, Doña Presanza. Voy a procesar la orden, pero voy
a documentar que fue contra mi recomendación profesional. Perfecto. Hazlo hoy mismo.
Quiero compra antes que suba más. Será ahora. Él considera lo que le estoy diciendo.
Esto puede ser ver muy mal a la vida. Ya veremos, Roberto. Gracias por tu ayuda."
}
Reconnaissance du locuteur¶
Définissez la granularité de l’horodatage sur « locuteur » pour détecter, séparer et identifier des locuteurs uniques dans les conversations ou les réunions. cet exemple utilise un fichier audio
un fichier audio avec deux locuteurs, l’un parlant en anglais et l’autre en espagnol.
SELECT AI_TRANSCRIBE(TO_FILE('@financial_consultation', 'consultation_5_mix_es_en.wav'),
{'timestamp_granularity': 'speaker'});
Réponse :
Note
La sortie est tronquée par souci de brièveté. La sortie complète contient un segment pour chaque « tour » conversationnel dans le fichier audio.
{
"audio_duration": 208.66,
"segments": [
{
"end": 3.076,
"speaker_label": "SPEAKER_00",
"start": 0.031,
"text": "Good afternoon, this is Aaliyah Johnson from Secure Financial Services."
},
{
"end": 4.297,
"speaker_label": "SPEAKER_02",
"start": 3.196,
"text": "How can I help you today?"
},
{
"end": 7.182,
"speaker_label": "SPEAKER_02",
"start": 5.139,
"text": "Hola, necesito ayuda con mis inversiones."
},
{
"end": 11.528,
"speaker_label": "SPEAKER_02",
"start": 7.482,
"text": "Estoy muy preocupada porque he perdido mucho dinero y no sé qué hacer."
},
{
"end": 14.132,
"speaker_label": "SPEAKER_02",
"start": 12.289,
"text": "I'm sorry, I'm not understanding."
},
{
"end": 15.795,
"speaker_label": "SPEAKER_02",
"start": 14.553,
"text": "Do you speak English?"
},
...
{
"end": 189.169,
"speaker_label": "SPEAKER_02",
"start": 185.841,
"text": "Es muy difícil entender estas cosas en inglés."
},
{
"end": 192.326,
"speaker_label": "SPEAKER_01",
"start": 190.178,
"text": "Por supuesto, señora Ramírez."
},
{
"end": 197.145,
"speaker_label": "SPEAKER_01",
"start": 192.788,
"text": "Es muy importante que entienda completamente sus opciones."
},
{
"end": 203.229,
"speaker_label": "SPEAKER_01",
"start": 197.165,
"text": "Voy a hacer los cambios hoy mismo y la llamaré la próxima semana para ver cómo se siente."
},
{
"end": 205.759,
"speaker_label": "SPEAKER_02",
"start": 203.891,
"text": "Muchísimas gracias, María."
},
{
"end": 208.71,
"speaker_label": "SPEAKER_02",
"start": 206.18,
"text": "Me siento mucho más tranquila ahora."
}
],
"text": "Good afternoon, this is Aaliyah Johnson from Secure Financial Services.
How can I help you today? Hola, necesito ayuda con mis inversiones. Estoy muy
preocupada porque he perdido mucho dinero y no sé qué hacer. I'm sorry, I'm not
understanding. Do you speak English? Un poquito, pero es muy difícil para mí. Aquí
hay alguien que habla español, ¿ok? Es muy importante. He perdido miles de dólares.
I'm really sorry, but I don't speak Spanish. Let me see. I think we might have
someone who speaks Spanish, but they're not available right now. ¿Cuándo pueden
ayudarme? Necesito hablar con a lguien hoy. Mi esposo está muy enojado y quiere que
vendamos todo. I understand you need someone who speaks Spanish. Let me check if
Maria is available. She's our Spanish-speaking advisor. Can you hold for just a
moment? No entiendo. Mañana. Pero necesito ayuda ahora. ¿No hay nadie más? I am
going to transfer you to Maria right now. She'll be able to help you with your
investment concerns. Hola, soy María González. Entiendo que necesita ayuda con sus
inversiones. ¿Cómo está usted? ¡Ay, qué alivio! Sí, estoy muy preocupada. He
perdido casi 20.000 dólares en las últimas semanas y mi esposo quiere que vendamos
todo. Comprendo perfectamente su preocupación, señora Ramírez. Perder dinero es muy
estresante. Cuénteme un poco más sobre su situación. ¿Qué tipo de inversiones
tiene? Tengo fondos mutuos y algunas acciones. Todo está bajando mucho. Mi esposo
dice que es mejor tener el dinero en el banco, pero yo no estoy segura. Es natural
sentirse nerviosa cuando el mercado está volátil. Pero antes de tomar decisiones
importantes, vamos a revisar su situación completa. ¿Cuántos años tiene usted y
cuándo planea retirarse? Tengo 55 años y quiero retirarme a los 65, pero con estas
pérdidas no sé si voy a poder. Señora Ramírez, usted todavía tiene 10 años hasta el
retiro. Eso es tiempo suficiente para que sus inversiones se recuperen. El mercado
siempre tiene altibajos, pero históricamente se ha recuperado. ¿Pero qué pasa si no
se recupera esta vez? No puedo perder más dinero. Entiendo su miedo. ¿Qué le parece
si hacemos algunos ajustes para que se sienta más cómoda? Podemos mover parte de su
dinero a inversiones más conservadoras, como bonos. Eso suena mejor. No quiero
arriesgar todo, pero tampoco quiero perder la oportunidad de crecer mi dinero.
Perfecto. Vamos a encontrar un equilibrio. ¿Qué tal si movemos el 40% de sus
acciones a bonos? Así tendrá menos riesgo, pero todavía podrá crecer su dinero para
el retiro. Sí, eso me hace sentir mucho mejor. Gracias por explicarme todo en
español. Es muy difícil entender estas cosas en inglés. Por supuesto, señora
Ramírez. Es muy importante que entienda completamente sus opciones. Voy a hacer los
cambios hoy mismo y la llamaré la próxima semana para ver cómo se siente. Muchísimas
gracias, María. Me siento mucho más tranquila ahora."
}
Utiliser avec d’autres fonctions AISQL¶
Vous pouvez transmettre la sortie de AI_TRANSCRIBE à d’autres fonctions AISQL pour un traitement ultérieur. Par exemple, vous pouvez utiliser AI_SUMMARIZE pour résumer la transcription, ou AI_CLASSIFY pour catégoriser le contenu de la transcription. cet exemple utilise AI_SENTIMENT et AI_COMPLETE pour analyser le texte transcrit à partir de audio de l’appel du client
et fournir un sentiment sur quatre dimensions et une évaluation de l’agent.
Note
AI_SENTIMENT analyse uniquement le texte et ne prend pas en compte les caractéristiques de la langue telles que le ton de la voix.
WITH transcriptions AS
( SELECT TO_VARCHAR (AI_TRANSCRIBE(TO_FILE('@financial_consultation',
'consultation_1.wav'))) AS transcribed_call )
SELECT
AI_SENTIMENT(transcribed_call, ['Professionalism', 'Resolution',
'Wait Time', 'Market Conditions']) AS call_sentiment,
AI_COMPLETE ('claude-4-opus', CONCAT ('Summarize how the agent can improve in 50 words',
transcribed_call)) AS agent_assessment
FROM transcriptions
Réponse AI_SENTIMENT :
{
"categories": [
{
"name": "overall",
"sentiment": "negative"
},
{
"name": "Market Conditions",
"sentiment": "negative"
},
{
"name": "Professionalism",
"sentiment": "negative"
},
{
"name": "Resolution",
"sentiment": "negative"
},
{
"name": "Wait Time",
"sentiment": "unknown"
}
]
}
Réponse AI_COMPLETE :
"The agent needs significant improvement in empathy, active listening, and client-centered communication. Instead of
dismissing concerns and using condescending language, they should validate emotions, explain market conditions
professionally, present multiple options, and guide clients through informed decision-making while respecting their
risk tolerance and personal circumstances."
Considérations relatives aux clients¶
La facturation de toutes les fonctionnalités AISQL est basée sur la consommation de jetons. Pour la transcription, chaque seconde d’audio traitée correspond à 50 jetons, quelle que soit la langue ou la méthode de segmentation. Une heure complète d’audio est donc de 180 000 jetons. en supposant que le traitement d’un million de jetons coûte 1,3 crédit et que les crédits snowflake coûtent 3 $ US chacun, chaque heure de traitement audio coûte environ 0,117 $ US. Cette estimation est susceptible d’être modifiée. Pour les informations sur les tarifs actuels, consultez le tableau de consommation du service Snowflake.
Note
AI_TRANSCRIBE a une durée de facturation minimale de 1 minute. Les fichiers inférieurs à 1 minute sont toujours traités, mais sont facturés comme s’ils duraient 1 minute. Pour traiter efficacement un grand nombre de fichiers audio courts, envisagez de les regrouper dans un seul fichier et utilisez des horodatages pour identifier le début et la fin de chaque fichier original dans la transcription obtenue.