Python NLTK最大熵分类器原始分数
这是我关于stackoverflow的第一个问题,请耐心听我说 我正在做一些语料库建设,特别是试图组成一个高棉语/英语平行句语料库。我正在使用一些手动配对的句子来训练一个最大熵分类器,它将从我的平行文档语料库中选择更多的平行句子对 我的问题是,用于训练分类器的人工标注训练数据很少。因此,它不是一个很好的分类器。所以,我的老师建议我看一下MaxEnt分类器的原始分数,看看是否有一些分数阈值,超过这个阈值,人类的判断会发现被归类为翻译的句子对实际上是彼此的翻译 然而,我使用的是NLTK的MaxEnt分类器,我找不到一个函数,该函数将为我提供分类器用于确定是或否的原始分数 NLTK的MaxEnt分类器是否具有此功能,或者是否无法找到分类器的原始分数?是否有一个更好的MaxEnt分类器包,可以为您提供我应该使用的原始分数 提前感谢您的帮助和建议 给出概率分数 如果您正在寻找替代的MaxEnt分类器,那么scikit learn有两个实现,这两个实现都可以封装在NLTK中。scikit learn称之为MaxEnt logistic回归,这是NLP社区之外更常见的术语 我可能有偏见,因为我是一名scikit学习贡献者,我编写了SklearnClassifier,但是SciPy人现在也推荐scikit学习,而不是他们自己不推荐的SciPy.maxentropy包,MaxentClassifier就是基于这个包的。给出了概率分数 如果您正在寻找替代的MaxEnt分类器,那么scikit learn有两个实现,这两个实现都可以封装在NLTK中。scikit learn称之为MaxEnt logistic回归,这是NLP社区之外更常见的术语Python NLTK最大熵分类器原始分数,python,machine-learning,nltk,classification,Python,Machine Learning,Nltk,Classification,这是我关于stackoverflow的第一个问题,请耐心听我说 我正在做一些语料库建设,特别是试图组成一个高棉语/英语平行句语料库。我正在使用一些手动配对的句子来训练一个最大熵分类器,它将从我的平行文档语料库中选择更多的平行句子对 我的问题是,用于训练分类器的人工标注训练数据很少。因此,它不是一个很好的分类器。所以,我的老师建议我看一下MaxEnt分类器的原始分数,看看是否有一些分数阈值,超过这个阈值,人类的判断会发现被归类为翻译的句子对实际上是彼此的翻译 然而,我使用的是NLTK的MaxEnt
我可能有偏见,因为我是scikit learn的撰稿人,我写了SklearnClassifier,但SciPy的人现在也推荐scikit learn,而不是他们自己不推荐的SciPy.maxentropy包,MaxentClassifier就是基于这个包的。你可能有兴趣阅读我最近的博客: 这是关于理解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
只要说出你喜欢的任何一句话,比如“我爱苹果产品”。它还将报告MaxEnt分类器为何选择该命名实体的解释。它还将报告可能被选中的其他标签的一些概率
NLTK的开发人员提供了一个.explain方法,这正是该函数所使用的。您可能有兴趣阅读我最近的一篇博客: 这是关于理解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
只要说出你喜欢的任何一句话,比如“我爱苹果产品”。它还将报告MaxEnt分类器为何选择该命名实体的解释。它还将报告可能被选中的其他标签的一些概率
NLTK的开发人员提供了一个.explain方法,这正是该函数所使用的