【发布时间】:2012-11-11 09:28:08
【问题描述】:
所以,我正在尝试进行文本多类分类。我一直在阅读很多旧问题和博客文章,但我仍然无法完全理解其中的概念。
我也尝试了这篇博文中的一些示例。 http://www.laurentluce.com/posts/twitter-sentiment-analysis-using-python-and-nltk/
但是当涉及到多类分类时,我不太明白这一点。假设我想将文本分类为多种语言,法语、英语、意大利语和德语。我想使用我认为最容易开始的 NaviesBayes。从我在旧问题中读到的内容来看,最简单的解决方案是使用一对多。因此,每种语言都有自己的模型。所以,我会有法语、英语和意大利语的 3 个模型。然后我会针对每个模型运行一个文本,并检查哪个模型的概率最高。我说的对吗?
但是在编码方面,在上面的示例中,他有这样的推文,这些推文将被分类为正面或负面。
pos_tweets = [('I love this car', 'positive'),
('This view is amazing', 'positive'),
('I feel great this morning', 'positive'),
('I am so excited about tonight\'s concert', 'positive'),
('He is my best friend', 'positive')]
neg_tweets = [('I do not like this car', 'negative'),
('This view is horrible', 'negative'),
('I feel tired this morning', 'negative'),
('I am not looking forward to tonight\'s concert', 'negative'),
('He is my enemy', 'negative')]
它是正面的还是负面的。那么,在为法语训练一个模型时,我应该如何标记文本?会是这样吗?所以这是积极的?
[('Bon jour', 'French'),
'je m'appelle', 'French']
负数是
[('Hello', 'English'),
('My name', 'English')]
但这是否意味着我可以只添加意大利语和德语,并且只有一个模型可以支持 4 种语言?或者我真的不需要负片?
那么,问题是使用 ntlk 进行多类分类的正确方法是什么?
【问题讨论】:
-
正如@larsmans 建议的那样,您不需要一种对所有方法,因为朴素贝叶斯支持开箱即用的多类分类。这种方法在分类器仅支持二进制类的情况下是必需的,例如。 G。
[0,1]。另一个观察结果......您不需要分类器来确定文本中的语言。您可以只使用字符频率来计算语言。 -
@Nejc:你不能真正“计算”语言,你需要估计它。正如我的一位同事发现的那样,字符级 n-gram 上的朴素贝叶斯是一个很好的模型。
-
@larsmans,是的,我同意你的观点,朴素贝叶斯可以确定(我不知道“计算”是如何到达那里的)。但是对于这样一个“简单”的任务来说,它有点复杂。如上所述,可以仅基于字符频率(有时还基于 n-gram 频率)创建更简单的估计器。然后,您将这些频率与每种语言的预定义频率进行比较。
-
@Nejc:当然,但这样一个简单的估计器可能并不总是有效。如果您有偏斜的分布,您可能会从 NB 获得更好的结果,因为它会先考虑一个类。此外,这样,OP 正在重用代码,这通常是一件好事。
-
多类分类通常是指单个条目可以有多个标签的情况。
标签: python machine-learning nltk