Files
fanlusky 80b1fc42a1 feat(engine): 词格整句改用 kenlm 三元模型打分
词格原先的整句打分是一份没校准过的启发式 unigram,质量很差。这里内嵌 libime
在用的 kenlm 查询子集,改由它的三元模型 sc.lm 来打路径分。

- engine/ngram 只编 kenlm 的 query / trie-build 路径。不定义 WITH_THREADS,
  parallel_read.cc 因此退化成串行实现,整个子集零 Boost 依赖。
  KENLM_MAX_ORDER=3 必须与建模阶数一致,改它等于读不懂已发布的模型文件。
- ngram::LanguageModel 是唯一 include kenlm 头文件的地方,对外只给出一个纯
  std 的头,_HAS_AUTO_PTR_ETC 和 kenlm 的 include 目录都保持 PRIVATE。
- shared_language_model 按资源路径共享一份 mmap。kenlm 的查询是只读的且把
  上下文放在调用方的 State 里,所以并发会话不需要额外加锁。
- 模型缺失时 valid() 为假,词格退回原来的启发式打分:整句候选只是变差,不会
  停止工作。测试覆盖了缺模型降级与按路径共享。
- 出货的 ARPA 不带 <s>/</s>,所以解码从 null_state() 起算而非 begin_state()。

kenlm 是上游副本,不重排版、不进 clang-format,其 LGPL-2.1+ 与 BSD 例外清单
已补进 THIRD_PARTY_NOTICES.txt。googlepinyinime 那条 Fallback 整句路径不变。
2026-09-19 10:08:39 +08:00

12 lines
1.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 来源与许可
本目录由 `metasequoiaime/MSIME-Engine` 内嵌而来,来源与裁剪范围见 [UPSTREAM.md](UPSTREAM.md)。下述声明保留原样:仓库根 `LICENSE` 不覆盖也不重新授权其中的第三方代码与数据。
- 输入引擎本体:仓库根 `LICENSE`;`googlepinyinime-rev/`、`ngram/kenlm/` 与 `utfcpp/` 各自保留上游许可(见各自目录下的 `LICENSE`)。`ngram/kenlm/` 大部分为 LGPL-2.1-or-later,另有若干 BSD 例外文件,清单见 `ngram/kenlm/LICENSE`,正文见同目录的 `COPYING`。
- 辅助码:[helpcode/NOTICE.md](helpcode/NOTICE.md)。
- 语音:`voice/LICENSE`;`voice/third_party/miniaudio` 保留其上游许可。语音模型的来源、版本、许可与 SHA256 见 [voice/assets/models/README.md](voice/assets/models/README.md):`silero_vad.onnx` 取自 snakers4/silero-vad v6.2(MIT)。
- 日本语模型发布时必须附带 `mozc_dictionary_oss_README.txt`。
- 词格整句打分用的三元模型 `sc.lm` 来自 libime(© 2022~2026 CSSlayer,LGPL-2.1-or-later)。它不随词库发布下发,而是由 `scripts/build-language-model.ps1` 从 `language-model/lock.json` 钉住的上游语料在构建时转换而来;其声明安装为 `libime-lm-NOTICE.md`。
词库数据不在本目录内。它由 `product-lock.json` 钉住的发布产物在构建时下载,其来源与许可随该发布一同分发;whisper.cpp 与本地推理权重已随专门化一并移除。