为了账号安全,请及时绑定邮箱和手机立即绑定

如何判断句子中是否提到了主题?-自然语言处理

如何判断句子中是否提到了主题?-自然语言处理

慕桂英546537 2023-10-11 16:11:44
我对 NLP 还很陌生,我正在寻找最适合我的问题的解决方案。为了简单起见,我想从标题创建一个“标签列表”。标签是预定义的,我可以轻松标记训练示例。简单的例子:格式“示例句子”-“示例标签列表”“世界上最大的大象”——【动物】“我喜欢芒果和大猩猩” - [动物、水果]“我有 3 只猫和 4 只狗” - [动物]“我患有糖尿病” - [疾病]“我没有糖尿病,但我有一只猫” - [动物]我不需要标签的具体值例如tags = { Animal: Elephant }和 一样有用tags = [Animals]我可以找到提取实体的唯一解决方案。我只想出了一个匹配器的构建列表,然后尝试所有这些,有什么聪明且高性能的方法来做到这一点吗?感谢您的任何建议、提示和资源,祝您有美好的一天:)
查看完整描述

2 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

您可以构建自己的自定义分类器(按照 polm23 的建议),但考虑到您是 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]}

如果您希望算法为文本分配多个标签,您可以激活多标签分类,它会为每个文本考虑多个标签。


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]}

=>用你的话来说:它为每个文本“创建一个‘标签列表’”。即对于每个预定义标签,它提供一个置信度分数,然后您可以为“真实标签列表”选择具有最高置信度分数的标签。

我测试了它,实际输出在上面的代码中。它对所有内容进行了正确分类:)

它在其他用例上进行了尝试,虽然不是 100% 准确,但它相当不错,因为代码非常简单,而且您不必自己训练模型。


查看完整回答
反对 回复 2023-10-11
?
PIPIONE

TA贡献1829条经验 获得超9个赞

你要做的就是所谓的多标签分类。您的“标签”是labels,每个文档可以有多个标签。

实现此目的的典型方法是为每个标签训练二元分类器,然后将预测中高于阈值的标签视为阳性。

spaCy 支持多标签分类。


查看完整回答
反对 回复 2023-10-11
  • 2 回答
  • 0 关注
  • 61 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信