用户工具

站点工具


现有语料格式

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
现有语料格式 [2023/11/11 10:54] MNBVC项目组现有语料格式 [2024/09/21 19:28] (当前版本) – [代码commit语料输出jsonl格式说明] MNBVC项目组
行 18: 行 18:
 平行语料格式 平行语料格式
 [[https://github.com/liyongsea/parallel_corpus_mnbvc]] [[https://github.com/liyongsea/parallel_corpus_mnbvc]]
 +
 +多模态语料
 +[[https://huggingface.co/datasets/wanng/example_mmdata_mnbvc]]
  
 ====== MNBVC语料格式检查工具 ====== ====== MNBVC语料格式检查工具 ======
 未来所有MNBVC语料都会统一格式,请提交数据的同学都执行下格式检查工具:[[https://github.com/X94521/DataCheck_MNBVC|DataCheck_MNBVC]] 未来所有MNBVC语料都会统一格式,请提交数据的同学都执行下格式检查工具:[[https://github.com/X94521/DataCheck_MNBVC|DataCheck_MNBVC]]
  
-====== MNBVC语料格式详情 ======+======MNBVC语料格式详情 ======
  
  
 对于语料格式的每个jsonl文件,其大小略大于500MB。 对于语料格式的每个jsonl文件,其大小略大于500MB。
 +
 +==== 关于“时间” ====
 +时间字段所有语料格式中都有,必填,代表本语料出现的最早时间,统一采用字符串的 yyyymmdd 格式,具体规则如下:
 +  - 年份固定为4位,月份和日固定为两位,例如2024年1月1日记为 '20240101'
 +  - 年份不足4位需要在前面补0至4位,如738年3月3日记为 '07380303'
 +  - 不能具体到日或月份,统一记为01,如公元738年记为 '07390101'
 +  - 公元前则在前面加上负号,如公元前5000年记为 '-50000101'
 +
 +补充:补零4位python代码只需要加上:04d为 f'{$year:04d}',如需将补零4位字符串转换为int,python中 int() 函数会自动识别转换,如 int('0001') 则为整数 1。
  
 ==== 通用文本输出jsonl格式说明 ==== ==== 通用文本输出jsonl格式说明 ====
  
-1.对于每一个文件,他的json结构层次如下:+1.对于每一个文件,时间格式为yyyymmdd,具体参考前面的内容,他的json结构层次如下:
  
 <code>  <code> 
行 42: 行 54:
     '去重段落数': 0,     '去重段落数': 0,
     '低质量段落数': 0,     '低质量段落数': 0,
-    '段落': []+    '段落': []
 +    '扩展字段': json_str, 
 +    '时间': str(yyyymmdd),
 } }
 </code> </code>
行 54: 行 68:
     '是否跨文件重复': False,     '是否跨文件重复': False,
     'md5': md5,     'md5': md5,
-    '内容': line+    '内容': line
 +    '扩展字段': json_str
 } }
 </code> </code>
行 77: 行 92:
                 '是否跨文件重复': False,                 '是否跨文件重复': False,
                 'md5': 'md5hash1',                 'md5': 'md5hash1',
-                '内容': '这是第一段文字。' +                '内容': '这是第一段文字。'
-            }+                '扩展字段': json_str 
 +            }
 +        '扩展字段': json_str, 
 +        '时间': str(yyyymmdd),
         ]         ]
     }     }
行 98: 行 116:
         "回答明细":"",         "回答明细":"",
         "扩展字段":""         "扩展字段":""
-    }+    }
 +    "时间": str(yyyymmdd),
 } }
 </code> </code>
