从推文预测性别的文本分类器

0 投票
1 回答
1044 浏览
提问于 2025-06-18 04:12

我正在尝试建立一个文本分类器,目的是根据推特用户的推文来预测他们的性别。这是我第一次构建文本分类模型,所以我对自己的步骤不是很确定。

两个数据框

我有一个数据框,作为训练数据集。里面包含了每个用户的ID和他们的性别。

train_lables=({'id':['33324','24442','3956'],
     'gender':['female','male','male']})
train_lables=pd.DataFrame(train_lables)

我还有一个数据集,既作为训练数据集也作为测试数据集。这个数据集包含了用户的推文。

tweets=({'id':['33324','24442','3956'],
         'tweets':[['hello','trump','today'],['blue','eyes','brown','hair'],['playstation','june']]})
tweets=pd.DataFrame(tweets)

元组?

我想进行特征提取来训练我的模型。目前为止,我已经使用每个数据框中的每一行创建了元组,如下所示。

#gender for each user id 
training_labels_tuple=[tuple(x) for x in training_labels.to_records(index=False)]

输出结果是

[('33324', 'female'), ('24442', 'male'), ('3956', 'male')]

还有一个包含用户ID和推文的元组

tweets_tuple=[tuple(x) for x in tweets.to_records(index=False)]

输出结果是

[('33324', ['hello', 'trump', 'today']),
 ('24442', ['blue', 'eyes', 'brown', 'hair']),
 ('3956', ['playstation', 'june'])]

我不确定是否应该把推文和性别合并成一个元组,然后用这个来训练我的模型。

能不能请大家指导我一下,如何正确提取模型的特征?

相关问题:

  • 暂无相关问题
暂无标签

1 个回答

0

nltk书籍的第六章里有一部分专门讲这个问题(用性别识别的例子进行文本分类),内容非常不错。

在这种情况下,最常用的方法是把推文当作一个完整的字符串,作为唯一的特征。下面是一个使用朴素贝叶斯分类器的例子:

import random

import nltk
import pandas as pd

# input data
df = pd.DataFrame({
    'id':['33324','24442','3956'],
    'gender':['female','male','male'],
    'tweets':[['hello','trump','today'],['blue','eyes','brown','hair'],['playstation','june']]
})

# featurize data to input into classifier
features = []
for tweet, gender in zip(df["tweets"], df["gender"]):
    features.append(({"feature": " ".join(tweet)}, gender))

# shuffle features
random.shuffle(features)    

# train test split, obvs use different split values for the real set or use sklearns train_test_split function
train_set, test_set = features[:2], features[2:]

# train
clf = nltk.NaiveBayesClassifier.train(train_set)

# test
print(nltk.classify.accuracy(clf, test_set))

nltk书籍里还有很多关于如何提取比我上面提到的更有用特征的策略,信息量很大。

撰写回答