Skip to content

Commit f31a7e0

Browse files
author
CassiopeiaCode
committed
Add Chinese (zh) translation of documentation
1 parent a590376 commit f31a7e0

23 files changed

+1816
-0
lines changed

docs/translate/zh/_toctree.yml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
- sections:
2+
- local: index
3+
title: 🤗 Lighteval
4+
- local: installation
5+
title: 安装
6+
- local: quicktour
7+
title: 快速上手
8+
title: 入门指南
9+
- sections:
10+
- local: saving-and-reading-results
11+
title: 保存和读取结果
12+
- local: using-the-python-api
13+
title: 使用Python API
14+
- local: adding-a-custom-task
15+
title: 添加自定义任务
16+
- local: adding-a-new-metric
17+
title: 添加自定义指标
18+
- local: evaluating-a-custom-model
19+
title: 评估自定义模型
20+
- local: use-inference-providers-as-backend
21+
title: 使用HF的推理提供商作为后端
22+
- local: use-litellm-as-backend
23+
title: 使用litellm作为后端
24+
- local: use-vllm-as-backend
25+
title: 使用vllm作为后端
26+
- local: use-sglang-as-backend
27+
title: 使用SGLang作为后端
28+
- local: use-huggingface-inference-endpoints-or-tgi-as-backend
29+
title: 使用Hugging Face推理端点或TGI作为后端
30+
- local: contributing-to-multilingual-evaluations
31+
title: 贡献多语言评估
32+
title: 指南
33+
- sections:
34+
- local: metric-list
35+
title: 可用指标
36+
- local: available-tasks
37+
title: 可用任务
38+
title: API
39+
- sections:
40+
- sections:
41+
- local: package_reference/evaluation_tracker
42+
title: EvaluationTracker
43+
- local: package_reference/models
44+
title: 模型和模型配置
45+
- local: package_reference/pipeline
46+
title: 流水线
47+
title: 主要类
48+
- local: package_reference/metrics
49+
title: 指标
50+
- local: package_reference/tasks
51+
title: 任务
52+
- local: package_reference/logging
53+
title: 日志
54+
title: 参考
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
# 添加自定义任务
2+
3+
要添加新任务,首先打开一个issue,确定它是否将被集成到lighteval的核心评估中、扩展任务中还是社区任务中,并在hub上添加其数据集。
4+
5+
- 核心评估是在其度量和处理中只需要标准逻辑的评估,我们会将其添加到我们的测试套件中,以确保随着时间的推移不会出现回归。它们在社区中已经有很高的使用率。
6+
- 扩展评估是在其度量中需要自定义逻辑的评估(复杂的规范化、LLM作为评判等),我们添加它们是为了方便用户。它们在社区中已经有很高的使用率。
7+
- 社区评估是社区提交的新任务。
8+
9+
随着时间的推移,一个受欢迎的社区评估可以发展成为扩展评估或核心评估。
10+
11+
> [!TIP]
12+
> 您可以在<a href="https://github.com/huggingface/lighteval/tree/main/community_tasks">community_task</a>目录中找到自定义任务的示例。
13+
14+
## 逐步创建自定义任务
15+
16+
> [!WARNING]
17+
> 要将您的自定义指标贡献给lighteval仓库,您首先需要通过运行`pip install -e .[dev]`安装所需的开发依赖项,然后运行`pre-commit install`安装pre-commit钩子。
18+
19+
首先,在`community_tasks`目录下创建一个Python文件。
20+
21+
您需要定义一个提示函数,该函数将把来自数据集的一行转换为用于评估的文档。
22+
23+
```python
24+
# 根据您不同的任务需求定义尽可能多的函数
25+
def prompt_fn(line, task_name: str = None):
26+
"""定义如何从数据集行到doc对象。
27+
参考src/lighteval/tasks/default_prompts.py中的例子,
28+
或者在README中获取关于此函数应该做什么的更多信息。
29+
"""
30+
return Doc(
31+
task_name=task_name,
32+
query=line["question"],
33+
choices=[f" {c}" for c in line["choices"]],
34+
gold_index=line["gold"],
35+
instruction="",
36+
)
37+
```
38+
39+
然后,您需要选择一个指标:您可以使用现有的指标(在[`lighteval.metrics.metrics.Metrics`]中定义)或[创建自定义指标](adding-a-new-metric)
40+
[//]: # (TODO: 一旦添加了自动文档,将lighteval.metrics.metrics.Metrics替换为~metrics.metrics.Metrics)
41+
42+
```python
43+
custom_metric = SampleLevelMetric(
44+
metric_name="my_custom_metric_name",
45+
higher_is_better=True,
46+
category=MetricCategory.IGNORED,
47+
use_case=MetricUseCase.NONE,
48+
sample_level_fn=lambda x: x, # 如何计算一个样本的分数
49+
corpus_level_fn=np.mean, # 如何聚合样本指标
50+
)
51+
```
52+
53+
然后,您需要使用[`~tasks.lighteval_task.LightevalTaskConfig`]定义您的任务。
54+
您可以定义有或没有子集的任务。
55+
要定义没有子集的任务:
56+
57+
```python
58+
# 这是如何创建一个简单的任务(如hellaswag),它有一个单一的子集附加到它,并且可能有一个评估。
59+
task = LightevalTaskConfig(
60+
name="myothertask",
61+
prompt_function=prompt_fn, # 必须在文件中定义或从src/lighteval/tasks/tasks_prompt_formatting.py导入
62+
suite=["community"],
63+
hf_repo="",
64+
hf_subset="default",
65+
hf_avail_splits=[],
66+
evaluation_splits=[],
67+
few_shots_split=None,
68+
few_shots_select=None,
69+
metric=[], # 在Metrics中选择您的指标
70+
)
71+
```
72+
73+
如果您想创建具有多个子集的任务,请将它们添加到`SAMPLE_SUBSETS`列表中,并为每个子集创建一个任务。
74+
75+
```python
76+
SAMPLE_SUBSETS = [] # 用于此评估的所有子集列表
77+
78+
79+
class CustomSubsetTask(LightevalTaskConfig):
80+
def __init__(
81+
self,
82+
name,
83+
hf_subset,
84+
):
85+
super().__init__(
86+
name=name,
87+
hf_subset=hf_subset,
88+
prompt_function=prompt_fn, # 必须在文件中定义或从src/lighteval/tasks/tasks_prompt_formatting.py导入
89+
hf_repo="",
90+
metric=[custom_metric], # 在Metrics中选择您的指标或使用您的custom_metric
91+
hf_avail_splits=[],
92+
evaluation_splits=[],
93+
few_shots_split=None,
94+
few_shots_select=None,
95+
suite=["community"],
96+
generation_size=-1,
97+
stop_sequence=None,
98+
)
99+
SUBSET_TASKS = [CustomSubsetTask(name=f"mytask:{subset}", hf_subset=subset) for subset in SAMPLE_SUBSETS]
100+
```
101+
102+
以下是参数及其含义的列表:
103+
104+
- `name` (str),您的评估名称
105+
- `suite` (list),您的评估应该属于的套件。此字段允许我们比较不同的任务实现,并用作任务选择以区分要启动的版本。目前,您会找到关键词["helm", "bigbench", "original", "lighteval", "community", "custom"];对于核心评估,请选择`lighteval`
106+
- `prompt_function` (Callable),您在上面步骤中定义的提示函数
107+
- `hf_repo` (str),hub上您的评估数据集的路径
108+
- `hf_subset` (str),您想用于评估的特定子集(注意:当数据集没有子集时,请用`"default"`填充此字段,而不是用`None``""`)
109+
- `hf_avail_splits` (list),您的数据集可用的所有分割(训练、验证、测试、其他...)
110+
- `evaluation_splits` (list),您想用于评估的分割
111+
- `few_shots_split` (str,可以为`null`),您想从中选择样本作为少量样本示例的特定分割。它应该与`evaluation_splits`中包含的集合不同
112+
- `few_shots_select` (str,可以为`null`),您将用来为少量样本示例选择项目的方法。可以为`null`,或以下之一:
113+
- `balanced``few_shots_split`中选择带有平衡标签的示例,以避免将少量样本示例(因此是模型生成)偏向特定标签
114+
- `random``few_shots_split`中随机选择示例
115+
- `random_sampling` 为每个新项目从`few_shots_split`中随机选择新示例,但如果采样项等于当前项,则从可用样本中删除
116+
- `random_sampling_from_train` 为每个新项目从`few_shots_split`中随机选择新示例,但如果采样项等于当前项,则保留!仅在您知道自己在做什么时使用此选项。
117+
- `sequential` 选择`few_shots_split`的前`n`个示例
118+
- `generation_size` (int),生成评估允许的最大令牌数。如果您的评估是对数似然评估(多选),此值应为-1
119+
- `stop_sequence` (list),作为生成的句子结束标记的字符串列表
120+
- `metric` (list),您想用于评估的指标(有关详细说明,请参见下一节)
121+
- `trust_dataset` (bool),如果您信任数据集,则设置为True
122+
123+
124+
然后,您需要将您的任务添加到`TASKS_TABLE`列表中。
125+
126+
```python
127+
# 存储您的评估
128+
129+
# 带有子集的任务:
130+
TASKS_TABLE = SUBSET_TASKS
131+
132+
# 不带子集的任务:
133+
# TASKS_TABLE = [task]
134+
```
135+
136+
创建文件后,您可以使用以下命令运行评估:
137+
138+
```bash
139+
lighteval accelerate \
140+
"model_name=HuggingFaceH4/zephyr-7b-beta" \
141+
"community|{custom_task}|{fewshots}|{truncate_few_shot}" \
142+
--custom-tasks {path_to_your_custom_task_file}
143+
```
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# 添加新指标
2+
3+
首先,检查是否可以使用[语料库指标](package_reference/metrics#corpus-metrics)[样本指标](package_reference/metrics#sample-metrics)中的参数化函数。
4+
5+
如果不能,您可以使用`custom_task`系统注册您的新指标:
6+
7+
> [!TIP]
8+
> 要查看与自定义任务一起添加的自定义指标示例,请查看<a href="">IFEval自定义任务</a>。
9+
10+
11+
> [!WARNING]
12+
> 要将您的自定义指标贡献给lighteval仓库,您首先需要通过运行`pip install -e .[dev]`安装所需的开发依赖项,然后运行`pre-commit install`安装pre-commit钩子。
13+
14+
15+
- 创建一个包含指标完整逻辑的新Python文件。
16+
- 该文件还需要以这些导入开始
17+
18+
```python
19+
from aenum import extend_enum
20+
from lighteval.metrics import Metrics
21+
```
22+
23+
您需要定义一个样本级指标:
24+
25+
```python
26+
def custom_metric(predictions: list[str], formatted_doc: Doc, **kwargs) -> bool:
27+
response = predictions[0]
28+
return response == formatted_doc.choices[formatted_doc.gold_index]
29+
```
30+
31+
这里的样本级指标只返回一个指标,如果您想为每个样本返回多个指标,您需要返回一个字典,以指标为键,值为值。
32+
33+
```python
34+
def custom_metric(predictions: list[str], formatted_doc: Doc, **kwargs) -> dict:
35+
response = predictions[0]
36+
return {"accuracy": response == formatted_doc.choices[formatted_doc.gold_index], "other_metric": 0.5}
37+
```
38+
39+
然后,如果需要,您可以定义一个聚合函数,常见的聚合函数是`np.mean`
40+
41+
```python
42+
def agg_function(items):
43+
flat_items = [item for sublist in items for item in sublist]
44+
score = sum(flat_items) / len(flat_items)
45+
return score
46+
```
47+
48+
最后,您可以定义您的指标。如果是样本级指标,您可以使用以下代码和[`~metrics.utils.metric_utils.SampleLevelMetric`]
49+
50+
```python
51+
my_custom_metric = SampleLevelMetric(
52+
metric_name={custom_metric_name},
53+
higher_is_better={TrueFalse},
54+
category={MetricCategory},
55+
use_case={MetricUseCase},
56+
sample_level_fn=custom_metric,
57+
corpus_level_fn=agg_function,
58+
)
59+
```
60+
61+
如果您的指标为每个样本定义多个指标,您可以使用以下代码和[`~metrics.utils.metric_utils.SampleLevelMetricGrouping`]
62+
63+
```python
64+
custom_metric = SampleLevelMetricGrouping(
65+
metric_name={submetric_names},
66+
higher_is_better={n: {TrueFalse} for n in submetric_names},
67+
category={MetricCategory},
68+
use_case={MetricUseCase},
69+
sample_level_fn=custom_metric,
70+
corpus_level_fn={
71+
"accuracy": np.mean,
72+
"other_metric": agg_function,
73+
},
74+
)
75+
```
76+
77+
最后,添加以下内容,以便在作为模块加载时将您的指标添加到我们的指标列表中。
78+
79+
```python
80+
# 将指标添加到指标列表!
81+
extend_enum(Metrics, "metric_name", metric_function)
82+
if __name__ == "__main__":
83+
print("Imported metric")
84+
```
85+
86+
您可以通过在启动lighteval时使用`--custom-tasks path_to_your_file`来提供您的自定义指标。

0 commit comments

Comments
 (0)