问题描述
我正在开发一个应用程序,我想使用自然语言处理从文本中推断出一般类别。我是自然语言处理(NLP)的新手。
Google自然语言API使用合理的高级内容类别集(例如“ /艺术与娱乐”,“ /爱好与休闲”等)来完成此操作:
https://cloud.google.com/natural-language/docs/categories
我希望使用开放源代码进行此操作,并希望使用一些常规类别,例如Wikipedia高级分类:
https://en.wikipedia.org/wiki/Category:Main_topic_classifications
fasttext似乎是一个不错的选择,但我一直在努力寻找用于训练的语料库。我确实看到了Wikipedia单词矢量文件,并且可以下载完整的Wikipedia,但是我看不到一种简单的方法来获取带有Fasttext类别标记的文章。
是否有一些开源工具可以在给出某些文本的情况下识别高级通用类别?或者我可以使用训练数据集吗?
解决方法
我认为您想要找到的是一个已经免费训练的模型,该模型具有可对文本进行分类的常规类别。但这很难找到,因为类别的性质通常是Google Cloud Natural Language API之类的服务。
在这一点上,我认为您有两种选择:
-
使用Google Cloud Natural Language API之类的服务,该服务为您提供已经训练有数百万个数据点的模型,您可以将其集成到您的应用程序中,只需要考虑{{3} }
-
您首先需要收集所需的数据集,其中包含要分类的所有文本,这些文本所驻留的类别(或操纵数据集以根据文本添加所需的类别),然后可以使用pricing或SpaCy之类的库来处理数据并训练模型以进行文本分类。
我建议在HuggingFace变形金刚库中使用“零镜头分类”管道。鉴于您不需要自己训练任何东西,它非常易于使用并且具有不错的准确性。这是一个交互式web application,用于查看无需编码即可执行的操作。这是Jupyter notebook,演示了如何在Python中使用它。您只需从笔记本中复制粘贴代码即可。
这看起来像这样:
# pip install transformers==3.4.0 # pip install in terminal
from transformers import pipeline
classifier = pipeline("zero-shot-classification")
sequence = "I like just watching TV during the night"
candidate_labels = ["arts","entertainment","politics","economy","cooking"]
classifier(sequence,candidate_labels)
# output:
'labels': ['entertainment','economy','politics','arts','cooking'],'scores': [0.939170241355896,0.13490302860736847,0.011731419712305069,0.0025395064149051905,0.00018942927999887615]
如果有兴趣,这里是details on the theory。