首頁  >  文章  >  科技週邊  >  AI如何讓董宇輝不下班?

AI如何讓董宇輝不下班?

WBOY
WBOY轉載
2023-04-09 18:01:141283瀏覽

「還有46分鐘,董老師休假就結束了。」

這是董宇輝最新影片下按讚過百的一則留言。

他在東方甄選直播間消失的日子裡,粉絲們湧入他的個人號,調侃「這個男人只要一放假休息,幾十萬人都得跟著失戀」。

然而對於頭部主播來說,再怎麼愛崗敬業,也總有下播的時候。

畢竟連著幾個小時不斷說話,還得是妙語連珠的那種,既耗費腦力,對體力也是個不小的挑戰。

在這種情況之下,不只「24小時直播」不大可能,連不輪班的長時間嘮嗑也不是人人能頂得住的。

不過話說回來,如果有機器加持呢…

#特別是這段時間以來虛擬人等技術的爆火,很難不讓人腦洞大開—

憑藉AI能力,能否做到讓頭部主播「本人」24小時駐守直播間?

更進一步說,是不是沒有董老師的雙語能力,也能語言無縫轉換,直接走向國際?

24小時直播,到底難在哪?

以目前實現的各種AI技術來看,這些「腦洞」並非無法實現。

在影像技術上,AI直接產生虛擬形象、或是給主播「換」個臉已經不是什麼難事。

例如,國外以假亂真的「阿湯哥」在TikTok上火了好一陣,國內的柳夜熙、李星瀾等虛擬形像也在國內社交媒體平台上大受歡迎,影片中幾乎看不見「AI合成」的影子,評論中驚豔的聲音也居多。

AI如何讓董宇輝不下班?

不僅如此,AI生成影像甚至影片的效果也日漸精緻,國外OpenAI的DALL·E2、Google最新Imagen和Parti、國內智源CogVideo和微軟亞研院NUWA-Infinity等,都是這幾個月出現的新成果。

上述這些影像技術,有不少已經開放了API介面、或是申請試用,加上有不少類似的開源模型,基本上已經能做到「人人可玩」。

基於這些技術,現在國內外各平台,也出現了不少「24小時直播」的AI部落客。

但點進去卻會發現,這些AI部落客遠不如真人主播、或是真人扮演的虛擬主播人氣高。

AI如何讓董宇輝不下班?

△24小時AI虛擬主播,半天只有167人「看過」

#直播效果上,也與我們期待的那種「24小時直播」有點遠:

互動時,大部分AI主播能做的非常有限,有些只能簡單地唱幾首歌(限定歌單)、或是根據設定好的指令進行回復等;

AI如何讓董宇輝不下班?

說話時,用AI合成的虛擬主播音色,不僅語氣沒有真人主播那般生動、也無法主動製造一些情緒上的「驚喜」。

這背後反映的是絕大多數虛擬AI主播的痛點——

雖然這幾年圖像生成技術突破不斷,但語音語言AI的技術門檻,卻仍然較高。

以董宇輝直播間為例,雖然只要董老師樂意,合成一個「AI董宇輝」的形象並不是一件難事;

然而,讓「AI版」董老師說話語氣和音色更像本人、認出直播間其他老師的聲音、甚至聽懂直播間外助手的「指示」等操作,卻仍舊難以完成。

這背後對應的,是語音合成、聲音辨識、語音辨識等各種語音語言AI的綜合能力。

更進一步,想讓這個直播間國際化的話,還會對語音能力提出更高一步的要求。

AI如何讓董宇輝不下班?

例如,至少需要能夠即時線上翻譯的AI字幕:

在此基礎上,如果要做成無障礙直播間的話,還需要進一步掌握同聲傳譯的能力。

好消息是,現在,已經有越來越多科技大廠注意到這條賽道,這幾年一直在不斷加大投入。

國內外大廠紛紛加碼

光從理論研究來看,語音語言AI方向的論文已有不少。

