AI数据模型,数据建模与可视化

  AI数据模型,数据建模与可视化

  本文利用gensim进行LDA主题模型实验。第一部分基于上面提到的维基资料,第二部分基于搜狗新闻资料。

  基于wiki数据的LDA实验

  在上一篇文章中,我们得到了与wiki纯文本的单词分开编写的词汇wiki.zh.seg.utf.txt,可以用于停顿后的LDA实验。

  importcodecsfromgensim . modelsimportldamodelfromgensim . corporaimportdictionary

  火车=[]

  stop words=codecs . open( stop words . txt , r ,encoding=utf8 )。阅读行) )

  stop words=[w . strip(]for winstop words

  FP=codecs . open(wiki . zh . seg . utf . txt 、r 、encoding= utf8 )for line infp:

  line=line.split(

  train . append([wforwinlineifwnotinstopwords]

  字典=语料库.字典(训练)

  corpus=[dictionary . doc 2 bow(text)for text intra in]

  LDA=LDAmodel(Corpus=Corpus,id2word=dictionary,num_topics=100))))))))))).

  Gensim还提供了脚本make_wiki,用于直接提取wiki压缩包,保存为稀疏矩阵。您可以在bash中运行以下命令来了解如何使用它:

  python-mgen sim . scripts . make _ wiki

  #用法:make _ wiki . py wiki _ XML _ dump output _ prefix[词汇_大小]

  python-mgen sim . scripts . make _ wiki zhiki-最新-页面-文章。XML.bz2zh wiki

  执行起来需要很长时间。详情请访问gensim官方网站。因此,mm后缀表示以矩阵市场格式保存的稀疏矩阵。

  -rw-r-r-1陈静金发GJINData 172M七月一日12336010 zh Wiki _ bow . mm-RW-R-R-1陈静金发GJINData 1.37M七月一日12336010zhwh静金发GJINData 333M七月一日12 Wiki _ tfidf.mm-rw-r-r-1陈静金发gjindata 1.3m七月一日123333 m

  用tfidf.mm和wordids.txt训练LDA模型

  #-*-编码:utf-8-*-

  来自gensim importcorpora,模型#词汇导入

  id2 word=corpora . dictionary . load _ from _ text( zh wiki _ word ids . txt ))))))))))))))).

  MM=corporate . MM Corpus(zh wiki _ tfi df . MM)模特培训,时间28m

  LDA=模特。LDA模型。LDA模型(corpus=mm,id2word=id2word,num_topics=100)))).

  模型结果

  在训练过程中,您将指定参数num_topics=100,即训练100个主题。Print_topics(和print _ topics)允许您查看每个主题下的单词分布,以及在save/load中保存和加载模型。

  #打印前20个主题的单词分布

  LDA.print_topics(20) #打印id为20的主题的单词分布

  LDA.print_topic(#保存/加载模型

  LDA.save(zhwiki_LDA.model)).

  LDA=模特。LDA模型。LDA model.load (zh wiki _ LDA.model))。

  对于新文档,将其转换为词袋可以预测主题。

  模式的差异主要在于话题数量的设置和词汇本身。Wiki的词汇是全局词汇,话题分布不明显,这里用的词汇不能停词,导致效果不好。

  test _ doc=list(jieba . cut)test _ doc)#单独写一个新文档。

  doc _ bow=id 2 word . doc 2 bow(test _ doc)#将文档转换为bow

  doc_lda=lda[doc_

  Bow] #获取新文档的主题分布#输出新文档的主题分布。

  print doc _ LDA for topic indoc _ LDA:print % s t % f n %(LDA . print _ topic(topic[0]),topic[1])

  2.基于搜狗新闻语料库的LDA实验

  搜狗实验室提供2012年6-7月期间多个新闻网站的多种中文素材、全网新闻数据(SogouCA)、国内、国际、体育、社交、娱乐等18个频道的新闻数据下载,提供网址和文字信息。

  对于数据转码,由于数据是Ascii文件,容易出现乱码。iconv命令用于将其转换为utf8。因为XML文件在处理时需要顶级标记,所以这里使用sed命令将其插入到文件的第一行之前和最后一行之后。

  #!/沉默的金毛猎犬/巴什

  #将文件夹中的Ascii文件转换为utf8

  #用法:/iconv_encode.xdddtn outdir

  # @陈无声金毛gjin2016-07-01

  functionconv_encode() {

  all=` ls $ { indir } ` for ffile in $ { all } doi file= $ { indir } $ { ffile } of file= $ { outdir } $ { ffile }

  echo iconv $ifile到$ ofile iconv-c-f GB 2312-t utf8 $ ifile $ ofile

  sed -i 1i $ofile

  sed -i $a $ofile

  done } if[$ #-ne 2];然后

  “echo”的用法:/iconv _ encode . sh indir outdir exit 1

  文件目录=$ 1输出目录=$2

  如果[!-d $ outdir];然后

  回显" mkdir ${outdir} "

  mkdir$outdirfi

  时间卷积神经编码

  iconv_encode.sh

  总共128个文件,存放在搜狗_数据/文件夹下,使用iconv_encode.sh进行处理,新文件保存在在外文件夹,结果如下:

  $ ./iconv_encode.sh搜狗_data/out/

  mkdir输出/iconv搜狗_data/news.allsites.010806.txt至out/news.allsites.010806.txt

  编码转换搜狗_data/news.allsites.020806.txt至out/news.allsites.020806.txt

  编码转换搜狗_data/news.allsites.030806.txt到out/news.allsites.030806.txt

  编码转换搜狗_data/news.allsites.040806.txt到out/news.allsites.040806.txt

  .

  real 0m27.255s

  用户0m6.720s

  sys 0m8.924s

  接下来需要对可扩展标记语言格式的数据进行预处理,这里使用lxml.etree,lxm是计算机编程语言的一个html/xml解析并建立数字正射影像图的库,比大蟒自带的可扩展置标语言解析快。

  #-*-编码:utf-8 -*-

  来自lxml导入树的importsimportcodecsimportlogging

  伐木。基本配置(format= %(ASC time)s:%(级别名)s:%(消息)s ,级别=日志记录.信息)""搜狗新闻语料预处理

  @陈默默的金毛gjin 2016-07-01 train=[]# huge _ tree=True,防止文件过大时出错XMLSyntaxError:内部错误:巨大的输入查找

  parser=etree .XMLParser(encoding=utf8 ,huge _ tree=True)de load _ data(dirname):全局火车

  文件=操作系统。文件的列表目录(目录名):

  logging.info(处理fi)

  text=codecs.open(dirname fi, r ,encoding=utf8 ).read()#xml自身问题,存在符号容易报错,用代替

  text=text.replace( , )#解析xml,提取新闻标题及内容

  root=etree.fromstring(text,parser=parser)

  docs=root.findall(doc )用于文档文档:

  tmp=

  为了印度支那。get children():如果池。tag==内容标题或chi.tag==content:if chi.text!=无和chi.text!=:

  tmp=chi.textif tmp!=:

  训练.追加

  预处理程序。巴拉圭

  得到火车训练语料后,分词并去停止词后,便可以进行皱胃向左移实验

  来自gensim . corpora importdictionary from

  停止字=编解码器。开(停字。txt , r ,编码=utf8 ).读取行()

  停止字=[w . strip()for w in stop words]

  生产线内部的train _ set=[]:

  line=list(jieba.cut(line))

  火车_集合。追加([w for w in line if w not instop words])#构建训练语料

  字典=字典(火车_集合)

  语料库=【词典。doc 2 bow(text)for text intrain _ set]# LDA模型训练

  lda=LdaModel(corpus=corpus,id2word=dictionary,num_topics=20)

  lda.print_topics(20)

  实验结果:训练时间久,可以使用ldamulticore,整体效果还不错,可以看出08年新闻主题主要是奥运,地震,经济等

  得到的皱胃向左移模型可用于主题预测,给定新的文档预测文档主题分布,可用于分类。训练文档中每个词会分配一个主题,有纸就将这种主题信息做主题词嵌入,一定程度上解决一词多义问题。

  参考

  2.搜狗:全网新闻数据

AI数据模型,数据建模与可视化