引言
對於一個特定的領域而言,我們可能需要其相關的一些詞語,這些詞語可以用來進行分詞、關鍵詞提取、主題分析等。那麼,如何去獲得這些詞語呢?本文接下來將通過鬥破蒼穹小說來介紹新詞發現。
前言知識
-
詞頻:詞頻就是一個詞語在語料庫中出現的次數,詞頻越大,表明以下三個參數出現的置信度越大。
-
凝聚係數:表示兩個單詞同時出現的可能度,具體計算公式如下:
其中,\(C(w_1, w_2)\)表示\(w_{1}\)後面的詞語是\(w_{2}\)的次數,\(C(w_{1})\)和\(C(w_{2})\)是詞\(w_{1}\)和\(w_{2}\)分別出現的次數。 -
最小邊界信息熵。
-
最大邊界信息熵。
最小和最大邊界信息熵分別是左邊界信息熵和右邊界信息熵二者的最小值和最大值。
左邊界信息熵計算公式如下:
\(Ent_{w_l}=-\sum_{w_l}P(w_l|w)\cdot\log(P(w_l|w))\)
其中\(w_{l}\)是出現在w左邊的所有unigram組成的集合,上面的公式同樣適用於右邊界信息熵的計算。
邊界信息熵越大,表明一個詞越能和更多詞搭配,進而表明一個詞是一個獨立詞。比如"我是"擁有大詞頻和大凝聚係數但是最小邊界信息熵卻很小,說明它不是一個詞。舉個例子:
考慮這麼一句話"喫葡萄不吐葡萄皮不喫葡萄倒吐葡萄皮","葡萄"一詞出現了四次,其中左鄰字分別爲 {喫, 吐, 喫, 吐} ,右鄰字分別爲 {不, 皮, 倒, 皮} .
根據公式,"葡萄"一詞的左鄰字的信息熵爲:
\(- (1/2) · log(1/2) - (1/2) · log(1/2) ≈ 0.693\)
它的右鄰字的信息熵則爲:
\(- (1/2) · log(1/2) - (1/4) · log(1/4) - \ (1/4) · log(1/4) ≈ 1.04\)
可見,在這個句子中,"葡萄"一詞的右鄰字更加豐富一些。
實操
代碼地址:https://github.com/taishan1994/dpcq_new_word_find
-
1、拷貝項目。
-
2、在data下新建一個文件夾,文件名可以任取,最好是和自己數據集相關的名字,這裏是鬥破蒼穹。
-
3、在discover.py裏面新建一個函數,用於讀取數據,針對於鬥破蒼穹:
def get_dpcq(): with open('data/鬥破蒼穹/鬥破蒼穹.txt', 'r', encoding='utf-8') as fp: data = fp.read().strip() data = data.replace("===", "") data = data.split('\n') # 不要開頭的'《鬥破蒼穹》來自: https://www.txt97.com/book/txt297.html' # 把===替換爲空 data = data[1:] res = [] from tqdm import tqdm for d in tqdm(data, ncols=100): if d == "": continue res.append(d.strip()) return res
返回的res中每一個元素是一個句子。
-
在run_discover.py裏面導入剛纔的函數並加載:
documents = get_dpcq() # 這裏返回名爲doucuments不能變。 corpus_name = "鬥破蒼穹"
-
最後運行:
python run_discover.py "data/鬥破蒼穹/鬥破蒼穹.txt" "reports" --latin 50 0 0 0 --bigram 20 80 0 1.5 --unigram_2 20 40 0 1 --unigram_3 20 41 0 1 --iteration 2 --verbose 2
這裏說明一下每一個參數的作用:
- 第一個參數是數據的地址。
- 第二個參數是保存結果的地址。
- latin、bigram、unigram_2、unigram_3後面的四個參數分別是頻率、凝聚係數、最小邊界熵、最大邊界熵。
- 四種類型的新詞:
- 拉丁詞,包括:純數字 (2333, 12315, 12306)、純字母 (iphone, vivo)、數字字母混合 (iphone7, mate9)
- 兩個中文字符的unigram (unigrams被定義爲分詞器產生的元素):(蕭炎,異火,紫研)
- 三個中文字符的unigram unigram:(小醫仙,雲嵐宗,鬥之氣)
- bigrams, 每個bigram由兩個unigram組成(靈魂力量,加瑪帝國,納蘭嫣然)
結果
最後會在reports下生成以下文件:
以下顯示部分的結果:
兩個字的:
20.0 # 40.0 # 0.0 # 1.0 # 2 tf agg_coef max_entropy min_entropy left_entropy right_entropy
蕭炎 44477 56.90328 8.34041 4.69988 4.69988 8.34041
令得 2154 66.94484 6.15161 4.03623 4.03623 6.15161
異火 2153 57.93440 6.18367 5.47363 6.18367 5.47363
聽得 1970 60.18430 6.24338 2.21533 2.21533 6.24338
紫研 1419 701.13603 6.79713 4.91935 4.91935 6.79713
納蘭 1284 741.42784 4.58498 1.47031 4.58498 1.47031
韓楓 953 1315.95708 7.18807 5.08946 5.08946 7.18807
魂殿 897 103.97270 5.73556 5.54795 5.73556 5.54795
鬥皇 892 94.79750 5.45420 3.16312 5.45420 3.16312
蘇千 842 558.08755 6.47207 4.06888 4.06888 6.47207
藥鼎 704 90.21435 5.00712 3.87745 5.00712 3.87745
鬥尊 696 43.95327 5.33022 3.23932 5.33022 3.23932
三個字的:
20.0 # 41.0 # 0.0 # 1.0 # 2 tf agg_coef max_entropy min_entropy left_entropy right_entropy
小醫仙 1346 173967.58092 6.96497 3.31052 3.31052 6.96497
雲嵐宗 1340 236637.51952 6.26222 6.15050 6.26222 6.15050
妖凰族 361 132785.11397 4.81515 1.47622 1.47622 4.81515
大斗師 325 2382.22258 5.67791 4.85402 5.67791 4.85402
焚炎谷 260 27615.13220 5.34474 4.38391 5.34474 4.38391
鬥之氣 256 301.44918 4.83565 4.00525 4.83565 4.00525
莫天行 241 23245.22139 6.26152 4.24955 4.24955 6.26152
烏坦城 219 5169614.68463 4.97398 4.61440 4.97398 4.61440
鳳清兒 215 299254.34290 5.53344 4.35765 4.35765 5.53344
自蕭炎 141 53.93642 4.29877 3.81674 4.29877 3.81674
慕青鸞 134 1772983.90008 5.51582 3.17790 3.17790 5.51582
天冥宗 132 17017.90161 4.85124 4.71653 4.85124 4.71653
東龍島 130 262964.66995 5.09240 4.50574 5.09240 4.50574
總體的:
20.0 # 80.0 # 0.0 # 1.5 # 2 tf agg_coef max_entropy min_entropy left_entropy right_entropy
望着 6429 88.62492 5.76639 3.29693 3.29693 5.76639
讓得 3282 158.42311 6.05628 5.00367 5.00367 6.05628
薰兒 2655 1075.93292 7.36769 4.51719 4.51719 7.36769
等人 2225 115.64243 6.58301 5.25368 5.25368 6.58301
煉藥師 2011 1434.44947 5.70378 5.21238 5.70378 5.21238
盯着 1620 95.54733 5.73287 3.40279 3.40279 5.73287
臉龐上 1601 139.93660 4.99613 4.53856 4.99613 4.53856
天空上 1383 151.95689 4.15316 3.98112 4.15316 3.98112
瞧得 1221 221.02698 6.17956 3.80053 3.80053 6.17956
不知道 1217 136.84007 7.17930 4.82474 4.82474 7.17930
今曰 1162 789.58121 6.29225 3.81237 3.81237 6.29225
略微有些 977 170.57313 7.90198 5.99135 5.99135 7.90198
海波東 964 2441.88382 6.54657 4.26189 4.26189 6.54657
不可能 948 262.75909 6.60016 4.68069 4.68069 6.60016
曰後 927 136.89882 6.12798 3.93988 3.93988 6.12798
靈魂力量 927 351.64736 5.96322 4.66934 4.66934 5.96322
加瑪帝國 919 1892.04722 5.86381 5.65998 5.65998 5.86381
納蘭嫣然 881 2016.11251 7.21520 4.36805 4.36805 7.21520
並沒有 868 197.49401 7.48791 5.03779 5.03779 7.48791
感覺到 865 243.88611 5.36146 4.61834 4.61834 5.36146
章 846 1917.97647 9.09531 6.75345 6.75345 9.09531
小醫仙 844 1443.15544 6.06024 3.63423 3.63423 6.06024\
參考
http://www.matrix67.com/blog/archives/5044
https://github.com/Rayarrow/New-Word-Discovery