使用NLTK生成将推文归类为预定义类别的词典

问题描述 投票:0回答:1

我有一个twitter用户列表(screen_names),我需要将他们归类为7个预定义类别-教育,艺术,体育,商业,政治,汽车,技术,以及他们感兴趣的领域。我在Python中提取了用户的最后100条推文,并在清洁推文后为每个用户创建了一个语料库。

如此处Tweet classification into multiple categories on (Unsupervised data/tweets)所述:我试图在每个类别下生成常用词的词典,以便可以将其用于分类。

是否有一种方法可以自动为一组自定义单词生成这些词典?

例如:

Education - ['book','teacher','student'....]

Automobiles - ['car','auto','expo',....]

然后,我可以使用它们对Twitter数据进行分类:

示例:

**Input :** 
UserA - "students visited share learning experience eye opening 
article important preserve linaugural workshop students teachers 
others know coding like know alphabets vision driving codeindia office 
initiative get students tagging wrong people apologies apologies real 
people work..."
.
.
UserN - <another corpus of cleaned tweets>

**Expected output** : 
UserA - Education (61%)
UserN - Automobiles (43%)
python machine-learning nlp nltk text-classification
1个回答
0
投票

TL; DR

标签是有监督的机器学习所必需的。而且,如果您没有包含Xs(输入文本)和Y(输出标签)的训练数据,则(i)监督学习可能不是您想要的,或者(ii)您必须创建一个包含文本和他们相应的标签。

详细

让我们尝试分解它,看看能反映出您的期望。

我有一个Twitter用户列表(screen_names),我需要将其分类为7个预定义的类别-教育,艺术,体育,商业,政治,汽车,技术

所以您的最终任务是将推文标记为7类。

我在Python中提取了用户的最后100条推文,并在清洁了这些推文后为每个用户创建了一个语料库。

100个数据点绝对不足以执行任何操作,如果您想从头开始训练有监督的机器学习模型。

另一件事是corpus的定义。语料库是文本的主体,因此将任何字符串列表称为语料库是没有错的。但是,进行任何有监督的培训,每个文本都应带有相应的标签

但是我看到有些人在没有标签的情况下进行无监督分类!

现在,这是一个矛盾的名词=)

无监督分类

是,有“ 无监督学习”,这通常意味着学习输入的表示形式,通常输入的表示形式用于(i)生成或(ii)样本。

来自表示形式的生成表示从表示形式创建一个数据点,该数据点类似于无监督模型从中获悉的数据。对于文本处理/ NLP,这通常意味着从头开始生成新句子,例如https://transformer.huggingface.co/

对表示进行采样表示给非监督模型一个文本,并且期望该模型提供一些信号,非监督模型可以从中学习。例如。在给定语言模型和新颖句子的情况下,我们要估计句子的概率,然后使用该概率来比较不同句子的概率。

算法有一个不错的摘要博客文章https://algorithmia.com/blog/introduction-to-unsupervised-learning和一个更现代的观点https://sites.google.com/view/berkeley-cs294-158-sp20/home

这是很多信息,但是您不告诉我如何##%^&-ing进行无监督分类!

是的,矛盾的解释还没有结束。如果我们看一下文本分类,我们到底在做什么?

我们正在将输入文本放入一些预定义的类别中。在您的情况下,标签是预定义的,但

问:信号究竟从哪里来?

A:当然,不要从推文中分散我的注意力!告诉我如何分类!!!>

问:您如何告诉模型一条推文应该是该标签,而不是另一个标签?

A:来自无监督的学习,对吗?那不是应该在无人监督的情况下做什么吗?要将输入文本映射到输出标签?

确切地说,这是矛盾的意思,

[Supervised learning将输入文本映射到输出标签

而不是unsupervised learning

那我该怎么办?我需要使用无监督学习,并且要进行分类。

然后问的问题是:

我一直在听说的所有这些AI怎么样,我可以用3行代码进行分类。

他们不是使用听起来像芝麻街字符的无监督语言模型,例如ELMO,BERT,ERNIE?

我想你的意思是类似https://github.com/ThilinaRajapakse/simpletransformers#text-classification

from simpletransformers.classification import ClassificationModel
import pandas as pd


# Train and Evaluation data needs to be in a Pandas Dataframe of two columns. The first column is the text with type str, and the second column is the label with type int.
train_data = [['Example sentence belonging to class 1', 1], ['Example sentence belonging to class 0', 0]]
train_df = pd.DataFrame(train_data)

eval_data = [['Example eval sentence belonging to class 1', 1], ['Example eval sentence belonging to class 0', 0]]
eval_df = pd.DataFrame(eval_data)

# Create a ClassificationModel
model = ClassificationModel('bert', 'bert-base') # You can set class weights by using the optional weight argument

# Train the model
model.train_model(train_df)

请注意评论:

培训和评估数据必须位于两列的Pandas数据框中。第一列是类型为str的text

,第二列是类型为int的label

是的,这是更现代的方法:

  • 首先使用预先训练的语言模型将您的文本转换为输入表示形式
  • 然后将输入的表示形式和其对应的标签输入分类器
  • 注意,您仍然无法避免需要标签来训练监督分类器的事实

    等等,你的意思是我一直在听到的所有这些AI都不是“无监督分类”。

    Genau。实际上还没有“无监督分类”之类的东西,以某种方式需要手动定义(i)标签,(ii)输入到标签之间的映射应该存在

    定义范例的正确词是转移学习,其中语言是

    • 以自我监督的方式学习(实际上并不是真正不受监督的,因此模型可以学习将任何文本转换为某种数字表示形式] >>

    • 然后使用带有标记数据的数字表示形式生成分类器。

    © www.soinside.com 2019 - 2024. All rights reserved.