我在学校参与了一个项目,这个项目到目前为止非常有趣,而且现在变得更加有趣。我手头有大约60万条推文(每条推文包含屏幕名称、地理位置、文本等),我的目标是尝试将每个用户分类为男性或女性。现在使用Twitter4J,我可以获取用户的全名、朋友数量、转发数量等。所以我想知道是否可以结合查看用户的姓名和进行文本分析来找到答案。我最初的想法是可以将其做成一个基于规则的分类器,首先查看用户的姓名,然后分析他们的文本,并尝试得出M或F的结论。我猜想使用像朴素贝叶斯这样的方法会遇到麻烦,因为我没有真实的真值?
另外,对于姓名,我会检查某种字典来解释姓名是男性还是女性。我知道有些情况下很难判断,这就是为什么我也会查看他们的推文文本。我还忘了提及;对于这60万条推文,我至少有每个用户的两条推文可用。
关于用户性别分类的任何想法或意见将不胜感激!我在这方面没有太多经验,我希望能学到任何我能接触到的东西。
回答:
我猜想使用像朴素贝叶斯这样的方法会遇到麻烦,因为我没有真实的真值?
任何监督学习算法,如朴素贝叶斯,都需要准备训练集。如果没有一些数据的实际性别,你就无法构建这样的模型。另一方面,如果你提出了一些基于规则的系统(比如基于用户姓名),你可以尝试半监督方法。使用你的基于规则的系统,你可以对数据进行某种标记,假设你的基于规则的分类器是RC
,可以回答“男性”、“女性”、“不知道”,你可以使用RC
以自然的方式对数据X
进行标记:
X_m = { x in X : RC(x)="Male" }X_f = { x in X : RC(x)="Female" }
一旦你完成了,你可以使用所有数据创建一个监督学习模型的训练集,除了用于创建RC
的数据 – 在这种情况下 – 用户姓名(我假设,RC
回答“男性”或“女性”仅当它完全“确定”时)。结果,你将训练一个分类器,它将尝试从所有额外数据(如使用的词语、位置等)中概括性别概念。让我们称之为SC
。之后,你可以简单地创建一个“复杂”分类器:
C(x) = "Male" iff RC(x)= Male" or (RC(x)="Do not know" && SC(x)="Male") "Female" iff RC(x)= Female" or (RC(x)="Do not know" && SC(x)="Female")
这样,你一方面可以以基于规则的方式使用最有价值的信息(用户姓名),同时在没有“真实情况”的情况下利用监督学习的力量来处理“难题”。