本项目的目的是为了调查各个语言模型的中文识字率的情况,以此可以作为后续模型评估分析的参考。
为了分析模型的中文识字率,我们使用三个常用的字符集,总共21267
个汉字。
- 中华人民共和国教育部于2013年颁布的《通用规范汉字表》,在该字表中,共收录了
8105
个汉字,其中一级字表(常用字集)3500
个,二级字表3000
个,三级字表1605
个。字表内容从中文百科中获取。 - 中華民國教育部頒布的《常用國字標準字體表》 中的甲表和乙表。甲表收录常用字
4808
个,其中有1749
个汉字不在《通用规范汉字表》中;乙表收录次常用字6343
个,其中有4503
个汉字不在《通用规范汉字表》中。统计汉字识字率时,将只针对增加的汉字进行统计,已经在《通用规范汉字表》中的汉字不再重复统计。 - 《Unicode中日韩统一表意文字》,为汉字在 Unicode 中的基本区段。在 Unicode 14.0 时,收录了
20992
个汉字,占据码位U+4E00
-U+9FFF
。其中有6910
个汉字,既不在《通用规范汉字表》中,也不在《常用國字標準字體表》中。统计汉字识字率时,将只针对增加的汉字进行统计,已经在《通用规范汉字表》和《常用國字標準字體表》中的汉字不在重复统计。汉字在 Unicode 中还有其它区段,总共将近9万汉字,但由于其它汉字不常使用,这里暂不纳入统计范围。
对于语言模型是否认知某个汉字的判断,我们通过对应语言模型所使用的 Tokenizer 是否可以对该汉字进行 encode
来判断。
- 模型不认识某汉字的判定为:
- 模型对该汉字的编码结果为空;
- 模型对该汉字的编码结果为
unk_token_id
;
- 模型认识某汉字的判定为:
- 模型对该汉字的编码结果长度为1;
- 如果编码结果长度大于1,这有可能是因为使用了 BBPE 的原因,一个不常出现的汉字被拆分成了多个 token。由于汉字被以UTF-8的形式编码,拆散该编码并不能体现汉字语义,因此,一个汉字被打散的编码越多,我们认为该模型对该汉字的认知程度可能越低。所以,对于编码结果长度大于1的情况,我们认为该模型对该汉字的认知程度为
1 / len(encode_result)
,用以控制半透明程度。在识字率的计数中,将计数为0
。
在进行判断前,会先行去除前缀后缀的特殊token。
vocab-coverage
是一个命令行工具,用于分析模型的汉字识字率。
pip install vocab-coverage
vocab-coverage
它有两个子命令:charset
和 model
。
charset
子命令用于生成用以统计识字率的字表文件。
$ vocab-coverage charset --help
usage: vocab-coverage charset [-h] [--charset_file CHARSET_FILE]
options:
-h, --help show this help message and exit
--charset_file CHARSET_FILE
用以统计识字率的字表文件(默认:charset.json)
model
子命令用于分析模型的汉字识字率。
$ vocab-coverage model --help
usage: vocab-coverage model [-h] [--model_name MODEL_NAME] [--charset_file CHARSET_FILE] [--output_dir OUTPUT_DIR] [--debug]
options:
-h, --help show this help message and exit
--model_name MODEL_NAME
模型在 HuggingFace Hub 上的名称(默认为 shibing624/text2vec-base-chinese)
--charset_file CHARSET_FILE
用以统计识字率的字表文件(默认为 charset.json)
--output_dir OUTPUT_DIR
生成的图像文件的输出目录(默认为 images)
--debug 是否打印调试信息
--model_name
:模型在 HuggingFace Hub 上的名称。默认为shibing624/text2vec-base-chinese
。--charset_file
:用以统计识字率的字表文件。默认为charset.json
。--output_dir
:生成的图像文件的输出目录。默认为images
。--debug
:是否打印调试信息。
示例
$ vocab-coverage model --model_name=THUDM/chatglm-6b
检查模型 THUDM/chatglm-6b 的字表
字表《通用规范汉字表》一级汉字:3499/3500 (99.97%)
字表《通用规范汉字表》二级汉字:1724/3000 (57.47%)
字表《通用规范汉字表》三级汉字:48/1605 (2.99%)
字表《常用國字標準字體表》甲表(增):185/1749 (10.58%)
字表《常用國字標準字體表》乙表(增):14/4503 (0.31%)
字表《Unicode中日韩统一表意文字》(增):115/6910 (1.66%)
除了上述输出外,还会在 images
目录下生成一个图像文件,images/THUDM_chatglm-6b.png
,为可视化的分析结果。
参见:https://github.com/twang2218/vocab-coverage/blob/main/README.md#%E5%88%86%E6%9E%90%E7%BB%93%E6%9E%9C