首页  >  文章  >  科技周边  >  AI如何让董宇辉不下班?

AI如何让董宇辉不下班?

WBOY
WBOY转载
2023-04-09 18:01:141233浏览

“还有46分钟,董老师休假就结束了。”

这是董宇辉最新视频下点赞过百的一条留言。

他在东方甄选直播间消失的日子里,粉丝们涌入他的个人号,调侃“这个男人只要一放假休息,几十万人都得跟着失恋”。

然而对于头部主播来说,再怎么爱岗敬业,也总有下播的时候。

毕竟连着几个小时不断说话,还得是妙语连珠的那种,既耗费脑力,对体力也是个不小的挑战。

在这种情况之下,不仅“24小时直播”不大可能,连不轮班的长时间唠嗑也不是人人能顶得住的。

不过话说回来,如果有机器加持呢……

特别是这段时间以来虚拟人等技术的爆火,很难不让人脑洞大开——

凭借AI能力,能否做到让头部主播“本人”24小时驻守直播间?

更进一步说,是不是没有董老师的双语能力,也能语言无缝转换,直接走向国际?

24小时直播,到底难在哪?

按目前实现的各种AI技术来看,这些“脑洞”并非无法实现。

在图像技术上,AI直接生成虚拟形象、或是给主播“换”个脸已经不是什么难事。

例如,国外以假乱真的“阿汤哥”在TikTok上火了好一阵,国内的柳夜熙、李星澜等虚拟形象也在国内社交媒体平台上大受欢迎,视频中几乎看不见“AI合成”的影子,评论中惊艳的声音也居多。

图片

不仅如此,AI生成图像甚至视频的效果也日渐精致,国外OpenAI的DALL·E2、谷歌最新Imagen和Parti、国内智源CogVideo和微软亚研院NUWA-Infinity等,都是这几个月出现的新成果。

上述这些图像技术,有不少已经开放了API接口、或是申请试用,加上有不少类似的开源模型,基本上已经能做到“人人可玩”。

基于这些技术,现在国内外各平台,也出现了不少“24小时直播”的AI博主。

但点进去看却会发现,这些AI博主远不如真人主播、或是真人扮演的虚拟主播人气高。

图片

△24小时AI虚拟主播,半天只有167人“看过”

直播效果上,也与我们期待的那种“24小时直播”有点远:

互动时,大部分AI主播能做的非常有限,有些只能简单地唱几首歌(限定歌单)、或是根据设定好的指令进行回复等;

图片

说话时,用AI合成的虚拟主播音色,不仅语气没有真人主播那般生动、也无法主动制造一些情绪上的“惊喜”。

这背后反映的是绝大多数虚拟AI主播的痛点——

虽然这几年图像生成技术突破不断,但语音语言AI的技术门槛,却仍然较高。

以董宇辉直播间为例,虽然只要董老师乐意,合成一个“AI董宇辉”的形象并不是一件难事;

然而,让“AI版”董老师说话语气和音色更像本人、认出直播间其他老师的声音、甚至听懂直播间外助手的“指示”等操作,却仍旧难以完成。

这背后对应的,是语音合成、声音识别、语音识别等各种语音语言AI的综合能力。

更进一步,想让这个直播间国际化的话,还会对语音能力提出更高一步的要求。

图片

例如,至少需要能够实时在线翻译的AI字幕:

在此基础上,如果要做成无障碍直播间的话,还需要进一步掌握同声传译的能力。

好消息是,现在,已经有越来越多科技大厂注意到这一赛道,这几年一直在不断加大投入。

国内外大厂纷纷加码

光从理论研究来看,语音语言AI方向的论文已有不少。

亚马逊谷歌等大厂,关于对话AI、NLP和语言处理等方向的AI论文已经达到几百甚至上千篇,其中有不少都是顶会论文;Meta光是2018一年,就拿了EMNLP和ACL两大NLP顶会的最佳论文……

图片

(当然,也有少发论文的,例如苹果更喜欢申请专利)

国内如BAT、华为、京东等公司,这几年也成立了自己的声学或NLP实验室,在NAACL、AAAI和ACL等不少顶会上拿过各种论文奖项。

图片

△ACL 2022部分杰出论文奖

以IWSLT(国际口语机器翻译比赛)为例,这是国际上最具影响力的口语机器翻译比赛之一。

就在今年的赛事上,华为在语音到语音翻译、离线语音翻译和等长口语翻译三个任务上,拿到了四个语言方向的TOP 1。

图片

但在研究以外,各大厂在语音语言AI技术的落地上却有着不同的思路。

除了基于最新研究优化自身产品(语音助手、搜索引擎等)以外,部分厂商选择直接将模型开源、或是做成AI框架供开发者调用。

这样的AI能力,对于不少没接触过AI的开发者来说又“过于深奥”,甚至连它应该怎么用、用在哪里都难以捉摸清楚。

