
利用 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é)?》,里面還有更多的有趣問題及解法。