SONUB
ZH English 한국어 日本語 中文 हिन्दी বাংলা اردو Español Português Français Deutsch Русский العربية Bahasa Indonesia Tiếng Việt ไทย Türkçe

如何开启通知

此浏览器或网址无法使用通知。请使用支持通知的浏览器,通过安全连接访问SONUB。

如果通知被屏蔽,请在浏览器设置中允许通知。

  1. 打开地址栏旁的站点设置或浏览器的站点设置,将此网站的通知设为允许。
  2. 在设备设置中允许浏览器发送通知,并检查勿扰模式或专注模式。
  3. 返回SONUB并刷新页面。通知开启后,铃铛将不再显示。

在iPhone或iPad上,将SONUB添加到主屏幕,从主屏幕打开后允许通知。

登录 退出登录 显示主题 默认主题 深色主题 粉色主题 聊天 1:1 聊天 群聊 论坛 公告 新闻区 建议区 自我介绍 主菜单

1级

说明构建 的全过程,然后通过亲手完成 XSLM。 选一个例子,把你的设计和理由大声讲出来。

报考条件

年满10周岁可报考。

屏幕共享面试

通过SONUB视频功能共享整个屏幕后进行作业。

1级面试任务——构建 XSLM

  1. 考官会询问 是如何构建的——环境、与项目结构、、、、文本生成、、XChat 和发布。考生要立刻用自己的话回答。
  2. 回答之后,考生通过亲手完成 XSLM。考生输入并运行源码,保存训练好的,启动 Runner,并让自己训练的模型在 XChat 中作答——考试到此结束。

所有内容都要亲手输入并运行,不能交给外部 或其他人。在你操作期间,考官可能会问某个输出或某行是什么意思。

各级通用说明

面试问题示例:猜下一个词的人工智能

考官 如果要做一个,在学生写学习笔记时猜出下一个词,你会怎么做?又怎样确认它好用?请一步一步说明。

按下面四个步骤回答。每一步都写了要说什么,并附一个简短例子。

  1. 1. 目标

    说清这个人工智能为谁做什么——输入什么、输出什么。例如:“学生输入‘机器’,它推荐‘学习’。”

  2. 2. 数据

    说清它从什么学、学多少、留出什么用来测试。例如:“我自己笔记里的 2,000 个句子——80% 用来学习,20% 留作测试。”

  3. 3. 做法

    说清它内部怎样工作、用什么来做。例如:“一个 统计哪个词后面跟哪个词,推荐最常出现的下一个词。”

  4. 4. 检验

    说清怎么知道它好用——一个要测量的数字和一个局限。例如:“在测试句子上,统计真正的下一个词落在前三个推荐里的比例。它只看前面一个词,所以长句子会出错。”

考官可能会换题目——例如过滤垃圾短信或推荐午餐菜单——但你仍按同样的四个步骤回答。级别越高,每一步说得越详细;面试里除了这道题,还有符合各级别的其他问题和任务。

学什么

  1. 用自己的话说明构建 的每一步——从准备到、、、文本生成、、XChat 和发布。
  2. 通过亲手输入并运行 XSLM 源码,一直做到用自己训练的在 XChat 中对话。
  3. 检查输出(、生成的文本、 响应),遇到问题时阅读并加以修正。

如何评分

  • 考生是否按顺序、流畅地用自己的话说明了如何构建 XSLM?
  • 考生是否通过屏幕共享完成了 XSLM,并让自己训练的模型在 XChat 中作答?
  • 考生是否检查了输出,并说明了自己如何修正错误?

面试预测问题

以下20道题是考官在面试中可能提出的问题示例。不要只想猜中一个正确的词,请把答案大声说明出来。展开每一题可以看到说明示例和追问。这些不是正式试题。

