第一天,需要对词语相似度,语义相似度做一定的处理。所以研究了网上关于这部分的内容,有一个Word2vec的训练文件,准备试一下。
Word2vec原理推导及代码分析:(参考推导方法)
http://www.hankcs.com/nlp/word2vec.html
参考的是这一篇帖子:
http://textminingonline.com/training-a-chinese-wikipedia-word2vec-model-by-gensim-and-jieba?utm_source=tuicool&utm_medium=referral
1。
下载维基百科的中文语料库:
网址:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2.
语料库文件:zhwiki-latest-pages-articles.xml.bz2
2。
需要对压缩文本进行处理,得到txt文本,所以使用帖子中提到的
process_wiki.py
文件对zip进行了处理:
处理过程:在对应的路径下,输入命令行:
python process_wiki.py zhwiki-latest-pages-articles.xml.bz2 wiki.zh.text
这个转换的过程大概是从下午14:03开始,持续到下午15:30
报错:
上网查询是:
output = open(outp, 'w')报的错,
应该修改为:
output = open(outp, 'w',encoding='utf-8')
继续跑,从15:40又开始跑。
在此期间,一直在考虑是否可以用其他方式进行予以的分析,查询到有nltk的直接调用similar方式。
期间一直在纠结代码中出现的一个bin文件是在哪里生成的,后来发现是在操作完成之后系统保存下来的文件,并且word2vec文件也可以直接保存model文件,后期使用的时候直接打开就可以。
在调整完编码格式的错误后就可以正常运行了,就是时间太久了~一直跑到了下午7点多
3。然后开始处理中文简体与繁体的转换问题,已经是第二天了。昨天查到繁简字体转换有一个包可以用,是opencc,但是今天安装的过程中一直出现问题,刚开始是编码格式的问题,后来又提醒说需要下载一个distribute的包,后来发现装完包之后还有问题,所以决定通过其他方法来处理简体与繁体的转换~
中文简繁字体的转换:
https://blog.csdn.net/wds2006sdo/article/details/53583367
在这篇帖子中发现中文简繁体转换可以直接加载写好的包,尝试处理此类问题。
今天与学姐交流可以转换思路,使用synonyms这个中文近义词工具包,进去看了之后发现这个工具包应该是封装好了word2vec算法,在内部进行训练。
在安装
synonyms的同时我也在跑一个自己转换中英文的程序,在此期间安装包报错:
上网查询提示可能是因为python打开了其他的应用,具体解释件网页:
https://blog.csdn.net/lanchunhui/article/details/72891918
所以只能等着训练完中英文的转换再来考虑安装
synonyms
的问题
在后面又继续了opencc的安装,然后使用opencc转换语料库中的简繁体。转换成功,得到:
wiki.zh.text.simple
文件
4。接下来要对文本中的一些英文进行处理,源码中给了一个clean的处理文件,但是在执行过程中发现filter()后不能跟strip(),但是直接删除之后执行文件出现的都是地址文件,字节符,所以决定考虑重写这个代码,可以使用正则来处理中英文的转换。切出一小部分出来进行test,发现效果不错,就换了这一种方式。成功~
5。要进行切词了,使用的是jieba的方法,用的最上面的那种直接使用命令行的方法,好像不识别最后的引号的作用,自己也懒的去研究了,正好有一篇jieba切词封装好的代码,改了改数据源,就直接拿来用了。在切词的过程中依然出现了乱码的问题:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe8 in position 145: invalid continuation byte
上网查询处理的方式有:
https://blog.csdn.net/lihengfang/article/details/51758020
直接在头部加了有‘#’的两行,又开始重新跑数据。
但是仍然出现了错误,还是编码的错误,但是单独把这几行的数据拉出来进行操作,是没有错误的~
看到网上有人说可能是由于内存在不断的呗胀满,知道最后崩溃,报错。但是看到再次过程中也是一行行读入的,不理解为什么会存在这种问题。有待继续分析~
下班之前找到一篇处理的帖子,大致看了一下,没有发现有什么不一样的处理方式,先留存一下,下周过来看看。
https://github.com/hzhyhx1117/word2vec-for-wiki/blob/master/process_wiki.py
周末在实验室感想;
会不会是可以直接用synonyms进行语言的切分,seg方法,周一的时候可以尝试一下。
操作的源码
https://github.com/Samurais/wikidata-corpus
拆分的源码参考:
https://github.com/Samurais/wikidata-corpus/blob/master/wordseg.py
周一使用操作的源码和拆分的源码进行wiki中文库的seg方法,从下午两点多开始跑程序。但是始终没有什么结果
准备使用之前跑崩掉的程序,从断掉的地方继续跑clean文件25618行开始跑
synonyms部分只可以用来分析给定的两个句子之间的相似度,或者是某一个词语的近义词,没有办法直接分析断句,是需要拆分以后再做处理才可以。所以考虑自己训练一个词库模型,看看能否符合自己的业务需求
分支二:
开始听七月在线的关于nlp中word2vec部分的课件,了解到了关于共线矩阵的知识点
下一步用到了机器学习中的pca降维的一种拆解技术,svd分解
https://blog.csdn.net/philosophyatmath/article/details/52354413
4.对word2vec的中文简体版的处理:接着上述的步骤3:
已有wiki.zh.jian.text是已经简繁体转换了的简体中文版,现在需要进行英文的切除与字符串的转换。
参考这篇文章进行实验:
https://www.jianshu.com/p/05800a28c5e4
(只是用来做了remove与seg方法其他还是遵照最初的方式进行实验)
将里面的remove方法与seg方法都提取出来了重新运行,效果还不错,考虑实施remove方法运行结果非常快,估计也就三分钟左右吧。14:30开始运行seg方法,据说比较耗时,在4个小时左右。但是:15:02就完成了,查看结果,两个字:完美~
5.15:14分开始训练word2vec模型。预计30分钟左右。15:39结束。
自此word2Vec的实验才算是真正结束。可以开始测试:
import gensim
model = gensim.models.Word2Vec.load("wiki.zh.text.model")
model.most_similar(u"北京")
这次整个的运行都比较顺畅,几乎没有出现什么bug,比较实用,稍后再整理一下。