如何找出句子中是否提到了主题?nlp

2024-06-02 07:18:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

简单示例:

Format "exemplary sentence" - "exemplary tag list"

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

我不需要标签的特定值

例如tags = { Animal: Elephant }tags = [Animals]一样有用

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

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


Tags: 标记format标题示例列表nlptagtags
2条回答

您要执行的操作称为多标签分类。您的“标签”是标签,每个文档可以有多个标签

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

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

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

一种激动人心的新方法是所谓的“零炮分类”。这基本上意味着您采用了一个通用的机器学习模型,该模型已由其他人以非常通用的方式预先训练用于文本分类,您只需将其应用于您的特定用例,而无需对其进行训练/微调。{a1}Transformers库有一个非常易于使用的实现。下面是一个交互式的web application,看看它在没有编码的情况下做了什么。下面是一个Jupyter notebook演示如何在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]}

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

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%准确,但是它非常好,因为代码非常简单,您不必自己训练模型。 如果你有兴趣,这里有details on the theory

相关问题 更多 >