好的,没问题。作为一位在自然语言处理领域摸爬滚打多年的老手,这种作者归属的题目确实很对胃口。它不只是看模型能不能读懂一句话,更要看它能不能捕捉到作者的“笔风”。Kaggle上的这个“Spooky Author Identification”比赛就是一个很经典的例子:给你一句话,你得判断它出自爱伦·坡
好的,没问题。作为一位在自然语言处理领域摸爬滚打多年的老手,这种作者归属的题目确实很对胃口。它不只是看模型能不能读懂一句话,更要看它能不能捕捉到作者的“笔风”。Kaggle上的这个“Spooky Author Identification”比赛就是一个很经典的例子:给你一句话,你得判断它出自爱伦·坡、玛丽·雪莱,还是H.P.洛夫克拉夫特之手。
乍一看,这不就是个三分类文本问题嘛。但细想一下,这三位作者写的都是恐惧、神秘、死亡和超自然那一套。光靠关键词去匹配,基本上是行不通的。真正的线索藏在更细微的地方:虚词的使用习惯、标点符号的偏好、句子的节奏感,以及那些不经意间重复出现的短语模式。
所以,这个项目成了检验一个经典问题的绝佳沙盘:**如果我们精心设计特征,并诚实地评估模型,那么传统的NLP方法究竟能走多远?**
基于这个想法,我搭建了一条循序渐进的经典模型流水线,从最简单的基线模型一路升级到集成方法:
1. 一个基于Vowpal Wabbit的词袋基线模型,追求速度;
2. 在VW模型中加入标点和字符n-gram,让它更懂“风格”;
3. 一个经过调优的TF-IDF多模型集成;
4. 利用折叠外预测进行堆叠集成;
5. 最后,还做了一次小型的特征表示横评,比较了稀疏特征、BM25、Word2Vec和FastText。
我的目标不仅仅是刷高分数,更重要的是理解:到底哪种特征表示能带来提升?是哪个指标被优化了?在什么样的评估设置下取得的?
下面的内容会重点介绍这个项目的方法、结果和解读。我会分享关键的代码片段和实现思路,但不会罗列笔记本里的每一行代码。完整的可执行笔记本在文末的GitHub仓库里可以找到。
### 数据集与评估设定
数据集包含 **19,579条带标签的训练句子** 和 **8,392条无标签的测试句子**。不同作者的句子数量并不完全均衡:

*图1. 训练集中的类别分布。可以看到数据集是轻微不平衡的,EAP占了大部分样本,HPL最少。*
因为Vowpal Wabbit的多分类模式要求标签从1开始,所以我用1、2、3来分别代表EAP、MWS和HPL。
```python
train_texts = pd.read_csv(DATA_DIR / "train.csv", index_col="id")
test_texts = pd.read_csv(DATA_DIR / "test.csv", index_col="id")
AUTHOR_CODE = {"EAP": 1, "MWS": 2, "HPL": 3}
train_texts["author_code"] = train_texts["author"].map(AUTHOR_CODE)
print(f"Train: {len(train_texts)} sentences Test: {len(test_texts)} sentences")
print(train_texts["author"].value_counts(normalize=True).round(3))
```
为了公平地比较模型,我使用固定的随机种子,将原始训练数据按70/30的比例分层抽样,划分出训练集和验证集。这样每个模型都在相同的、类别比例稳定的验证集上进行评估。
我主要关注三个指标:
* **准确率 (Accuracy)**:直观易懂,但只衡量最终的分类结果。
* **宏平均F1 (Macro-F1)**:用于检查模型在三个作者上的表现是否均衡。
* **多分类对数损失 (Multiclass log loss)**:Kaggle官方指定的评估指标,也是这个项目最重要的指标。因为它评估的是预测概率的质量,而不是单纯的分类是否正确。
对数损失会奖励高置信度的正确预测,但会严惩高置信度的错误预测。在比赛中,提交的正是对每个作者预测的概率分布,所以这个指标至关重要。
### 1. Vowpal Wabbit词袋基线模型
我选择Vowpal Wabbit作为起点,因为它速度快,天生擅长处理稀疏数据,非常适合文本线性模型。它使用在线学习算法,将特征哈希到固定空间,并通过“一对多”的方式处理多分类问题。
第一个基线模型只使用了**长度大于等于3的小写单词**作为特征。
```python
def to_vw_words(df, is_train=True):
"""生成VW格式的行: '
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。