對於一個特定的領域而言,我們可能需要其相關的一些詞語,這些詞語可以用來進行分詞、關鍵詞提取、主題分析等。那麼,如何去獲得這些詞語呢?本文接下來將通過鬥破蒼穹小說來介紹新詞發現。
詞頻:詞頻就是一個詞語在語料庫中出現的次數,詞頻越大,表明以下三個引數出現的置信度越大。
凝聚係數:表示兩個單詞同時出現的可能度,具體計算公式如下:
其中,\(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
這裡說明一下每一個引數的作用:
最後會在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