为作品找作者

作者分析是数据挖掘中的一个分类任务,旨在从一组作者中确定文本的作者。文章介绍了作者归属问题,包括作者画像、验证和聚类,并讨论了在处理这个问题时可能遇到的挑战,如数据预处理、特征选择。文章使用支持向量机作为分类方法,并展示了创建处理流水线的过程。尽管存在困难,作者分析在多个领域中显示出实用性。
摘要由CSDN通过智能技术生成

作者分析的应用场景

作者归属(authorship attribution)是作者分析的一个细分领域,研究目标是从一组可能的作者中找到文档真正的主人。这是一种典型的分类任务。作者分析任务一般采用标准的数据挖掘方法,比如交叉检验、特征抽取和分类算法等。

作者分析问题衍生出很多更细的问题,主要有以下几个:

  • 作者画像: 根据作品界定作者的年龄、性别或其他特性。例如,通过观察一个人讲英语的方式,判断英语是否为他的母语。
  • 作者验证:根据作者已有作品,推断其他作品是否也是他写的。拿法庭断案场景来讲更
    好理解,例如,分析嫌犯的写作风格(内容方面),以确定勒索信是不是他写的。
  • 作者聚类:作者验证问题的延伸,用聚类分析方法把作品按照作者进行分类。

不过,作者分析研究领域最常见的还是作者归属问题,即如何从一群作者中找到作品的真正
主人。

作者分析有很多应用场景,比如证实作者是谁,证实几本书有相同的作者,或者寻找社会媒
体账号的主人。

作者分析也并不是绝对可靠的。最近研究发现,即使没有经过专业训练的人,让他们隐藏自
己的写作风格,也会让作者归属问题变得困难无比。研究人员还探讨了模仿别人写作风格的问题,
结果发现人们模仿得很像,作者分析的结果是这些伪作出自被模仿人之手。

尽管存在很多问题,作者分析在越来越多的领域被证实十分有用,它是一个非常有意思的、
值得研究的数据挖掘问题。


会遇到的问题

作者归属可以看作是一种分类问题,已知一部分作者,数据集为多个作者的作品(训练集),
目标是确定一组作者不详的作品(测试集)是谁写的。如果作者恰好是已知的作者里面的,这种
问题叫作封闭问题

如果作者可能不在里面,这种问题就叫作开放问题。不只是作者归属问题可以这样区分——
任何数据挖掘应用,只要实际的类别可能不在训练集中的都叫作开放问题,对于这类问题进行挖
掘,最终目标分两种情况,如果在训练集中,就返回找到的类别,如果不在,要给出不属于任何
现有类别的提示。

在进行作者归属研究时,一般会受到两个限制。一是只能使用作品的内容,而不能使用写作
时间、印刷形式、笔迹等信息。当然也有这样的做法,把这些信息整合到模型中,但一般来说这
就不是作者归属而更像是数据融合问题。

第二个限制是不考虑作品的主题;相反,关注单词用法、标点和其他文本特征。原因在于,
一个人如果是多面手,可以写多个主题的内容,作品的主题就不能反映作者的实际写作风格。


数据预处理

下面使用的图书资料来自于古腾堡计划(www.gutenberg.org),该网站收集了大量版权失效的公版文学作品。

数据我没下载下来,这里就不贴数据如何下载了,可以大致浏览一下数据结构的样式:https://archive.org/stream/personalnarrativ04657gut/pnpa110.txt

大体翻看一下下载的作品,你会发现大部分都包含很多噪音——从数据分析的角度看至少是
这样的。每篇作品前都有大段的声明文字,开始数据分析之前,得先把它们删掉。

我们可以直接从文件里将这些免责声明删除,但是丢失数据怎么办?我们可能会丢失先前做
过的改动,从而导致实验结果无法重现,因此,不如在加载文件时跳过这部分——这样再次用这
些文件做实验时,也能得到同样的结果(只要原文件没变)。代码如下:

def clean_book(document):

# 每篇作品前后各一行文字,用来标识作品的开头和结尾,作品前后为古藤堡的项目说明,
#  我们可以通过这两行找到作品内容
    lines = document.split("\n")
    start= 0
    end = len(lines)
    for i in range(len(lines)):
        line = lines[i]
        if line.startswith("*** START OF THIS PROJECT GUTENBERG"):
            start = i + 1
        elif line.startswith("*** END OF THIS PROJECT GUTENBERG"):
            end = i - 1

# Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串
# 用换行符把所有行连接起来,得到作品内容
    return "\n".join(lines[start:end])

功能词

功能词是作者分析问题最早使用的一类特征,到现在来看,在词袋模型中使用功能词做特征效果依然不错。功能词指的是本身具有很少含义,却是组成(英语)句子必不可少的成分。例如,单词this和which的意思不是由它们本身的含义所决定,而是由它们在句子中充当的角色来决定。与功能词相对的是实词,比如tiger就有明确的含义,当人们在句子中看到这个单词时,脑海中就会浮现出大型猫科动物老虎的样子。

有些功能词的用法并不总是清晰、明确的。因此,从经验来看,选用使用频率较高的功能词做特征比较好(在所有文档中使用频率高,而不仅是在单个作者的作品中)。通常而言,使用越频繁的单词,对于作者分析能提供更多有价值的信息。相反,使用频率较低的单词,更适合用来做基于内容的文本挖掘

功能词的使用通常不是由文档内容而是由作者的使用习惯所决定,因此可以用它们来区分不同的作者。例如,很多美国人比较在意区分that和which在句子中的用法,澳大利亚等国家的人就不太在意。在使用这两个词的地方,有些澳大利亚人要么几乎无一例外地都用that,要么是which用得多一点。这样的不同点,再加上成千上万个其他的微小差别,就形成了用于作者分析的模型。

首先,创建功能词词汇表,用列表存储。至于确切来说哪些是功能词,哪些不是,有待商榷。
我从已发表的研究成果中找到下面这些功能词,它们还是比较可靠的。

unction_words = ["a", "able", "aboard", "about", "above", "absent"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Einstellung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值