行 131: 行 150:
     "答": "1. 了解基础知识 ...",     "答": "1. 了解基础知识 ...",
     "来源": "来源",     "来源": "来源",
 +    "时间": str(yyyymmdd),
     "元数据": {     "元数据": {
         "create_time": "20230517 06:47:18",         "create_time": "20230517 06:47:18",
行 178: 行 198:
     "原始编码":"GBK",     "原始编码":"GBK",
     "md5":"文件的md5值",     "md5":"文件的md5值",
-    "text": "文件的内容,utf8格式"+    "text": "文件的内容,utf8格式"
 +    "时间": str(yyyymmdd),
  
 </code>  </code> 
行 194: 行 215:
         "原始编码":"GBK",         "原始编码":"GBK",
         "md5":"文件的md5值",         "md5":"文件的md5值",
-        "text": "文件的内容,utf8格式"+        "text": "文件的内容,utf8格式"
 +        "时间": str(yyyymmdd),
     }     }
 </code> </code>
 +
 +==== 代码commit语料输出jsonl格式说明 =====
 +1.每行是一个文本的数据,对应一个代码仓库里的一个文本文件的变更。
 +
 +2.对于每一行数据,其最高层次结构如下。
 +<code>
 +{
 +    "来源":"github",
 +    "仓库名":"esbatmop/MNBVC",
 +    "path":"/main/README.md",
 +    "文件名":"README.md",
 +    "ext": "md",
 +    "index": "abc1234..def5678",
 +    "message": "Update with new content",
 +    "diff": "@@ -1,3 +1,4 @@
 +             This is the first line.
 +            -This is the second line.
 +            +This line has been modified.
 +             @@ -5,2 +6,3 @@
 +            +This line has been modified again.
 +            +This is another new line added.",
 +    "原始编码":"GBK",
 +    "md5":"差异的md5值",
 +    "时间": str(yyyymmdd),
 +    '扩展字段': "json_string",
 +
 +</code> 
  
 ==== 多轮对话输出jsonl格式说明 ===== ==== 多轮对话输出jsonl格式说明 =====
行 208: 行 257:
     "答":"他们相遇,又别离。岁月如梭,情感却不减。",     "答":"他们相遇,又别离。岁月如梭,情感却不减。",
     "来源":"ShareGPT",     "来源":"ShareGPT",
 +    "时间": str(yyyymmdd),
     "元数据":{     "元数据":{
         "create_time":"20230511 15:56:03",         "create_time":"20230511 15:56:03",
行 246: 行 296:
         "答": "Sure, here's a Shakespearean script about a girl who c...",         "答": "Sure, here's a Shakespearean script about a girl who c...",
         "来源": "ShareGPT",         "来源": "ShareGPT",
 +        "时间": str(yyyymmdd),
         "元数据": {         "元数据": {
             "create_time": "20230517 10:41:58",             "create_time": "20230517 10:41:58",
             "问题明细":"\"from\": \"human\"",             "问题明细":"\"from\": \"human\"",
             "回答明细":"\"from\": \"gpt\"",             "回答明细":"\"from\": \"gpt\"",
-            "扩展字段": {+            "扩展字段": "{
                         "会话": "yOKd88p",                         "会话": "yOKd88p",
                         "多轮序号": 1,                         "多轮序号": 1,
                         "解析模型": "gpt4"                         "解析模型": "gpt4"
-                        }+                        }"
         }         }
     }     }
