每天晚上到家,推开门那一瞬间,三条狗一起叫,哇哇哇的。有时候家里来朋友,它们也叫,我就老在想——它们到底是不欢迎人家呢,还是太兴奋了?是警惕呢,还是开心?
其实市面上早就有狗语翻译器了,有的还卖挺贵,说能识别出"想吃饭"、"想出去玩"、"摸摸我"这些很细的意图,准确率 94%。说实话我是不太信的。
养过狗的人都知道,狗的沟通主要不是靠声音,尾巴怎么摇、耳朵朝哪、毛发竖不竖,这些才是关键,声音更多是情绪的一个出口,你说"想出去玩"和"饿了"在叫声上能有多大的区别?
但如果只是识别大类情绪——开心、焦虑、警觉、害怕、不适——那应该是比较靠谱的,不同情绪下声音的音高、节奏、持续时间差异很明显。
而且说实话,他们那种效果技术上并不难实现:先把情绪识别准,然后把这个情绪塞进一个提示词模板,告诉大模型"你现在是一只小狗,你现在很焦虑,请用可爱的话给主人表达出来",一秒钟就给你生成一句"人家有点害怕,能不能抱抱我呀"。你看,效果就出来了。
但那并不是狗自己在说的,是我们把情绪翻译成了人的语言。你说它算翻译吗?我觉得算。毕竟人和人之间有时候还需要中间人去做转达呢,老婆的意图老公不能理解,"你走啊"你就理解成真走,那才是翻译错了。
现在 AI 这么方便,我就想着,干脆自己做一个试试。
具体来说分几步:先找数据,再选模型,训练,最后开发一个 App 把它们串起来。
模型选的是 HuBERT,Facebook 做的一个语音理解模型,本来是在大量人类语音上预训练的,但音高、节奏、音色这些底层特征对狗叫也管用。在这个基础上我找了一个开源的狗叫数据集,有几千条数据,然后用模型给数据做标注——分出焦虑、开心、害怕、孤独、不适这几个类别。标注完之后拿这些数据去训练 HuBERT,训出一个能识别狗叫情绪的新模型。
然后开发 App。录一段狗叫,调用训练好的模型做推理,识别出当前是开心、害怕还是焦虑。拿到情绪之后,再调用一个大语言模型做拟人化的输出。如果需要的话,还可以再接一步文字转语音,把结果直接播放出来。
在这个基础上还加了一些小功能,比如查看历史识别记录、给家里的几条狗分别建档案。
当然了,模型是一方面,数据可能更重要。如果狗的语言真的有那么细腻,那人家花大力气采集的那些数据应该是有价值的。我这个 App 总共就用了周末大半天时间,数据量肯定没法跟人家比,精细程度达不到那个效果。但我觉得日常 90% 的场景也够用了——你真正需要知道的,不就是它现在开不开心、害不害怕嘛。
我这 App 没啥成本,就是费了半天电。完全离线,不连云端,不收集任何数据,不需要 API Key。推理跑在手机本地,录一段狗叫,一两秒出结果,全程不碰网络。
说实话,如果你是养狗老手,对自己的狗非常熟悉,它叫一声你就知道怎么回事,那确实不需要这个东西。但如果是不太熟悉狗的人,或者家里来客人的时候你想快速判断一下狗的状态,它能给你一个参考。而且它就是好玩嘛,不要钱,感兴趣的朋友可以联系我要安装包。
我还想到一个好玩的事情:如果 App 有机会上架,让大家一起来标注。你录一段狗叫,你觉得它是什么意思?随便标。标的人多了,数据就积累起来了。比如有一声狗叫,明明是很伤心的叫声,但绝大多数人都觉得它是高兴的——那以后我们的模型就真的会把它识别成高兴的。
狗自己是什么意思不重要,重要的是大多数人觉得它是什么意思。
细想想还挺有意思的。
App 大概长这样。

夜雨聆风