网络有很多的“机器学习入门”和“深度学习入门”的课程,初学,利用示例代码和别人已经处理好的clean data来做练习,感觉很顺畅,可每当要自己单飞之时,却发现连最“趁手”的数据都没有时,老夫实在是一脸茫然。无法,痛定思痛,从最真正的“入门”——数据预处理(或者“清洗”数据)开始,将之间没有踩过的坑,一一踩过,彼时,方能自称“入门”了吧。
当前比较流行的神经网络架构,就本质而言,主要分为:CNN(Convolution Neural Network)卷积神经网络以及RNN(Recurrent Neural Network)递归神经网络两类。本文针对的“数据”入门,是利用原始训练文本(或者叫训练语料)来生成词向量(Word Vector)。
本文使用的训练语料,来自《北京折叠》这部短篇小说。
首先导入必要的工具库。
import jieba
from gensim.models.word2vec import Word2Vec
本文使用jieba中文分词工具。
读入原始语料,《北京折叠》文本。
file = open('beijingzhedie', encoding='utf-8')
使用open打开文件时,切记在完成文件的所有操作后,要调用close函数,关闭文件。
去除原始文本中的标点符号,并替换为空格
cont = file.readline()
cont = cont.replace(',', ' ')
cont = cont.replace('。', ' ')
cont = cont.replace('“', ' ')
cont = cont.replace('”', ' ')
cont = cont.replace('?', ' ')
cont = cont.replace(':', ' ')
cont = cont.replace('‘', ' ')
cont = cont.replace('’', ' ')
cont = cont.replace('!', ' ')
cont = cont.replace('……', ' ')
cont = cont.replace('、', ' ')
使用Jieba分词工具,对中文语料进行分词。
seg_list = jieba.cut(cont)
sents = ' '.join(seg_list)
sents = sents.split()[1:]
具体的Jieba分词工具使用方式,请查阅其官网,或其Github Repository。需要注意的一点是,sents = sents.split()[1:]
,此代码是去除utf-8编码文件的开头编码的。
使用Gensim Word2Vec训练网络,得到词向量。
w2v = Word2Vec(sents, iter=10, min_count=5, window=5, workers=2)
至此,即已经得到了中文词向量,后续将其送入RNN,即可以开始网络的训练了。