行 269: 行 320:
     "来源": "清华树洞",     "来源": "清华树洞",
     "回复": [],     "回复": [],
 +    "时间": str(yyyymmdd),
     "元数据": {     "元数据": {
         "发帖时间": "20200628 06:38:34",         "发帖时间": "20200628 06:38:34",
行 325: 行 377:
         "主题": "出一张今晚七点贝多芬专场作品音乐会的票,一楼18排4座,原价60出。",         "主题": "出一张今晚七点贝多芬专场作品音乐会的票,一楼18排4座,原价60出。",
         "来源": "北大树洞",         "来源": "北大树洞",
 +        "时间": str(yyyymmdd),
         "回复": [         "回复": [
             {             {
行 354: 行 407:
 <code>  <code> 
 { {
-    '文件名': '文件.txt', +    '文件名': '文件.txt', # 过滤语料种类,取中文的输入文件的文件名 
-    '是否待查文件': False, +    '是否待查文件': False, # 如果是True就是不怎么靠谱,告诉大家尽量别用 
-    '是否重复文件': False,+    '是否重复文件': False, # 留给其它小组的字段,我们小组给False就行
     '段落数': 0,     '段落数': 0,
-    '去重段落数': 0, +    '去重段落数': 0, # 只看中文zh_text,完全相等就算重 
-    '低质量段落数': 0, +    '低质量段落数': 0, # 中文或者英文有缺(为空字符串)的段落数量 
-    '段落': []+    '段落': []
 +    '扩展字段': 任意字符串,建议为json格式,但也可用直接用自然语言写注释,比如用于描述内层段落级别的扩展字段, 
 +    '时间': str(yyyymmdd)
 } }
 </code>  </code> 
 +
 +**注意:**所有语种字段的双字母缩写优先参考[ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)的定义,并且优先填写下文所注的段落级主要字段,如果没有,则根据iso双字母简写填入扩展字段中。如果所收录语言并不在 iso 639-1 双字母简写表中,请自己起一个不与其他双字母简写有冲突的key名写到扩展字段中,并将其key名和对应的语种作为注释写到文件级扩展字段中。
  
 2.将每一行为一个段落,段落的json结构层次如下: 2.将每一行为一个段落,段落的json结构层次如下:
 +
 <code>  <code> 
 { {
-    '行号': line_number+    '行号': 如果源文件有行号信息,可以记在此处,否则取从1开始递增的值,尽量保证每个段落的行号都不同
-    '是否重复': False, +    '是否重复': False, # 用zh_text全等进行判断,第一次出现的是False,后面重复的就是True 
-    '是否跨文件重复': False, +    '是否跨文件重复': False, # 留给其它小组的字段,我们小组给False就行 
-    'zh_text_md5': zh_text_md5,+    'zh_text_md5': 十六进制的中文语句的md5,可以直接用hashlib.md5(zh_text).hexdigest()得到,
     'zh_text': 中文,     'zh_text': 中文,
     'en_text': 英语,     'en_text': 英语,
行 387: 行 445:
     'ko_text': 韩语,     'ko_text': 韩语,
     'th_text': 泰语,     'th_text': 泰语,
-    'other1_text': 小语种1, +    'id_text': 印尼语, 
-    'other2_text': 小语种2,+    'vi_text': 越南语, 
 +    'cht_text': 繁体中文, 
 +    'other1_text': 小语种1,因为意义不明确,每个语料的语种不统一,不建议使用,请固定给空字符串
 +    'other2_text': 小语种2,因为意义不明确,每个语料的语种不统一,不建议使用,请固定给空字符串, 
 +    '扩展字段': json格式字符串,详细约定见下文
 } }
 </code> </code>
  
-3.结果示例:+**段落**
  
-<code> +<code>
 { {
-        '文件名''文件.txt', +    other_texts{ 
-        '是否待查文件'False+        {lang1_iso}""
-        '是否重复文件'False, +        {lang2_iso}"" 
-        '段落数': 0+    }
-        '去重段落数': 0, +    ... 
-        '低质量段落数': 0, +} 
-        '段落': [{ +</code> 
-            '行号': 1, + 
-            '是否重复': False, +**文件** 
-            '是否跨文件重复': False, + 
-            'zh_text_md5': 'zh_text_md5', +<code> 
-            'zh_text': '中文', +{ 
-            'en_text': '英语', +    other_texts_iso_map{ 
-            'ar_text''阿拉伯语', +        {lang1_iso}"语种1"
-            'nl_text''荷兰语', +        {lang2_iso}"语种2"
-            'de_text': '德语', +
-            'eo_text': '世界语', +
-            'fr_text': '法语', +
-            'he_text': '希伯来文', +
-            'it_text': '意大利语', +
-            'ja_text': '日语', +
-            'pt_text': '葡萄牙语', +
-            'ru_text': '俄语', +
-            'es_text': '西班牙语', +
-            'sv_text': '瑞典语', +
-            'ko_text': '韩语', +
-            'th_text': '泰语', +
-            'other1_text': '小语种1'+
-            'other2_text''小语种2', +
-        }]+
     }     }
 +}
 </code> </code>
 +
 +如果没有别的需要收录的语种,并且也没有其它信息需要用扩展字段记录时,扩展字段这里约定填{}来保证json.loads不会出问题。
 +
 +3.一份样例语料数据(注意,扩展字段直接用json.dumps(obj,ensure_ascii=False)生成,故会带反斜杠将内部字符串的双引号转义):
 +
 +<code>
 +{
 +    "文件名": "Terraria-workshop-localization_test2.jsonl",
 +    "是否待查文件": false,
 +    "是否重复文件": false,
 +    "段落数": 17944,
 +    "去重段落数": 0,
 +    "低质量段落数": 0,
 +    "段落": [
 +        {
 +            "行号": 1,
 +            "是否重复": false,
 +            "是否跨文件重复": false,
 +            "it_text": "",
 +            "zh_text": "正在生成海洋沙",
 +            "en_text": "Generating ocean sand",
 +            "ar_text": "",
 +            "nl_text": "",
 +            "de_text": "",
 +            "eo_text": "",
 +            "fr_text": "Génération du sable de l'océan",
 +            "he_text": "",
 +            "it_text": "",
 +            "ja_text": "",
 +            "pt_text": "Gerando areia do oceano",
 +            "ru_text": "Создание песка в океане",
 +            "es_text": "",
 +            "sv_text": "",
 +            "ko_text": "",
 +            "th_text": "",
 +            "other1_text": "",
 +            "other2_text": "",
 +            "id_text":"",
 +            "cht_text":"",
 +            "vi_text":"",
 +            "扩展字段": "{
 +                \"other_texts\": {
 +                    \"cs\": \"Generování mořského písku\",
 +                    \"pl\": \"Generowanie piasku morskiego\",
 +                    \"hu\": \"Tengeri homok elhelyezése\",
 +                    \"uk\": \"Генерація океанського піску\",
 +                    \"tr\": \"Okyanus kumu üretme\"
 +                },
 +            }",
 +            "时间": "20240316",
 +            "zh_text_md5": "b656579704c6ca5acc29f2aa36159ce2"
 +        }
 +    ],
 +    "扩展字段": "{
 +        \"other_texts_iso_map\": {
 +            \"cs\": \"捷克语\",
 +            \"pl\": \"波兰语\",
 +            \"hu\": \"匈牙利语\",
 +            \"uk\": \"乌克兰语\",
 +            \"tr\": \"土耳其语\"
 +        }
 +    }",
 +    "时间": "20240316"
 +}
 +</code>
 +
现有语料格式.1699671249.txt.gz · 最后更改: 2023/11/11 10:54 由 MNBVC项目组