-
Notifications
You must be signed in to change notification settings - Fork 8
使用教程: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
- 安装依赖 KenLM: 下载并编译 KenLM:
cd ~/Desktop/语言模型
git clone https://github.com/kpu/kenlm.git
cd kenlm
mkdir build && cd build
cmake ..
make -j$(nproc)
cd ~/Desktop/语言模型
- 先编译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
- 编译一个谷歌的日志工具 github官网下载glog-0.6,有匹配的函数库
cd /home/amz/Desktop/语言模型/glog-0.6
mkdir -p build && cd build
cmake ..
make -j$(nproc)
sudo make install
- 编译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
- 模型构建 接下来到了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