添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

word2vec中文语料处理及模型训练实践


python gensim训练 word2vec的中文语料格式是什么样的呢?很多经验贴或是忽略了这个地方,或是没有详细说明,此博文详细说明及实践语料的处理方式,并汇总数种语料加载方式。

从文章 word2vec词向量训练使用(python gensim) 对word2vec的介绍,我们了解到Word2Vec第一个参数sentences要求是是预处理后的训练语料库,需要输入一个可迭代的列表,但是对于较大的语料库,可以考虑直接从磁盘/网络传输句子的迭代。

中文语料处理

如果是句子,需要进行分词

如果是文件,需要将文件处理为每一行对应一个句子(已经分词,以空格隔开),实例处理过程见文末。

法一:语料处理为列表

from gensim.models import Word2Vec sentences = [["Python", "深度学习", "机器学习"], ["NLP", "深度学习", "机器学习"]] model = Word2Vec(sentences, min_count=1)

把Python内置列表当作输入很方便,但当输入量很大的时候,大会占用大量内存。

法二:语料是文件(处理为迭代器)

Gensim需要输入一个可迭代的列表,可以是迭代器,没有必要把一切东西都保存在内存中,提供一个语句,加载处理它,忘记它,加载另一个语句。

一般我们的语料是在文件中存放的,首先,需要保证语料文件内部每一行对应一个句子(已经分词,以空格隔开),方法见上。

对一个目录下的所有文件生效(法1)

这些文件已经被分词好了,如果还需要进一步预处理文件中的单词,如移除数字,提取命名实体… 所有的这些都可以在MySentences 迭代器内进行,保证给work2vec的是处理好的迭代器。

class MySentences(object): def __init__(self, dirname): self.dirname = dirname def __iter__(self): for fname in os.listdir(self.dirname): for line in open(os.path.join(self.dirname, fname)): yield line.split() sentences = MySentences('/some/directory') # a memory-friendly iterator model = gensim.models.Word2Vec(sentences)

对一个目录下的所有文件生效(法2)

class : gensim.models.word2vec.PathLineSentences

gensim.models.word2vec.PathLineSentences(source, max_sentence_length=10000, limit=None) Bases: object 作用同下一个类,对一个目录下的所有文件生效,对子目录无效 Works like word2vec.LineSentence, but will process all files in a directory in alphabetical order by filename. 该路径下的文件 只有后缀为bz2,gz和text的文件可以被读取,其他的文件都会被认为是text文件 The directory can only contain files that can be read by LineSentence: .bz2, .gz, and text files. Any file not ending with .bz2 or .gz is assumed to be a text file. Does not work with subdirectories. 一个句子即一行,单词需要预先使用空格分隔 The format of files (either text, or compressed text files) in the path is one sentence = one line, with words already preprocessed and separated by whitespace. 源处填写的必须是一个目录,务必保证该目录下的文件都能被该类读取。如果设置了读取限制,那么只读取限定的行数。 Example: sentences = PathLineSentences(path) 目录下的文件应该是如此种种。 The files in the directory should be either text files, .bz2 files, or .gz files.

对于单个文件语料,使用LineSentence

class: gensim.models.word2vec.LineSentence

每一行对应一个句子(已经分词,以空格隔开),我们可以直接用LineSentence把txt文件转为所需要的格式。

LineSentence功能解释:Iterate over a file that contains sentences: one line = one sentence. Words must be already preprocessed and separated by whitespace(对包含句子的文件进行迭代:一行=一句话。单词必须经过预处理,并由空格分隔)

from gensim import Word2Vec from gensim.Word2Vec import LineSentence from gensim.test.utils import common_texts, get_tmpfile # inp为输入语料 inp = 'wiki.zh.text.jian.seg.txt' sentences = LineSentences(inp) path = get_tmpfile("word2vec.model") #创建临时文件 model = Word2Vec(sentences, size=100, window=5, min_count=1) model.save("word2vec.model")

gensim.models.word2vec.LineSentence(source, max_sentence_length=10000, limit=None)
预处理类,限制句子最大长度,文档最大行数
拿到了分词后的文件,在一般的NLP处理中,会需要去停用词。由于word2vec的算法依赖于上下文,而上下文有可能就是停词。因此对于word2vec,我们可以不用去停词。

