目标:本作业的主要目标是实现字节对编码(BPE)算法用于分词,并使用NLTK数据集(特别关注书籍)评估其性能。此外,你还需要使用NLTK的punkt分词器创建参考分词用于比较分析。
任务:
用Python实现字节对编码(BPE)算法,涵盖关键步骤如学习字节对合并和使用学习到的合并操作进行编码/解码。
使用NLTK的Gutenberg语料库,选择如"austen-emma.txt"、"blake-poems.txt"和"shakespeare-hamlet.txt"等书籍进行BPE算法训练。基于训练创建词汇表。
在Gutenberg语料库的另一组书籍上评估BPE算法,如《科学怪人》、《德古拉》和《福尔摩斯历险记》。测量分词准确率、覆盖率和其他相关指标。
使用NLTK的punkt分词器为测试数据集创建参考分词。以结构化格式保存分词结果供后续比较。
使用NLTK的默认方法(如word_tokenize)在测试数据集上实现基准分词。比较BPE算法与标准分词在准确率、覆盖率等指标上的表现。
提供BPE算法学习过程的可视化,展示词汇表的演变和字节对合并的频率。比较训练前后的词汇表。
准备详细报告,记录实现过程、实验设置和结果。讨论BPE的优缺点,并与标准分词方法进行比较。 说明实现过程中遇到的挑战并提出可能的改进建议。
提交指南:
- 提交BPE实现的Python代码,包括带有说明和依赖项的README文件
- 包含从NLTK Gutenberg语料库中选择的训练和测试书籍的文件夹
- 提交包含详细解释、可视化和比较分析的报告文档(PDF)
- 包含使用NLTK的punkt分词器获得的参考分词文件