一定程度上,也导致了不少开发者并没有机会接触到最新的语音语言类AI技术。

尤其是这几年很火的同声传译AI,对于实时性和模型性能都有一定的要求,相应的论文和Workshop也在顶会上出现得越来越多。

对于直播等行业来说,要想扩大受众和影响范围,同传AI也是一项不可或缺的技术。

所以,有没有门槛更低的落地方式呢?

现在就已经有不少厂商开始尝试一种新方法——

以华为为例,就针对移动端开发者,基于华为移动核心服务(HMS Core)打造了一套专门的机器学习服务(ML Kit)工具包。

在这样的基础上,开发者无需掌握AI技术细节,就能在自己开发的移动APP或应用中用上这些语音语言技术。

例如,刚刚我们看到的AI字幕(在线文本翻译)和同声传译,就是基于华为这套工具包中的语音语言AI能力,轻松做出来的效果。

开发门槛越来越低

说了这么多,具体怎么上手用起来,咱们不妨看看前辈们都是怎么做的。

比如,在华为开发者论坛上,就有人基于ML Kit中实时语音识别、实时语音转写等功能,给外婆开发了一个语音搜索购物App。

图片

其中语音功能的实现,步骤并不复杂。

首先,你需要做一些开发准备工作,包括:在华为开发者联盟网站上完成实名注册,配置AppGallery Connect,并在工程中配置HMS Core SDK的Maven仓地址。

然后,集成相关服务SDK。以实时语音识别服务为例,代码如下:

dependencies<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">{</span><br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">//</span> 引入实时语音识别服务插件<br>implementation <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'com.huawei.hms:ml-computer-voice-asr-plugin:3.5.0.303'</span><br><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">}</span>

接着,就可以进入接入语音服务的阶段了。

还是以实时语音识别服务为例。在设置完成应用的鉴权信息之后,第一步是参考支持语言列表LANGUAGE,创建intent,用于设置实时语音识别参数。

mSpeechRecognizer<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.getLanguages</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span>new MLAsrRecognizer<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.LanguageCallback</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span> <span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">{</span> <br> @Override <br>public void onResult<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span>List<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">String<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">></span> result<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span> <span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">{</span><br>Log<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.i</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span>TAG<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">,</span> <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"support languages=="</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+</span> result<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.toString</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">;</span><br><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">}</span><br>@Override<br>public void onError<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span><span style="color: rgb(34, 134, 58); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">int</span> errorCode<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">,</span> String errorMsg<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span> <span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">{</span><br>Log<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.e</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span>TAG<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">,</span> <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"errorCode:"</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+</span> errorCode <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+</span> <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"errorMsg:"</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+</span> errorMsg<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">;</span><br><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">}</span><br><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">}</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">;</span></span>

第二步是创建activity,传入之前创建的intent,用于拾音,并将结果返回原activity,可实时识别60s内(包括60s)的语音。

private static final <span style="color: rgb(34, 134, 58); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">int</span> REQUEST_CODE_ASR <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">100</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">;</span><br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">//</span> REQUEST_CODE_ASR表示当前Activity和拾音界面Activity之间的请求码,通过该码可以在当前Activity中获取拾音界面的处理结果。<br>startActivityForResult<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span>intent<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">,</span> REQUEST_CODE_ASR<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">;</span>

最后,覆写“onActivityResult”方法,用于处理语音识别服务返回结果即可(详细代码见参考链接)。

每一步的开发细节,在HMS Core官网都有详尽的开发指南可供查询,十分新手友好。

另外,HMS Core的机器学习服务也不仅适用于华为手机,Android设备和iOS设备也能用,具体版本要求如下。

图片

怎么样?简单接入SDK,无需复杂的调参训练,即可获得大厂商用级别的AI算法能力,你是不是已经脑洞大开了?

(并且还不仅仅是语音语言技术,ML Kit还提供了文本、图像等各种AI算法功能。具体详情,可戳文末“阅读原文”,参考ML Kit官网)。

然而对于头部主播来说,再怎么爱岗敬业,也总有下播的时候。

实际上,这种把长期积累的技术能力,通过能够轻松上手的工具释放给移动应用开发者的做法,亦非华为一家独有。

无论是谷歌的GMS Core,还是苹果面向开发者的各种Kit,核心目的都是想不断降低前沿技术落地的门槛,让更多开发者能在技术顾虑之外,将更多的精力和时间投入到创意当中。

如此一来,手机用户们自然喜闻乐见:最新鲜的技术能以各种好玩的创意形式,在手机里直接体验到。

对于厂商而言,应用的繁荣则构成生态循环中最为重要的一个节点,对外吸引更多用户,对内汇聚更多优秀的开发者。

以上是AI如何让董宇辉不下班?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:51cto.com。如有侵权,请联系admin@php.cn删除