随便听一通泰国办公室里的电话,数一数其中的英语词。客服会说 cancel 和 order,工程师会说 deploy 和 staging。医生、律师和汽修师傅各有一套常用的英语词汇,夹在再普通不过的泰语句子里。泰语和英语之间的语码转换在泰国的公开演讲中已有记录,在泰国产品实际收集到的录音里更是常态。
这首先是转写问题,其次才是语言问题。一句话只有一个意思,却用到两种文字,引擎必须决定写下什么。本文讨论的正是这个决定,以及转写文本可能呈现的三种形态。
一句话,三种形态#
以客服可能说的一句话为例,转写结果有三种写法。
spoken ลูกค้า cancel order ไปแล้วตั้งแต่เมื่อวาน romanised luk kha cancel order pai laeo tang tae muea wan phonetic ลูกค้า แคนเซิล ออร์เดอร์ ไปแล้วตั้งแต่เมื่อวาน as spoken ลูกค้า cancel order ไปแล้วตั้งแต่เมื่อวาน
罗马字形态丢掉了泰语。音译形态用泰文字母拼写英语词,打字快的人可能这么写,主要用泰语训练的模型也会默认这么写。这两种写法人都看得懂,搜索索引却用不上:客户搜索 cancel 什么也找不到,因为转写文本把它拼成了 แคนเซิล。
第三种形态让每个词保留说出时所用的文字。只有这种写法,用哪种语言搜索都能找到这一行,其中的英语术语也能和您数据库里已有的字符串对上。
对词级时间戳的影响#
到了语言切换处,词级时间段更难对准。泰语书写时词与词之间不留空格。引擎只能单凭声音,找出最后一个泰语词和第一个英语词之间的边界,两侧都没有书写上的提示。如果引擎泰语分词做得好,却在交接处出错,每个切换点附近的时间段都会偏移一个词。
用您自己的录音检查一下:请求词级时间戳,找到一个切换点,把它前后两秒的音频对照时间段播放。用偏移的时间段切出的字幕,会把英语词提前一条显示出来,观众一眼就能看出这类错误。
固定您自己的术语#
产品名称最难处理,因为它们是模型没有理由预料到的英语词。术语表可以解决这个问题。把录音里真正出现的名称发过来,最多 50 个。此后每个请求里的拼写都保持一致,不论每位说话人发音清楚与否。
只列入听起来确实容易混淆的名称。全是常用词的列表起不了作用。超出上限的列表会被直接拒绝,系统不会悄悄截断,列表由数据库生成时,这正是您需要的行为。
书写规范照样适用#
在切换语言的句子里,数字无论用哪种语言说出,都按您指定的书写规范写出。用英语念出的订单号和用泰语说出的价格,按同一条规则写进同一份转写文本,这一行事后才能被程序解析。
模型的做法#
Paxa STT Lite 把每个词写成说出时所用的文字,并在切换点两侧按完整的词标注时间。在评测方法一同公布之前,它不公布准确率数字。要在您自己的录音上得出结论,办法是拿几段跑一跑。
下一步#
- 阅读语音转文字指南,了解术语表和书写规范字段。
- 阅读转写 API 参考,了解请求结构。
- 阅读 ASR 对泰语意味着什么,了解这个问题背后泰语的三个特性。
- 这一现象的出处是 code-switching between Thai and English in young Thai politicians' speeches,HASSS 23(2),2023 年。