试了下KenLM

news/2025/11/9 20:43:54/文章来源:https://www.cnblogs.com/funwithwords/p/19205232

图解N-gram语言模型的原理〕〔KenLM

先下载编译KenLM

wget -O - https://kheafield.com/code/kenlm.tar.gz | tar xz
# 7z最大压缩后 315Klibboost-program-options-dev libboost-system-dev libboost-thread-dev libboost-test-dev
# 需要下载14.2MB。解压后占据185MB。
# 作者推荐libboost-all-dev,我没装也编译出来了。mkdir kenlm/build cd kenlm/build cmake .. make -j2 # make -j 2路编译,make只是慢点而已

再写个分字程序:

enum { YI = 0x4E00 }; // 第1个汉字的编码是U+4E00,“一”‌void do_file (FILE* f) {static char buf[4 * 1024 * 1024];setvbuf(f, buf, _IOFBF, sizeof(buf));for (wint_t b = 0, c;;) {int n = 0;while ((c = getwc(f)) != WEOF && c != '\n' && c < YI) ++n;if (c == WEOF) return;else if (c == '\n') putwc(c, stdout);else {if (n || b >= YI) putwc(' ', stdout);putwc(c, stdout);}b = c;}
}int main (int argc, char** argv) {static char buf[4 * 1024 * 1024];setvbuf(stdout, buf, _IOFBF, sizeof(buf));setlocale(LC_CTYPE, "");for (int i = 1; i < argc; i++) {if (FILE* f = fopen(argv[i], "r")) do_file(f), fclose(f);}
}#include <stdio.h>
#include <locale.h>
#include <wchar.h>
View Code

然后分字,seg *.txt | lmplz -o 2 >slm.arpa

lmplz默认从stdin读,写到stdout. 

  • --arpa file Write ARPA to a file instead of stdout
  • --text file  Read text from a file instead of stdin

接着‌build_binary‌ slm.arpa slm.bin. 它默认使用mmap: map a file into memory.

不带输出文件名的build_binary‌给出将要使用多大空间的信息。


然后准备q.txt for query,它和seg的输出都是用一个空格把汉字分开,如:

  三 亚 市
  四 亚 县

$ query slm.bin <q.txt
This binary file contains probing hash tables.
三=94 2 -2.183814	亚=222 2 -2.062365	市=61 2 -1.069804	</s>=2 2 -0.59742165 Total: -5.9134045 OOV: 0
四=116 2 -2.7783926	亚=222 1 -4.9270372	县=13 1 -1.9410045	</s>=2 2 -1.3998605	Total: -11.046295 OOV: 0
</s>=2 1 -2.6049278	Total: -2.6049278 OOV: 0
Perplexity including OOVs:	149.2270280712436
Perplexity excluding OOVs:	149.2270280712436
OOVs:	0
Tokens:	9
Name:query	VmPeak:7196 kB	VmRSS:4332 kB	RSSMax:5188 kB
user:0.004243 sys:0 CPU:0.00431801 real:0.000905842

里面的概率应该是10 ** x,反正三亚市的可能性大(多)了。算概率时记着用+而不是*即可。


预告:在下要做个IME.NT,NT代表No Threshold.

拼音到字的转换表和字的bi-gram存放在sqlite数据库里。Console程序,输入拼音串,显示概率最高的汉字串。

我倒是幻想Nuclear Threat: “村村有地道”,人人会做输入法。 :-) 奈何“人生不如意之事,十有八九”。

Penilum meum pullo sententia Latin a est 「通过浪费时间获得快乐」!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/960725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从CPython底层解析:为何a=10 b=10复用对象,a=[] b=[]新建对象?

从CPython底层解析:为何a=10 b=10复用对象,a=[] b=[]新建对象? 用户的核心疑问本质是:CPython对“不可变对象(如int)”和“可变对象(如list)”采用了完全不同的“对象创建-复用策略”——前者通过“预缓存池”…

Netty线程模型:EventLoop机制与原理解析

目录1. Netty线程模型概述1.1 为什么需要特殊的线程模型?2. EventLoop核心机制2.1 EventLoop基本概念2.1.1. EventLoop执行引擎原理2.1.2. 核心执行逻辑实现2.2. Netty的线程模型实现2.2.1. 主从EventLoopGroup设计2.…

对长度为 n 的数组 arr,调用 `merge_sort(a, 0, n-1)`,在排序过程中,`merge` 函数的递归调用次数大约是多少?

