AI填詞能(三):一字多音的處理讓整個程式要重寫
上回講到 填詞工具初步成形,但有一個重要問題,如果一個字有多個讀音(例如「長」是「長度」的tsoeng4還是「長官」的dzoeng2),程式對同一字的不同讀音都給予相同的抽取機率,以致程式會給出一個看來不合音的字,但其實是因為它有一個甚少使用的讀音,例如「三」絕大多數是指數目字的saam1音,但如果「三思而後行」的「三」saam3也被給予相同機率,便很容易被抽中在不合音的位置上。 所以每個字的讀音也需要分辨。問題是,本來收集的歌詞資料只有文字而沒有發音,單是為88首歌的數萬字標上發音,想起也令人不想努力了。 結果嘗試了兩個進路。第一是以部份歌曲作樣本,統計一個字不同讀音的使用頻率,之後以這比率調整每個字每個音的獲選的機會率。本來的想法是以之前收集的88首歌詞為「樣本」,程序如下: 找出所有出現在任何一首歌詞中、有多過一個可能讀音的字; 就每一個字,找出有這個字的歌詞; 辨認每一次出現這字時該使用甚麼讀音; 統計所有讀音的頻率。 例如「中」字在這樣本出現119次,「中文」的「中」(dzung1)佔110次而「中獎」的「中」(dzung)佔9次,相對比率為92%:8%,如果後來歌詞庫擴充,有幾百首歌詞而「中」出現300次,就可以當「中文」的「中」(dzung1)有277次而「中獎」的「中」有23次了。 本想著為這88首歌「辛苦一次」,之後收集再多的歌詞也可以以這次的比率模擬,但就是這88首歌已經有162個不同的有多個讀音的字,每個字動輒出現在三四十首歌,結果就是數千次來回於粵音字典、統計用的spreadsheet、和歌詞文檔,再要為字典沒有出現過的讀音和在字典出現而實際不會使用的讀音調整計算方法,按下無數次Cmd+C, Cmd+V和Cmd+F,按到左手也幾乎職業勞損,我也對只用88首歌計出來的「近似」比率也不太有信心,但顯然這不是可以持續的做法。 另一個進路是在寫第四季季結和2025年結以致「AI填詞能」進度慢了的時候靈機一觸想出來的。簡單來說是直面把每個字標上讀音的必要,但用一個相對無痛的方法處理每一首歌。方法如下: 為每首歌詞的文字檔(txt)轉換成表格格式(儲存為csv),歌詞出現的每一個中文字佔一或多列,每列是(根據粵音字典)每一個可能的讀音; 打開csv檔(用Excel或Google Sheet或純文字編輯器也可),讀取全首歌詞,刪...