我对 NLP 还很陌生,我正在寻找最适合我的问题的解决方案。
简单来说,我想从标题创建一个“标签列表”。
标签是预定义的,我可以轻松标记训练示例。
简单示例:
Format "exemplary sentence" - "exemplary tag list"
- “世界上最大的大象” - [动物]
- “我喜欢芒果和 gorilla ” - [动物、水果]
- “我有 3 只猫和 4 只狗” - [动物]
- “我患有糖尿病” - [疾病]
- “我没有糖尿病,但我有一只猫” - [动物]
我不需要标签的具体值
例如tags = { Animal: Elephant }
与 tags = [Animals]
我可以找到提取实体的唯一解决方案。我只是想出了一个匹配器的构建列表,然后尝试所有这些,有什么聪明且高性能的方法来做到这一点吗?
感谢您的任何建议、提示和资源,祝您有美好的一天:)
最佳答案
您可以构建自己的自定义分类器(按照polm23的建议),但考虑到您是 NLP 新手,这可能太复杂且耗时。
一种令人兴奋的新方法是所谓的“零样本分类”。这基本上意味着您采用其他人以非常通用的方式预先训练的通用机器学习模型进行文本分类,并且您只需将其应用到您的特定用例,而无需训练/微调它。 HuggingFace 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]}
如果您希望算法为文本分配多个标签,您可以激活多标签分类,它会为每个文本考虑多个标签。
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% 准确,但它相当不错,因为代码非常简单,而且您不必自己训练模型。 这里是details on the theory ,如果您有兴趣。
关于python - 如何判断句子中是否提到了主题? -自然语言处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64217700/