NLP & ML 文本提取
Posted
技术标签:
【中文标题】NLP & ML 文本提取【英文标题】:NLP & ML Text Extraction 【发布时间】:2017-06-21 07:53:47 【问题描述】:我有一些用户聊天数据,分类成各种类别,问题是算法生成的类别很多,请看下面的例子:
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
如您所见,类别(本质上是短语)是从文本本身中提取的, 根据我的数据,有 10,000 条消息,大约有 4,500 个不同的类别。 在这种情况下,是否有任何合适的算法可以为我提供良好的预测准确性。
【问题讨论】:
都是这样的例子吗? (即:类别大多是“提取自”或包含在消息中)。 是的,它们是从文本本身中提取的,有什么特定的算法吗? 【参考方案1】:嗯,我习惯性地将 OpenNLP 的 DocumentCategorizer 用于此类任务,但我认为 StanfordNLP 核心可以做一些类似的事情。 OpenNLP 为此使用最大熵,但有很多方法可以做到这一点。
首先对独特标签的数量进行一些思考。基本上每个类只有几个样本,这通常是一件坏事:如果由于重叠和/或欠拟合而尝试按照您暗示的方式进行分类,那么无论它是什么,您的分类器都会给出糟糕的结果。所以这就是我之前在类似情况下所做的:将概念分成不同的主题分类器,然后为每个分类器组合最好的分数。例如,根据您上面写的内容,您可以使用一种分类模型检测 OUTSIDE 或 INSIDE,然后在另一种分类模型中检测 WATCHING 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 中这样做的话,请告诉我
【讨论】:
以上是关于NLP & ML 文本提取的主要内容,如果未能解决你的问题,请参考以下文章
Python之精心整理的二十五个文本提取及NLP相关的处理案例