👪 让世界充满输入法,让它们基本一样好用 👪
中文有多少词?多少词够用?
① 到〔灵格斯词典〕下载了成语词典、成语小词典、地名、诗词和文化词典,
用〔kdictionary-lingoes〕提取了文本文件。总计29,560个词条(未去重)。
② googlepinyin和sunpinyin都是约6万词。③〔Gitee-pypinyin〕可以标拼音,〔pypinyin-dict〕有大词典,用pip飞快地装上了。
④ 〔这里〕有本精修词典(未做,这条是后来补充的)
用下面的程序dump了所有词典。
def pr (x): print('\n'.join(x.keys())) from pypinyin_dict.phrase_pinyin_data import cc_cedict, di, large_pinyin, pinyin, zdic_cibs, zdic_cybs pr(cc_cedict.phrases_dict) pr(di.phrases_dict) pr(large_pinyin.phrases_dict) pr(pinyin.phrases_dict) pr(zdic_cibs.phrases_dict) pr(zdic_cybs.phrases_dict)
952,680个词,sort -u后411,957词。
有很长的词如:中航技进出口有限责任公司 。有很诡异的如:韕韕 。有很多专业词汇。
〔这里〕有很多语料,下载了:
- 维基百科(wiki2019zh),100万个结构良好的中文词条
- 百科问答(baike2018qa),150万个带问题类型的问答
用它们训练了字的tri-gram模型。未cut-off前的(id id id count),wiki 1.6G,baike 1.8G. lingoes 20M.
- wiki有a-m共13个目录,分目录得到了freq.a ... freq.m,du -hs它们共1.6G,(id, id, id)肯定有很多相同的
- baike我split成了十几个文件,类似wiki
- lingoes为重复20次左右给mmseg (乱改程序未成功,让电脑累去吧)(只增加count不增加数量)
- 1.6G+1.8G+20M,slmbuild出错,用的是1.6G + 1.8G中的300M + 20M,merge后freq.all是800M还是1G,记不清了
- lm_sc.t3g 12M. 3-gram back-off model using -log(pr) 12298/740231/352830 items in [1-3] level
国务院国有资产监督管理委员会 在某词典里是词。国务院/国有/资产/监督/管理/委员会 都是词。
中央人民政府驻香港特别行政区联络办公室 除了 驻 是单字词,别的都是多字词。
这样的词是收录不尽的。而且靠别的词和语言模型能转换对,所以删掉了。
- 删除方法:mmseg分词,若结果的长度都≥2,说明是由词组成的词,删掉。
- FIX/TODO: 单字词没有处理,不知道 驻 是词,没删干净。不过这样的词很少。
〔这样〕可以拿到sunpinyin对一个拼音串的所有候选。
标拼音的程序在〔文本文件词库〕里。
一行按长度排序,Python新手非常激动 :-) 生命苦短,速速Python.
import sys; print(''.join(sorted(list(sys.stdin), key=len, reverse=True))) # 输入时就有的空行在最后
有了n-gram,还要把二三字词加入词典么?多多益善。(补:正在用字的bi-gram过滤所有首选正确的词)
如何删掉 韕韕 之流?
词多得不耐烦,输入 shi ji 有50多个候选,我这里要翻7页。怎么办?
- n字词36626个,3字词55560个,没有候选太多的问题
- 用wiki对2字词进行了词频统计,词频低于5的扔掉
- 像 shi ji 这样的只保留词频最高的前7个
- 〔文本文件词库〕〔高效地使用std::map〕
- cat [1-n] | merge.py 然后genpyt (在sunpinyin-utils包里)
- 1(字)是必须的,而且id不能改 (除非重新训练tri-gram)
- AI说在SSD时代,使用stdio时仍然需要setvbuf,包里的程序忘了
- Sunpinyin很健壮,二字词把拼音和汉字搞反了依然不崩,而且“二字词”依然很多(2-gram)
fcitx5, RIME等输入法,也许还在用词表。带词频和拼音的词表,大家都能(方便地)用上。
- libgooglepinyin是阉割版,没用ngram,词典里要有和trie有关的信息
- 词频统计程序可从mmseg修改得到;二字词用std::map就够了
土了土了:
# apt install fcitx-rime 需要下载26.5MB。解压后会消耗92.6MB。
rime-data-bopomofo /usr/share/rime-data 75M
/usr/share/doc/fcitx/pinyin.txt
拼音词库现在取自open-phrase项目(http://code.google.com/p/open-phrase),这个项目以GPLv2发布。
4.9M 2022年7月27日 /usr/share/fcitx/pinyin/pyphrase.mb
# apt install fcitx-libpinyin
需要下载72.5MB。解压后会消耗262MB。
libpinyin-data
/usr/lib/x86_64-linux-gnu/libpinyin/data/bigram.db
culture.bin economy.bin geology.bin history.bin opengram.bin
people.bin science.bin society.bin sport.bin technology.bin
50M
rime默认输入繁体,模型不知道是啥。AI说修改luna_pinyin.schema.yaml,name: simplification, 添加reset: 1. (我没试)
fcitx-tools 包里有 scel2org 可把搜狗细胞词库转为文本文件。〔下载几千个细胞词库〕〔新版scel2txt〕
apt source libpinyin-data; 又多了163702个词(含字)要整理。(不做了,应该是90万词的子集)
- 也有 喜羊羊与灰太狼之兔年顶呱呱 (opengram.table)
- 好多“三字词”就是3-gram嘛
- interpolation2.text 80M 2021年9月30日,ARPA格式,词的2-gram. Sunpinyin的3-gram 170MB
- 词的n-gram应该正确率更高,但有数据稀疏(不够多)和模型太大的问题。1万多和20万个token**3差太多了
- 词的1-gram(词频),我认为输入较长时比字的3-gram差
- 试了转ARPA形式。slmthread出assert. slminfo dump时改成%f不行,原始的%20.17lf(超double精度)也不行
- 怂恿Debian Input Method Team换数据(希望不大),还得用修改过的slmthread?更渺茫
- 孤芳自赏吧。:-) 还是请到〔这里〕下载。

浙公网安备 33010602011771号