Skip to content

使用教程:Rime 输入法语言模型构建全流程

amzxyz edited this page Oct 31, 2024 · 5 revisions

基于deepin linux操作系统

sudo apt update
sudo apt install build-essential cmake zlib1g-dev libbz2-dev liblzma-dev make g++ libboost-all-dev libyaml-cpp-dev libmarisa-dev pkg-config libglib2.0-dev libgtest-dev libgoogle-glog-dev libopencc-dev opencc libleveldb
新建一个目录用于安成这个项目

如果 KenLM librime glog都在编译后使用编译目录的库,没有被安装到全局路径,需要将其 bin 目录加入系统路径。 打开终端并编辑 .bashrc(或 .zshrc)文件: nano ~/.zshrc 在文件末尾添加:

export PATH=$PATH:/home/amz/Desktop/语言模型/kenlm/build/bin
export CPLUS_INCLUDE_PATH=/home/amz/Desktop/语言模型/librime/src:$CPLUS_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/home/amz/Desktop/语言模型/librime/build/src:$CPLUS_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/home/amz/Desktop/语言模型/librime/include:$CPLUS_INCLUDE_PATH
export LD_LIBRARY_PATH=/home/amz/Desktop/语言模型/build/glog/build:$LD_LIBRARY_PATH

这里调整为自己计算机的路径 保存并执行: source ~/.zshrc

  1. 安装依赖 KenLM: 下载并编译 KenLM:
cd ~/Desktop/语言模型
git clone https://github.com/kpu/kenlm.git
cd kenlm
mkdir build && cd build
cmake ..
make -j$(nproc)

cd ~/Desktop/语言模型

  1. 先编译librime
cd /home/amz/Desktop/语言模型/librime
mkdir -p build && cd build
cmake ..
make -j$(nproc)
sudo make install  

安装后会看到库安装到了哪里记住他 安装依赖

3. 编译一个依赖
sudo apt update
sudo apt install autoconf automake libtool
git clone https://github.com/takuyaa/darts-clone.git
在项目根目录下运行以下命令,生成 configure 脚本
cd darts-clone
autoreconf --install
生成后安装到指定路径
./configure --prefix=/usr
编译
make -j$(nproc)
安装
sudo make install
  1. 编译一个谷歌的日志工具 github官网下载glog-0.6,有匹配的函数库
cd /home/amz/Desktop/语言模型/glog-0.6
mkdir -p build && cd build
cmake ..
make -j$(nproc)
sudo make install
  1. 编译librime-octagram 克隆librime-octagram,虽然系统已经安装了该包,但是缺少一个我们用到的工具build-grammar
git clone https://github.com/lotem/librime-octagram.git
cd librime-octagram
编译
mkdir build && cd build

先编辑CMakeLists.txt文件,要把tools文件夹的build-grammar一起带上编译 改成如下:------------------------

cmake_minimum_required(VERSION 3.10)
project(rime-octagram)

# 明确指定 glog 的路径
set(Glog_DIR "/home/amz/Desktop/模型训练/glog-0.6.0/build")

# 找到 glog 库
find_package(glog REQUIRED PATHS ${Glog_DIR} NO_DEFAULT_PATH)

# 添加 include 目录
include_directories(${CMAKE_SOURCE_DIR}/src ${glog_INCLUDE_DIRS})
include_directories(/home/amz/Desktop/模型训练/librime/include)  # librime 的头文件目录

# 链接库的目录
link_directories(${Glog_DIR})
link_directories(/home/amz/Desktop/模型训练/librime/build/lib)  # librime 的库目录

# 加载 src 目录中的所有源文件
aux_source_directory(src octagram_src)
add_library(rime-octagram-objs OBJECT ${octagram_src})

# 设置位置无关代码 (PIC),适用于动态库
if(BUILD_SHARED_LIBS)
    set_target_properties(rime-octagram-objs PROPERTIES POSITION_INDEPENDENT_CODE ON)
endif()

# 链接 rime-octagram-objs 库与 glog
target_link_libraries(rime-octagram-objs PRIVATE glog::glog)

# 构建 tools 中的工具(可执行文件)
add_executable(build_grammar tools/build_grammar.cc)

# 设置 RPATH 以确保运行时能找到所需库
set_target_properties(build_grammar PROPERTIES
    BUILD_WITH_INSTALL_RPATH TRUE
    INSTALL_RPATH_USE_LINK_PATH TRUE
    INSTALL_RPATH "${CMAKE_BINARY_DIR}/libs"
)

# 链接 build_grammar 所需的对象和库
target_link_libraries(build_grammar
    rime-octagram-objs  # 链接对象库
    glog::glog          # 链接 glog
    pthread             # 线程库
    /home/amz/Desktop/模型训练/librime/build/lib/librime.so
    /home/amz/Desktop/模型训练/glog-0.6.0/build/libglog.so.1
)

# 将必要的库文件复制到构建目录的 `libs` 子目录中
add_custom_command(TARGET build_grammar POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/libs
    COMMAND ${CMAKE_COMMAND} -E copy /home/amz/Desktop/模型训练/glog-0.6.0/build/libglog.so* ${CMAKE_BINARY_DIR}/libs
    COMMAND ${CMAKE_COMMAND} -E copy /home/amz/Desktop/模型训练/librime/build/lib/librime.so* ${CMAKE_BINARY_DIR}/libs
)

这里的改变非常灵活权当示意,针对自己遇到的情况要能分析问题 保存在build目录后执行

cmake ..
make -j$(nproc)

不出意外就可以编译出来,会生成一个可执行文件build_grammar 此时在终端给该文件添加执行权限 sudo chmod +x build_grammar

  1. 模型构建 接下来到了python自动化环节,我写了全流程构建语言模型的脚本,必须在前面这些工作就绪,build_grammar成功生成,我没有测试这个跨设备跨环境是如何的表现,但是mac和linux不通用 构建py运行环境

sudo apt install python3 python3-setuptools python3-dev python3.12-venv pip python3-yaml 创建一个虚拟环境,cd你的工作目录中

pip install --upgrade pip
python3 -m venv myenv

Python 依赖:,未列出的如有报错未安装的安装上即可

pip install jieba lxml OpenCC pypinyin pypinyin-dict scikit-learn tqdm

运行脚本,可以在脚本中设定输入输出文件夹各种参数 准备语料文件:将你的原始语料文件放入语料输入文件夹

source myenv/bin/activate进去虚拟环境

运行下面命令

python 语言模型构建.py