使用word2vec训练中文词向量
生活随笔
收集整理的這篇文章主要介紹了
使用word2vec训练中文词向量
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
https://www.jianshu.com/p/87798bccee48
一、文本處理流程
通常我們文本處理流程如下:
- 1 對文本數據進行預處理:數據預處理,包括簡繁體轉換,去除xml符號,將單詞條內容處理成單行數據,word2vec訓練原理是基于詞共現來訓練詞之間的語義聯系的。不同詞條內容需分開訓練
- 2 中文分詞:中文NLP很重要的一步就是分詞了,分詞的好壞很大程度影響到后續的模型訓練效果
- 3 特征處理:也叫詞向量編碼,將文本數據轉換成計算機能識別的數據,便于計算,通常是轉換成數值型數據,常用的編碼方式有one hot編碼(BOW詞袋模型離散表示方式,另外文章我們講解TF-IDF模型時候會介紹)和基于word2vec等深度學習模型訓練得到的低維稠密向量,通常稱為word embedding的Distributed representation
- 4 機器學習:詞向量進行編碼之后,便可以將文本數據轉換成數值數據,輸入到我們的機器學習模型進行計算訓練了
文本處理流程圖如下: - 文本處理流程
二、訓練過程
- 模型:gensim工具包word2vec模型,安裝使用簡單,訓練速度快
- 語料:百度百科500萬詞條+維基百科30萬詞條+1.1萬條領域數據
- 分詞:jieba分詞,自定義詞典加入行業詞,去除停用詞
- 硬件:8核16g虛擬機
數據預處理
- 維基百科數據量不夠大,百度百科數據量較全面,內容上面百度百科大陸相關的信息比較全面,港澳臺和國外相關信息維基百科的內容比較詳細,因此訓練時將兩個語料一起投入訓練,形成互補,另外還加入了1.1萬公司行業數據
分詞
- 1 準備一個停用詞詞典,訓練時要去除停用詞的干擾
- 2 分詞工具有中科院分詞,哈工大的LTP分詞,jieba分詞,分詞效果中科院的分詞效果不錯,我們直接使用jieba進行分詞,使用簡單方便,分詞速度快
- 3 自定義詞典:由于百科數據有很多專屬名詞,很多比較長,如果直接分詞,很大情況下會被切開,這不是我們想要的結果,比如:中國人民解放軍,可能會被分成:中國 人民 解放軍,jieba雖然有新詞發現功能,為保證分詞準確度,jieba的作者建議我們還是使用自定義詞典。
- 4 自定義詞典抽取:我從百度百科抽取了200萬的詞條,由于自定義詞典包含英文單詞時會導致jieba對英文單詞進行分詞,所以需要用正則表達式去除詞條中的英文數據,并且去除一些單字詞,還有一些詞條里面較短詞,如"在北京",這類詞會導致分詞出現問題,也需要使用正則去除,也有簡單粗暴的方法,直接保留3個漢字及以上的中文詞條,去除之后得到170萬大小的自定義詞典
- 5 分詞過程
- 由于python多線程只能單核多線程,如果是多核的機器并不能有效使用cpu,jieba是使用python寫的,所以jieba只支持并行分詞,并行分詞指的是多進程分詞,并且不支持windows
- 我們在linux試過jieba自帶的并行分詞,開啟并行分詞之后,jieba后臺會自動開啟多個進程,并且并行分詞需要一次性將訓練語料讀取到內存并傳入jieba.cut(file.read())中才會有效果,如果類似我代碼中逐行傳入,開啟多進程是不起作用的,jieba多進程原理是,jieba后臺會自動將語料切分分配給指定進程處理,分好詞后再合并
- 我使用的是8核16g內存Linux虛擬機,發現開啟jieba并行分詞,1g的語料數據,很快就爆內存了
- 單進程的jieba分詞,不需要一次性加載所有語料數據,可逐行讀取語料,內存占用不大,運行穩定。因此我們將語料數據分成8份,手動開啟8個進程分別分詞,這樣每個進程內存占用都很穩定,比jieba自帶的并行分詞性能好,20g的數據,開啟HMM模式,分詞大概花了10個小時
word2vec訓練
- 使用gensim工具包的word2vec訓練,使用簡單速度快,效果比Google 的word2vec效果好,我自己用tensorflow來跑word2vec模型,16g的內存根本跑不動
gensim word2vec 訓練代碼如下,非常簡答
- 訓練時輸入運行命令即可訓練,指定語料目錄,模型保存目錄,embedding工具保存目錄
- 由于語料太大,不能一次性加載到內存訓練,gensim提供了PathLineSentences(input_dir)這個類,會去指定目錄依次讀取語料數據文件,采用iterator方式加載訓練數據到內存,
- 從訓練日志可以看到,其過程是先依次讀取每個文件,生成總的vocab詞典,用來統計count,訓練時用來過濾min_count小于我們制定數量的詞,vocab總詞典生成后,會依次讀入語料進行model訓練,訓練速度非常快。
模型效果
- 之前使用維基百科數據訓練得到模型效果還不錯,這次采用更大的語料看下效果,目前還在訓練,電腦烤機中,先寫到這里,有空繼續
作者:sudop
鏈接:https://www.jianshu.com/p/87798bccee48
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
轉載于:https://www.cnblogs.com/DjangoBlog/p/9113090.html
總結
以上是生活随笔為你收集整理的使用word2vec训练中文词向量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++学习笔记-继承
- 下一篇: JAVA常见的RuntimeExcept