如何用 Python 和 gensim 調(diào)用中文詞嵌入預(yù)訓(xùn)練模型?

利用 Python 和 Spacy 嘗試過英文的詞嵌入模型后,你是不是很想了解如何對中文詞語做向量表達(dá),讓機(jī)器建模時(shí)捕捉更多語義信息呢?這份視頻教程,會手把手教你操作。

疑問

寫過《如何用Python處理自然語言?(Spacy與Word Embedding)》一文后,不少同學(xué)留言或私信詢問我,如何用 Spacy 處理中文詞語,捕捉更多語義信息。

回顧一下, 利用詞嵌入預(yù)訓(xùn)練模型,Spacy 可以做許多很酷的事情。

例如計(jì)算詞語之間的相似程度:

這是“狗”和“貓”的相似度:

dog.similarity(cat)
0.80168545

這是“狗”和“橘子”的相似度:

dog.similarity(orange)
0.2742508

還可以利用特征語義,計(jì)算結(jié)果。

例如做個(gè)完形填空:

? - woman = king - queen

你一眼就看出來了,應(yīng)該填寫“man”(男人),對吧?

把式子變換一下:

guess_word = king - queen + woman

輸入右側(cè)詞序列:

words = ["king", "queen", "woman"]

執(zhí)行對比函數(shù)后,你會看到如下結(jié)果:

['MAN', 'Man', 'mAn', 'MAn', 'MaN', 'man', 'mAN', 'WOMAN', 'womAn', 'WOman']

這證明了詞嵌入模型捕獲到了性別的差異,并且知道“男人”與“女人”、“國王”與“女王”在其他特征維度上的相似性。

另外,我們還可以把詞語之間的關(guān)系,壓縮到一個(gè)二維平面查看。

令人略感遺憾的是,以上的例子,都是英文的。

那么中文呢?

中文可不可以也這樣做語義計(jì)算,和可視化?

答案是:

可以。

可惜 Spacy 這個(gè)軟件包內(nèi)置支持的語言列表,暫時(shí)還不包括中文。

但誰說用 Python 做詞嵌入,就一定得用 Spacy ?

我們可以使用其他工具

工具

我們這次使用的軟件包,是 Gensim

它的 slogan 是:

Topic modelling for humans.

如果你讀過我的《如何用Python爬數(shù)據(jù)?(一)網(wǎng)頁抓取》和《如何用 pipenv 克隆 Python 教程代碼運(yùn)行環(huán)境?(含視頻講解)》,那你應(yīng)該記得,我非常推崇這些適合于人類使用的軟件包。

Gensim 包很強(qiáng)大,甚至可以直接用來做情感分析主題挖掘(關(guān)于主題挖掘的含義,可以參考我的《如何用Python從海量文本抽取主題?》一文)。

而且,實(shí)現(xiàn)這些功能, Gensim 用到的語句非常簡潔精煉。

這篇教程關(guān)注中文詞嵌入模型,因而對其他功能就不展開介紹了。

如何使用 Gensim 處理中文詞嵌入預(yù)訓(xùn)練模型呢?

我做了個(gè)視頻教程給你。

視頻教程

教程中,我們使用的預(yù)訓(xùn)練模型來自于 Facebook ,叫做 fasttext 。

它的 github 鏈接在這里。

視頻里,我一步步為你展示語義計(jì)算與可視化功能的實(shí)現(xiàn)步驟,并且進(jìn)行了詳細(xì)的解釋說明。

我采用 Jupyter Notebook 撰寫了源代碼,然后調(diào)用 mybinder ,把教程的運(yùn)行環(huán)境扔到了云上。

請點(diǎn)擊這個(gè)鏈接http://t.cn/RBSyEhp),直接進(jìn)入咱們的實(shí)驗(yàn)環(huán)境。

不需要在本地計(jì)算機(jī)安裝任何軟件包。只要有一個(gè)現(xiàn)代化瀏覽器(包括Google Chrome, Firefox, Safari和Microsoft Edge等)就可以了。全部的依賴軟件,我都已經(jīng)為你準(zhǔn)備好了。

如果你對這個(gè)代碼運(yùn)行環(huán)境的構(gòu)建過程感興趣,歡迎閱讀我的《如何用iPad運(yùn)行Python代碼?》一文。

瀏覽器中開啟了咱們的環(huán)境后,請你觀看我給你錄制的視頻教程。

視頻教程的鏈接在這里。

希望你能跟著教程,實(shí)際操作一遍。這樣收獲會比較大。

通過本教程,希望你已經(jīng)掌握了以下知識:

  • 如何用 gensim 建立語言模型;
  • 如何把詞嵌入預(yù)訓(xùn)練模型讀入;
  • 如何根據(jù)語義,查找某單詞近似詞匯列表;
  • 如何利用語義計(jì)算,進(jìn)行查詢;
  • 如何用字符串替換與結(jié)巴分詞對中文文本做預(yù)處理;
  • 如何用 tsne 將高維詞向量壓縮到低維;
  • 如何可視化壓縮到低維的詞匯集合;

如果你希望在本地,而非云端運(yùn)行本教程中的樣例,請使用這個(gè)鏈接http://t.cn/R1T4400)下載本文用到的全部源代碼和運(yùn)行環(huán)境配置文件(Pipenv)壓縮包。

然后,請你參考《如何用 pipenv 克隆 Python 教程代碼運(yùn)行環(huán)境?》一文的說明,利用 Pipenv ,在本地構(gòu)建代碼運(yùn)行環(huán)境。

如果你知道如何使用github,也歡迎用這個(gè)鏈接http://t.cn/RBS4Ljo)訪問對應(yīng)的github repo,進(jìn)行clone或者fork等操作。

當(dāng)然,要是能給我的repo加一顆星,就更好了。

講解

如果你不滿足于只學(xué)會操作步驟,還想進(jìn)一步了解詞嵌入預(yù)訓(xùn)練模型的原理,我這里剛好有一段研究生組會上錄制的視頻。

請點(diǎn)擊這個(gè)鏈接查看。

因?yàn)樵O(shè)備簡陋,因此錄制結(jié)果跟偷拍的差不多,請諒解。

講解部分錄過之后,我的學(xué)生們還提出了疑問。

因此我又進(jìn)行了答疑,也錄了視頻。

請點(diǎn)擊這個(gè)鏈接查看答疑過程。

希望這些講解與答疑,能對你理解和使用中文詞嵌入預(yù)訓(xùn)練模型,起到幫助。

喜歡請點(diǎn)贊。還可以微信關(guān)注和置頂我的公眾號“玉樹芝蘭”(nkwangshuyi)。

如果你對數(shù)據(jù)科學(xué)感興趣,不妨閱讀我的系列教程索引貼《如何高效入門數(shù)據(jù)科學(xué)?》,里面還有更多的有趣問題及解法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容