整体流程、环境与数据

  1. 1

    考官 请说明 是什么,以及从准备到在 XChat 中对话的完整构建顺序。

    查看说明示例

    说明示例 XSLM(Extra Small Language Model)是你在 SONUB 上从零构建的一个微型 ,用来学习 是如何开发的。顺序是:检查环境 → 文件夹、settings.json 和数据(prepare.py)→ (tokenizer.py)→ (engine.py、model.py)→ (train.py)→ 文本生成(generate.py)→ (runner.py)→ XChat 聊天界面(xchat.py)→ 在 上发布(export.py)。当你的被保存、再次加载并在 XChat 中使用时,XSLM 就完成了。

    追问 即使 XSLM 的回答很奇怪,为什么也可以说它已经完成了?

  2. 2

    考官 请说明为什么构建 不需要 pip install、、,也不需要。

    查看说明示例

    说明示例 /ai/build 上的是用 在中运行的 32bit ,并且已经装好了 3。源码只使用 Python ,从不 import ,因此不需要用 pip 安装任何东西。由你从零开始自己,也不任何外部 ,所以不需要 API key。计算在浏览器模拟出的 上运行。

    追问 要在自己的电脑上运行同样的源码,需要什么?

  3. 3

    考官 请说明 项目的文件夹结构以及 settings.json 中的各项值。

    查看说明示例

    说明示例 所有工作都在 ~/xslm 中进行。 存放原始文本(raw.txt)、、和;checkpoints 存放好的(model.json); 源码直接放在项目文件夹中。settings.json 中有 width(的大小)、(一次能看到多少个词元)、merges( 合并次数)、steps(训练重复次数)、(每次改变多少)、seed 和 等值。

    追问 在继续训练时修改 settings.json 会发生什么?

  4. 4

    考官 请说明(raw.txt)的格式,以及 prepare.py 如何处理它。

    查看说明示例

    说明示例 raw.txt 每行是一个问答对,格式为 "Q: … | A: …"。prepare.py 以 读取它,去掉空行和重复行,并检查至少有五行不同的内容且全部格式正确。然后每五行中留出一行用于验证,保存 /train.txt 和 data/val.txt(默认数据得到 12 行训练数据和 3 行)。

    追问 如果加入一个自己的问答对,首先要重新生成哪个文件?

  5. 5

    考官 请说明为什么要把分成训练集和验证集,以及为什么要在转换成之前按问答对来划分。

    查看说明示例

    说明示例 是从未过的文本,所以它能显示模型能否处理新文本,而不只是死记硬背。如果在把文本转换成词元之后随便从哪里切开,同一个例子可能同时落在两边,所以要先按问答对划分。这样验证 才真实可信。

    追问 如果验证数据也被用于训练,验证 loss 就再也无法告诉你什么?

分词器与模型

  1. 6

    考官 请说明为什么需要,以及 基于字符的 如何学习词表。

    查看说明示例

    说明示例 只能计算数字,不能计算文字,所以分词器给每一段文本分配一个编号。基于字符的 BPE 从单个字符开始,按照 settings.json 中 merges 指定的次数,把出现最频繁的一对相邻片段合并成一个新片段。合并的顺序就成为规则,保存在 /tokenizer.json 中。

    追问 如果调大 merges,同一段文本的数量和词表大小会如何变化?

  2. 7

    考官 请说明 encode 和 decode 是什么、roundtrip: OK 检查的是什么,以及从未见过的字符会怎样。

    查看说明示例

    说明示例 encode 先把文本逐个字符转换成数字,再按相同顺序应用学到的合并规则,得到一个数字列表;decode 把数字转换回片段并拼接起来。roundtrip: OK 表示整个训练文本被转换成数字后又完全还原成了原文。新字符不会被学习——它会变成编号为 0 的片段 �。

    追问 如果重新,为什么不能继续使用已经训练好的?

  3. 8

    考官 请说明 和是什么,以及为什么要把它们相加。

    查看说明示例

    说明示例 embedding 是一张按查出一个数字(长度为 width)的表。同一个还需要知道自己处在哪个位置,所以要加上为每个位置单独学习的位置向量。两张表都从随机值开始,并在中不断变化。

    追问 为什么位置向量表的行数与 相同?

  4. 9

    考官 请说明 中的 Query、Key、Value 以及 。

    查看说明示例

    说明示例 Query 是当前位置要寻找的东西,Key 是之前每个位置的,Value 是要取走的信息。Query 和 Key 给出相关度分数, 把分数变成,再按这个比例混合各个 Value。causal mask 让每个位置只能看到自己和之前的位置,因此在时无法偷看答案。

    追问 为什么之后加入时,之前位置的分数不能改变?

  5. 10

    考官 请说明 engine.py 中的 Value 和 backward 做什么,以及 之后的各层(、和)。

    查看说明示例

    说明示例 一个 Value 保存一个数字、它对 的影响(grad),以及每次运算的记录。backward 沿反向遍历并累加,因此被多次使用的的影响也会被加总。MLP 把扩展到 width 的两倍再压缩回来,残差连接把一层的输入加到它的输出上,以免信息丢失,输出层(head)则为词表中的每个词给出下一个的分数。

    追问 的数量由什么决定?如何计算?

