選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
4 分鐘閱讀時間 (701 個字)

讓語言學習模型玩歌曲填詞

BERT-Cloze BERT填詞

前言

  大家有看過一個古老的電視節目叫百萬大歌星嗎?參賽者從比賽題庫中選擇歌曲演唱,需唱出歌詞中隱藏起來的部分,答對的話可以累積獎金繼續挑戰,最多能將百萬獎金帶回家。

  歌詞由作詞家填詞,我們依照歌詞演唱歌曲,填詞的適當與否影響我們對歌曲的感受。動詞是詞語中能夠帶出文章情境的重要詞類,例如唐朝詩人李白的怨情: "美人卷珠簾,深坐顰蛾眉",卷字一詞除了點出人內心的失望與遺恨,也表達了當內心百感交集時做的動作,使用這個字不僅合理,也使人彷彿身歷其境。

  這篇文章分享我創作歌詞的過程,再觀察並討論以語言學習模型填詞是否合理。

填詞任務

 我在創作歌曲的時候,習慣上是先想好故事情境,接著先做曲再填詞,這使能夠選擇曲風作出表達心裡感受的旋律,在進行作詞的時候,我覺得音調會告訴我要用什麼詞語。以我最近做的曲子來說,連續兩個E4在一起的音,放在F#小調的 4 -> 5 -> 6m和弦進行中,聽起來像是"回憶"兩個字。一句旋律在腦海中便聯想到了"回憶_住我的視線" 這句歌詞,接著我就會想如何將_中的詞語填入適當的動詞以表達前後句子的故事結構。思考這件事情非常有趣: "回憶會把我的視線怎樣? ",對我來說當我在想一些過去的事情的時候,會記得許多非常清楚的畫面,而這些畫面時常像投影片投射在我的面前,所以我覺得應該是"遮"住了我的視線吧! 其實創作者也不知道自己內心到底能被理解到什麼程度,但一定是很有想法,會將許多細膩的心思藏在作品裡面。不過小時候我就覺得國文課本後面都有一個課文賞析,就是也不知道是誰講評的,都會把課文過度解釋的很像他真的很懂作家心裡在想什麼一樣,或者對作家又用了什麼引人入勝的主題拉、嘆為觀止的修辭阿、包裝精美的用字遣詞拉等等讚嘆不已,然後國文老師一定會跟你說這就是會寫文章跟不會寫文章的差別。然而不知道如果我們隨機把50篇文章放在一起,這些文章有沒有一篇跟李清照的文章一樣能夠讓國文老師鑑別出來這樣子。

  那麼作詞這麼需要人性的任務,可以交給機器來做嗎? 其實問題應該是在於機器怎麼能夠像人類這樣子填出一些看起來合理的字詞,屬於有主觀意味的問題。其實人類不太能填出讓所有人都覺得好的詞語,只能填出普遍被大家認為是好的歌詞罷了,所以機器當然可以填詞,但任務是要能讓人覺得像是有經過創作一般。在自然語言學習領域中,語言學習模型(Language Model)可以實現克漏字任務,能夠根據上下文填出適當的詞語,可以應用在自動文章生成與歌詞生成。以下我們來看一下目前語言學習模型中的王者-BERT填出什麼樣的歌詞吧!有關BERT的介紹與實作怕大家有演算法恐懼症我們就留待下集再來講


BERT填詞

以這兩天討論熱烈的歌曲: "_在我心底的名字"為例,我把刻這個字遮住,實驗一下BERT會填出什麼歌詞出來:

輸入 tokens : ['[CLS]', '[MASK]', '在', '我', '心', '底', '的', '名', '字'] ...
--------------------------------------------------
Top 1 (16%):你
Top 2 ( 9%):留
Top 3 ( 8%):他
Top 4 ( 5%):藏
Top 5 ( 3%):她
Top 6 ( 3%):現
Top 7 ( 3%):寫
Top 8 ( 2%):那
Top 9 ( 2%):掛
Top 10 ( 1%):住
Top 11 ( 1%):放
Top 12 ( 1%):妳
Top 13 ( 1%):長
Top 14 ( 1%):活
Top 15 ( 1%):烙
Top 16 ( 1%):記
Top 17 ( 1%):您
Top 18 ( 1%):存
Top 19 ( 1%):是
Top 20 ( 1%):不
Top 21 ( 0%):「
Top 22 ( 0%):站
Top 23 ( 0%):它
Top 24 ( 0%):只
Top 25 ( 0%):就
Top 26 ( 0%):我
Top 27 ( 0%):遠
Top 28 ( 0%):而
Top 29 ( 0%):但
Top 30 ( 0%):刻 

先請大家忘記"刻"這個字,這個是已經知道的答案,假如今天這首歌還沒被填好詞,是不會有人知道用哪個字的。而看起來BERT預測出來的字第一名是"你",單從這句看起來是也還算合理只是可能表達的不夠好,而第二個與第四個BERT預測的字分別是"留"與"藏",讀起來有一種神祕: "留在心底的名字"、"藏在心底的名字",會是什麼字? 可以看出BERT在成千上萬個文字中能夠挑出適合的字,放上去不會讓前後文看起來有結構上的錯誤。有趣的是刻這個字是第三十個BERT可能挑選出的字,可以看作是對歌詞詞意詮釋的不同。

  這篇文章用比較簡單有趣的例子看一下機器學習在文字預測方面的應用,BERT那些有趣的數學與演算法我們下回再來看阿。

簡單玩樹莓派-(2) Joomla for docker on RPI
[Design Pattern]這可能是你第一個接觸到的Design Pattern

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/03/28, 週四

Captcha 圖像