项目的下一步 #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
Uh oh!
There was an error while loading. Please reload this page.
-
以下纯属个人观点,欢迎批评指正。
大家好,我是本项目的四叶草拼音方案的一位贡献者。通过用深蓝词库转换转换华宇拼音输入法 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