语料库获取语料

class gensim.models.word2vec.Text8Corpus

class gensim.models.word2vec.Text8Corpus(fname, max_sentence_length=10000) Bases: object 从一个叫‘text8’的语料库中获取数据,该语料来源于以下网址,参数max_sentence_length限定了获取的语料长度 Iterate over sentences from the “text8” corpus, unzipped from http://mattmahoney.net/dc/text8.zip .

word2vec中文语料处理及模型训练实践

实践部分代码改编自链接 )原始小说语料下载 《人民的名义》

import jieba import jieba.analyse from gensim.test.utils import common_texts, get_tmpfile from gensim.models import Word2Vec #文件位置需要改为自己的存放路径 #将文本分词 with open('C:\\Users\Administrator\Desktop\\in_the_name_of_people\in_the_name_of_people.txt',encoding='utf-8') as f: document = f.read() document_cut = jieba.cut(document) result = ' '.join(document_cut) with open('./in_the_name_of_people_segment.txt', 'w',encoding="utf-8") as f2: f2.write(result) #加载语料 sentences = word2vec.LineSentence('./in_the_name_of_people_segment.txt') #训练语料 path = get_tmpfile("word2vec.model") #创建临时文件 model = word2vec.Word2Vec(sentences, hs=1,min_count=1,window=10,size=100) # model.save("word2vec.model") # model = Word2Vec.load("word2vec.model") #输入与“贪污”相近的100个词 for key in model.wv.similar_by_word('贪污', topn =100): print(key) #输出了100个,示例前几个 ('地皮', 0.9542419910430908) ('高昂', 0.934522807598114) ('证', 0.9154356122016907) ('上强', 0.9113685488700867) ('一抹', 0.9097814559936523) ('得罪', 0.9082552790641785) ('屁股', 0.9072068929672241) ('能伸能屈', 0.9049990177154541) ('二十五万', 0.9045952558517456) 项目中要对短文本进行相似度估计,word2vec是一个很火的工具。本文就word2vec的训练以及加载进行了总结。word2vec的原理就不描述了,word2vec词向量工具是由google开发的,输... 来自: u012260341的博客 一、准备环境和语料语料:选择搜狐新闻语料,我选择的是迷你版语料。下载语料地址。 分词:选择结巴分词。参考 模型:word2vec。参考二、分词1:安装结巴分词(代码对Python2/3均兼容)全自动安... 来自: weixin_40533355的博客 1、环境配置           本人使用的是MacBook+Python2.7.11           首先,安装NLP工具包gensim,这里包含了今天的主角:Word2Vecpipinstal... 来自: 3CDFP 1、语料相关说明第一种方法是去网上下载相关语料,我这里有一个英文语料模型点我下载,它适合于使用word2vec英文训练的语料,约96M,包括常用的英文词汇。而由于中文语料比较少,暂时也是写前期代码测试... 来自: 晓华的博客 一、环境windows764位python3.5二、安装jieba和gensim打开windows的powershell,定位到anaconda的scripts文件夹,输入pipinstalljieb... 来自: xuan314708889的博客 在自然语言处理(NLP)中,我们经常将词映射到包含数值的向量中,以便机器可以理解它。词嵌入是一种映射,允许具有相似含义的单词具有相似的表示。本文将介绍两种最先进的词嵌入方法,Word2Vec和Fast... 来自: yinghe_one的博客 word2vec详细介绍可点击链接阅读,https://www.jianshu.com/p/471d9bfbd72f。本文主要想简单通过python来实现word2vec的基本用法。直接上代码:一、训... 来自: python 目录一、为什么需要WordEmbedding二、Word2vec原理1、CBOW模型2、Skip-gram模型三、行业上已有的预训练词向量四、用Python训练自己的Word2vec词向量一、为什么需... 来自: huacha__的博客 前言此篇文章的基础知识部分总结了一些别人的文章解释,环境为Windows10下的python3.5版本,需要的包为gensim。代码很简要,不足之处请说明。一.背景知识1.1词向量词向量(word2v... 来自: qq_41814556的博客 word2vec在NLP领域的运用比较多,最近看了网上的例子觉得挺有意思的,就自己动手实践了一下。简单总结:所谓的wordvector,就是指将单词向量化,将某个单词用特定的向量来表示。将单词转化成对... 来自: WxyangID的博客 一、什么是词向量词向量最初是用one-hotrepresention表征的,也就是向量中每一个元素都关联着词库中的一个单词,指定词的向量表示为:其在向量中对应的元素设置为1,其他的元素设置为0。采用这... 来自: 木槿花开 版权声明:本文为博主http://blog.csdn.net/churximi原创文章,未经允许不得转载,谢谢。 https://blog.csdn.net/churx... 来自: tiankong_的博客 一、gensim介绍gensim是一款强大的自然语言处理工具,里面包括N多常见模型:-基本的语料处理工具-LSI-LDA-HDP-DTM-DIM-TF-IDF-word2vec、paragraph2v... 来自: 素质云笔记/Recorder... 一、前言一开始看到word2vec环境的安装还挺复杂的,安了半天Cygwin也没太搞懂。后来突然发现,我为什么要去安c语言版本的呢,我应该去用python版本的,然后就发现了gensim,安装个gen... 来自: 小拳头的博客 词向量、word2vec、wordembedding首先讲解一下词向量,词向量就是把一个词变成向量形式,这个向量形式可以表示这个词,在模型中直接用词向量作为这个单词的表示作为输入,因为算法模型是不清楚... 来自: randompeople的博客 Python中gensim库word2vec的使用:pipinstallgensim安装好库后,即可导入使用:1、训练模型定义from gensim.models import Word2Vec  m... 来自: angus_monroe的博客 Python实现Word2vec学习笔记参考:中文word2vec的python实现python初步实现word2vec中英文维基百科语料上的Word2Vec实验1文件目录结构:[.../vord2v... 来自: 风之翊的专栏 fromgensim.test.utilsimportcommon_texts,get_tmpfilefromgensim.modelsimportWord2Vecpath=get_tmpfile(&... 来自: luoganttcc的博客 引用块内容#-*-coding:utf-8-*-importsysfromgensim.modelsimportword2vecimportgensimimportcodecsfromtextrank... 来自: xiaoyaozizai017的博客 摘要关键词:Glove,word2vec,NNLM,余弦相似度参考:一个非常好的py实现:《自己动手写word2vec》Gensim中的word2vec使用《Gensim中的word2vec使用》源代... 来自: LeYOUNGER的博客 1、语料相关说明第一种方法是去网上下载相关语料,我这里有一份复旦大学中文文本分类时用的语料模型,分为训练集和测试集两部分,约220M,包括了常用的中文词汇。训练文本的大小直接决定了算法的训练效果,如果... 来自: 小白_努力 首先需要具备gensim包,然后需要一个语料库用来训练,这里用到的是skip-gram或CBOW方法,具体细节可以去查查相关资料,这两种方法大致上就是把意思相近的词映射到词空间中相近的位置。语料库te... 来自: lwn556u5ut的博客 [code="python"]frompysparkimportSparkConf,SparkContext,SQLContextfrompyspark.sqlimportSpar... 来自: 一个今天胜过两个明天 centos7,python2.7,gensim(0.13.1)语料:http://211.136.8.18/files/10940000015A9F94/mattmahoney.net/dc/tex... 来自: 张大鹏(朋)的专栏 word2vec介绍word2vec官网:https://code.google.com/p/word2vec/word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间的距... 来自: 竹聿Simon的专栏 这里的word2vec程序是miklov他们的原生的接口、一般来说建议使用$pipinstallword2vec会遇到('Compilationcommand:','gcc/tmp/pip-build... 来自: MinCong Luo的博客 一、word2vec的原理就不介绍原理可以参考码农场介绍:http://www.hankcs.com/nlp/word-vector-representations-word2vec.html二、ge... 来自: 风起云扬的博客 (1)安装gensimpipinstall --upgradesetuptoolspipinstallgensimsudopipinstallpattern(2)使用上次训练好的词向量vectors.... 来自: GOODDEEP 一、安装AnacondaAnaconda下载因为镜像在国外,最好不要晚上下,一大早下比较好,如果是迅雷会员就无所谓了。我下的是Anaconda3-5.0.1-Windows-x86_64.exe,给一... 来自: xuyaoqiaoyaoge的博客 1.ubuntu下安装gensimreferto:ubuntu14.04安装gensim为了保证安装成功,首先升级一下easy_install工具。sudoeasy_install-Usetuptoo... 来自: 大学之道,在明明德 fromgensim.modelsimportWord2Vecfromgensim.models.word2vecimportLineSentencedefgen_embeddings(in_file... 来自: tsf的博客 https://github.com/danielfrg/word2vecInstallationIrecommendthe Anacondapythondistributionpipinstallw... 来自: 人工智能 前言相关内容链接:第一节:GoogleWord2vec学习手札昨天好不容易试用了一下Google自己提供的Word2Vector的源代码,花了好长时间训练数据,结果发现似乎Python并不能直接使用,... 来自: MebiuW的专栏 准备工作当我们下载了anaconda后,可以在命令窗口通过命令condainstallgensim安装gensimgensim介绍gensim是一款强大的自然语言处理工具,里面包括N多常见模型,我们体... 来自: LikeTech 本文参考了一些网上的安装和使用资料,由于没有一篇完整的解决了我的文本,所以并对其进行整合并成功的在我机器中运行(win10python3.5.2 64bit),如有侵犯那位大大的知识,烦请告知,谢谢。... 来自: liudanaihuyan的专栏 词向量(word2vec)原始的代码是C写的,Python也有对应的版本,被集成在一个非常牛逼的框架gensim中。我在自己的开源语义网络项目graph-mind(其实是我自己写的小玩具)中使用了这些... 来自: xiaopihaierletian的博客 http://blog.csdn.net/u011239443/article/details/517286591从数据中抽取合适的特征1.1TF-IDF短语加权表示TF-IDF公式的含义是:在一个文... 来自: Soul Joy Hub 摘要:本文主要描述了一种文章向量(doc2vec)表示及其训练的相关内容,并列出相关例子。两位大牛QuocLe和TomasMikolov(搞出Word2vec的家伙)在2014年的《Distribut... 来自: lenbow的博客 word2vec是一个将单词转换成向量形式的工具。可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。一、理论概述(主要来源于http://licst... 来自: zhoubl668的专栏:远帆,梦之帆! 原文发表于:http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6906802本文仅是对上文的学习和复现Word2vec可以将词语转换为高维... 来自: liugallup的专栏 基于word2vec的中文词向量训练使用katex解析的数学公式,csdn好像不支持word2vec来源Google开源可以在百万数量级的词典和上亿的数据集上进行高效地训练该工具得到的训练结果–词向量... 来自: MyHerux的博客 作者:crystalajj链接:https://www.zhihu.com/question/44832436/answer/266068967来源:知乎著作权归作者所有。商业转载请联系作者获得授权,... 来自: __kingzone__的专栏 Word2vec训练中文词向量 将所有的语料读入到列表中,把每一句已经分好词的句子作为列表中的一个元素,类似:[[‘i’,’am’,’a’,’girl’],[‘he’,’is’,’a’,’boy’]]... 来自: 摆渡者 词向量作为文本的基本结构——词的模型。良好的词向量可以达到语义相近的词在词向量空间里聚集在一起,这对后续的文本分类,文本聚类等等操作提供了便利,这里简单介绍词向量的训练,主要是记录学习模型和词向量的保... 来自: lilong117194的博客 jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn... 来自: Websites 扫二维码关注,获取更多技术分享nnn 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,... 来自: Marswill 本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇... 来自: Lynn_Blog 最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!nnDocker的三大核心概念:镜像、容器、仓库n镜像:类似虚拟机的镜像、用俗话说就是安装文件。n容器:类似一个轻量... 来自: 我走小路的博客 方法一:步骤:进入pycharm 安装路径下的bin目录下,输入如下命令:./pycharm.sh方法二:设置桌面快捷方式:参考博客:http://blog.csdn.net/tmosk/articl... 来自: yimixgg的博客 一、pandas概述pandas :pannel data analysis(面板数据分析)。pandas是基于numpy构建的,为时间序列分析提供了很好的支持。pandas中有两个主要的数据结构,一... 来自: cxmscb的博客