文档章节

转()word2vec训练搜狗新闻语料

hc321
 hc321
发布于 01/25 10:44
字数 877
阅读 9
收藏 0
nlp

在搜狗实验室里下载相关语料,我下载的是全网新闻: http://www.sogou.com/labs/resource/ca.php

下下来的语料,看到有1.54G的大小: 文件大小

其中里面内容的格式为:

文本格式

刚下下来的语料是用gbk编码的,在mac或linux上都会呈乱码形式,需要将之转换为utf-8编码。而且我们只需要<content>里面的内容。因此先转换编码和获取content内容。这里简单的方法可以通过shell的命令来完成:

cat news_tensite_xml.dat | iconv -f gbk -t utf-8 -c | grep "<content>" > corpus.txt

转换完后的数据如下: 数据语料

这时候全是content中的内容了,虽然还有<content>标签在,不过这个可以在程序中去掉。

下面一个操作就是进行分词,因为是用Python来进行的,使用jieba分词来进行分词操作,生成分词文件corpus_seg.txt:

python word_segment.py corpus.txt corpus_seg.txt

-- coding: utf-8 --

word_segment.py用于语料分词

import logging import os.path import sys import re import jieba

reload(sys) sys.setdefaultencoding( "utf-8" )

先用正则将<content>和</content>去掉

def reTest(content): reContent = re.sub('<content>|</content>','',content) return reContent

if name == 'main': program = os.path.basename(sys.argv[0]) logger = logging.getLogger(program) logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s') logging.root.setLevel(level=logging.INFO) logger.info("running %s" % ' '.join(sys.argv))

check and process input arguments

if len(sys.argv) < 3: print globals()['doc'] % locals() sys.exit(1) inp, outp = sys.argv[1:3] space = " " i = 0

finput = open(inp) foutput = open(outp,'w') for line in finput: line_seg = jieba.cut(reTest(line)) output.write(space.join(line_seg)) i = i + 1 if (i % 1000 == 0): logger.info("Saved " + str(i) + " articles_seg")

finput.close() foutput.close() logger.info("Finished Saved " + str(i) + " articles")

跑起来如下: 运行结果

分完词的样子: 分词完毕,<content></content>也去掉了

接着我们可以用gensim中的word2vec工具训练:

python train_word2vec_model.py corpus_seg.txt corpus.model corpus.vector

-- coding: utf-8 --

train_word2vec_model.py用于训练模型

import logging import os.path import sys import multiprocessing

from gensim.models import Word2Vec from gensim.models.word2vec import LineSentence

if name=='main': program = os.path.basename(sys.argv[0]) logger = logging.getLogger(program)

logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s') logging.root.setLavel(level=logging.INFO) logging.info("running %s" % ' '.join(sys.argv))

if len(sys.argv) < 4: print global()['doc'] % locals() sys.exit(1)

inp,outp,outp2 = sys.argv[1:4]

model = Word2Vec(LineSentence(inp),size=400,window=5,min_count=5,workers=multiprocessing.cup_count())

model.save(outp) model.save_word2vec_format(outp2,binary=false)

运行信息如下: 正在进行中...

完毕后,即训练出了模型,这是可以测试测试模型的效果了,进入ipython:

In [1]: import gensim

In [2]: model = gensim.models.Word2Vec.load('corpus.model')

In [3]: result = model.most_similar(u'警察')

In [4]: for word in result: ...: print word[0],word[1] ...:

警员 0.668260276318 民警 0.566563367844 军警 0.560631096363 便衣警察 0.560409486294 保安 0.559458613396 交警 0.553144752979 协警 0.55225610733 公安人员 0.536189615726 警方 0.535990476608 警务人员 0.5125041008

In [5]: result = model.most_similar(u'妹纸')

In [6]: for word in result: ...: print word[0],word[1] ...:

妹子 0.588376522064 噢 0.559590697289 帅哥 0.550627946854 美眉 0.549147129059 萝莉 0.534497618675 尤物 0.525674104691 小萝莉 0.517127275467 小女生 0.508114397526 妖娆 0.506700277328 美女 0.503593623638

In [7]: result = model.most_similar(u'御姐')

In [8]: for word in result: ...: print word[0],word[1] ...:

冷艳 0.705523848534 萝莉 0.701750993729 侠女 0.645917892456 玉女 0.643954575062 百变 0.634887218475 小萝莉 0.62935769558 丑女 0.613193750381 妖娆 0.61169230938 清纯 0.608936905861 风骚 0.602776527405

