#P14793. [NERC 2025] LLM Training

    ID: 16620 远端评测题 3000ms 1024MiB 尝试: 0 已通过: 0 显示难度省选/NOI− 上传者: 标签>数学2025Special Judge字典树 Trie后缀数组 SAICPC拉格朗日乘数法NERC/NEERC

[NERC 2025] LLM Training

题目描述

你被给予一个文本数据集。你的任务是训练 LLM(大型语言模型)并找到可能的最小损失。不开玩笑。

一个文本数据集是一个文本数组 t1,t2,…,tnt_1, t_2, \ldots, t_n。每个文本 tit_i 是一个词元序列。我们将词元集合 TT 定义为出现在至少一个文本 tit_i 中的所有词元的集合。此外,对于每个文本 tit_i,存在一个位置集合 Li⊆{1,2,…,∣ti∣}L_i \subseteq \{1, 2, \ldots, |t_i|\}。词元 ti[j]t_i[j] 由 LLM 生成当且仅当 j∈Lij \in L_i,由用户书写当且仅当 j∉Lij \notin L_i。

让我们将上下文大小为 kk 的 LLM 定义为一个概率模型 PkP_k,它根据一个上下文 ww(一个长度在 00 到 kk 之间(含)且元素来自 TT 的序列)定义序列下一个词元的概率分布。因此概率模型 PkP_k 是一个庞大的概率表 Pk(next∣w)P_k(\text{next} | w),对任意上下文 w∈T∗w \in T^{*}、0≤∣w∣≤k0 \leq |w| \leq k 和任意词元 next∈T\text{next} \in T 均有定义。条件 0≤Pk(next∣w)≤10 \leq P_k(\text{next} | w) \leq 1 和 $\sum\limits_{\text{next} \in T} P_k(\text{next} | w) = 1$ 必须满足。

上下文大小为 kk 的 LLM 的损失函数是为 PkP_k 定义的如下函数:

$$\mathcal{L}_k(P_k) \,\, = \,\, \sum_{i=1}^{n} \,\, \sum_{j\in L_i} \, -\log_2 P_k\!\left( \underbrace{t_i[j]}_{\text{下一个词元}} \ \middle|\ \underbrace{t_i[\max(1,j-k)\,..\,j-1]}_{\text{上下文}} \right)$$

这里 ti[l .. r]=ti[l]ti[l+1]…ti[r]t_i[l\,..\,r] = t_i[l] t_i[l+1] \ldots t_i[r] 是从第 ll 个到第 rr 个词元的子串,ti[1 .. 0]t_i[1\,..\,0] 是空字符串。因此,对于每个文本以及每个由 LLM 生成的词元,我们将该词元将被生成的概率的负对数(以 22 为底)加到损失中,该概率依赖于前 kk 个词元的子串(或者如果前缀长度小于 kk,则是整个前缀)。如果概率为零,我们假设负对数为 +∞+\infty。该损失函数被称为基于 LLM 生成位置的(以 22 为底的)交叉熵损失。损失函数值 Lk(Pk)\mathcal{L}_k(P_k) 越小,LLM PkP_k 越好。

对于每个 0≤k<max⁡i=1..n∣ti∣0 \leq k < \max\limits_{i=1..n} |t_i|,计算对于某些 PkP_k —— 上下文大小为 kk 的 LLM —— 可以获得的最小可能损失 Lk(Pk)\mathcal{L}_k(P_k)。可以证明这个最小值是可达到的且不是无穷大。

输入格式

第一行包含一个整数 nn (1≤n≤1051 \leq n \leq 10^5) —— 数据集中文本的数量。接下来是文本描述。

第 ii 个文本描述的第一行包含一个整数 mim_i (1≤mi≤3⋅1051 \leq m_i \leq 3 \cdot 10^5) —— tit_i 的长度 (mi=∣ti∣m_i = |t_i|)。

下一行包含 mim_i 个字符串 ti[1]t_{i}[1], ti[2]t_{i}[2], …\ldots, ti[mi]t_{i}[m_i] (1≤∣ti[j]∣≤51 \leq |t_{i}[j]| \leq 5) —— 文本 tit_i 的词元。每个词元由 ASCII 码在 3333 到 126126 之间的字符(可打印字符)组成。

下一行包含一个由 mim_i 个字母 U\texttt{U} 和 L\texttt{L} 组成的字符串 ℓi\ell_i,它编码了集合 LiL_i。所有字母为 L\texttt{L} 的位置由 LLM 生成,所有字母为 U\texttt{U} 的位置由用户书写。因此 Li={j ∣ ℓi[j]=L}L_i = \{j\,|\,\ell_{i}[j] = \texttt{L}\}。保证最后一个词元由 LLM 生成,即 ℓi[mi]=L\ell_{i}[m_i] = \texttt{L}。

保证所有 ii (1≤i≤n1 \le i \le n) 的 mim_i 之和不超过 3⋅1053 \cdot 10^5。

输出格式

输出 M=max⁡i=1..nmiM = \max\limits_{i=1..n} m_i 个实数:对于每个 k=0,1,…,M−1k = 0, 1, \ldots, M-1,输出所有可能的 PkP_k —— 上下文大小为 kk 的 LLM —— 的最小可能损失 Lk(Pk)\mathcal{L}_k(P_k)。

如果你的答案的绝对误差或相对误差不超过 10−610^{-6},则将被接受;形式化地说,如果 pp 是你的答案,qq 是出题人的答案,则应满足:∣p−q∣max⁡{1,∣q∣}≤10−6\frac{|p - q|}{\max\{1, |q|\}} \le 10^{-6}。

4
5
1 + 1 = 2
UUUUL
5
1 + 2 = 3
UUUUL
5
2 + 1 = 3
UUUUL
5
2 + 2 = 4
UUUUL
6.000000000000
6.000000000000
4.000000000000
4.000000000000
0.000000000000
4
4
N E F <EOS>
LLLL
5
N E R C <EOS>
LLLLL
6
N E E R C <EOS>
LLLLLL
5
I C P C <EOS>
LLLLL
55.683674395584
12.490224995673
8.000000000000
8.000000000000
8.000000000000
8.000000000000
1
16
a b a c a b a d b a b d a b a c
ULLULLLLLLULLLLL
22.595941331507
12.464393446710
5.245112497837
2.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
2
4
WA WA WA AC
LULL
4
AC AC WA AC
LLUL
5.509775004327
4.754887502163
4.000000000000
2.000000000000

提示

翻译由 DeepSeek V3 完成