三分鐘實現Python中文詞語分析

目錄

1、原理簡介

2、安裝模塊

3、同義詞分析

4、相似度分析


近日學習忽見一Python第三方庫: Synonyms,該庫包含詞彙量達到125792,主要應用於文本對齊、推薦算法、相似度計算、語義偏移、關鍵字提取、概念提取、自動摘要、搜索引擎等 NLP 任務場景。

Synonyms 項目的作者胡小夕是北京郵電大學研究生,目前實習於今日頭條 AI LAB。從事自然語言處理方向研究,在智能客服,知識圖譜等領域都有相關研究開發經驗。研發模型在文體分類權威數據集 TREC 上達到目前最優精度,申請深度學習與自然語言處理結合的國家發明專利 5 項。

1、原理簡介

Synonyms庫採用Word2vec技術實現,Word2Vec(Word Embedding)中文名稱爲“詞向量”或“詞嵌套”,是Google開源一款用於深度學習的自然語言處理工具。其基本思想是將自然語言中的每一個詞轉換爲向量vec的形式表達(指學習一個映射ƒ,它可以將單詞變成向量表示:vec=ƒ(word)),通常詞彙表的維數多於向量vec維數,這樣可以更加高效的方式表示單詞。

Word2Vec是一種可以從原始語料中學習字詞空間向量的預測模型,使用Word2Vec訓練語料得到的結果非常有趣,比如意思相近的詞在向量空間中的位置會接近。Word2Vec分爲CBOW(Continuous Bag-of-Words)和Skip-Gram兩種模式,其中CBOW是從原始語句(比如:中國的城市是_____)推測目標字詞(比如:天津),而Skip-Gram相反,它是從目標字詞推測出原始語句,CBOW比較合適小型語料數據,而Skip-Gram比較適合大型語料數據。

Word2Vec通過一系列的訓練,可以實現將文本的內容轉換成N維向量從而進行運算,其文本語義上的相似度可以通過向量空間的相識度表示,由此Word2Vec可以處理一些文本語義上的工作,比如找同義詞,詞性分析等,除此之外Word2Vec還可以對處理後的詞進行算數運算(加減乘除)等操作。

實現詞向量機制有兩種方法,第一種方法是基於“計數”的,在海量語料庫數據中統計一個詞語和另一個詞語同時出現的概率,將出現頻率高的詞語映射到向量空間的相近位置;第二種方法經常使用到,是基於“預測”的,從一個詞語或者幾個詞語開始,預測它們可能的相鄰詞語。在預測的過程中學習到詞向量映射。基於預測方法有兩種模型:CBOW和Skip-Gram。CBOW(Continuous Bag-of-Words)即連續詞袋模型,它的實現機制是訓練一個模型,使用某個詞語的上下文內容預測可能出現的詞語。例如:“I'm hungry.I want to eat.”,若看到句子的前半部分:I'm hungry.I want to_____,也可以預測到需要填寫的詞語是“eat”。Skip-Gram模型和CBOW模型正好相反,使用已經出現的詞語來預測上下文中的詞語。例如在之前的語句中,是使用“eat”來預測“hungry”、“want”等詞語。

2、安裝模塊

Synonyms庫安裝十分便捷,可以直接使用pip指令安裝,安裝指令如下所示:

pip install synonyms

安裝成功後效果如下所示: 

3、同義詞分析

同義詞分析,即是分析指定詞語在語料庫中的同義類型詞語,並打印輸出。兩行Python代碼即可搞定,例如分析“美男子”的同義詞,具體如下所示:

import synonyms
synonyms.display("美男子")

相似度 > 0.5,返回相似,相似度 < 0.5,返回不相似。僅需幾秒,分析效果如下所示:

4、相似度分析

相似度分析,即是分析用戶指定的詞語,分析其詞性的相近程度,例如:語句1:不脫髮的程序猿,語句2:美男子,分析代碼如下所示:

import synonyms
str1 = "不脫髮的程序猿"
str2 = "美男子"
r = synonyms.compare(str1, str2, seg=True)
print("相似度:"+str(r))

從邏輯和認知層次上講不脫髮的程序猿是十足的美男子,但是從詞語的相似度上分析,兩者並無關聯,所以詞性相似度僅有0.041%,效果如下所示:

GitHub網站參見:https://github.com/huyingxi/Synonyms

更多有趣玩法請自行探索~ 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章