Python 如何确定句子中是否提到了主题?-nlp

Python 如何确定句子中是否提到了主题?-nlp,python,nlp,spacy,Python,Nlp,Spacy,我是NLP的新手,我正在为我的问题寻找最合适的解决方案 在简化中,我想从标题创建一个“标记列表” 标记是预定义的,我可以很容易地为培训示例添加标签 简单示例: # pip install transformers==3.1.0 # pip install in terminal from transformers import pipeline classifier = pipeline("zero-shot-classification") sequence = &q

我是NLP的新手,我正在为我的问题寻找最合适的解决方案

在简化中,我想从标题创建一个“标记列表”

标记是预定义的,我可以很容易地为培训示例添加标签

简单示例:

# pip install transformers==3.1.0  # pip install in terminal
from transformers import pipeline

classifier = pipeline("zero-shot-classification")

sequence = "The biggest elephant in the world"
candidate_labels = ["animals", "fruits", "diseases"]

classifier(sequence, candidate_labels)

# output: {'sequence': 'The biggest elephant in the world', 
# 'labels': ['animals', 'diseases', 'fruits'], 
# 'scores': [0.9948041439056396, 0.0035726651549339294, 0.0016232384368777275]}
格式“示例性句子”-“示例性标签列表”

  • “世界上最大的大象”——[动物]
  • “我喜欢芒果和大猩猩”-[动物,水果]
  • “我有三只猫和四只狗”——[动物]
  • “我有糖尿病”——[疾病]
  • “我没有糖尿病,但我有一只猫”-[动物]
我不需要标签的特定值

e、 g.
tags={Animal:Elephant}
tags=[Animals]

我可以找到提取实体的唯一解决方案。我只列出了一个matcher的建筑列表,然后尝试了所有这些,有什么聪明和高效的方法可以做到这一点吗


感谢您提供的任何建议、提示和资源,祝您度过愉快的一天:)

您想做的事叫做多标签分类。您的“标签”是标签,每个文档可以有多个标签

一个典型的实现方法是为每个标签训练一个二进制分类器,然后考虑在预测值高于阈值的标签是正的。


spaCy支持多标签分类。它在中没有被调用,但您可以添加比POS和NEG更多的类,并且它应该能够学习它们。

您可以构建自己的自定义分类器(如polm23所建议的),但鉴于您是NLP新手,这可能太复杂和耗时

一种激动人心的新方法是所谓的“零炮分类”
。这基本上意味着您采用了一个通用的机器学习模型,该模型已由其他人以非常通用的方式预先训练用于文本分类,您只需将其应用于您的特定用例,而无需对其进行训练/微调。Transformers库有一个非常易于使用的实现。下面是一个交互式示例,以查看它在没有编码的情况下的功能。下面是一个示例,演示如何在Python中使用它。您可以从笔记本中复制粘贴代码

具体应用到您的用例中,这看起来像这样:

# pip install transformers==3.1.0  # pip install in terminal
from transformers import pipeline

classifier = pipeline("zero-shot-classification")

sequence = "The biggest elephant in the world"
candidate_labels = ["animals", "fruits", "diseases"]

classifier(sequence, candidate_labels)

# output: {'sequence': 'The biggest elephant in the world', 
# 'labels': ['animals', 'diseases', 'fruits'], 
# 'scores': [0.9948041439056396, 0.0035726651549339294, 0.0016232384368777275]}

如果您希望该算法将一个以上的标签添加到文本中,您可以激活多标签分类,它会考虑每个文本多于一个标签。

sequence = "I like mangos and gorillas"
candidate_labels = ["animals", "fruits", "diseases"]

classifier(sequence, candidate_labels, multi_class=True)

# output: {'sequence': 'I like mangos and gorillas', 
# 'labels': ['animals', 'fruits', 'diseases'], 
# 'scores': [0.9978452920913696, 0.989518404006958, 0.00015786082076374441]}
=>用你的话来说:它为每个文本“创建一个“标记列表”。i、 e.对于每个预定义的标签,它提供了一个置信度得分,然后您可以为“真实标签列表”选择置信度得分最高的标签

我测试了它,实际输出在上面的代码中。它正确地分类了一切:)

它在其他用例上进行了尝试,但不是100%准确,但是它非常好,因为代码非常简单,您不必自己训练模型。 如果你感兴趣的话,给你