You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中IBM Watson语音转文本API能否自定义说话人标签?

如何将IBM Watson Speech to Text的默认说话人标签替换为自定义人名?

当然可以实现!Watson Speech to Text API本身确实没有直接提供替换默认说话人编号的配置,但我们可以在客户端自己处理识别结果,把speaker 0、speaker 1这类编号映射成自定义的人名,最终输出你想要的对话格式。

具体可以按照这几个步骤来做:

  • 第一步:确保已开启说话人分离功能
    先确认你在配置RecognizeOptions的时候已经启用了说话人标签,比如:

    val options = RecognizeOptions.Builder()
        .speakerLabels(true) // 必须开启这个才能拿到说话人编号
        .model("en-US_Multimedia")
        // 其他配置...
        .build()
    
  • 第二步:创建说话人编号与自定义人名的映射
    根据你的需求,定义一个映射关系,比如把编号对应到具体人名:

    // 可以硬编码,也可以从用户配置、数据库等动态获取
    val speakerMapping = mapOf(
        0 to "John",
        1 to "Marie"
    )
    

    如果说话人数量不确定,也可以先收集识别结果里的所有唯一speaker ID,再让用户手动分配名字,灵活性更高。

  • 第三步:处理识别结果,替换标签并生成对话格式
    在你实现的SpeakerLabelsDiarization回调或者转录结果回调里,把每个片段的说话人编号替换成对应的人名,然后拼接成对话样式:

    override fun onTranscriptionResults(results: SpeechRecognitionResults?) {
        results?.results?.filter { it.isFinal } // 只处理最终识别结果
            ?.forEach { result ->
                result.alternatives?.firstOrNull()?.transcript?.let { transcript ->
                    // 获取当前片段的说话人ID
                    result.speakerLabels?.firstOrNull()?.speaker?.let { speakerId ->
                        // 从映射里获取人名,默认显示"未知说话人"
                        val speakerName = speakerMapping.getOrDefault(speakerId, "Unknown Speaker")
                        // 输出对话格式
                        val dialogLine = "$speakerName: $transcript"
                        Log.d("WatsonSTT", dialogLine)
                        // 这里可以把dialogLine更新到你的UI上,比如RecyclerView或者TextView
                    }
                }
            }
    }
    

这样处理之后,你就能得到John: 今天的会议几点开始?、Marie: 下午两点在三楼会议室这类符合预期的对话输出了。

另外要注意:如果同一段转录文本对应多个说话人片段(比如长句被拆分),你可能需要先按说话人分组,再合并同一说话人的连续文本,避免出现重复的人名标签。

内容的提问来源于stack exchange,提问作者Girley Gonzales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:22:24