使用 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 进行抽象分类的主要内容,如果未能解决你的问题,请参考以下文章