使用 NLP/ML 进行抽象分类

Posted

技术标签:

【中文标题】使用 NLP/ML 进行抽象分类【英文标题】:Abstract Classification using NLP/ML 【发布时间】:2018-07-08 21:52:47 【问题描述】:

我需要使用摘要和支持同义词自动生成出版物的类别。我有 800-900 篇文章的分类数据,可用于训练。此分类数据由制药专家通过阅读非结构化出版物生成。

现有出版物的现有分类类别如下:

    药物:一些药物,一些其他药物。 疾病:某些疾病。 作者:一些作者等等..

这些类别目前由人类专家生成。我探索了 node.js 中的 Natural 库和 Java 中的 lingpipe。它有分类器,但我不知道什么是最有效的训练方法,所以我得到了 90% 的准确率。

以下是我心中的方法:

    我可以一个一个地传递整个出版物的摘要,并告诉它它的类别,如下所示?

    var natural = require('natural');
    var classifier = new natural.BayesClassifier();
    classifier.addDocument('This article is for parcetamol written by Techgyani. Article was written in 2012', 'year:2012');
    classifier.addDocument('This article is for parcetamol written by Techgyani. Article was written in 2012', 'author:techgyani');
    classifier.train();
    

    我可以一句一句地传递它,并告诉它它的类别是什么,这将是手动和耗时的过程。这样当我传递整个摘要时,它会为我自动生成一组类别,如下所示:

    var natural = require('natural');
    var classifier = new natural.BayesClassifier();
    classifier.addDocument('This article is for parcetamol written by Techgyani', 'drug:Paracetamol');
    classifier.addDocument('This article is for parcetamol written by Techgyani', 'author:techgyani');
    classifier.addDocument('Article was written in 2012', 'year:2012');
    classifier.train();
    

    我还可以从出版物中提取标记并自行搜索我的数据库和图形类别,而无需使用任何 NLP/ML 库。

根据您的经验,解决此问题的最有效方法是什么?我愿意接受任何语言的解决方案,但我更喜欢 javascript,因为现有堆栈使用 Javascript。

【问题讨论】:

【参考方案1】:

我建议在朴素贝叶斯分类器中使用最常用词或词频作为特征。

无需单独标记句子。我希望文档级别的准确性合理,尽管这将取决于您经过训练和分类的文档的性质。

下面关于 Python 实现的精彩讨论

Implementing Bag-of-Words Naive-Bayes classifier in NLTK

【讨论】:

【参考方案2】:

根据我的说法,您的第二个解决方案会像魅力一样起作用。您需要训练分类器才能完成工作。

您需要传递classifier.train(data, labels);。我知道这将是一项手动工作,但几乎不需要一些时间来训练你的分类器。

一旦经过训练,你就可以很好地通过你的一个句子并自己查看输出

【讨论】:

【参考方案3】:

在投资培训之前,您应该先探索现成的命名实体识别模型。 Spacy 是用 Python 编写的,但有一个 javascript 绑定。自然使用朴素贝叶斯和逻辑回归的分类器,其性能不如 Spacy 之类的神经网络库。我怀疑对于尚未在训练集中看到药物、疾病或作者姓名的新病例,自然不会很好地工作。

【讨论】:

以上是关于使用 NLP/ML 进行抽象分类的主要内容,如果未能解决你的问题,请参考以下文章

软件架构的定义与分类

将 pandas 数据帧传递给 FastAPI 用于 NLP ML

java io 流分类表

23种GoF设计模式的分类

7I/O流

中间件另一类分类方式