订阅
纠错
加入自媒体

谁在椭圆形办公室发推:机器学习揭露川普推文的真实作者


川普的癖好

有时候数据科学更像是艺术而不是科学。在开始构建模型的时候,我首先考虑自己作为人类如何识别一条推文是川普式的。然后尽我所能将这些“感觉”转换为基于规则的代码。有一些明显的癖好,可以识别是否川普本人在键盘后面,例如,全部使用大写,随机大写某个特定词汇,以及无理由!地使用感叹号!!!

事实上,我的模型中最紧要的特征之一就是引用转推。看起来川普不知道如何在推特上转推别人的推文。在整个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工具(不依赖高级的统计学习算法的工具),从而显著提升处理时间。勿谓言之不预!

模型如何工作

他们做得好,非常好
<上一页  1  2  3  4  下一页>  
声明: 本文系OFweek根据授权转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

人工智能 猎头职位 更多
扫码关注公众号
OFweek人工智能网
获取更多精彩内容
文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号