码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • kenlm


    文章目录

      • 一、关于 KenLM
      • 二、安装
      • 三、训练 N-gram 模型
      • 四、Python 中调用评分
      • 五、pycorrector + kenlm 文本纠错


    一、关于 KenLM

    KenLM: Faster and Smaller Language Model Queries

    kenlm 主页:https://kheafield.com/code/kenlm/
    Github:https://github.com/kpu/kenlm


    常用的 N-gram 训练工具有

    • SRILM, http://www.speech.sri.com/projects/srilm
    • IRSTLM, http://hlt.fbk.eu/en/irstlm
    • BerkeleyLM
    • KenLM
      …

    二、安装

    1、下载源码

    git clone https://github.com/kpu/kenlm.git 
    
    • 1

    2、安装依赖包

    macOS:缺失的包可以通过 brew 安装

    $ brew install cmake boost eigen
    
    • 1

    Debian/Ubuntu

    $ sudo apt install build-essential cmake libboost-system-dev libboost-thread-dev libboost-program-options-dev libboost-test-dev libeigen3-dev zlib1g-dev libbz2-dev liblzma-dev
    
    • 1

    3、编译

    mkdir -p build
    cd build
    cmake ..
    make -j 4
    
    • 1
    • 2
    • 3
    • 4

    4、安装 python 包

    在源码目录下执行:

    $ python setup.py install
    
    • 1

    三、训练 N-gram 模型

    1、使用 lmplz 训练
    lmplz 工具在 build/bin 文件中

    ./lmplz -o 5 --verbose_header --text data/test.txt --arpa result/xx.arpa --vocab_file result/xx.vocab 
    
    • 1
    • 文件必须是分词以后的文件(chat_log.txt)。
    • -o 后面的5表示的是 5-gram,一般取到3即可,但可以结合自己实际情况判断。
    • -verbose_header:在生成的文件头位置加上统计信息;
    • -S 表示使用系统内存大小,比如 -S 4G, -S 80% 。注意:需要设置合适的内存大小,不然可能会运行失败

    2、使用 build_binary 压缩。
    压缩模型为二进制,方便模型快速加载:

    ./build_binary result/xx.arps result/xx.klm 
    
    • 1
    • 你可以命名为 xx.klm 或 xx.bin,有的人会使用后者。但 .klm 和其他模型一起使用的时候,更能明确这是 kenlm 训练的。

    四、Python 中调用评分

    使用kenlm判断一句话概率

    import kenlm
    model = kenlm.Model('result/test.arpa')
    print(model.score('this is a sentence .', bos = True, eos = True))
    
    • 1
    • 2
    • 3
    • model.score() 中接的是分词后的文本,中文记得分词,否则分数有问题。
    • model 加载文件,将 .arpa 文件换为刚压缩的 bin 文件,跑出来的结果是一样的,但是训练速度会快。

    五、pycorrector + kenlm 文本纠错

    pycorrector 是一个中文文本纠错工具。
    支持 Kenlm,ConvSeq2Seq,BERT,MacBERT,ELECTRA,ERNIE,Transformer,T5等模型实现,开箱即用。

    pycorrector github :https://github.com/shibing624/pycorrector


    安装 pycorrector

    pip install -U pycorrector
    
    • 1

    使用

    from pycorrector import Corrector
    import os
    
    pwd_path = os.path.abspath(os.path.dirname(__file__))
    lm_path = os.path.join(pwd_path, './people2014corpus_chars.klm')
    model = Corrector(language_model_path=lm_path)
    
    corrected_sent, detail = model.correct('少先队员因该为老人让坐')
    print(corrected_sent, detail)
    # 少先队员应该为老人让座 [('因该', '应该', 4, 6), ('坐', '座', 10, 11)]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    伊织 2022-06-23(四)

  • 相关阅读:
    【C语言】结构体+位段+枚举+联合(2)
    2023 ChinaJoy后,Flat Ads成为游戏、社交出海的新选择
    Unity UI 框架
    使用Python进行App用户细分
    【linux】环境变量
    猿创征文|【Vue五分钟】 Vuex状态管理总结
    创作纪念日:CSDN 1024天的成长之路
    设置按键中断,按键1按下,LED亮,再按一次,灭,按键2按下,蜂鸣器响。再按一次,不响,按键3按下,风扇转,再按一次,风扇停。
    命 运
    为什么vue3要选用proxy,好处是什么?
  • 原文地址:https://blog.csdn.net/lovechris00/article/details/125424808
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号