亞馬遜Google等大廠,關於對話AI、NLP和語言處理等方向的AI論文已經達到幾百甚至上千篇,其中有不少都是頂會論文;Meta光是2018一年,就拿了EMNLP和ACL兩大NLP頂會的最佳論文…

AI如何讓董宇輝不下班?

(當然,也有少發論文的,例如蘋果更喜歡申請專利)

國內如BAT、華為、京東等公司,這幾年也成立了自己的聲學或NLP實驗室,在NAACL、AAAI和ACL等不少頂會上拿過各種論文獎項。

AI如何讓董宇輝不下班?

△ACL 2022部分傑出論文獎

以IWSLT(國際口語機器翻譯比賽)為例,這是國際上最具影響力的口語機器翻譯比賽之一。

就在今年的賽事上,華為在語音到語音翻譯、離線語音翻譯和等長口語翻譯三個任務上,拿到了四個語言方向的TOP 1。

AI如何讓董宇輝不下班?

但在研究以外,各大廠在語音語言AI技術的落地上卻有著不同的思路。

除了基於最新研究優化自身產品(語音助理、搜尋引擎等)以外,部分廠商選擇直接將模型開源、或是做成AI框架供開發者呼叫。

這樣的AI能力,對於不少沒接觸過AI的開發者來說又“過於深奧”,甚至連它應該怎麼用、用在哪裡都難以捉摸。

某種程度上,也導致了不少開發者並沒有機會接觸到最新的語音語言類AI技術。

尤其是這幾年很火的同聲傳譯AI,對於即時性和模型性能都有一定的要求,相應的論文和Workshop也在頂會上出現得越來越多。

對於直播等產業來說,要擴大受眾和影響範圍,同傳AI也是一項不可或缺的技術。

所以,有沒有門檻更低的落地方式呢?

現在就已經有不少廠商開始嘗試一種新方法-

以華為為例,就針對行動裝置開發者,基於華為行動核心服務(HMS Core)打造了一套專門的機器學習服務(ML Kit)工具包。

在這樣的基礎上,開發者無需掌握AI技術細節,就能在自己開發的行動APP或應用上用上這些語音語言技術。

例如,剛剛我們看到的AI字幕(線上文字翻譯)和同聲傳譯,就是基於華為這套工具包中的語音語言AI能力,輕鬆做出來的效果。

開發門檻越來越低

說了這麼多,具體怎麼上手用起來,咱們不妨看看前輩們都是怎麼做的。

例如,在華為開發者論壇上,就有人基於ML Kit中即時語音辨識、即時語音轉寫等功能,給外婆開發了一個語音搜尋購​​物App。

AI如何讓董宇輝不下班?

其中語音功能的實現,步驟並不複雜。

首先,你需要做一些開發準備工作,包括:在華為開發者聯盟網站上完成實名註冊,設定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裝置也能用,具體版本要求如下。

AI如何讓董宇輝不下班?

怎麼樣?簡單接入SDK,無需複雜的調參訓練,即可獲得大廠商用等級的AI演算法能力,你是不是已經腦洞大開了?

(而且還不僅僅是語音語言技術,ML Kit還提供了文字、圖像等各種AI演算法功能。具體詳情,可戳文末“閱讀原文”,參考ML Kit官網)。

然而對於頭部主播來說,再怎麼愛崗敬業,也總有下播的時候。

實際上,這種把長期累積的技術能力,透過能夠輕鬆上手的工具釋放給行動應用開發者的做法,亦非華為一家獨有。

無論是Google的GMS Core,或是蘋果面向開發者的各種Kit,核心目的都是想不斷降低前沿技術落地的門檻,讓更多開發者能在技術顧慮之外,將更多的精力和時間投入創意當中。

如此一來,手機用戶們自然喜聞樂見:最新鮮的技術能以各種好玩的創意形式,在手機裡直接體驗到。

對廠商而言,應用的繁榮則構成生態循環中最為重要的一個節點,對外吸引更多用戶,對內匯聚更多優秀的開發者。

以上是AI如何讓董宇輝不下班?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除