这是针对 Kaggle 基准测试挑战
目录
一只眼睛,零借口
我本来想为这个挑战录制一段视频,就像我一直为我的挑战所做的那样。不过昨天我做了一个小的眼睑手术,现在一只眼睛肿了,贴上了敷料。当前情况如下:
没错。我现在看起来像个海盗。我只缺一只鹦鹉和一个酷昵称(欢迎在评论区提出建议)。
但别担心(如果你在担心的话):我完全没问题,我的视力仍然像鹰一样敏锐,双眼皆是。这只是眼睑模块的一个小 bug 修复。眼睛本身仍在生产中并运行顺畅。
话虽如此,戴着眼罩完成一个项目比听起来难多了。深度感知?没了。读代码?糟透了。我不信诅咒,但每次参加挑战,总会出点状况。如果真有人对我下了咒,求求你解除吧,给我喘口气!我就想好好工作,该死的!
顺便说一下,感谢我哥哥从医院开车送我回家,因为单眼戴罩开车感觉真是个糟主意。
但截止日期就是截止日期,专业人士不管怎样都会交付。 于是我给自己打了点鸡血:“兄弟,迈克尔·比斯平基本上只有一只能用的眼睛就成了UFC冠军。你能完成一个编码项目。别找借口,你一点也不菜。” 于是我就这样做了。
让我来告诉你我做了什么。
我进行的基准测试
为什么选择格鲁吉亚语?
我用OpenAI和Anthropic的模型测试了它们对格鲁吉亚语的理解和生成能力。整个过程变成了一段真实的冒险,但在讲那些之前,先让我说说我为何选这个话题。
独一无二且坚韧不拔
格鲁吉亚语是世界上最古老的语言之一。它有自己的字母表,不属于任何主要语系,因而独一无二。在语音上,它有时听起来有点像意大利语,因为两种语言都偏爱元音,但相似之处就到此为止。偏爱元音并不意味着辅音弱。恰恰相反,格鲁吉亚语包含许多人从未听见的辅音,这些辅音紧密堆积,让人直感吃力(比如试着说 გვფრცქვნι,连续八个辅音;它的意思基本是“你剥我们”,虽然听起来像胡言乱语,但这个词确实存在)。这是一种极其丰富的语言。
在语法上,它难得离谱。我理所当然地这么认为,一来我是格鲁吉亚人,二来我是语言爱好者(即便我在学其他语言)。我对格鲁吉亚语法很熟悉,但即使是大多数格鲁吉亚人也不了解其语法的每一个细节,而且我几乎没见过有人说它时没有任何错误。没错,它就是这么深奥复杂。
即便是我这个语法爱好者,也让语言专家检查了我的数据集,以确保我没有出错。当她只返回了3或4处小修改时,我真是欣喜若狂。
仿佛出自奇幻游戏("შენ გგონია Momige? არა, ცდები!")
格鲁吉亚语本身就有独特的魅力。其字母圆润且美观,看起来像是某部奇幻电影或游戏中的精灵文字。说到游戏,它实际上被用在了《巫师3》的《石之心》扩展包中。记得你击败 Gaunter O'Dimm?在他短暂的演讲中间某处,他说:
"შენ გგონია Momige? არა, ცდები!"
("你认为你已经打败了我?不,你错了!")
随后他用其他几种语言继续说话。开发者希望他使用一些古老、异世界的语言,而不是胡言乱语,于是他们挑选了几种符合氛围的真实语言。格鲁吉亚语就是其中之一。
好了,吹嘘我的母语有多棒就到这里。让我们进入技术部分。
我构建了什么
格鲁吉亚语基准测试 包含五个任务,位于 Kaggle Benchmarks,用于检验 AI 模型处理格鲁吉亚语的水平:不仅是读懂,还要能正确地产出。每个数据集都是我亲手从零开始编写的。 没有使用机器翻译,也没有生成文本。
这花费了大量时间和精力……我说的“一些”实际上是难以想象的时间和精力。
计划与现实
我的最初计划可以说是雄心勃勃。格鲁吉亚语的九个维度(数字、动词、翻译、用拉丁字母书写的聊天式格鲁吉亚语、谚语、日期和时间、语法判断,甚至图像),以及 Kaggle 目录中的 全部 41 个模型。我估算完整运行的费用大约为 $345。
我完全可以接受这一点。整个目标是构建一个全面的东西,而不是省钱。说实话:如果我获胜,奖金完全能够弥补这笔开支。
不过……
然后我了解到 Kaggle 的模型积分实际上是怎样运作的:每天免费获得 $10,仅此而已。你不能用自己的钱来充值。我真的去找“添加资金”按钮,结果根本不存在。(虽然有研究资助计划,但不在挑战截止日期期间。)
哦,我对自己没有正确研究 Kaggle 的规则感到非常沮丧和愤怒。我不得不彻底改变我的方法。
于是每天只有 $10 成为了现实。这一限制实际上塑造(或者说更准确地说,重新塑造)了这个项目几乎所有的决策:
- 41 个模型变成了 8 个。 两个供应商,四个级别,使用真实配对而非人群。
- 9 个维度变成了 5 个。 视觉、谚语、日期和时间以及语法判断被删除了。聊天格鲁吉亚语任务(45 项)被构建出来,随后也被删除了。
-
数据集被裁剪 以仅保留能够区分模型的项目(下文将详细说明)。没有任何内容被丢弃:完整数据集存放在仓库的
archive/文件夹中,供任何想在 Kaggle 外部运行的人使用。
另一方面,这一限制让基准测试变得更好。项目更少、更精准,且是公平竞争,而非拥挤的排行榜。
五个任务
下面是模型需要面对的内容。以下每个示例都是基准测试中的真实项目。
1. 数字:二十进制计数
格鲁吉亚语采用二十进制计数。99 是 ოთხმოცდაცხრამეტი,直译为“四个二十加十九”。除此之外,还有序数、分数、小数以及最高达 10³⁹ 的数字,双向转换:数字到文字和文字到数字。
| 问题 | 期望结果 |
|---|---|
| 第 44 位,用文字表示 | დამეოთხე |
| თვრამეტი (18),其序数用数字表示 | მე-18 |
| 1000000,用文字表示 | მილიონი |
中间那个其实更狡猾。当格鲁吉亚数字序词以 მe- 开头时,其前缀会保持在前面(如 მe-18);否则会采用后缀形式(如 21-ე)。记住这个想法,它会在结果中再次出现。
158个问题, 按完全匹配评分(| 用于分隔备选正确答案)。
2. 动词:谁对谁做了什么?
一个格鲁吉亚动词能够表达一个完整的句子:谁对谁做了什么以及何时。მიყვარხαρ 表示“我爱你”(哎呀,顺便说一下), 全部在一个词里。任务包含三种题目:
- 谁对谁: 读取动词形式,判断谁对谁进行动作。
- 形式: 根据给定的人称和时态构造正确的动词形式。
- 前缀: 选择能在上下文中表达正确含义的前缀。
id,kind,input,choices,expected
verbs-000,who_to_whom,მიყვარხარ,A) ის → შენ|B) მე → ის|C) შენ → მე|D) მე → შენ,D
50 项,选择题,字母答案或精确匹配。
3. 翻译:格鲁吉亚语到英语
十二段短段落,充满习语和棘手动词,需翻译成英文。例如,ხელი სთხოვა字面意思是“要求(她的)手”,但实际上它的意思是“求婚”。
由于存在多于一种好的翻译,评判模型会将意思(而非措辞)与我的参考翻译进行比较,采用五级评分:
4 = same meaning, nothing missing, wrong or added
3 = a small slip (a minor detail, tense or nuance), the main meaning intact
2 = partly right: one important part is wrong or missing
1 = only fragments right, the overall meaning is lost
0 = wrong, unrelated, or not English
有个有趣的细节:格鲁吉亚语没有语法性别,所以当格鲁吉亚语文本本身无法区分性别时,评测会明确告知裁判"he"、"she"或"they"都可以。裁判始终使用同一个模型Gemini 3 Flash——它并不在被测模型之列。
4. 完形填空:填补空缺
两篇短文,一篇讲计算机历史,一篇讲罗马帝国,每篇25个空格。模型会拿到30个词典原形的单词,其中5个是干扰项(比如讲罗马的文章里混进了"television"、"banana"或"airplane")。模型不仅要为每个空格挑出正确的词,还要把它变成正确的语法形式。
示例:ძველ [1] ... → დროში("in old times",在古代)
总共50个空格,逐个计分。
5. 改错:只修问题,别伤原文
段落中埋入了语法、拼写和标点错误。模型必须把它们改对,同时不能动任何本来就正确的内容。下面是一个真实题目中的句子:
❌ მთელი ოჯახი მაგიდაზე დაჯდა და ერთად ვივახშმედ.
✅ მთელი ოჯახი მაგიდას შემოუსხდა და ერთად ვივახშმეთ.
计分方式是我最得意的设计。它会在模型修改前后,分别统计与正确答案的词级差异:
# errors_before: how far the input is from the correct text
# errors_after: how far the model's answer is from the correct text
score = max(0, (errors_before - errors_after) / errors_before)
修正 4 个错误中的 3 个,你能得到 0.75 分。但如果把一个正确的词改错,那就又产生了一个错误,得分会下降。用自己的风格重写整段文字也没有用。过度修正会受到惩罚,就像严格的老师会做的那样。
17 段落。
亲手写完全部
这些数据都是我一个一个想出来的:186 条数字行,115 个动词条目,47 段翻译内容,51 段纠错内容,45 条聊天文本以及两篇完形填空文章。随后语言专家审阅了全部内容,我按照她的意见进行了修正。
然而每天只有 10 美元(Kaggle 允许的额度),我负担不起在八个模型上跑完全部数据。于是我进行了裁剪。对数字和动词,我使用了 探测模型:我在全量数据上跑一个廉价模型,保留它答错的每一项,并删去它认为太简单的部分。大数字保持不变。对于翻译部分,我保留了含有最多格鲁吉亚特有陷阱的 12 段落,手动挑选了纠错段落,而完形填空文本则完整保留。
| Task | Written | Kept |
|---|---|---|
| Numbers | 186 rows | 82 rows (158 questions) |
| Verbs | 115 | 50 |
| Translation | 47 | 12 |
| Cloze | 2 texts | 2 texts (50 gaps) |
| Correction | 51 | 17 |
这就意味着每个模型有 287 个计分项。没错,这意味着基准测试故意设得很难。绝对分数相比简单数据集会更低,而排名才是关键。

