摘要使用NLP / ML进行分类

时间:2018-01-30 05:03:30

标签: javascript machine-learning nlp

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

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

  1. 药物:某些药物,其他一些药物。
  2. 疾病:某种疾病。
  3. 作者:一些作者等......
  4. 这些类别目前由人类专家生成。我在node.js中探索了自然库,在Java中探索了lingpipe。它有分类器,但我无法弄清楚什么是最有效的训练方法,所以我得到90%的准确度。

    以下是我的想法:

    1. 我可以逐一传递完整的出版物摘要并告诉它类似下面的类别?

      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();
      
    2. 我可以逐句传递它的句子并告诉它什么是手动和耗时过程的类别。因此,当我将整个摘要传递给它时,它将为我自动生成一组类别,如下所示:

      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();
      
    3. 我还可以从出版物中提取令牌,并自行搜索我的数据库和图表类别,而无需使用NLP / ML库。

    4. 根据您的经验,这是解决此问题的最有效方法?我打开任何语言的解决方案,但我更喜欢Javascript,因为现有的堆栈是在Javascript中。

3 个答案:

答案 0 :(得分:0)

我建议使用最常用的单词或单词频率作为朴素贝叶斯分类器中的功能。

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

关于Python实现的讨论

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

答案 1 :(得分:0)

据我所知,你的第二个解决方案就像魅力一样。你需要训练你的分类器才能完成你的工作。

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

一旦训练完毕,你可以很好地传递你的一个句子并自己查看输出

答案 2 :(得分:0)

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