1. 程式人生 > >Synonyms: 中文近義詞工具包

Synonyms: 中文近義詞工具包

Synonyms

Chinese Synonyms for Natural Language Processing and Understanding.

最好的中文近義詞工具包: https://github.com/huyingxi/Synonyms/

synonyms 可以用於自然語言理解的很多工:文字對齊,推薦演算法,相似度計算,語義偏移,關鍵字提取,概念提取,自動摘要,搜尋引擎等。

Welcome

pip install -U synonyms

相容py2和py3,當前穩定版本 v2.2。同時,Node.js 使用者可以使用 node-synonyms

了。

npm install node-synonyms

Samples

Usage

synonyms#nearby



import synonyms
print("人臉: %s" % (synonyms.nearby("人臉")))
print("識別: %s" % (synonyms.nearby("識別")))
print("NOT_EXIST: %s" % (synonyms.nearby("NOT_EXIST")))

synonyms.nearby(WORD)返回一個list,list中包含兩項:[[nearby_words], [nearby_words_score]]

nearby_words是WORD的近義詞們,也以list的方式儲存,並且按照距離的長度由近及遠排列,nearby_words_scorenearby_words對應位置的詞的距離的分數,分數在(0-1)區間內,越接近於1,代表越相近。比如:

synonyms.nearby(人臉) = [
    ["圖片", "影象", "通過觀察", "數字影象", "幾何圖形", "臉部", "圖象", "放大鏡", "面孔", "Mii"],
    [0.597284, 0.580373, 0.568486, 0.535674, 0.531835, 0.530
095, 0.525344, 0.524009, 0.523101
, 0.516046]]

在OOV的情況下,返回 [[], []],目前的字典大小: 125,792。

synonyms#compare

兩個句子的相似度比較

    sen1 = "發生歷史性變革"
    sen2 = "發生歷史性變革"
    r = synonyms.compare(sen1, sen2, seg=True)

其中,引數 seg 表示 synonyms.compare是否對sen1 和 sen2進行分詞,預設為 True。返回值:[0-1],並且越接近於1代表兩個句子越相似。

旗幟引領方向 vs 道路決定命運: 0.429
旗幟引領方向 vs 旗幟指引道路: 0.93
發生歷史性變革 vs 發生歷史性變革: 1.0

synonyms#display

以友好的方式列印近義詞,方便除錯,display呼叫了 synonyms#nearby 方法。

>>> synonyms.display("飛機")
'飛機'近義詞:
  1. 架飛機:0.837399
  2. 客機:0.764609
  3. 直升機:0.762116
  4. 民航機:0.750519
  5. 航機:0.750116
  6. 起飛:0.735736
  7. 戰機:0.734975
  8. 飛行中:0.732649
  9. 航空器:0.723945
  10. 運輸機:0.720578

PCA

Demo

$ pip install -r Requirements.txt
$ python demo.py

Voice of Users

Data

synonyms/data/words.nearby.x.pklz # compressed pickle object

data is built based on wikidata-corpus.

Valuation

同義詞詞林

《同義詞詞林》是梅家駒等人於1983年編纂而成,現在使用廣泛的是哈工大社會計算與資訊檢索研究中心維護的《同義詞詞林擴充套件版》,它精細的將中文詞彙劃分成大類和小類,梳理了詞彙間的關係,同義詞詞林擴充套件版包含詞語77,343條,其中32,470被以開放資料形式共享。

知網, HowNet

HowNet,也被稱為知網,它並不只是一個語義字典,而是一個知識系統,詞彙之間的關係是其一個基本使用場景。知網包含詞語8,265條。

國際上對詞語相似度演算法的評價標準普遍採用 Miller&Charles 釋出的英語詞對集的人工判定值。該詞對集由十對高度相關、十對中度相關、十對低度相關共 30 個英語詞對組成,然後讓38個受試者對這30對進行語義相關度判斷,最後取他們的平均值作為人工判定標準。然後不同近義詞工具也對這些詞彙進行相似度評分,與人工判定標準做比較,比如使用皮爾森相關係數。在中文領域,使用這個詞表的翻譯版進行中文近義詞比較也是常用的辦法。

對比

Synonyms的詞表容量是125,792,下面選擇一些在同義詞詞林、知網和Synonyms都存在的幾個詞,給出其近似度的對比:

注:同義詞林及知網資料、分數來源, https://github.com/yaleimeng/Final_word_Similarity

Benchmark

Test with py3, MacBook Pro.

python benchmark.py

++++++++++ OS Name and version ++++++++++

Platform: Darwin

Kernel: 16.7.0

Architecture: (‘64bit’, ”)

++++++++++ CPU Cores ++++++++++

Cores: 4

CPU Load: 60

++++++++++ System Memory ++++++++++

meminfo 8GB

synonyms#nearby: 100000 loops, best of 3 epochs: 0.209 usec per loop

Live Sharing

52nlp.cn

機器之心

線上分享實錄: Synonyms 中文近義詞工具包 @ 2018-02-07

Statement

Synonyms釋出證書 GPL 3.0。資料和程式可用於研究和商業產品,必須註明引用和地址,比如釋出的任何媒體、期刊、雜誌或部落格等內容。

@online{Synonyms:hain2017,
  author = {Hai Liang Wang, Hu Ying Xi},
  title = {中文近義詞工具包Synonyms},
  year = 2017,
  url = {https://github.com/huyingxi/Synonyms},
  urldate = {2017-09-27}
}

任何基於Synonyms衍生的資料和專案也需要開放並需要宣告一致的“宣告”。

References

wikidata-corpus

word2vec原理推導與程式碼分析

Authors

Hai Liang Wang

Hu Ying Xi

Give credits to

Word2vec by Google

Wikimedia: 訓練語料來源

gensim: word2vec.py

SentenceSim: 相似度評測語料

jieba: 中文分詞

License

GPL3.0