我需要使用零个或多个类别/标签(金融,科技等5个标签)对网站文本进行分类。我的问题是处理不是这些标签之一的文本。
我尝试了ML库(maxent,naive bayes),但它们与其中一个标签错误地匹配“其他”文本。如何训练模型来处理“其他”文本? “其他”标签非常广泛,无法选择具有代表性的样本。
由于我没有ML背景并且没有太多时间来构建一个好的训练集,我更喜欢一个更简单的方法,如术语频率计数,使用预定义的术语列表来匹配每个标签。但是对于计数,我如何确定相关性分数,即文本是否实际上是该标签?我没有语料库,也不能使用tf-idf等。
答案 0 :(得分:1)
另一个想法是,对于具有softmax输出函数的用户神经网络,softmax将为您提供每个类的概率,当网络对一个类非常有信心时,会给它一个高概率,并降低其他类的概率,但如果它不安全,概率之间的差异会很小,而且它们都不会很高,如果你定义一个阈值如下:如果每个类的概率小于70%,预测“其他”
答案 1 :(得分:0)
呼!经典ML算法不同时结合多分类和“输入/输出”。也许你可以做的就是训练五个模型,每个类别一个,并进行一次对抗世界的训练。然后使用超级模型寻找声称输入的五个中的任何一个;如果没有人声称它,那就是“其他”。
另一种可能性是颠倒评估顺序:在整个数据集上训练一个模型作为二元分类器。在这五个中训练第二个作为5级SVM(例如)。第一个模型找到“其他”;其他一切都传递给了第二个。
答案 2 :(得分:0)
创建直方图怎么样?你可以使用一个单词的方法,使用重要指标,例如技术与金融。因此,您可以尝试通过分析某些网站的标签和文章来识别这些指标,或者只是浏览网页以获取此类指标:
http://finance.yahoo.com/news/most-common-words-tech-finance-205911943.html
我们假设您的输入因子X
具有n
维度,其中n
代表指标数量。例如Xi
然后保存单词"资产"出现的计数。和Xi+k
"大数据"在目前的文章中。
不是定义5个标签,而是定义6.您的最后一个类别将是" catch-all"类别。这实际上是你的零匹配类别。
如果您必须匹配零个或多个类别,请训练一个模型,该模型返回每个标签/类的概率分数(例如Luis Leal建议的神经网络)。您可以按照该分数对输出进行评分,并说每个分数高于某个阈值t
的课程都是匹配类别。
答案 3 :(得分:0)
试试这个NBayes implementation 用于识别"其他"类别,不要打扰。只需训练您所需的类别,清楚地识别它们,并在分类器中引入阈值 如果标签的值未超过阈值,则分类器会添加"其他"标签
全部在训练数据中。
答案 4 :(得分:0)
AWS Elasticsearch percolate是理想的,但由于单独渗透文档的HTTP开销,我们无法使用它。
Classify4J似乎是满足我们需求的最佳解决方案,因为该模型看起来很容易训练,并且不需要训练不匹配。 http://classifier4j.sourceforge.net/usage.html