【问题标题】:NLTK Maximum Entropy Classifier Raw ScoreNLTK 最大熵分类器原始分数
【发布时间】:2012-09-05 12:39:42
【问题描述】:

这是我关于stackoverflow的第一个问题,请多多包涵。

我正在做一些语料库建设,特别是尝试编写高棉语/英语平行句子语料库。我正在使用一些手动配对的句子来训练最大熵分类器,它将从我的并行文档语料库中选择更多的并行句子对。

我的问题是我几乎没有人工注释的训练数据来训练分类器。因此,它不是一个很好的分类器。因此,我的老师建议我查看 MaxEnt 分类器的原始分数,看看是否存在某个分数阈值,高于该阈值人类判断会发现分类为翻译的句子对实际上是彼此的翻译。

但是,我使用的是 NLTK 的 MaxEnt 分类器,我找不到一个函数可以为我提供分类器用来决定是或否的原始分数。

NLTK 的 MaxEnt 分类器有这个功能,还是没有办法找出分类器的原始分数?是否有具有更好 MaxEnt 分类器的软件包可以为您提供我应该使用的原始分数?

提前感谢您的帮助和建议!

【问题讨论】:

    标签: python machine-learning nltk classification


    【解决方案1】:

    您可能有兴趣阅读我最近的博客:

    http://mattshomepage.com/#/blog/feb2013/liftingthehood

    这是关于了解 nltk.ne_chunk 函数的工作原理。但这里有一些我写的代码,你可以快速复制和粘贴,你可能会觉得有帮助:

    import nltk
    
    # Loads the serialized NEChunkParser object
    chunker = nltk.data.load('chunkers/maxent_ne_chunker/english_ace_multiclass.pickle')
    
    # The MaxEnt classifier
    maxEnt = chunker._tagger.classifier()
    
    def ne_report(sentence, report_all=False):
    
        # Convert the sentence into a tokens with their POS tags
        tokens = nltk.word_tokenize(sentence)
        tokens = nltk.pos_tag(tokens)
    
        tags = []
        for i in range(0, len(tokens)):
            featureset = chunker._tagger.feature_detector(tokens, i, tags)
            tag = chunker._tagger.choose_tag(tokens, i, tags)
            if tag != 'O' or report_all:
                print '\nExplanation on the why the word \'' + tokens[i][0] + '\' was tagged:'
                featureset = chunker._tagger.feature_detector(tokens, i, tags)
                maxEnt.explain(featureset)
            tags.append(tag) 
    

    report_all 标志可让您查看每个 词是如何被挑选的,但您可能只对命名实体的挑选方式感兴趣——它默认设置为 False。

    只需输入您喜欢的任何句子,例如“我喜欢 Apple 产品”。并且它将报告 MaxEnt 分类器选择该命名实体的原因的解释。它还会报告可能被选中的其他标签的一些概率。

    他们的 NLTK 开发人员提供了一个 .explain() 方法,而这正是这个函数所使用的。

    【讨论】:

      【解决方案2】:

      prob_classify 给出概率分数。

      如果您正在寻找替代的 MaxEnt 分类器,那么 scikit-learn 有两个实现(one based on liblinearone using SGD training),它们都可以包装在 NLTK SklearnClassifier 中。 scikit-learn 调用 MaxEnt 逻辑回归,这是 NLP 社区之外更常见的术语。

      (我可能有偏见,因为我是 scikit-learn 的贡献者,我写了 SklearnClassifier,但 SciPy 人现在也推荐 scikit-learn,而不是他们自己弃用的 scipy.maxentropy 包,其中 MaxentClassifier是基于。)

      【讨论】:

        猜你喜欢
        • 2012-04-18
        • 2012-06-11
        • 2011-09-30
        • 2018-08-03
        • 2013-12-25
        • 2016-04-04
        • 2018-04-09
        • 2016-08-26
        • 2016-01-24
        相关资源
        最近更新 更多