一通录音电话里有两个声音,却只有一条音轨。把它转写成一栏文字,读起来就像独白,而 QA 审核员的每个问题都从“这句话是谁说的”开始。必要的告知是坐席说的,还是客户复述的?谁先提到了退款?说话人分离回答第一个问题,建立在它之上的处理流程回答其余的问题。
下面依次讲到:开启说话人分离后 Paxa STT Lite 返回什么,如何把说话人编号对应到通话中的角色,以及编号在哪里止步。最后给出一套逐通执行、无需抽样的 QA 检查的大致结构。
返回的内容#
发送录音时把 diarization 设为 true。响应照常包含转写文本,旁边另有一个 segments 数组。每个 segment 是一个发言段,带有说话人编号、文本,以及以秒为单位的起止时间。说话人按首次出现的顺序从 0 开始编号,编号在整段录音中保持不变。
AUDIO=$(base64 < meeting.m4a | tr -d '\n')
curl -X POST https://api.paxalabs.com/v1/stt \
--max-time 300 \
-H "Authorization: Bearer $PAXA_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"audio\": \"$AUDIO\", \"model\": \"paxa-stt-lite-v1-preview\", \"diarization\": true}"{
"text": "สวัสดีค่ะคุณสมชายยอดชำระของท่านจำนวน พันสองร้อยห้าสิบ บาทครบกำหนดวันที่ สิบห้า สิงหาคมนี้ชำระผ่านแอปได้ตลอด ยี่สิบสี่ ชั่วโมงค่ะ",
"segments": [
{
"speaker": 0,
"text": "สวัสดีค่ะคุณสมชายยอดชำระของท่านจำนวน พันสองร้อยห้าสิบ บาทครบกำหนดวันที่ สิบห้า สิงหาคมนี้ชำระผ่านแอปได้ตลอด ยี่สิบสี่ ชั่วโมงค่ะ",
"start": 0.12,
"end": 11.66
}
],
"usage": {
"seconds": 11.952,
"credits": 1.66
}
}在同一个请求里要求词级时间戳,每个词也会带上说话人编号。发言段呈现对话的整体结构,词则告诉您某个短语是在发言段内的哪一秒说出的。
speaker 0 0.0s สวัสดีค่ะ ฝ่ายบริการลูกค้า ยินดีให้บริการค่ะ speaker 1 3.2s สวัสดีครับ โทรมาเรื่องบิลเดือนนี้ครับ speaker 0 6.1s ขอทราบเลขที่บัญชีสี่ตัวท้ายด้วยค่ะ speaker 1 8.9s สี่ห้าหกเจ็ดครับ
从编号到角色#
模型只给声音编号,不附加姓名、角色或身份。在双方通话中,编号与角色的对应由您来定,三条规则就能覆盖大多数呼叫中心。
- 第一个声音是坐席。呼入电话以坐席按话术说出的问候语开场。只要第一个发言段与问候语吻合,说话人 0 就是坐席。
- 问候语标明角色。第一个发言段对不上时,在前三个发言段里查找话术中的短语,把说出它的说话人当作坐席。
- 双声道录音可以确定角色。把坐席和客户分声道录制的电话系统,可以把每个声道作为单独的文件发送。这样文件就代表角色,每个文件内的说话人分离还能发现转接或主管加入。
出现第三个声音的通话,比如主管介入或转接,会以说话人 2 的身份出现。预期只有两位说话人的规则,应把第三位视为需要复核的信号,因为对话的结构已经变了。
覆盖每通电话的 QA 检查#
角色确定后,话术检查就是在坐席的发言段上做一组字符串匹配。问候语、身份核验、等待提示和结束语,各自成为坐席发言段里必须出现的短语,并记下说出的那一秒。漏掉其中任何一项的通话,就是审核员要去听的那一通。
关键词提醒作用于客户的发言段。表示退款、取消和投诉的词,以及竞争对手的名字,能在通话结束后几分钟内把这通电话标记出来。词汇表最多可放 50 个产品名和套餐名,让它们在成千上万通电话里保持同一种拼写,字符串匹配需要的正是这一点。
通话占比是发言段顺带给出的第三个指标。把每位说话人各发言段的秒数加起来即可。坐席在一通投诉电话里说了八成的时间,就该安排一次辅导谈话,而这个数字直接来自 segments 数组,完全不用去听。
编号在哪里止步#
开启说话人分离的录音会被完整读取后才返回响应,通话越长,耗时越久。长录音的响应要预留几十秒,并且并行发送多通电话。您的套餐允许的并发数,就是可同时处理的通话数。
时长的上限也来自这一次完整读取。开启说话人分离的请求只接受短于 9 分钟的通话,远低于普通转写可接受的 60 分钟。更长的录音会在扣费之前返回 400 diarization_audio_too_long。请在静音处切分,把各部分并行发送。每一部分的说话人编号都会重新开始,按同样的规则逐段对应角色。说话人分离不改变费用:录音按时长计费,发言段随结果一并返回。