hadoop2.5.2 mahout0.10.1 测试文本分类器

    xiaoxiao2025-09-19  611

    说明:本文是对下面这篇文章的一个更新,下面这篇文章环境采用的是mahout0.9 + hadoop2.2.0,本人的是mahout0.10.1+hadoop2.5.2

    --------------------------------------------------------------------------

    mahout0.9 + hadoop2.2 中文文本分类实战(上)链接

    --------------------------------------------------------------------------

    网上大多数的mahout文本分词的例子都是基于hadoop1.x+mahout0.7 或者hadoop2.x+mahout0.9,其中各种坑,着实让人头疼,经过两天的苦战,终于在hadoop2.5.2上运行成功

    1、将测试数据上传到hdfs中(数据来源于炼数成金-Hadoop 应用开发实战案例第17节课程)下载地址

    先看一下数据 camera computer hosehold mobile MP3每个文件夹里有若干文件,每个文件是一篇文章

    上传到hdfs的digital目录中(上传要半个小时左右)

    [python] view plain copy #hadoop fs -mkdir digital  #hadoop fs -put /home/chin/digital/raw/*         digital/  

    2、安装mahout0.10.1

    [html] view plain copy #wget http://mirror.bit.edu.cn/apache/mahout/0.10.1/apache-mahout-distribution-0.10.1.tar.gz  #tar -xzvf apache-mahout-distribution-0.10.1-src.tar.gz -C /opt/  #ln -s /opt/apache-mahout-distribution-0.10.1 /opt/mahout  #cd /opt/mahout/  

    3、向mahout-examples-0.10.1-job.jar添加分词程序

    默认的mahout是不支持中文分词的,这需要我们把分词程序弄到mahout的jar包中。

    这里利用了原作者已经写好的分词程序,先把几个jar包下载下来(mmseg4j-solr-2.2.0.jar mmseg4j-core-1.9.1.jar mmseg4j-analysis-1.9.1.jar)里边包含了作者写好的分词程序,下载链接,

    把mahout目录下的mahout-examples-0.10.1-job.jar文件拷出来,跟上边三个jar包一起,把4个jar包用压缩工具解压,把mmseg4j-solr-2.2.0 mmseg4j-core-1.9.1 mmseg4j-analysis-1.9.1文件夹中除了META-INF,其他都中拷贝到mahout-examples-0.10.1-job,再把mahout-examples-0.10.1-job压缩成mahout-examples-0.10.1-job.zip,把后缀改一下mahout-examples-0.10.1-job.jar,把mahout目录下的mahout-examples-0.10.1-job.jar替换一下

    或者下载我已经替换好了的jar包 下载地址

    4、mahout操作

    4.1 生成了序列化文件(sequential or mapreduce???)

        

    [python] view plain copy #mahout seqdirectory -i digital -o seq          -ow -xm sequential  

    结果在seq文件夹生成了 chunk-0文件

        4.2 将序列化文件分词,变成向量文件

        

    [ruby] view plain copy #mahout seq2sparse -i seq  -o vectors -lnorm -nv -wt tfidf -a com.chenlb.mmseg4j.analysis.SimpleAnalyzer   -a com.chenlb.mmseg4j.analysis.SimpleAnalyzer 是指定自定义的分词程序,如果你的数据是分好词的,需要改成-a org.apache.lucene.analysis.core.WhitespaceAnalyzer,更多请参考这篇文章  连接

    运行完成

        4.3 划分训练集和测试集

        

    [ruby] view plain copy #mahout split -i vectors/tfidf-vectors --trainingOutput train --testOutput test --randomSelectionPct 40 --overwrite --sequenceFiles -xm sequential  

        4.4 训练模型

        

    [ruby] view plain copy #mahout trainnb  -i train -o model         -li labelindex         -ow         -c  

    运行结果

    把labelindex 导出看一下

        4.5 测试模型

        

    [ruby] view plain copy #mahout testnb         -i test        -m model         -l labelindex         -ow         -o testresult         -c  

    好了终于跑出结果来了

    问题:

    我在hadoop2.2.0 + mahout0.9下在进行到4.4步,报了一个错,

    Java.lang.IllegalArgumentException: Wrong numLabels: 0. Must be > 0! 异常,导致进行不下去了 这篇文章,提到“生成的 labelindex 文件是错的“,确实是生成的labelindex的问题,但是没有办法解决,只好舍弃在hadoop2.2.0下测试了

    参考文章:

    mahout0.9 + hadoop2.2 中文文本分类实战(上) http://my.oschina.net/u/1047640/blog/262468 Mahout 中文分类 (1) http://blog.csdn.net/u010422304/article/details/17966281 在hadoop2.0上使用mahout1.0(-SNAPSHOT)提供的lda http://blog.csdn.net/huilixiang/article/details/43053581

    转载请注明原文地址: https://ju.6miu.com/read-1302835.html
    最新回复(0)