In [9]: result = model.most_similar(u'马云')

In [10]: for word in result: ...: print word[0],word[1] ...:

阿里巴巴 0.557115197182 马化腾 0.551600694656 雷军 0.495278447866 李彦宏 0.476020514965 柳传志 0.475475847721 郭台铭 0.462114006281 宋卫平 0.453877806664 阎焱 0.452617198229 周鸿祎 0.44635617733 俞敏洪 0.43476909399

In [11]: model.similarity(u'男人',u'女人') Out[11]: 0.90834058044551369

In [12]: print model.doesnt_match(u"早餐 晚餐 午餐 计算机".split()) 计算机

In [13]: model.n_similarity([u'御姐',u'萝莉'],[u'计算机',u'编程']) Out[13]: -0.054454374940044653

通过测试,看起来效果还蛮不错的。

作者:七号萝卜 链接:https://www.jianshu.com/p/6d542ff65b1e 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文转载自:https://www.jianshu.com/p/6d542ff65b1e

共有 人打赏支持
hc321
粉丝 1
博文 67
码字总数 32581
作品 0
海淀
程序员
私信 提问
干货|免费文本语料训练数据集

关于Word2Vec,上篇文章文本分类特征提取之Word2Vec中已有还算详尽的叙述。简单总结下:word2vec是Google在2013年提出的一款开源工具,其是一个Deep Learning模型(实际上该模型层次较浅,严...

m0epnwstyk4
2017/12/18
0
0
利用word2vec进行词向量训练

请问大家一下:利用word2vec进行词向量进行训练时,所用语料进行分词后,还需要去除标点符号吗?我利用搜狗新闻语料(分词后2.09G)进行词向量训练时,出现Exception in thread "main" java...

JSLS-HZQ
2015/08/20
515
0
Windows下使用Word2vec继续词向量训练

转载自:http://blog.csdn.net/heyongluoyao8/article/details/43488765 word2vec是Google在2013年提出的一款开源工具,其是一个Deep Learning(深度学习)模型(实际上该模型层次较浅,严格上...

程序媛媛51
2016/11/23
0
0
通过搜狗新闻语料用word2Vec训练中文模型

在搜狗实验室里下载相关语料,我下载的是全网新闻: http://www.sogou.com/labs/resource/ca.php 下下来的语料,看到有1.54G的大小: 其中里面内容的格式为: 刚下下来的语料是用gbk编码的,...

七号萝卜
2016/12/12
0
0
搜狐新闻文本分类:机器学习大乱斗

目标 从头开始实践中文短文本分类,记录一下实验流程与遇到的坑 运用多种机器学习(深度学习 + 传统机器学习)方法比较短文本分类处理过程与结果差别 工具 深度学习:keras 传统机器学习:s...

王岳王院长
2017/05/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

手写tomcat+servlet

写程序一定要有思路,思路很重要! 一、我们分两步第一步先实现手写tomcat,第二部写servlet 所用技术: 1、soket通信 IO流 2、http请求与相应 3、解析xml 4、java反射技术 导入所需要的jar...

jason_kiss
35分钟前
1
0
Beetl模板的基础用法 【变量、循环、条件】---《Beetl视频课程》(2)

本期视频做了一个博客的首页列表; 内容简介:springboot 集成 beetlsql;使用for循环,使用if控制语句,使用虚拟属性,定义变量等等 一起学beetl目录:https://my.oschina.net/u/1590490?ta...

Gavin-King
40分钟前
1
0
各种视频监控上墙方案的比较

方案1、一使用 DVR 、NVR 直接显示上墙 不得不说,这种办法是成本最低廉的,但这里有不少限制: 无法实现分散点的集中上墙。譬如连锁经营的酒店,如果我在总部建立一个集中上墙的环境,这个就...

PeakFang-BOK
今天
4
0
netfilter 和 iptables

一. netfilter 1. 什么是entfilter 和 iptables netfilter指整个项目名 在这个项目里面,netfilter特指内核中的netfilter框架, iptables指用户空间的配置工具。 netfilter在协议栈中添加了5...

Fc丶
今天
2
0
搞定了微信小程序富文本渲染解决方案-后端渲染方案Html2Wxml2J

先介绍一下最近遇到的问题: 最近小程序项目中有文章详情页需要渲染富文本,微信小程序官方提供的<rich-text>是个弱鸡,很多标签不支持,用起来也麻烦,性能也不咋地。 吐槽完了,我们决定寻...

山东-小木
今天
36
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部