
教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载本指南围绕 AI-For-Beginners 课程 NLP 章节第 13 课《Representing Text as Tensors》的配套作业assignment.md展开讲解如何将课程附带的 PyTorch / TensorFlow 两个 Notebook 在你自己的数据集上重新运行、改写并产出实验发现。读完本文你将掌握完整的文本向量化管线Tokenization → Vocabulary → BoW → N-Gram → TF-IDF、分类器训练与精度对比方法并能独立完成一份有说服力的文本表示实验报告。一、作业任务解读要做什么做到什么程度原作业希伯来文版 translations/he/lessons/5-NLP/13-TextRep/assignment.md 与英文版 lessons/5-NLP/13-TextRep/assignment.md 内容一致给出了清晰的三步要求运行本课关联的 Notebook即 TextRepresentationPyTorch.ipynb 或 TextRepresentationTF.ipynb二者任选其一也可都跑。使用自己的数据集重新运行数据集可以从 Kaggle 获取但必须注明出处attribution这既是学术规范也是数据许可要求。重写 Notebook 以突出你自己的发现不是简单把数据换掉再跑一遍而是围绕你的数据集重新组织代码块、分析输出、总结结论。尝试创新性数据集作业特别举例了 NUFORCNational UFO Reporting Center的 UFO sightings 目击记录数据集——这类非典型语料往往能暴露文本表示方法的边界例如目击描述中的城市名、天气词、时间表达如何影响分类。作业在课程中的定位本课属于 NLP 章节的第一课课程以AG News 文本分类为贯穿任务将新闻标题与正文分类到 World / Sports / Business / Sci/Tech 四个类别见 lessons/5-NLP/13-TextRep/README.md。作业的目的正是把别人数据上的标准流程迁移到自己数据上的真实问题检验你究竟是否理解了文本张量化与频次加权表示的核心思想。二、环境准备在哪儿跑、怎么跑2.1 依赖清单运行两个 Notebook 需要不同的框架依赖仓库分别维护了两份 requirementsPyTorch 版requirements-pytorch.txt含torchtext0.9.1、torch2.12.1、scikit-learn、nltk3.10.0等TensorFlow 版requirements-tf.txt安装命令见 lessons/5-NLP/README.mdpip install -r requirements-pytorch.txt # PyTorch 路线 pip install -r requirements-tf.txt # TensorFlow 路线此外PyTorch Notebook 使用sklearn.feature_extraction.text的CountVectorizer与TfidfVectorizerTensorFlow Notebook 使用tensorflow_datasets两者均依赖 scikit-learn 生态需一并安装。2.2 运行方式课程官方提供了多种执行路径详见 lessons/0-course-setup/how-to-run.md方式适用场景备注本地 conda Jupyter标准推荐用conda建独立虚拟环境jupyter notebook启动VS Code Python 扩展开发体验最好打开仓库后按提示安装扩展即可Binder / 云 Notebook无本地环境Binder 会屏蔽部分外网资源下载数据可能受限带 GPU 的云端DSVM / Azure ML / Colab训练大模型本课模型很小CPU 也够用本地执行参考命令git clone 仓库地址 cd AI-For-Beginners conda env create --name ai4beg --file environment.yml conda activate ai4beg jupyter notebook注意本课的两个分类器都是单线性层 Softmax级别的轻量模型即便在 CPU 上训练也只需几十秒到几分钟做作业时无需强求 GPU。三、原始实验基线AG News 上的完整流程在替换成自有数据集之前先厘清两个 Notebook 各自的技术骨架这是重写的参照系。3.1 数据加载PyTorch 路线torchtext内置数据集import torch, torchtext, os, collections os.makedirs(./data, exist_okTrue) train_dataset, test_dataset torchtext.datasets.AG_NEWS(root./data) classes [World, Sports, Business, Sci/Tech]注意两点数据是迭代器而非列表想多次遍历必须先list()转换Notebook 里专门强调了这一点每个样本是(label, text)二元组label 是 0-3 的类别索引。TensorFlow 路线tensorflow_datasetsimport tensorflow as tf, tensorflow_datasets as tfds dataset tfds.load(ag_news_subset) ds_train, ds_test dataset[train], dataset[test] # 打印结果训练 120000 条测试 7600 条每条样本是含label、title、description字段的字典用classes[x[label]]即可还原类别名。3.2 Tokenization 与 Vocabulary文本必须先变数字。两步走分词器tokenizer切分 token词表vocabulary将 token 映射为索引。PyTorch 版tokenizer torchtext.data.utils.get_tokenizer(basic_english) counter collections.Counter() for (label, line) in train_dataset: counter.update(tokenizer(line)) vocab torchtext.vocab.vocab(counter, min_freq1) stoi vocab.get_stoi() # token - index 的字典 def encode(x): return [stoi[s] for s in tokenizer(x)]AG News 训练集的完整词表大小约为95810Notebook 运行输出Vocab size if 95810。encode(I love to play with my words)会得到类似[599, 3279, 97, 1220, 329, 225, 7368]的索引序列。TensorFlow 版用TextVectorization层一步完成分词与建表vocab_size 50000 vectorizer keras.layers.experimental.preprocessing.TextVectorization(max_tokensvocab_size) vectorizer.adapt(ds_train.take(500).map(lambda x: x[title] x[description]))TF 侧的关键工程细节词表用前 500 条样本的文本去adapt加快执行因此实际词表只有 5335 个 token词表前两项固定为padding与[UNK]未登录词词频越高索引越小[, [UNK], the, to, a, in, ...]。这一对比本身就值得写进你的实验报告词表大小与覆盖率的取舍min_freq与max_tokens分别如何影响稀有词处理是文本表示中最实际的工程决策。3.3 三种表示与基准精度表示方法PyTorch 实现要点TF 实现要点Notebook 中的基准结果AG NewsBag-of-Wordstorch.zeros(vocab_size)逐 token 累加计数tf.reduce_sum(tf.one_hot(vectorizer(text), vocab_size), axis0)PyTorch 约 86.2% 训练精度TF val_acc ≈ 0.8697BoW 网络内联无TextVectorization作为 Keras 层嵌入模型端到端训练val_acc ≈ 0.8736TF-IDF用 sklearnTfidfVectorizeroutput_modetf-idf自动计算TF val_acc ≈ 0.8849TF 版还可通过output_modecount让TextVectorization自动输出 BoW 计数向量省去手动one_hot reduce_sumval_acc ≈ 0.8772。精度数字均来自两个 Notebook 的运行输出见 TextRepresentationTF.ipynb 中model.fit的日志只代表该环境下的单次结果你的重跑结果可能略有浮动恰可作为可复现性的讨论点。四、替换为自有数据集UFO Sightings 实战方案作业鼓励创新且可能令人惊讶的数据集NUFORC 的 UFO sightings 数据集就是一个绝佳选择它记录了目击事件的日期、城市、州、目击形状shape、持续时长和描述文本把新闻四分类换成目击形状多分类或目击国别分类语义空间完全不同于新闻语料。4.1 数据清洗与映射无论从 Kaggle 拿到什么格式CSV/JSON 均常见都要统一成 Notebook 期望的(label, text)结构# 伪代码示意把 UFO 记录整理成 (shape_label, city state, date: comments) 的文本对 samples [(row[shape], f{row[city]} {row[state]} {row[datetime]}: {row[comments]}) for row in ufo_data if row[shape] and row[comments]] # 类别索引化 classes sorted(set(s for s, _ in samples)) label2idx {c: i for i, c in enumerate(classes)} train [(label2idx[s], text) for s, text in samples[:split_idx]] test [(label2idx[s], text) for s, text in samples[split_idx:]]几个必须处理的坑建议作为数据处理发现写进报告类别不均衡UFO 数据中circle、light、triangle等形状占比悬殊可对比全量类别与只取 Top-K 形状两种设置下的精度差异短文本与噪声大量 comments 是拼写错误的自由文本basic_english分词器会制造大量低频 token——正好用来观察min_freq的作用缺失字段shape、comments 为空的行需过滤或填充[UNK]。4.2 词表与编码的替换把第三节的AG_NEWS加载代码整体替换为你的数据管道即可其余管线tokenizer、vocab、to_bow、DataLoader/mapbatch无需改动。PyTorch 侧的唯一注意点是类别数torch.nn.Linear(vocab_size, 4)中的4要改为你自己的类别数标签也要从 1 基映射回 0 基Notebook 的bowify里t[0]-1正是针对 AG News 1-4 的标签编码。TF 侧如果使用TextVectorization内联进模型替换数据后记得重新adapt构建词表否则 OOV 词全部落入[UNK]而丢失信息。五、把跑通升级为有发现Notebook 改写框架作业要求重写 notebook 以突出你的发现建议按下面的实验骨架组织新版 Notebook数据探索块展示自有数据集的样本、类别分布直方图、文本长度分布——这是原 Notebook 用 AG News 时没有的增量分析词表统计块打印词表大小、Top-N 高频词、OOV 率对比全量词表与截断词表PyTorch 可调min_freqTF 可调max_tokens对精度的影响三组对照实验BoW vs. Bigram-BoW vs. TF-IDF 各训一个分类器在同一测试集上记录精度、损失曲线与训练耗时错误分析块抽样打印分错样本及其真实标签/预测标签归纳你的数据集上哪类文本最难分例如 UFO 的triangle与delta描述高度相似结论块回答案例问题——在我的数据集上哪种表示更好为什么。作业还提示可以挑战N-Gram 组合用CountVectorizer(ngram_range(1, 2), token_patternr\b\w\b, min_df1)生成 bigram 词表原 Notebook 中该示例词表为 18 个 token并对比 unigram-only 与 bigram 的精度差。注意 AG News 上的 bigram 全词表高达1,308,842个 token在你的数据集上同样会面临维度爆炸因此要善用min_freq过滤低频 n-gram——这是作业中最有价值的工程观察点之一。六、TF-IDF 原理与两种实现理论速查TF-IDF词频-逆文档频率是 BoW 的加权变体权重公式为w_ij tf_ij × log(N / df_i)其中tf_ij是词 i 在文档 j 中的出现次数即 BoW 值N是文档总数df_i是包含词 i 的文档数。直觉上词在某篇文档中出现越多越重要tf项但它在越多文档中出现就越普通log(N/df_i)逆文档频率压低权重当词出现在所有文档中时df_i N权重为 0完全被忽略。两种实现都可在你的 Notebook 中复现# sklearn 路线PyTorch 版 Notebook 使用 from sklearn.feature_extraction.text import TfidfVectorizer vectorizer TfidfVectorizer(ngram_range(1, 2)) vectorizer.fit_transform(corpus) vectorizer.transform([My dog likes hot dogs on a hot day.]).toarray()# Keras 路线TF 版 Notebook 使用 keras.layers.experimental.preprocessing.TextVectorization( max_tokensvocab_size, output_modetf-idf)TF 版 Notebook 的运行结果显示output_modecount的 BoW 模型 val_acc ≈ 0.8772而output_modetf-idf达到 ≈ 0.8849——TF-IDF 在 AG News 上带来了稳定的精度增益你的自有数据集上是否复现这一趋势正是实验报告的核心结论之一。七、作业验收清单与常见坑提交/自评时逐项核对选择了 PyTorch 或 TensorFlow 其中一个 Notebook 作为基线并说明选择理由数据集已替换为自有数据且在 Notebook 中明确标注数据来源与出处Kaggle 数据集页面通常附使用条款需署名/遵循许可所有与类别数、标签编码、词表参数相关的硬编码如Linear(vocab_size, 4)、t[0]-1、max_tokens已按你的数据调整至少完成 BoW 与 TF-IDF或 bigram两组对照实验并保留训练日志与精度输出新增了原 Notebook 没有的分析数据分布、词表统计、错误分析形成你自己的发现结论部分明确回答了哪种表示更适合我的数据及原因。常见坑提醒迭代器耗尽PyTorch 数据集未list()化就重复遍历会拿到空结果OOV 失控TF 侧若词表过小自有数据大量词落入[UNK]精度断崖式下跌需在adapt时用足量样本类别不均衡UFO 这类数据若不处理模型会倾向预测高频类别可引入按类别分层的训练/测试划分版本差异Notebook 使用keras.layers.experimental.preprocessing.TextVectorization等 API若你的框架版本更新需按提示迁移到新路径仓库内 requirements 版本requirements-pytorch.txt可作为对齐基准。八、延伸学习本课结论也是你实验报告的自然收尾BoW / N-Gram / TF-IDF 只能刻画词频无法刻画词义与语序正如语言学家 J. R. Firth 所言一个词的完整意义总是取决于语境。下一课 14-Embeddings 将用 Embedding 降维并引入语义届时可把本文的实验结果作为基线去对比嵌入分类器的增益NLP 章节总览见 lessons/5-NLP/README.md其中包含文本分类、情感分析、命名实体识别、文本生成等任务的完整地图若想比较 BoW 与 Embedding 的差距可直接跳到 lessons/5-NLP/14-Embeddings 的 Notebook 重跑同一数据集形成跨课对照实验。赞分享教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载相关推荐AI-For-Beginners 第 13 课作业实战用自选数据集重跑文本表示 Notebook复现 BoW / N-Gram / TF-IDF 实验AI For Beginners 第 13 课作业实战用自选数据集重跑文本表示 Notebook复现 BoW / N Gram / TF IDF 实验 本文教程人工智能机器学习深度学习AI-For-Beginners 第 13 课实战任务用自定义数据集重跑文本表示 NotebookBoW、N-Gram 与 TF-IDFAI For Beginners 第 13 课实战任务用自定义数据集重跑文本表示 NotebookBoW、N Gram 与 TF IDF 本指南围绕 AI教程人工智能机器学习深度学习AI-For-Beginners 文本表示实验实战用自有数据集重跑 PyTorch / TensorFlow 文本分类 NotebookBoW、N-Gram 与 TF-IDF 全流程AI For Beginners 文本表示实验实战用自有数据集重跑 PyTorch / TensorFlow 文本分类 NotebookBoW、N Gram教程人工智能机器学习深度学习上一篇tldr 仓库中的 lzegrep 别名页解析 xz/lz 压缩文件 grep 家族与 xzgrep 实战用法下一篇Arduino LoRa高级应用信道活动检测与频谱感知技术终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考