应用怎么知道是谁在说话?自动多角色配音的内幕
要给一本书里的每个角色配上专属的声音,你得先回答一个听着不起眼、其实很难的问题:这句话是谁说的?真人读者不假思索就知道答案。软件却得有人一点点地教,而怎么教恰恰是最有意思的部分,也正是自动多角色配音能成立的关键,值得好好说一说。
那些容易的情况,以及它们怎么让你放松警惕
有些对话直接就告诉你谁在说话。
“我看得出,你去过阿富汗。”福尔摩斯说。
标注就摆在那儿:一个表示说话的动词,加一个名字,紧挨着引号。一个简单的程序,只要找到引号,在旁边找个“说”字,再配上一个专有名词,多数时候就对了。要是每句话都是这样,这问题一个下午就能搞定。
可惜偏偏不是。
难的地方在哪儿
真实的文字里,到处是不点明说话人的对话,而每一种不点明的方式,都是一道不同的题。
没有标注的句子。 一段对话一旦聊开了,作者就把标注省掉了,因为他默认读者能自己数着往下对。
“你去过阿富汗。” “你到底是怎么看出来的?” “先别管这个。眼下最要紧的是另一件事。”
三句话,一个名字都没有。要把它们分给各自的说话人,你得记住有两个人在对话、他们在轮流说,然后顺着这个节奏一路数下去,直到有什么把它打断。中间数错一次,后面每一句就全都归错人。
用代词的标注。 “他说”“她问”,把这句话派给了一个句中没点名的人。你得知道此刻这个“他”指的是谁,也就是要一直记着上一个提到的是谁、屋里还有谁在。
用动作代替标注。 很多时候压根没有说话的动词,只有紧挨着引号的一个动作。
福尔摩斯往后一靠,十指交叠。“这问题,得抽满三斗烟才想得明白。”
没有谁“说”了什么。我们之所以能推断出是福尔摩斯在讲,是因为动作是他做的。软件也得跟着做同样的推断。
先得知道书里有哪些角色。 在把一句话派给福尔摩斯之前,你得先知道有福尔摩斯这么个人,还得知道“夏洛克”“福尔摩斯先生”“福尔摩斯”,以及在他朋友叙述里的那个“他”,可能指的都是同一个人。没有现成的角色表,全靠从文字里把角色和他们的各种称呼一点点认出来,这本身就是单独的一步。
最后是那些没法下定论的。 第一人称叙述、故事里嵌进来的引用信件、五个人同时开口的场面、作者故意留白的一句话。有时候老实的答案是:连一个用心的真人读者也会停下来想一想。
各种做法是怎么一步步走过来的
早期的做法是基于规则的:找到引号,在旁边找“某某说”,找不到就退回到轮流发言这条假设上。快是快,可偏偏在文字变得有意思的地方最容易出错。后来出现了用标注过的书训练出来的统计模型,它们对上下文的处理好一些,但靠的还是表面的套路。
最近的变化在于,大语言模型读一段文字的方式,更接近人了。给它书里的一段,一个够强的模型能把整个场面装在脑子里:谁在场、上一句是谁说的、动作紧挨在哪句引文旁边。它把这些线索全用上,来判断一句话归谁,连没标注的也算得出来。这不是什么魔法,也谈不上完美,但比起把“说”跟最近的名字硬凑到一起,已经进了一大步。
BookNPC 拿它来做什么
BookNPC 会一页一页地把这套分析跑一遍。它算出书里有哪些角色、理清各种称呼、判断每一句是谁说的,连那些没标注的成串对话也不放过。然后给旁白和每个角色分别配上一个不同的声音。这就是给一本书配音时那一次性的功夫,也是配音要收一点费用的原因:力气花在读上,不在播上。
再好的说话人判断,碰到难啃的文字也做不到万无一失,所以应用把最终的决定权留给你。播放时,当前这句会显示成说话人的颜色,页面下方还会标出是谁,你一眼就能看到它认为这句是谁在讲。整张角色表就在旁边,任何一个声音你都能换掉。要是它把一段刁钻的对话判断错了,这个错你看得见、也改得了,不会悄没声地定死在里面。
为什么这是难的那一半,也是值钱的那一半
录声音是一部多角色有声书里容易的那一半。真正费钱、也需要真本事的那一半,向来是“导”:定下每一句由谁说、怎么说。自动判断说话人,就是软件在干这份导的活。它如今已经好到能把你带来的任意一本书做成多角色版,而不只是工作室选中去制作的那几本。
这就是一个功能背后的门道,虽然从外面看,它听起来无非就是“每个角色都有一个声音”。想看它是怎么运作的,就在 BookNPC 里给一本对话很多的书配上音,一边听一边看说话人的名字一个个冒出来。多角色与单一旁白的对比讲了这对听感本身意味着什么。