训练与文本生成

  1. 11

    考官 请说明 学习做什么,以及 。

    查看说明示例

    说明示例 目标是。如果是 [a, b, c],输入 [a, b] 的答案就是 [b, c]。cross-entropy loss 是正确词元所得的对数的负值,所以正确词元得到的概率越大,它就越小。 小并不保证说的是真话。

    追问 对于给每个词元相同概率的模型,loss 与词表大小有什么关系?

  2. 12

    考官 请按顺序说明 train.py 中一个训练步骤里发生了什么。

    查看说明示例

    说明示例 它从中随机挑出一段 +1 个,把每个的 grad 清为 0,计算 并用 backward 求出。如果梯度的总大小超过 1,就把它缩小到 1(clipping),然后从每个权重中减去 × 梯度()。之后保存检查点,并打印 step 和 loss。

    追问 如果不把 grad 清为 0,会发生什么?

  3. 13

    考官 请说明检查点保存了什么,以及恢复训练时会检查什么。

    查看说明示例

    说明示例 checkpoints/model.json 保存设置、、的()、、step 和随机状态。它先写入一个,再用 替换上去,所以如果保存中途停止,之前的检查点仍然保留。下次运行时会检查设置、分词器和数据是否未变——若有变化就有意拒绝,若没变就从保存的 step 继续。

    追问 为什么修改数据后继续从是有风险的?

  4. 14

    考官 请说明如何检查是否顺利——如何解读训练 和验证 loss。

    查看说明示例

    说明示例 train.py 会在训练前后打印验证 loss,并在每一步打印 step 和 loss。每一步挑选的片段都不同,所以 loss 会上下波动。不要凭一个数字下判断——要比较趋势,以及训练前后的验证 loss。如果只有训练 loss 下降而验证 loss 上升,就要怀疑(overfitting)。

    追问 如果 过大很多,loss 会怎样变化?

  5. 15

    考官 请说明 generate.py 如何写出文本,以及 、 和 seed 的作用。

    查看说明示例

    说明示例 它读取检查点重建,然后重复:输入最后 个,得到下一个词元的分数,选出一个并追加到末尾。temperature 为 0 时选分数最高的,temperature 越大,越平均。top_k 只保留前 k 个候选,为 0 时全部保留。相同的检查点、问题、seed 和设置会得到相同的文本。

    追问 更多的随机性能让不足的模型回答得更好吗?

Runner、XChat 与发布

  1. 16

    考官 请说明 (runner.py)是什么、它开放哪些 ,以及如何检查它。

    查看说明示例

    说明示例 Runner 是一个课堂用的,它只读取一次检查点,接收 请求并调用 generate。在 (loopback)上、settings.json 中的 上, 返回 {"status": "ok"}, /generate 返回根据 中的 生成的文本。在后台启动它,用 调用 /health 和 /generate,并检查空 JSON 这类错误请求会得到 400,而不是让服务器崩溃。

    追问 为什么重新训练后必须重启 Runner?

  2. 17

    考官 请说明 XChat(xchat.py)做什么,以及从 XChat 到 再到的流程。

    查看说明示例

    说明示例 XChat 只是聊天界面——它自己从不加载。它读取问题,套上格式(Q: … A:),以 发送到 Runner 的 /generate,并显示返回的文本。这段文本由 Runner 用保存的权重写出。如果 Runner 没有运行,XChat 会显示连接错误,而不是假的回答。

    追问 为什么 XChat 在发送问题前要加上 "Q:" 和 "A:"?

  3. 18

    考官 请说明如何在 上发布完成的 ,以及要上传哪些文件。

    查看说明示例

    说明示例 export.py 把(model.safetensors)、设置(config.json)、(tokenizer.json)和运行用的源码收集到 hub 文件夹中,并读回来检查没有任何改变。编写(),在 Hugging Face 上创建一个 Public ,然后用 Write 令牌运行 install → push。当在另一个文件夹中 git clone,再执行 python3 export.py --restore . 和 python3 generate.py 能得到相同的回答时,就算发布完成了。

    追问 如果 git push 因为被拒绝,你漏掉了哪一步?

  4. 19

    考官 请说明 格式是什么,以及中写些什么。

    查看说明示例

    说明示例 safetensors 是一种文件,开头是 头部(名称、形状、位置),后面是以 4-byte 值依次写入的数字。它不包含可运行的,所以读取是安全的。模型卡说明是什么,并列出文件、运行方法、、及其局限(它是用于学习的,所以回答大多是随机的)。

    追问 全部上传完成后,Access Token 要怎么处理?

  5. 20

    考官 在面试中亲手完成 时,请说明你将如何证明真的是你自己的在作答。

    查看说明示例

    说明示例 按顺序运行 prepare.py → tokenizer.py(roundtrip: OK)→ engine.py 的检查和 model.py 的形状检查 → train.py(、step、、验证、checkpoints/model.json)→ generate.py → runner.py(、/generate)→ xchat.py,并展示每一步的输出。最后在 XChat 中提问并展示返回的回答;再展示关闭 时出现连接错误,重新启动后聊天又恢复。这样就能清楚表明回答来自你的检查点,而不是一句固定的句子。

    追问 如果回答很奇怪,你会先检查什么?

去做练习题 线上的 AI 知识考试是确认自己当前水平最快的方式。

学习指南

人工智能

智能体工具

Vibe 编程

AI 应用

AI证书

AI课堂

IT 基础

聊天

论坛

创作

社区

更多

术语词典

选一个你不认识的词吧,可以看到简单的解释和相关术语。

还没有匹配的术语。

选择一个术语即可查看解释。