项目的下一步 #111
Closed
warm-ice0x00
started this conversation in
Ideas
项目的下一步
#111
Replies: 3 comments
-
现在建了个群聊,你可以加群 716628713 |
Beta Was this translation helpful? Give feedback.
0 replies
-
看能不能搞点会写代码的人进群来,我把群截图放到项目主页去 |
Beta Was this translation helpful? Give feedback.
0 replies
-
语言模型已更新。 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
以下纯属个人观点,欢迎批评指正。
大家好,我是本项目的四叶草拼音方案的一位贡献者。通过用深蓝词库转换转换华宇拼音输入法 7.3 的词库,并借助华宇公开的部分源码分析并转换华宇拼音的字库,我修正了四叶草方案以前的字库和词库的错误和遗漏,改进了四叶草方案的字、词输入体验。
然而,目前主流的闭源拼音输入法,例如搜狗和百度,还有前面提到的半闭源的华宇 7.3,都拥有较强的预测语段的能力。在输入一些较简单的文章时,即使打完每个句子或分句的拼音直接选首选,过滤出汉字,再用 Python 的
difflib.SequenceMatcher().ratio()
计算预测与原文的相似度,相似度也能超过 90%。但是,目前许多 Rime 输入方案预测语段的能力不理想。雾凇拼音可能是个例外,但代价是超大词库和较长的部署时间。我希望四叶草方案是一个轻便而较准确的输入方案。
根据网上资料,许多拼音输入法用 bigram 语言模型预测语段。简单地说,bigram = 词语 + 词语。例如“一篇”是词语,“作文”也是词语,那么“一篇作文”就是 bigram。通过阅读源码,我发现 Rime 内置的 octagram 插件已经实现预测算法,并用内存映射 trie 高效地存储 bigram 库。因此,我希望用 octagram 插件而不是超大词库来解决预测语段的问题,而且理论上我要做的只有创建一个高质量的 bigram 库并调整好相关参数。
我目前的解决方案是通过分析华宇拼音和 octagram 的源码,编写相应程序,将相关源码公开的华宇拼音 6.9 的 bigram 库转换成了 octagram 的格式,并添加到了四叶草方案中。这个解决方案有两个问题:第一,一些 bigram 虽在 bigram 库中,但打不出;第二,可能是因为华宇拼音 6.9 的 bigram 库太旧,一些搜狗、百度和华宇 7.3 都能准确预测的语段,目前四叶草方案不能预测。
于是我开始尝试逆向华宇拼音 7.3。借助 IDA 和十六进制编辑器,我初步确定华宇拼音用 C++ 编写,而且 bigram 库存储在 3 个文件中:
word2index.dat
、syllable2index-opt.dat
和transmatrix.dat
。word2index.dat
中,每项的格式是 C 字符串 + ID + 整数 2 + 整数 3。C 字符串的内容是词语的 UTF-16LE 编码,其中每个字节用对应的有符号整数的十进制字符串表示,每个整数前有“|”。ID 和整数 2、3 均为无符号 32 位整数。整数 2、3 作用不明。syllable2index-opt.dat
中,每项的格式是 C 字符串 + 同音词数 + 0xCC + ID 数组 + 5 字节 + 0xCC。C 字符串的内容是每个词语的拼音,每个音节前有“|”。同音词数是无符号 32 位整数。ID 数组的长度是同音词数,元素是无符号 32 位整数,是拼音对应的所有词语的 ID。ID 数组后的 5 字节作用不明。transmatrix.dat
作用不明。但我没有分析出词语如何连成 bigram 及 bigram 的频率如何存储,所以不能更新四叶草方案的 bigram 库。
请问如何解决这两个问题?或者有没有更好的方案?
Beta Was this translation helpful? Give feedback.
All reactions