如何使用像 fasttext 这样的 NLP 获取文本的一般类别?

How to get general categories for text using NLP like fasttext?

我正在开发一个应用程序,我想使用自然语言处理从文本中推断出一般类别。我是自然语言处理 (NLP) 的新手。

Google 自然语言 API 使用一组合理的高级内容类别(例如“/艺术与娱乐”、“/爱好与休闲”等)来做到这一点:

https://cloud.google.com/natural-language/docs/categories

我希望使用开源来做到这一点,并希望使用一些通用类别,例如维基百科高级分类:

https://en.wikipedia.org/wiki/Category:Main_topic_classifications

fasttext 似乎是个不错的选择,但我正在努力寻找用于训练的语料库。我确实看到了维基百科词向量文件,并且可以下载完整的维基百科,但我没有找到一种简单的方法来获取带有 fasttext 类别标签的文章。

是否有一些开源工具可以识别给定一些文本的高级一般类别——或者是否有我可以使用的训练数据集?

我认为您要寻找的是一个已经免费训练的模型,该模型具有您可以对文本进行分类的一般类别。但这很难找到,因为类别的性质,通常是像 Google Cloud Natural Language API.

这样的服务

此时我认为你有两个选择:

  1. 使用 Google Cloud Natural Language API 之类的服务,该服务可为您提供已使用数百万个数据点训练的模型,您可以将其集成到你的申请,只需要考虑pricing

  2. 您首先需要收集一个所需的数据集,其中包含您要分类的所有文本、这些文本所在的类别(或操作数据集以根据文本添加所需的类别),然后您可以使用 SpaCy or NLTK 等库来操作数据并训练您的文本分类模型。

我建议使用“zero-shot 分类”管道 HuggingFace Transformers library. It's very easy to use and has decent accuracy given that you don't need to train anything yourself. Here is an interactive web application to see what it does without coding. Here is a Jupyter notebook,它演示了如何在 Python 中使用它。您可以 copy-paste 笔记本中的代码。

这看起来像这样:

# 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,如果你有兴趣的话。