2017-02-03 37 views
0

我有一些用户聊天数据,并在不同的类别分类,问题是有很多算法生成的类别,请参见下面的例子:NLP&ML文本提取

Message | Category 
I want to play cricket | Play cricket 
I wish to watch cricket | Watch cricket 
I want to play cricket outside | Play cricket outside 

正如你可以看到分类(基本上是短语)是从文本本身提取的, 根据我的数据,有10000条消息,约有4500个独特的类别。 有没有什么合适的算法可以在这种情况下给我很好的预测准确度。

+0

都是这样的例子吗? (即:类别大多是“从中提取”或包含在消息中)。 –

+0

是的,他们是从文本本身提取任何具体的算法呢? –

回答

1

那么,我习惯性地使用OpenNLP的DocumentCategorizer来完成这样的任务,但我认为StanfordNLP核心会做一些类似的事情。 OpenNLP为此使用最大熵,但有很多方法可以做到这一点。

首先对唯一标签的数量进行一些思考。基本上你每个班只有几个样本,这通常是一件坏事:如果你试图按照你所暗示的方式重叠和/或不合适,你的分类器会给出糟糕的结果。所以这就是我之前在类似情况下所做的:将不同的概念分解为不同的专题分类,然后为每个分类汇总最佳分数。例如,根据您上面写的内容,您可能能够使用一种分类模型检测OUTSIDE或INSIDE,然后在另一个分类模型中查看CRICKET与PLAYING CRICKET。然后在运行时,你可以将文本传递给两个分类器,并且为每个分类器组装一个最好的命中。伪代码:

DoccatModel outOrIn = new DoccatModel(modelThatDetectsOutsideOrInside); 
DoccatModel cricketMode = new DoccatModel(modelThatDetectsPlayingOrWatchingCricket) 
String stringToDetectClassOf = "Some dude is playing cricket outside, he sucks"; 
String outOrInCat = outOrIn.classify(stringToDetectClassOf); 
String cricketModeCat = cricketMode .classify(stringToDetectClassOf); 
String best = outOrInCat + " " + cricketModeCat ; 

你明白了我的观点。 还有一些其他的随机想法: - 使用文本索引来探索你回来的数据量,找出如何分解类别。 - 你要几百个例子每个模型

让我知道如果你要我给你从OpenNLP一些代码示例,如果你用Java做这个