發夢夢到最近(二月中)有人 crawl 咗連登,所以我喺夢裡面就 download 咗啲 data 嚟玩。
因為發夢開發緊一部粵語詞典,所以就想睇下究竟仲有冇詞語漏咗未收錄。
話說官話(aka. 標準漢語)就好興雙字詞語嘅,好多「本身單字」嘅詞,官話都傾向配多隻字變成雙字詞語。例如:「玩」會變「玩耍」、「菜」會變「蔬菜」,甚至配唔到都會加返個「子」字,好似「肚」會變「肚子」。但粵語就比較多單字詞,喺語料庫發掘新詞,要判斷究竟係兩個單字詞咁啱黐埋一齊,定係一個雙字詞嚟。
呢樣嘢有時好難判斷,例如「偷圖」咁,係一個詞嚟,定係只不過係「偷+圖」?「初段」、「判罰」、「勝率」、「團長」呢? 呢啲係冇解嘅問題,基本上係靠主觀判斷。
咁,點樣由連登語料度發現新詞呢?最基本嘅方法,就係搵晒所有 bigram (兩個連接嘅單字),然後逐個去睇。香港中文常用字大概幾千個,所以所有 bigram 嘅可能性都唔算好多,一千萬左右啦。
好在實際上喺連登見到嘅 bigram 冇咁多,六百萬左右啦 :)
然後,你會發現,通用嘅詞彙唔會淨係出現一兩次,所以篩走啲極少出現嘅詞語之後,就淨返「只有」幾十萬個 bigram 要考慮 :)
之後點算好呢?
得唔得呢?睇下會係啲咩嚟:
實際上我哋搵到嘅詞彙係有幾高出現率呢?
(至於點解發夢會有 cap 圖?話說我有少少通靈能力,高科技問米呢家嘢⋯ [下刪千字])
(另外,乜呢啲唔係標準中文都有嘅詞嚟咩? 係呀,不過粵語或粵文會用到嘅都照樣收錄。)
所以一個通用嘅粵語詞語,喺連登度可能每個月只係見過幾次。單係用 frequency 基本上只係可以將潛在詞語降到幾十萬個 bigram,再篩就會開始將真詞都篩走埋。
咁仲有咩方法呢?
我哋留意到,frequency 最高嘅 bigram (見上圖) 大部份都係涉及極常見嘅單字,例如「係」、「唔」之類。直觀(intuitively)噉諗,一個 bigram 就算出現率高都未必係詞語,因為可能只係因為構成佢嘅單字本身出現率好高;反相,就算一個 bigram 出現率唔高,只要佢由出現率唔高嘅單字構成,都可能係真嘅詞彙嚟。
只要計算bigram 同佢所構成嘅單字嘅相對頻率,就可以知道佢係隨機結合,定係兩字之間有特別關連。
另一個觀察就係:有啲詞語會因為時間變遷而明顯變動。例如「大訴」呢個 bigram 嘅頻率,喺 2019 年忽然爆升。(至於點解?我呢個夢唔包呢啲嘢㗎,不如問下其他發夢嘅朋友?)但,唔止呢啲。最恐怖嘅係,連「女朋友」呢啲詞語都有 trend:
呢個現像真係「細思極恐」(按:內地潮語)。不過大家「看圖作文」之前,最好順手解釋埋呢個現像:
言歸正傳。我哋見到,有特定意思嘅 bigram,可能會因時間而變化。相反,唔係隨機黐埋嘅 bigram,理論上出現頻率都係隨機嘅,喺時間軸上大幅變動嘅機會較細。所以呢,睇埋bigram喺時間軸嘅標準差(standard deviation),可能會有啲用。
所以,我哋而家有呢啲關於 bigram 嘅數據:
- mean / overall frequency
- frequency standard deviation
- left character mean frequency
- right character mean frequency
上面呢堆嘢,我發緊夢,都唔係好知係咩嚟。不過佢話我聽,有 ~80% 準確度。信不信由你啦,反正都係夢境嚟。 (按: fake_words 要小心咁抽幾萬個出嚟,有助提升「真.準確度」。自己諗點做啦,反正我都唔敢肯定我嘅做法最好。另外仲有以下口訣:mean value 要 take log,stdev 要除 mean)