AI填詞能(二):ChatGPT(等)的真正用途是…
在這個「研究用AI填廣東歌詞」的項目沒有更新超過一年瀕臨爛尾之際,出現新的思路把project大幅簡化,讓重新啟動有了方向。 與其直接指示ChatGPT(或其他AI模型)把合音的字填上歌詞(之前的實驗效果並不理想,不知現在進步幾多了),其實中文字有限數,放在歌詞中合音而不太罕見的更是有限數,可以先做一個「從所有可能的合音字隨機抽取」的程式,然後再實驗以各種方法調整選取每個字的機率,逐漸令這個填詞程式更加有用。 簡而言之,執行這個程式只需要幾個步驟: 找一個有 所有中文字粵語讀音的字典 ,包含每個字的聲母、韻母和聲調; 輸入一句句子 每個字的聲調(或其代表) ,每一個字電腦都在字典中隨機選取一個合音的字; 設計某些機制指派每個可能的字被選取的 機會率 ,讓更好或更適合的字詞更有機會被選取。 粵音字典數據庫 有沒有一個可以下載的數據庫,包含所有中文字的粵語讀音呢?其實只要Google就有。找到的是「 開放粵語字典 」,當中有各種不同的字典,有不同注音方法和檔案格式。我最後採用的是教院繁體字典的csv檔案版本。 數據庫共有6577字,我需要的只是「繁體」和「拼音」兩欄。留意有些字有多過一個讀音,這裡需要轉化使每個「字+粵音」的配搭成獨立一行。去除重複,變成了6888行的表格。之後所有要填的詞,都從這6888個「字+粵音」裡選取了。 之後便是從粵音一欄分裂出聲母、韻母和聲調,這裡岔開一筆技術討論,這裡牽涉一種令人聞風喪膽、名為regular expression的語法,要不是有ChatGPT,單是想如何寫這一句語法,已經難過寫完一首歌詞了。這裡和非技術人士分享一下這句有如火星文一樣的程式碼(後來發現這句火星文也不能滿足所以情況,但那些特殊處理這裡就略去了): cantonese_long[['initial', 'final', 'tone']] = cantonese_long['jyut'].str.extract(r'^([^aeiouy]*)([aeiouy][^0-9]*)([0-9]+)$') 雖云粵語有九聲,但某幾個聲調在粵語歌詞中其實相通,例如第三聲的字,填第五或第八聲也同樣合音。這裡用上廣東歌詞研究大師黃志華先生提出、近年大為普及的 「0243」框架 ,...