它在 Kaggle 上是如何运行的
Kaggle Benchmarks 允许你使用 kaggle-benchmarks 库,以纯 Python 编写任务。Kaggle 会在其目录中的任何模型上运行该任务,并记录每次调用:提示词、回答、token 数和费用。
我在基准测试中的每个任务都具有相同的结构:一个小的 项任务 负责提出一个问题并进行评分,以及一个 外层任务,它在整个数据集上运行该项任务并报告一个分数。以下是数字任务的简化版本:
@kbench.task(name="glb-numbers-item", store_task=False)
def number_item(llm, qid, kind, form, text, expected) -> bool:
got = normalize(ask(llm, PROMPTS[(kind, form)].format(text=text)))
accepted = [normalize(e) for e in expected.split("|")]
kbench.assertions.assert_in(got, accepted, expectation=f"{qid}: {text} -> {expected}")
return got in accepted
@kbench.task(name="glb-numbers")
def numbers(llm) -> float:
runs = number_item.evaluate(
llm=[llm], evaluation_data=QUESTIONS, n_jobs=2, on_failure="continue"
)
correct = sum(1 for r in runs.completed_runs if r.result is True)
return correct / len(QUESTIONS)
numbers.run(kbench.llm)
数据位于一个 Kaggle 数据集,整个工作流可以在终端通过 Kaggle CLI 运行:
scripts/push_data.sh "what changed" # upload data/ as a Kaggle dataset
scripts/push_task.sh glb-verbs tasks/glb_verbs.py # push a task
kaggle b t run glb-verbs -m gpt-5.4-2026-03-05 --wait
kaggle b t download glb-verbs -m gpt-5.4-2026-03-05 # every answer, token and cost
障碍与应对
这就是冒险真正开始的地方。这里列出了所有试图阻止我的事情,以及我是如何绕过它们的。
障碍 1:Kaggle 预留最坏情况
在每次调用之前,Kaggle 会预留 最大可能成本:模型的最大输出长度乘以其价格。如果这超出了你的剩余配额,调用将被拒绝,即使实际答案只需花费几分钱:
max estimated cost of operation ($1.60195) exceeds your available quota
(based on max_output_tokens)
我的首次顶级运行就这样夭折了:系统拒绝了大量调用,配额里还剩下不少真实资金。
解决办法:设定一个宽裕但合理的输出限制,并且只允许两个并发调用:
# The longest answer seen in testing was 26,600 tokens.
OUTPUT_LIMIT = {"max_completion_tokens": 32000}
...
runs = number_item.evaluate(llm=[llm], evaluation_data=QUESTIONS, n_jobs=2, ...)
障碍 2:失败的调用看起来像错误答案
当一次调用失败(配额用完,API 抖动)时,该条目仅被计为错误。于是,一次在中途耗尽资金的运行会很乐意地报告 0.3 的得分,并把它放在排行榜上,仿佛模型在格鲁吉亚语表现很差。这不是得分,这是撒谎。
解决办法: 在每个任务中加入错误防护。少量孤立失败(重试 3 次后)仍算错误,但如果超过 5% 的调用失败,任务将停止且不返回任何结果:
errored = len(runs.errored_runs)
if errored > 0.05 * len(QUESTIONS):
raise RuntimeError(f"{errored} of {len(QUESTIONS)} items failed with errors; no score reported.")
这立刻见效了:最坏情况的预留(Obstacle 1)导致我最初的顶级运行被终止,两者都干净利落地停止了,没有出现虚假得分。
障碍 3:一些模型默认会思考
一些模型在回答前会“思考”:它们在隐藏文本中私下推理,并且你需要为每个隐藏 token 付费。我在一次测试运行中写了大约 770,000 个隐藏 token 来回答 251 个问题,其中大多数只有一个词的答案。GPT-5.5 写了大约 750 个隐藏 token 来回答一个单选题(只有一个字母)。
更糟的是,这并不公平:我的一些模型默认会思考,而另一些则不会。将一个思考模型与一个非思考模型进行比较,更多地说明了设置的问题,而不是模型本身的问题。
解决办法:对所有人使用相同的条件。禁止思考,每个模型直接给出答案:
llm.prompt(prompt, schema=Answer, reasoning="none", extra_api_params=OUTPUT_LIMIT)
不思考的话,一次完整运行的成本仅需原来的1%,所有模型都遵循同样的规则。
障碍 4:停不下来思考的模型
当我来到最新的一对时,GPT-6 Astra 直接拒绝了:
reasoning_effort does not support 'none' with this model.
Supported values are: 'low', 'medium', 'high', and 'xhigh'.
解决方案:最新的一对拥有自己的规则。Claude Opus 5 和 GPT-6 Astra 都在最低级别(“low”)进行思考,因此它们在同等条件下竞争。它们在仪表盘中到处被标记为 ⚡ / LOW,因此不会不经意地把它们与无思考的模型进行比较:
LOW_THINKING = ("claude-opus-5", "gpt-6-astra")
def reasoning_for(llm) -> str:
name = getattr(llm, "model", "") or ""
return "low" if any(m in name for m in LOW_THINKING) else "none"
障碍5:每次推送都会运行任务
每次你推送任务的新版本时,Kaggle 会在其默认模型 Gemini 3.7 Flash 上运行一次,此次运行也会计入你的配额。每次重新推送完整基准测试的费用在我这里介于 $0.45 和 $1.00 之间。最终,这些自动运行几乎花费了我 $3,这已经超过了最终比较运行费用的一半。经验教训:在本地测试,尽量少推送。
障碍6:小细节
-
数据集路径会变化。 Kaggle 将数据集挂载在
/kaggle/input下的某个位置,但具体路径会变化。因此每个任务都会查找其文件:
def data_file(name: str) -> Path:
kaggle_input = Path("/kaggle/input")
if kaggle_input.exists():
return sorted(kaggle_input.rglob(name))[0]
return Path(__file__).resolve().parent.parent / "data" / name
- 没有自动重试。 嵌套评估无法重试失败的项目,所以每个任务会自行重试 API 错误,每次暂停 10 秒,共重试 3 次。
-
凭据会过期。 在本地测试运行时,Kaggle 的模型代理凭据每隔几小时就会过期。运行
kaggle b auth -y可以刷新它们。 - 形似字符。 连字符和敲破折号(en dash)看起来一样但实际不同,因此在比较前会对答案进行归一化处理(Unicode 归一化、类似破折号的字符、额外空格)。
模型测试
我将 Anthropic 和 OpenAI 的八个模型在完全相同的条件下,按层级配对送入基准测试:
| 层级 | Anthropic | OpenAI |
|---|---|---|
| 轻量 | Claude Haiku 4.5 | GPT-5.4 mini |
| 中等 | Claude Sonnet 4.6 | GPT-5.4 |
| 顶级 | Claude Opus 4.8 | GPT-5.5 |
| 最新 ⚡ | Claude Opus 5 | GPT-6 Astra |
⚡ 最新这一对是一种特殊情况:正如你在第 4 障碍中看到的,GPT-6 Astra 根本不愿停止思考,因此这一对的两个模型都以“低”水平进行思考。
以下是所有模型必须遵循的规则:
| 规则 | 原因 |
|---|---|
| 无思考 | 每个模型直接给出答案。混合使用思考和非思考模式的模型会不公平。 |
| 一个特殊例外 | GPT-6 Astra 无法关闭思考,因此最新这一对的两个模型都以“低”水平思考。所有地方均标记 ⚡。 |
| 可比较的配对 | 每个层级配对一个 Anthropic 和一个 OpenAI 同类模型。 |
| 相同提示词,相同代码 | 英文说明,格鲁吉亚内容,所有人使用同一版本任务。 |
| 固定评判者 | 翻译结果由 Gemini 3 Flash 评判,它不是被测试的模型之一。 |
| 在公平情况下给予部分得分 | 纠正会奖励每个被修正的错误,并惩罚每个被破坏的正确单词。 |
| 失败永远不会像得分 | 失败调用超过 5% 时,任务将不报告任何得分。 |
发现
见证结果的时刻到了。🥁
| 模型 | 数字 | 动词 | 翻译 | 完形填空 | 纠错 | 平均分 | 成本 |
|---|---|---|---|---|---|---|---|
| Claude Haiku 4.5 | 0.30 | 0.34 | 0.96 | 0.54 | 0.25 | 0.48 | $0.10 |
| GPT-5.4 mini | 0.41 | 0.42 | 1.00 | 0.52 | 0.67 | 0.60 | $0.05 |
| Claude Sonnet 4.6 | 0.39 | 0.52 | 1.00 | 0.76 | 0.44 | 0.62 | $0.29 |
| GPT-5.4 | 0.46 | 0.54 | 1.00 | 0.88 | 0.66 | 0.71 | $0.15 |
| Claude Opus 4.8 | 0.54 | 0.68 | 1.00 | 0.84 | 0.68 | 0.75 | $0.58 |
| GPT-5.5 | 0.51 | 0.60 | 0.98 | 0.88 | 0.74 | 0.74 | $0.30 |
| Claude Opus 5 ⚡ | 0.65 | 0.84 | 1.00 | 0.86 | 0.77 | 0.82 | $1.22 |
| GPT-6 Astra ⚡ | 0.83 | 0.90 | 0.98 | 0.96 | 0.82 | 0.90 | $1.73 |
逐级对比
- 轻量级:GPT-5.4 mini 胜过 Claude Haiku 4.5,0.60 对 0.48,而且价格只要一半。
- 中坚级:GPT-5.4 胜过 Claude Sonnet 4.6,0.71 对 0.62,价格同样只有一半左右。
- 旗舰级:Claude Opus 4.8 险胜 GPT-5.5,0.75 对 0.74,基本算打平。
- 最新一代 ⚡:GPT-6 Astra 击败 Claude Opus 5,0.90 对 0.82,拿下整个基准测试的最高分。五项任务中它领先四项,优势最大的是数字任务(0.83 对 0.65)。
最终战报:OpenAI 在四个级别中赢了三个,而 Anthropic 唯一取胜的旗舰级,其实也只是险胜,近似平局。
先声明一下:数据是我出的,规则也是我定的。如果测试格鲁吉亚语的其他方面,结果可能略有出入。不过我已经尽量让任务覆盖面广、足够通用了。
发现 1:理解格鲁吉亚语已解决。产出却不行。
看看翻译这一列:每个模型的得分在 0.96 到 1.00 之间。它们都能很好地理解格鲁吉亚语,几乎能完美翻译成英文。
再看看其他四列。只要模型需要产出正确的格鲁吉亚语(构造数字、形成动词、变位词语、修正句子),得分就会骤降。即便是最好的模型(Claude Opus 4.8),不思考时也会错掉近一半数字题。只有 GPT-6 Astra,凭借其有限的思考预算,得分才超过 0.80。
发现 2:数字是最终挑战
对于 8 个模型中的 6 个,数字任务是最难的;剩下的两个则排名靠后。其中的差距悬殊:
| 问题类型 | 各模型得分范围 |
|---|---|
| 词 → 数字,基数 | 0.74 到 0.96 |
| 词 → 数字,序数 | 0.04 到 0.92 |
| 巨大数字,10¹⁵ 到 10³⁹ | 0.06 到 0.53 |
把格鲁吉亚数字读成阿拉伯数字:没问题。把其序数写成阿拉伯数字:灾难。GPT-6 Astra 在这项任务中是个大例外,得分 0.92,而接下来表现最好的模型只有 0.62。还记得前面提到的 მე-18 吗?大多数模型写出了后缀形式,这是因为它们见过的模式更多。面对 მე-40000(四万分之一),只有 8 个模型中的 2 个答对了。
发现 3:错误非常具有格鲁吉亚特色
我最喜欢的项目环节是阅读错误答案。它们并非随机。如果你尝试用别处的语法来说格鲁吉亚语,就会得到这样的结果:
- "我爱上你了。" 在格鲁吉亚语中,坠入爱河是一种倒置动词:爱者被标记为间接宾语,因此是 შემიყვარდი,直译为“你对我产生了爱”。只有 GPT-6 Astra 答对了。其他模型大多构造了普通的及物动词(შეგიყვარე)。
发现 4:格鲁吉亚语对 Claude 的 token 消耗更高
相同提示词,相同格鲁吉亚文本,token 数量相差甚大。Claude 模型的输入 token 比 GPT 模型多 2 到 2.6 倍,针对完全相同的问题:
| 任务 | Claude,每次调用的输入 token | GPT,每次调用的输入 token |
|---|---|---|
| 数字 | 272 | 104 |
| 动词 | 310 | 130 |
| 完形填空 | 1,412 | 699 |
| 纠错 | 404 | 159 |
这部分原因在于各厂商的答案格式说明。另一部分是各分词器对格鲁吉亚文本的切分方式。
实际上,这意味着格鲁吉亚提示词对 Claude 用户的花费明显高于每 token 价格所暗示的。
发现 5:便宜也能聪明
在对错分明的任务中,每个正确答案的成本:
- GPT-5.4 mini: 每个正确答案 0.03 美分。这是基准测试中的优惠。
- Claude Opus 5 ⚡: 每个正确答案 0.55 美分,约为 GPT-5.4 mini 价格的 17 倍。
- GPT-6 Astra ⚡: 每个正确答案 0.67 美分。得分最高,但每个正确答案的成本约为 GPT-5.4 mini 的 21 倍。
侧任务:未受邀请的访客
记得 Gemini 3.7 Flash,Kaggle 在每次推送时会自动运行的模型吗?它不参与我的比较,但我在每次推送时它都参加了测试,于是我也得到了它的得分。它悄悄地平均得分约为 平均 0.89,高于我表格中的所有模型,只有 GPT-6 Astra (0.90) 高于它。
不过,即使将 thinking 设置为 "none",它仍然会输出约 每个数字问题约 480 输出 token,而未启用 thinking 的模型大约只有 16 个输出 token。看来不管你怎么告诉它,它似乎仍在进行一点思考。这带来一个有趣的结论:对于像格鲁吉亚语这样的语言,思考似乎比模型规模更重要。我表格中表现最好的两个模型 GPT-6 Astra 和 Claude Opus 5 也都将 thinking 设置为 "low"。
总成本
整个项目在 Kaggle 的免费每日积分上运行。所有测试、探测和最终运行的总花费:
| 费用 | |
|---|---|
| 最终比较运行 | $4.63 |
| Kaggle 自动推送运行 | $2.88 |
| 早期运行和成本探测 | $2.86 |
| 本地测试运行 | $3.46 |
| 总计 | $13.84 |
是的,仅自动推送运行费用就超过了实际基准测试费用的一半。此外,将其分散到几天内是使每日费用低于 10 美元的唯一方法。
仪表盘
表格很好,但我想要一些你可以实际探索的东西。因此所有结果都在一个交互式仪表盘上:
- 概览:逐级对决、任务矩阵以及关键发现
- 费用及 token:每个模型每任务花费、token 差距、每个正确答案成本以及整个项目总花费
- 任务:按题型数字、按类型动词、更正分为固定/遗漏/损坏,以及每个模型的 cloze 空白全部
- 示例:真实问题及每个模型的实际答案,以及错误解释
- 方法:数据来源、每项任务的评分方式、条件及限制
这是一个单静态 HTML 页面,无框架、无构建步骤、无图表库,由直接从 Kaggle 运行文件生成的 Python 脚本产生。因此仪表盘和本文永不会出现分歧。
👉 georgekobaidze.github.io/georgian-language-benchmarks
局限性
让我们直言不讳地说明这个基准测试能告诉你什么,不能告诉你什么:
- 设计上很难。 这些集合主要保留模型答错的项,因此绝对分数相比简单集合会更低;排名才是有意义的部分。
- 小规模集合。 一些任务只有 12 到 17 项,因此几分的差距不具显著性。
- 每模型仅运行一次。 同一模型的重复运行在每个任务上大约相差 ±0.03。
- 评判者是一个模型。 翻译得分取决于 Gemini 3 Flash 对语义的判断。
- token 差距包含格式开销,而不仅仅是分词器。
接下来
- 更大的集合。 完整、未裁剪的数据集已在仓库 archive/ 文件夹中,可免受每日上限限制地运行。
- 更多供应商。 Google、xAI 以及开放模型,在预算允许的情况下。
- 思考 vs 不思考。 Gemini 侧重任务需要一个恰当的实验:在相同数据上,对同一模型分别启用和禁用思考。
- 更多格鲁吉亚语。 热烈欢迎母语者贡献新条目、更正和替代答案。
我的基准测试
- 📊 仪表盘: georgekobaidze.github.io/georgian-language-benchmarks
- 🏆 Kaggle 基准: kaggle.com/benchmarks/georgekobaidze/georgian-language-benchmark(排行榜仅显示在任务最新版本上运行的模型;最新的一对模型是在“low”思考模式下运行的;所有 8 个模型都在仪表盘上。)
- 💻 代码: github.com/georgekobaidze/georgian-language-benchmarks
总结
我一开始只能用一只眼睛看,后来做出了这个基准测试、仪表盘,并对自己的语言有多难有了深刻的认识。模型对格鲁吉亚语的理解几乎完美。正确地生成它则是另一回事,而这正是此基准测试衡量的差距。
我的博士学位到底去哪儿了?我见过很多人(不止一个人)为了远低于此的代价就拿到了博士学位,我可不是在开玩笑。我是说真的。
如果你会说格鲁吉亚语,去看看 Examples 标签,告诉我哪个错误让你笑得最厉害。另外,如果你有个好听的海盗昵称要给我,你知道评论在哪里。
如果你不会说格鲁吉亚语却打算学它,那就三思而后行,问问自己是否真的有决心,因为这可能需要花费 3 到 4 年(甚至更多)的高强度学习,即便如此你也只能达到平均水平。如果需要任何建议,随时联系我告诉我。
喜欢这篇文章?让我们保持联系吧!
我在以下平台上分享更多软件工程见解、项目和实验:










