机器学习基础教程实践(一)——中文的向量化
机器学习已经是一个热度逐渐消退的话题了,现在都在聊区块链了,所以这里我可以说说机器学习了。很多人很喜欢把简单的东西说得很复杂,让别人听不懂,这样别人就可以崇拜自己。但是作为一个的产品,我对此表示深深的鄙视。好了,废话不说了,回到正题。
机器其实是非常笨的,特别是对中文的理解,谁让我们中文博大精深,这也对生长在中国的IT从业人员提了更高的要求。
机器学习可以简单理解为推演学习,举例来说:你告诉机器:一只乌鸦是黑的,另外一只乌鸦也是黑的,……N个乌鸦也是黑的,那么他们就会推演出来天下的乌鸦都是黑的……。
机器对中文是理解不了的语言,所以你要告诉机器乌鸦是黑的,首先得把输入:乌鸦,输出:黑变成机器能懂的语言告诉他,下面我们一起来看看怎样告诉机器这个事情。
机器环境准备:
1、centos 7.4 64位
2、python2.7
3.pip
7.4里面会自带python2.7.5,这里不说了,pip需要自己安装,安装比较折腾
1、下载安装脚本
wget https://bootstrap.pypa.io/get-pip.py
下载安装脚本2、安装pip
python get-pip.py
2、安装pip3、安装jieba分词
pip install jieba
3、结巴分词安装4、安装nose,不然安装word2vec会报错
pip install nose
4安装nose5、安装词转向量插件(部分同学反馈安装报错,大家可以根据提示,一般是缺少Cython和python-dev,可以先执行pip install Cython和yum install python-devel)
pip install word2vec
5、词转向量插件到这里,环境已经准备完毕了,后面我们开始正式说怎样把中文向量化,变成机器能理解的语言。
1、vim test.txt,编辑你需要转变位向量的文本,这里文本随便你自己弄。
2、编写分词脚本,使用结巴分词,对文本进行分词
vim test-1.py
##!/usr/bin/env python
## coding=utf-8
import jieba
filePath='test.txt'
fileSegWordDonePath ='testDone.txt'
# 按行读取文本内容
fileTrainRead = []
with open(filePath) as fileTrainRaw:
for line in fileTrainRaw:
fileTrainRead.append(line)
#
def PrintListChinese(list):
for i in range(len(list)):
print list[i],
#使用结巴分词进行分词
fileTrainSeg=[]
for i in range(len(fileTrainRead)):
#通过[0:-1]控制分词的范围
fileTrainSeg.append([' '.join(list(jieba.cut(fileTrainRead[i][0:-1],cut_all=False)))])
if i % 100 == 0 :
print i
# 保存分词结果
with open(fileSegWordDonePath,'wb') as fW:
for i in range(len(fileTrainSeg)):
fW.write(fileTrainSeg[i][0].encode('utf-8'))
fW.write('\n')
2、vim test-2.py,编写转换的脚本,对分词后的中文转为机器能理解的向量
import word2vec
word2vec.word2vec('testDone.txt', 'test.bin', size=300,verbose=True)
3、执行转换脚本
python test-2.py
3、转换为向量到了这里,已经成功将你要给机器讲的中文转化为机器能理解的向量了,好奇的你如果向看看结果是怎样的,那就再编辑一个python脚本
4、vim modelview.py
import word2vec
model = word2vec.load('test.bin')
print(model.vectors)
然后执行这个脚本,就可以看到向量化的文本了,如图
向量化的文本到这里,第一讲就结束了,后面我会再给大家讲怎样利用向量化的文本进行训练和学习