Skip to content

Commit 312d1b8

Browse files
authored
Merge branch 'main' into dev
2 parents 169fd6b + e1b178e commit 312d1b8

File tree

2 files changed

+282
-0
lines changed

2 files changed

+282
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99

1010
</div>
1111

12+
1213
[English](README.md) | [简体中文](README_CN.md)
1314

15+
1416
# Changelog
1517

1618
- 2024/12/27: Project Initialization

README_zh-CN.md

Lines changed: 280 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,280 @@
1+
<div align="center" xmlns="http://www.w3.org/1999/html">
2+
<!-- logo -->
3+
<p align="center">
4+
<img src="docs/assets/dingo-logo.png" width="300px" style="vertical-align:middle;">
5+
</p>
6+
7+
<!-- icon -->
8+
[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
9+
10+
11+
</div>
12+
13+
# Changelog
14+
15+
- 2024/12/27: Project Initialization
16+
17+
# 一、介绍
18+
19+
Dingo是一款数据质量评估工具,帮助你自动化检测数据集中的数据质量问题。Dingo提供了多种内置的规则和模型评估方法,同时也支持自定义评估方法。Dingo支持常用的文本数据集和多模态数据集,包括预训练数据集、微调数据集和评测数据集。此外,Dingo支持多种使用方式,包括本地CLI和SDK,便于集成到各种评测平台,如[OpenCompass](https://github.com/open-compass/opencompass)等。
20+
21+
## 1. 架构图
22+
23+
![Architecture of dingo](./docs/assets/architeture.png)
24+
25+
## 2. 场景图
26+
27+
![Scene of dingo](docs/assets/scene.png)
28+
29+
# 二、快速启动
30+
31+
用户可以使用 dingo 按照如下所示的两种方式。
32+
33+
## 1.安装
34+
35+
安装 `dingo`
36+
37+
```shell
38+
pip install dingo-python
39+
```
40+
## 2.SDK
41+
42+
尝试运行下方的`SDK`调用方式:
43+
44+
```python
45+
from dingo.io import InputArgs
46+
from dingo.exec import Executor
47+
48+
input_data = {
49+
"eval_group": "sft", # rule list for sft data, other ['default', 'pretrain' ...]
50+
"input_path": "tatsu-lab/alpaca", # dataset from huggingface
51+
"data_format": "plaintext", # data format, other ['json', 'jsonl', 'plaintext']
52+
"save_data": True, # save data to local
53+
}
54+
55+
input_args = InputArgs(**input_data)
56+
executor = Executor.exec_map["local"](input_args)
57+
result = executor.execute()
58+
print(result)
59+
```
60+
61+
更多使用示例请参考[examples](examples),更多评测结果请参考[evaluation](docs/eval),更多配置请参考[config](docs/config.md)
62+
63+
## 3.CLI
64+
65+
尝试运行下方的`CLI`调用规则集评估:
66+
67+
``` shell
68+
python -m dingo.run.cli --input_path tatsu-lab/alpaca -e sft --data_format plaintext --save_data True
69+
```
70+
71+
或者尝试运行下方的`CLI`调用gpt-4o模型评估:
72+
73+
```shell
74+
python -m dingo.run.cli --input_path test/data/test_local_json.json --dataset local -e openai --data_format json --column_content prediction --custom_config test/config/config_gpt.json --save_data True
75+
```
76+
77+
注意,调用模型评估需要添加对应的配置,如上面例子使用的配置如下:
78+
79+
```shell
80+
$ cat test/data/config_gpt.json
81+
{
82+
"llm_config": {
83+
"openai": {
84+
"model": "gpt-4o",
85+
"key": "xxxx",
86+
"api_url": "https://api.openai.com/v1/chat/completions"
87+
}
88+
}
89+
}
90+
```
91+
92+
## 4.前端页面
93+
94+
项目在`cli`端运行后,如果用户设置的save_data参数为True,则会根据质检结果自动生成一份前端页面。
95+
如果用户想要手动启动一份前端页面,则需要输入如果指令:
96+
97+
```shell
98+
python -m dingo.run.vsl --input xxx
99+
```
100+
101+
input之后跟随的是质检结果的目录,用户需要确保目录打开后其中有summary.json文件
102+
103+
# 三、功能列表
104+
105+
## 1.支持多种输入数据源,数据类型,数据模态
106+
107+
Dingo 数据源支持本地文件,huggingface数据集,S3存储文件;数据类型支持预训练,微调和评测等多种数据集;数据模态支持文本和图片数据模态。
108+
109+
## 2.支持自定义规则,模型评估
110+
111+
Dingo 内置了20+通用的启发式规则评估,常用的LLMs(如OpenAI,kimi等)评估和启动本地指定模型(llama3等)评估。
112+
内置启发式规则根据数据集类型内置了 pretrain, sft等多种规则集组合。
113+
规则和模型评估均支持自定义或修改。
114+
支持数据安全评估,如perspective API。
115+
116+
## 3.支持多种接口使用方式,扩展性好,方便集成
117+
118+
Dingo 支持多种接口使用方式,包括本地CLI和SDK,便于集成到各种评测平台,如OpenCompass等。
119+
120+
## 4.支持多种执行引擎
121+
122+
Dingo 支持本地和 SPARK 两种执行引擎,方便执行大小规模的数据评估任务。
123+
124+
## 5.支持多维指标报告,可追溯
125+
126+
Dingo 支持输出7个Quality Metrics概况报告和异常数据追溯详情报告。
127+
128+
# 四、概念介绍
129+
130+
## 1.指标介绍
131+
132+
[指标文档](docs/metrics.md)
133+
134+
## 2.规则介绍
135+
136+
[规则文档](docs/rules.md)
137+
138+
## 3.eval_group介绍
139+
140+
[eval_group文档](docs/groups.md)
141+
142+
## 4.Response介绍
143+
144+
[Response文档](docs/response.md)
145+
146+
# 五、使用方法
147+
148+
## 1.安装
149+
150+
上述的快速启动模块提到的安装,仅安装运行所需的必要包,一些特殊功能所需的包并未安装,如果用户在实习使用过程中需要安装对应的包,
151+
那么可以参考:[安装依赖](requirements)
152+
153+
## 2.注册规则/prompt/模型
154+
155+
如果项目内部的启发式规则不满足用户的质检需求,用户还可以自定义规则或者模型。
156+
157+
### 2.1 注册规则
158+
159+
如果用户想要创建一个新规则 `CommonPatternDemo`,那么首先要为规则添加装饰器,将规则注入项目中。
160+
其次还需要为规则设置 `metric_type` 类型,比如 `QUALITY_BAD_RELEVANCE``group` 可以不用设置。
161+
然后用户需要定义 `DynamicRuleConfig` 对象,这样可以动态的配置规则的属性。
162+
除此之外,规则的方法名称必须是 `eval` 且需要是类方法。
163+
最后一步的返回值应该是 `ModelRes` 对象。
164+
165+
例如:[注册规则](examples/register/sdk_register_rule.py)
166+
167+
### 2.2 注册prompt
168+
169+
用户同样可以注册prompt,方式与注册规则时类似。
170+
171+
例如:[注册prompt](examples/register/sdk_register_prompt.py)
172+
173+
### 2.3 注册模型
174+
175+
注册模型的方式略有不同,用户需要实现一个call_api方法,接受MetaData类型参数,返回ModelRes类型结果。
176+
项目中有已经实现好的基础模型类[BaseOpenAI](dingo/model/llm/base_openai.py),用户可以直接继承。
177+
如果用户有特殊的功能要实现,那么就可以重写对应的方法。
178+
179+
例如:[注册模型](examples/register/sdk_register_llm.py)
180+
181+
## 3.配置
182+
183+
[配置文档](docs/config.md)
184+
185+
## 4.执行引擎
186+
187+
`Dingo` 可以在本地运行,也可以在spark集群上运行。
188+
无论选择何种引擎,executor都支持一些公共方法:
189+
190+
| function name | description |
191+
|--------------------|--------------------------|
192+
| get_summary | get the summary of test. |
193+
| get_bad_info_list | get the bad data. |
194+
| get_good_info_list | get the good data. |
195+
196+
197+
### 4.1 Local Mode
198+
199+
选择spark引擎时,用户可以自由地选择规则、模型进行质检。
200+
201+
[local示例](examples/dataset/sdk_local.py)
202+
203+
### 4.2 Spark Mode
204+
205+
选择spark引擎时,用户只能选择规则进行质检,模型无法使用。
206+
而且`InputArgs`中仅有`eval_group`,`save_data`,`save_correct`,`custom_config`依旧有效。
207+
因此,用户需要输入`spark_session`用来初始化spark,输入`spark_rdd`(由`MetaData`结构组成)作为数据用来质检。
208+
需要注意,`save_data`如果为`False`,那么质检完成后会立刻清除内存中的数据,`spark_session`也立即停止。
209+
210+
[spark示例](examples/spark/sdk_spark.py)
211+
212+
## 5.评估报告
213+
完成一次评测, Dingo 会生成一份概况报告(summary)和详细报告(detail),其中 summary 包含本次评测的整体分数 Score 和7个 Quality Metrics 维度各自的分数。详细报告中会包含每个 Quality Metrics 评估有异常的具体数据内容,方便追溯原因。
214+
`summary.json` 概况文件的示例如下:
215+
216+
```shell
217+
{
218+
"task_id": "d6c922ec-981c-11ef-b723-7c10c9512fac",
219+
"task_name": "dingo",
220+
"eval_group": "default",
221+
"input_path": "test/data/test_local_jsonl.jsonl",
222+
"output_path": "outputs/d6c921ac-981c-11ef-b723-7c10c9512fac",
223+
"create_time": "20241101_144510",
224+
"score": 50.0,
225+
"num_good": 1,
226+
"num_bad": 1,
227+
"total": 2,
228+
"type_ratio": {
229+
"QUALITY_BAD_COMPLETENESS": 0.5,
230+
"QUALITY_BAD_RELEVANCE": 0.5
231+
},
232+
"name_ratio": {
233+
"QUALITY_BAD_COMPLETENESS-RuleColonEnd": 0.5,
234+
"QUALITY_BAD_RELEVANCE-RuleSpecialCharacter": 0.5
235+
}
236+
}
237+
```
238+
239+
详细报告如 `RuleColonEnd.json` 文件示例如下:
240+
241+
```shell
242+
{"data_id": "1", "prompt": "", "content": "�I am 8 years old. ^I love apple because:", "type_list": ["QUALITY_BAD_COMPLETENESS", "QUALITY_BAD_RELEVANCE"], "name_list": ["QUALITY_BAD_COMPLETENESS-RuleColonEnd", "QUALITY_BAD_RELEVANCE-RuleSpecialCharacter"], "reason_list": ["�I am 8 years old. ^I love apple because:", [""]]}
243+
244+
```
245+
246+
## 7.计划支持
247+
248+
- [ ] 更丰富的图文评测指标;
249+
- [ ] 新增音频和视频数据模态评测;
250+
- [ ] 新增小模型评测,如fasttext,Qurating;
251+
- [ ] 新增数据多样性评测;
252+
253+
# 六、局限性
254+
255+
- 当前评估工具内置的检测规则和模型方法大部分来自论文,开源项目等,主要关注通用的数据质量问题,如果对特殊数据问题有评测需求建议可以定制化对应的检测规则来评测;
256+
257+
# 七、致谢
258+
259+
- [RedPajama-Data](https://github.com/togethercomputer/RedPajama-Data)
260+
- [mlflow](https://github.com/mlflow/mlflow)
261+
262+
# 八、贡献
263+
264+
我们感谢所有的贡献者为改进和提升 `Dingo` 所作出的努力。请参考[贡献指南](docs/en/CONTRIBUTING.md)来了解参与项目贡献的相关指引。
265+
266+
# 九、开源许可证
267+
268+
该项目采用 [Apache 2.0 开源许可证](LICENSE)。
269+
270+
# Citation
271+
272+
If you find this project useful, please consider citing our tool:
273+
274+
```
275+
@misc{dingo,
276+
title={Dingo: A Comprehensive Data Quality Evaluation Tool for Large Models},
277+
howpublished={\url{https://github.com/DataEval/dingo}},
278+
year={2024}
279+
}
280+
```

0 commit comments

Comments
 (0)