基于Alpaca 7B,两天搭建mac单机不用联网纯语音交互机器人

最近各种大模型比较火,既让人兴奋,又让人让人焦虑,所以最近一方面也在跟各种模型的论文,也看了比较多,团队也在尝试用各种大模型解决业务问题,同时,自己也在动手试一试这些技术,包括从GPU上的finetuning,以及最终终端的应用。

端午节这周在家没有出游,花了两天时间,利用开源的LLaMa 7B 权重,搭建了一个语音交互机器人。最大的特点是:可以不用联网,可独立在自己mac笔记本上运行,可流畅的实现英文语音对话。中文的等五一有时间再调。

具体的效果可以看以下视频:
NOTE: 视频号链接放不上来, 可以到公众号中查看

视频:mac 单机不用联网的语音交互机器人,其中我的语音输入问题为: 'What is the purpose working hard in China?' ^_*

以下内容不涉及中间的算法,算法后续会单独开topic,不过从代码级别撸了一遍模型结构和推理过程也是一种收获。

另外以下内容和公司业务无关, 会写的细一些,代码级别。

先抛开其中的算法,以下为搭建过程中需要的开源组件,大家要自己搭解决方案的可以参考:

  1. 耳麦语音信号接收和发送,pyaudio,语音信号采集, wav文件播放都很方便。

  2. Speech Recognition,使用OpenAI Whisper, 原则上model size=large 1550M 支持中文,我的code 中使用 model size=small 244M

  3. Alpaca 7B 作为chat 模型,使用Alpaca 7B(基于LLaMA 7B) 进行finetuning 实现文本理解与对话,model 载入内存后占用6065M左右

  4. Coqui TTS 进行TTS处理,原则上支持中文,但Alpaca中文支持较差,所以TTS也先搞了一版英文。

  5. copilot 进行辅助开发,copilot不仅能帮你写代码, 还能帮你写注释, 还能预测你将要写的注释!!!结伴编程效率高, 感觉这个不是面相对象编程, 倒有种跟着对象编程的意思。

这些组件都是开源的,github上都可以下载到,链接和一些示意代码我都贴到最后,大家感兴趣的可以复现。

总共耗时两天左右。

以下为具体用到的库以及使用示例,具体的这些库怎么安装API怎么用我这个地方就不列出来了,想复现或者修改的同学,根据文末最后的链接自己编写pipeline以及修改Alpaca 代码就可以搞定。

耳麦语音接收和播放

图:使用pyaudio进行声音处理和播放

OpenAI Whisper 进行Speech Recognition

图:使用whisper进行speech recognition,model size='small'

Alpaca 7B 进行chat

图:Alpaca 7B client,使用开源Alpaca.cpp修改适配接口, 该client使用cpp能够在多种设备上运行,其中使用gglm.c 库进行模型加载和推理,想具体了解LLaMA模型结构, 以及如何跨平台使用各size LLaMA权重的同学都值得仔细看看,毕竟论文主要看思路, 代码才是全部

Coqui TTS 进行TTS处理

图:coqui tts 进行text2sound,支持中文, 支持voice clone,想象空间比较大

播放TTS结果的线程逻辑

TTS线程逻辑

以上就是Sound->text->chat result->sound整个pipeline用到的组件,pipeline使用python编写,多线程生产和消费语音输入,speech recognition, chat结果和tts结果, pipeline需要自己写,Alpaca的推理程序需要自己改造, 其他的组件github上都有。

感受

写代码的过程当中,将LLaMA的模型结构,推理过程的源代码都读了一遍,还是有比较大的收获,比光看那种概念型的论文还需要具体很多,以下就是几个心得跟大家分享一下:

  1. 大模型已经能够很好的将世界的本质和知识压缩到网络结构的权重中,在推理的过程中能够结合这些知识进行推理和泛化,finetuning只是教模型说我们想要的人话。这个话题比较open,感觉大模型理解世界的空间更大,而人类的语言只是低维空间的一种表现,一个典型的例子就是LLaMA没有经过中文语料的训练,但是能理解一部分的中文问题。现在的finetuning,更多是在教模型如何以我们能够理解和希望的方式交互,而不是教模型更多知识(否则alpaca 这种50K的样本根本不够用)
    就类似于一个智商极高,知识量足够丰富的外星人来到地球,虚心地向人类学习人类语言一样,他学到的是表达,而不是智商和知识。

  2. 算法正在被统一,原来纯算法工种的需求量会急剧下降。一个佐证就是上边提到的LLaMA,Whisper,Coqui TTS,底层的算法结构都是极为近似的,都是基于transformer的大语料五监督训练,文本语音都是如此,之后再进行极其有限的finetuning。在算法领域,白领会逐渐消失,只留下大量的蓝领和金领

  3. 开源组件的有机组合和拼装能够快速满足业务需求,能够带来巨大的商机。开源的组件很多,已经非常成熟,可以开箱即用,或者经过微调就能够很好的满足业务需求,如何将这些组件进行有机的组合和拼接,满足业务场景将存在巨大的商机。例如,定制一个善解人意,某个女明星版本的真人大小的娃娃是不是一个商机呢?虽然说出来并上不了台面。

像ChatGPT或者GPT4这样的大模型效果的确非常好,好到难于置信(相对于单机mac 上的Alpaca)但是创业者或者其他公司在应用的时候会存在以下几个风险:

  1. 平台税造成使用方的成本上升,ChatGPT或者是GPT4的提供方,OpenAI/微软,作为平台,最终可能会收取巨额的平台税,这就会增加应用方的成本,甚至导致应用方公司无法负担这个成本。记得以前央视曝光百度竞价排名有骗子卖假药,说骗子获利的70%都用于百度推广,尴尬的是但是我就在百度做广告算法........

  2. 私域数据的泄露,毕竟如果到最后算法逐渐的被统一之后,数据才是最核心的资产,如何保证私域数据不被泄露?这是一个需要重点考虑的问题

  3. 大模型的提供方会不会因为某些政治或者经济考量? 直接就把某个特定的应用方给停了呢?

在这样的情况下,像LLaMA,ChatGLM这些开源的模型&权重,虽然从效果上不是最优的选择,但是风险可控,进行对私域数据的反有可能是比较好的选择。

同时,因为这些模型权重已经被训练出来了,训练所产生的花费,已经被facebook 承担,所以,从某种意义上也相当于是我们在褥facebook的羊毛了。

当然,现在大模型有点火的过头了,这个技术既让人兴奋,又让人焦虑,发展太快,我们现在也在业务场景里边去试用,而且发现的确效果很好,大家有什么新的idea或者想法,欢迎随时交流。

公众号:颠覆式创新

语音对话用到的组件

  1. coqui tts:https://github.com/coqui-ai/TTS

  2. OpenAI Whisper speech recognition:https://github.com/openai/whisper

  3. Alpaca 算法和跨平台推理代码
    https://github.com/antimatter15/alpaca.cpp
    https://github.com/tatsu-lab/stanford_alpaca

  4. pyaudio语音输入&播放:https://pypi.org/project/PyAudio/

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注