谁在椭圆形办公室发推:机器学习揭露川普推文的真实作者
川普的癖好
有时候数据科学更像是艺术而不是科学。在开始构建模型的时候,我首先考虑自己作为人类如何识别一条推文是川普式的。然后尽我所能将这些“感觉”转换为基于规则的代码。有一些明显的癖好,可以识别是否川普本人在键盘后面,例如,全部使用大写,随机大写某个特定词汇,以及无理由!地使用感叹号!!!
事实上,我的模型中最紧要的特征之一就是引用转推。看起来川普不知道如何在推特上转推别人的推文。在整个33000条推文的语料库中,仅有一条来自Android设备的方法正确的转推。在其他转推中,川普复制别人的推文,@用户,然后用引号包围推文,然后自己发布:
这些转推经常(并非总是)是像这样的自我庆祝推文。在本文后面讨论结果的部分,你会看到,川普倾向于大量@自己,其原因就是这样的转推。
风格
这里的风格特征指可以用来识别任何一个推特用户的特征,而不是指川普的个人风格。风格特征包括每条推文的平均长度,每句话的平均长度,每个单词的平均长度。我也考察了各种标点符号的使用频率(川普几乎从不使用分号;他的助手们相对而言经常使用分号)。@提及、#标签、URL的数目最终都成为强有力的预测特征。最后,在星期几和一天的什么时间段发推也泄露了不少信息。
情感
我使用了C.J. Hutto的VADER包来提取每条推文的情感。VADER是Valence Aware Dictionary and sEntiment Reasoning的简称(因为,我猜,VADSR听起来很蠢?),是一个为社交媒体特别调制的基于词典和规则的工具。给定一个文本字符串,VADER为文本的消极性、积极性和中性各自输出一个0到1之间的小数,以及一个-1到1之间的汇总指标。
关于VADER包的开发、验证、评估的完整描述可以参考这篇论文。VADER的精髓是,包作者首先构造了一个对应情感的词汇特征的列表(用简单英语来说,“单词和短语”),然后将这一列表与一些规则组合起来,这些规则表述了短语的语法结构如何加强或减弱这一情感。VADER的表现(精确度96%)超过了人类(精确度84%)。
情绪
加拿大国家研究委员会(National Research Council of Canada)编制了一个超过14000单词的词典,其中每个单词标注了对应2种情感(消极、积极)和8种情绪(愤怒、希望、厌恶、恐惧、快乐、悲伤、惊讶、信任)的评分。加拿大国家研究委员会十分友善地允许我访问这一词典,我编写了一个Python脚本,遍历推文中的每个单词,通过查询这一词典得出单词对应的情绪。根据推文中包含的对应相应情绪的单词的数目,给每条推文包含的每种情绪分配一个相应的分数。
遣词
我使用tf-idf技术分析推文的遣词,tf-idf是Term Frequency?—?Inverse Document Frequency(词频-逆向文档频率)的简称。基本上,它衡量了文档中的一个单词的描述性和唯一性。例如,你希望分组一些新闻类文章,并向读者推荐相似文章。你让计算机读取每篇文章,其中一篇的特征是提到了10次“棒球”。那么,“棒球”应该是文章中一个相当显著的单词!这是词频的部分。
然而,同一篇文章同样提到了8次“说过”。看起来这也是一个相当显著的单词。但我们人类并不这么看;我们知道如果若干篇文章都提到了“棒球”,那么它们多半是关于同一主题的文章,不过如果若干篇文章都提到了“说过”,这并不能说明这些文章的相似性。因此我们查看集合内的所有文章使用单词“棒球”和“说过”的词频。比如,结果是,1000篇文章中,只有30篇提到了“棒球”,却有870篇提到了“说过”。那么我们将这些单词在所有文档中的词频的倒数——1/30和1/870——乘以它们在单篇文章中的词频——10和8。这是逆向文档频率的部分。所以单词“棒球”的评分是10/30 = 0.333,单词“说过”的评分是8/870 = 0.009。我们为每篇文档中的每个单词进行这样的计算,然后看看哪些文章具有相同的高分单词。这就是tf-idf。
为了减少我的模型的运算需求,我只考察了一元语法(unigram,单个单词),没有考察二元语法(bigram)和三元语法(trigram)。(tf-idf处理二元语法和三元语法的方法和处理单个单词的方法一样。)n元语法每增加一元,相应的处理时间会指数级增长,并且我发现“Crooked Hillary”或“Lyin’ Ted Cruz”能被“crooked”和“lyin”代表。我同时忽略了在超过99%的推文中出现的词汇(语料库特定的停止词),以及在不到1%的推文中出现的词汇。我的这个项目大量使用了Python的scikit-learn包,它包含了一个tf-idf实现。
语法结构
将自然语言处理技术应用到时效性较强的文本时,遇到的主要挑战之一是事件随时间发生变动。比如,川普竞选期间的推文多次提到了“Crooked Hillary”和“Lyin’ Ted Cruz”,而川普现在的推文几乎不提了。我希望刻画川普推文更基本的形式,因此我使用NLTK将每条推文转换成了词类表示。
本质上,这将每个单词转换成了它的词类,也就是它在句子中的角色,例如,作为名词的“羞辱”和作为动词的“羞辱”被区分开来了。
这将短语“I had to fire General Flynn because he lied to the Vice President and the FBI”转换成它的基本词类表示“PRP VBD TO VB NNP NNP IN PRP VBD TO DT NNP NNP CC DT NNP”。我使用了Penn词类标记(PRP = 人称代词,VBD = 动词过去式,TO = to,VB = 动词原形,NNP = 单数形式的专有名词,等等)。使用之前的tf-idf过程,不过这次忽略一元语法,转而关注二元语法和三元语法,我可以提取更一般的川普或其助手发推方式。
最后,我使用Stanford Named Entity Recognition (NER) Tagger(斯坦福命名实体识别)将推文中的所有人名替换为“PERSON”,所有地名替换为“LOCATION”,所有组织替换为“ORGANIZATION”。这是概括推文的又一尝试。目前为止,这一NER(命名实体识别)过程是处理这些推文时计算开销最高的过程,如果我重新进行这个项目,我可能会认真考虑使用一个次优的NER工具(不依赖高级的统计学习算法的工具),从而显著提升处理时间。勿谓言之不预!
模型如何工作
最新活动更多
-
11月28日立即报名>>> 2024工程师系列—工业电子技术在线会议
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
即日-12.26火热报名中>> OFweek2024中国智造CIO在线峰会
-
即日-2025.8.1立即下载>> 《2024智能制造产业高端化、智能化、绿色化发展蓝皮书》
-
精彩回顾立即查看>> 2024 智能家居出海论坛
-
精彩回顾立即查看>> 【在线会议】多物理场仿真助跑新能源汽车
推荐专题
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论