第4课
- 新内容与精彩内容
- 为何选择 Hugging Face transformer
- 本讲中,我们会使用 HF 而非 fastai 库对预训练的 NLP 模型进行微调吗?
- 为何使用 transformer 而非 fastai 库?
- Jeremy 是否正在将 transformer 集成到 fastai 库中?
- transformer 是否与 fastai 具有相同的分层架构?它的抽象级别是否足够高?
- 为何使用一个抽象级别合理高的库(不如 fastai 高)是件好事?
- 理解微调
- 我们现在是否具备理解微调细节的基础了?
- 如何从参数置信度角度理解预训练模型?03:51
- 微调是否试图增加那些置信度不高的参数?
- ULMFiT: 第一个经过微调的 NLP 模型
- 这个模型最初是在哪里开发和讲授的?
- 论文是谁写的?
- 它的影响是什么?
- ULMFiT 步骤 1: 从零开始构建语言模型
- 步骤一中的第一个语言模型是什么?
- 模型试图预测什么?数据集是什么?
- 为什么这个任务如此困难?06:10
- 模型需要理解多少知识才能进行预测?
- 第一个模型在步骤一中预测得如何?
- 步骤 2: 在 IMDB 上微调第一个模型
- Jeremy 是如何构建第二个语言模型的?
- 第二个模型从哪里开始?第二个模型的数据集是什么?
- 第二个模型擅长预测什么?
- 步骤 3: 将语言模型用于分类
- 语言模型的标签
- 前两个模型的数据集的标签是什么?
- Transformer 模型对比 ULMFiT
- transformers 是何时首次出现的?
- transformers 模型构建的目的是为了利用什么优势?
- transformers 不试图预测什么?(原因在第二部分)
- transformers 如何修改其数据集以及它预测什么?09:41
- ULMFiT 和 Transformers 在预测内容上真的有很大差异吗?
- ULMFiT 和 Transformers 之间的三个步骤差异有多大?
- 模型知道什么
- 参数/权重较低层和较高层可以学习到什么?11:08
- 在迁移学习中,我们对这些权重层做什么?13:20
- Zeiler 和 Fergus 的论文
- Kaggle 竞赛中的 NLP 初学者
- 使用 Kaggle 竞赛来介绍 NLP 给初学者,这不是很棒吗!
- 为什么我们应该更认真地对待 Kaggle 竞赛?15:06
- NLP 分类可以完成哪些现实世界的任务?15:57
- 检查竞赛数据集
- 竞赛数据集里有什么?
- 这个数据集看起来有多像分类问题?
- 我们对 'anchor' 和 'target' 预测什么?
- 预测什么值?
- 为什么这实际上不是一个直接的分类问题?
- 'context' 的用途是什么?
- 模型策略
- 如何修改数据集以便将相似性问题转化为分类问题?
- 我们是否应该总是尝试通过将其转化为熟悉的问题来解决它?
- 准备好 Notebook
- 何时以及如何在 Kaggle 上使用 GPU?
- 为什么 Jeremy 推荐 Paperspace 而非 Kaggle 作为你的工作站?
- Jeremy 如何让下载 Kaggle 数据集并在 Paperspace 或本地工作变得如此容易?
- 如何在同一个 Jupyter cell 中同时运行 Python 和 bash?
- 将原始数据集转化为文档
- 如何检查数据集文件夹中有什么?
- 为什么阅读经常被忽视的竞赛数据介绍很重要?
- 如何使用 pandas 读取 csv 文件?24:30
- Python 中数据科学的四个关键库是什么?24:46
- Jeremy 推荐的除了 fastbook 之外的另一本书是什么?25:36
- 为什么你也必须读它?
- 如何在 dataframe 中访问和展示数据集?26:39
- 如何
describe
数据集?它通常告诉我们什么?27:10 - 起初,唯一数据样本的数量对 Jeremy 意味着什么?27:57
- 如何根据模型策略创建一个单一字符串?28:26
- 在读取和写入列数据时,如何引用 dataframe 的列?
- 分词:介绍
- 如何将字符串/文档转化为神经网络可以使用的数字?
- 我们先将字符串分割成词吗?
- 中文在词的问题上有什么问题?
- 与分割后的词相比,词汇表是什么?
- 如何处理词汇表?
- 为什么我们希望词汇表简洁而不是太大?
- 如今人们更倾向于将什么而不是词语包含在词汇表中?
- Transformer 的子词分词
- 如何将我们的 dataframe 转化为 Hugging Face
Dataset
? - HF Dataset 是什么样子的?
- 分词是什么?它做什么?
- 为什么我们应该在分词之前选择一个预训练模型?
- 为什么我们必须使用模型的词汇表而不是自己创建?
- HF 模型中心与 TIMM 有多相似?33:10
- Jeremy 关于如何使用 HF 模型中心的建议是什么?
- 是否有某些模型通常适用于大多数实际问题?34:17
- NLP 模型何时开始变得真正非常有用?34:35
- 为什么我们对那些可能适用于大多数事物的模型了解不多?
- 为什么我们应该选择一个小模型作为起点?
- 如何获取预训练模型的 tokens、词汇表和相关信息?36:04
- 如何按照模型的风格对句子进行分词?
- 将文档分割成词汇列表后,我们是否将词汇列表转化为数字列表?数值化 38:30
- 您能否从分词示例中了解子词与词的区别?
- 如何使用并行计算对所有文档进行分词?38:50
- 给定输入列是文档,input_id 列里面有什么?
- 如何将我们的 dataframe 转化为 Hugging Face
- 构建输入时需要特殊处理吗?
- 从数据集中构建文档或输入时,我们需要遵循一些特殊处理吗?
- 如果文档非常长怎么办?
- 开始在大型文档上使用 ULMFiT
- ULMFiT 最擅长做什么?
- 为什么 ULMFiT 可以快速处理大型文档,而且不需要那么多 GPU?
- 对于文档来说,多大算是大?
- Transformer 库的一些晦涩难懂的文档
- 机器学习中最重要的思想
- 这是指拥有独立的训练集、测试集和验证集的思想吗?
- 欠拟合 vs 过拟合
- 如何创建一个函数来绘制一个带有次数变量的多项式函数?
- 什么是一次/二次/三次多项式?
- Jeremy 对 sklearn 有何看法?何时使用它?47:37
- 什么是欠拟合?为什么过于简单的模型是个问题或者系统性地存在偏差?48:12
- 什么是过拟合?过拟合是什么样子的?48:58
- 过拟合的原因是什么?
- 欠拟合很容易发现,但是如何从我们想要的函数中筛选出过拟合?
- 验证:避免在训练集上过拟合
- 如何获取验证数据集并使用它?
- 为什么在使用 fastai 以外的其他库时需要小心?
- 如何以及为何创建一个好的验证集
- 你知道简单地将数据集的 20% 随机作为验证集是不够的吗?
- 例如,你不应该选择验证数据集以便你的模型可以预测未来而不是过去吗?
- 为什么 Kaggle 竞赛是理解使用验证集避免过拟合的一个绝佳且真实世界的方式?
- 验证集如何在两个真实的 Kaggle 竞赛问题中帮助避免过拟合?54:44
- 接触交叉验证时要小心 56:03
- 为什么在使用库中现成的随机选择验证集的工具时应该小心?
- Rachel 关于验证的帖子
- 测试集:避免在验证集上过拟合
- 测试集是用来做什么的?
- 当我们有了验证集,为什么还需要它?
- 何时或如何你会在验证集上过拟合?或者
- 为什么验证集不足以克服模型过拟合?
- 为什么 Kaggle 准备了两个测试集?或者
- 为什么 Kaggle 认为两个测试集足以筛选出过拟合模型
- 评估指标函数 vs 损失函数
- 我们如何使用验证集来检查模型的性能?
- Kaggle 竞赛会为你选择评估指标吗?
- 评估指标应该是我们的损失函数吗?
- 你应该使用什么样的函数作为损失函数?(崎岖 vs 平滑)
- 所以,务必注意:你的模型试图优化的损失函数可能不是用来评估你的模型的同一函数
- 为什么一个评估指标总是不足够并且会引起很多问题?
- 评估指标:你无法从数学中体会到它
- 什么是皮尔逊相关系数 (r) 以及如何解释它?
- 什么能教会你 r 的行为方式,是它的数学函数还是它在数据集上的表现?
- 我们应该用包含 1000 个随机数据点的图还是包含整个一百万个数据点的图?
- 如何获得每个变量与所有其他变量之间的相关系数?1:06:27
- 如何阅读相关系数矩阵?
- 如何获得两个事物之间的单个相关系数?
- 如何判断一个相关系数值有多好?1:07:45
- 需要注意的事项是什么?(趋势线、围绕趋势线的变异、离群值)
- 如何在图表中创建透明度?
- 我们如何从另一个例子中看出 r 对离群值非常敏感?1:09:47
- 移除或弄乱几个离群值对你在 r 上的得分影响有多大?或者
- 为什么在处理 r 时,你必须小心每一行数据?
- 在没有图表的情况下,我们能知道 r = 0.34 或 r = -0.2 的好坏程度吗?
- 别忘了为 HF 准备正确的数据格式
- HF 训练集-验证集划分
- 如何使用 HF 进行随机划分?
- Jeremy 会在另一个 notebook 中讨论合适的划分方法吗?
- 训练模型
- 在 HF 中使用什么来训练模型?
- 什么是 batch 和 batch size?
- batch size 应该多大?
- 如何找到一个好的学习率?(详情见未来讲座)
- 在 HF 库中在哪里准备所有训练参数?
- 我们使用哪种类型的任务来选择模型?
- 在模型之后如何创建 Learner 或 Trainer?
- 如何训练?
- 为什么从第一个 epoch 开始,评估指标上的结果就如此好?
- 处理离群值
- 我们应该对离群值进行二次分析而不是简单地移除它们吗?
- 在现实世界中,离群值到底是什么?
- 与有限的统计意义相比,离群值通常不是告诉我们很多令人惊讶的有用信息吗?
- Jeremy 关于离群值的建议是什么?
- 预测并提交
- 如何使用 HF 进行预测?
- 我们应该总是检查预测输出以及测试集输入吗?
- 输出的常见问题是什么?(合适的解决方案可能在下一讲)
- 简单的解决方案是什么?
- 如何将你的答案提交给 Kaggle?
- 研究和商业中的巨大机会
- NLP 的误用
- NLP 聊天机器人能否生成 99% 几乎与真人无法区分的在线聊天内容?
- GTP-3 能否创作出更长、更复杂的、更像人类的散文?
- 机器生成的公众意见如何影响公共政策或法律?
- HF 库中
num_labels
的问题