你有一份鬥破蒼穹詞庫,請查收

2022-08-10 12:01:29

引言

對於一個特定的領域而言,我們可能需要其相關的一些詞語,這些詞語可以用來進行分詞、關鍵詞提取、主題分析等。那麼,如何去獲得這些詞語呢?本文接下來將通過鬥破蒼穹小說來介紹新詞發現

前言知識

  • 詞頻:詞頻就是一個詞語在語料庫中出現的次數,詞頻越大,表明以下三個引數出現的置信度越大。

  • 凝聚係數:表示兩個單詞同時出現的可能度,具體計算公式如下:

    其中,\(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