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 文本提取的主要内容,如果未能解决你的问题,请参考以下文章

从 NodeJS、NLP 中的文本中提取人名

OCR+NLP 提取信息并分析,这个开源项目火了!

OCR+NLP 提取信息并分析,这个开源项目火了!

Python之精心整理的二十五个文本提取及NLP相关的处理案例

文本分类 + NLP + 数据挖掘 + 数据科学:我应该在应用 tf-idf 之前进行停止词删除和词干提取吗?

NLP系列_用可视化解构BERT,从上亿参数中提取出的6种直观模式