归并排序(Merge Sort) 的标准 基于C++ 实现:对长度为 n 的数组 arr,调用 merge_sort(a, 0, n-1),在排序过程中,merge 函数的递归调用次数大约是多少?✅ 一、代码结构回顾 关键递归函数: void merge_sort(int a…

解析SP3D VUE和PDMS RVM文件-PlantAssistant

在PlantAssistant中增加视图相关设置选项,如设置是否显示坐标轴、视图方块、三维视图背景,可以设置背景颜色,还可以设置一张图片作为三维视图背景。引言 依托主流工厂设计软件数字化交付数据文件,AVEVA公司PDMS/E3…

古建筑学习

http://www.sihey.com/zsyl/pw/作者:太一吾鱼水 宣言:在此记录自己学习过程中的心得体会,同时积累经验,不断提高自己! 声明:博客写的比较乱,主要是自己看的。如果能对别人有帮助当然更好,不喜勿喷! …

VS Code 1.105正式发布: AI 新特性详解:7 大亮点全面提升智能开发体验 - 详解

VS Code 1.105正式发布: AI 新特性详解:7 大亮点全面提升智能开发体验 - 详解2025-11-09 20:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflo…

20251109-3

经过今天晚上近两个小时的努力,终于初具雏形了!! 添加功能如下: 1.增加了计量分数,和金币的功能。 2.增加了属性加点功能。 3.增加了怪物的增长曲线。 4.增加了界面跳转和回合重置。 也能应该够格算一个纯前端的简…

kettle从入门到精通 第110课 ETL之kettle webspoon的两种部署方式docker+tomcat使用教程

大家好,经常有小伙伴私信我咨询webspoon的部署问题,今天周末抽点时间一起梳理学习下。 1、docker方式部署 1)docker方式部署可以参考我之前的文章【kettle从入门到精通 第四十八课 ETL之kettle webspoon】 2)有时候…

【达梦数据库】性能优化-转正官网

【达梦数据库】性能优化-转正官网一、前言 1.1 概述 性能优化是指在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短。达梦数据库性能优化主要包含以下内容: @list l0:level1{ mso-level-…

Python中`a = 10`的6种读法对比:哪种最贴合名字-对象模型?

以下是针对a = 10语句设计的6种常见读法,结合Python名字-对象绑定模型(呼应前文《西游记》“符咒-山”比喻),通过列表对比各读法的优劣,最终明确适配Python认知的最优选择: Python中a = 10的6种读法对比:哪种最…

netgear r6220 路由器,刷openwrt后,体系备份还原

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

文字识别准确度

文字识别准确度coding: utf-8 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import Dataset, DataLoader from torchvision import transforms from PIL import Image, Ima…

原生多模态AI架构:统一训练与跨模态推理的环境实现与性能优化

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

VBA之Word应用第四章第三节:段落集合Paragraphs对象的手段(一)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

日记?

还是写一写的好虽然叫日记但是并不是日日记,差不多就是有话就写没话不硬挤吧。 尽量避免写垃圾话(存疑)。 不喜欢流水账,流水账太无聊了,写流水账的就应该重修小学学位攻读废话博士。 2025.11.9 前几天因为心态彻…

2025校运会小记

2025 校运会小记 前言 update 2025.11.09 本来拖到这么久还没有开始写,大概是要咕咕掉了的。但是想到这个运动会还是太有意思了,所以写吧。这篇应该没有照片,因为懒得放,因为放照片是不是得把其他人(以及我自己?…

安卓项目调用摄像头或相机。调用不了相机解决方案

这里推荐两篇文章: https://blog.csdn.net/weixin_31569663/article/details/148461910 这个是介绍了如何声明和请求相机及存储权限,然后详细说明了使用Camera API的基本流程,包括启动预览、拍照及图片保存。之后,…

2025 年 11 月上海老房翻新装修公司推荐排行榜,毛胚房改造/局部翻新/设计施工/水电改造/现代简约/奶油风格/法式风格/地中海风格/中式风格/全包装修/半包装修公司推荐

2025 年 11 月上海老房翻新装修公司推荐排行榜,毛胚房改造/局部翻新/设计施工/水电改造/现代简约/奶油风格/法式风格/地中海风格/中式风格/全包装修/半包装修公司推荐随着上海城市更新的持续推进,老房翻新与毛胚房改…

用《西游记》讲透Python name模型:撕最后一张符咒,山为何会消失?

用《西游记》讲透Python name模型:撕最后一张符咒,山为何会消失? 看过《西游记》的人都记得一个经典场景:孙悟空大闹天宫后,被如来佛祖压在五行山下,山顶还贴了一张写着“唵嘛呢叭咪吽”的符咒——这张符咒如同“…

鸿蒙应用开发实战:实现分享卡片保存为图片功能

本文将详细介绍如何在鸿蒙应用中实现将UI组件保存为图片并存储到相册的功能,通过componentSnapshot和photoAccessHelper等核心API,为用户提供便捷的分享体验。功能概述 在现代移动应用中,分享功能是提升用户活跃度和…