当前位置: 首页 > news >正文

NMT - 构建双语概率词典(Probabilistic dictionaries)

文章目录

    • 一、安装依赖包
      • mosesdecoder
      • 安装 mgiza++
    • 二、数据预处理
    • 三、训练


本文参考:How to train your Bicleaner
https://github.com/bitextor/bicleaner/wiki/How-to-train-your-Bicleaner


一、安装依赖包

这个过程主要依赖于

  • mosesdecoder
  • mgiza++

mosesdecoder

  • github : https://github.com/moses-smt/mosesdecoder
  • 官方说明:http://www2.statmt.org/moses/?n=Development.GetStarted
    官方介绍了 windows, macOS 和各版本 ubuntu 的安装细节,这里以 ubuntu 为例

1、安装依赖

sudo apt-get install [package name]

Packages:

   g++ git subversionautomakelibtoolzlib1g-devlibicu-devlibboost-all-devlibbz2-devliblzma-devpython-devgraphvizimagemagickmakecmakelibgoogle-perftools-dev (for tcmalloc)autoconfdoxygen

2、安装

./bjam -j4

如果手动安装了 boost,也可以指定 boost 位置
boost 安装教程:https://blog.csdn.net/lovechris00/article/details/125423796

./bjam --with-boost=~/workspace/temp/boost_1_64_0 -j8

3、安装成功测试

cd ~/mosesdecoder
wget http://www.statmt.org/moses/download/sample-models.tgz
tar xzf sample-models.tgz
cd sample-models# 运行
~/mosesdecoder/bin/moses -f phrase-model/moses.ini < phrase-model/in > out

得到如下结果,代表安装成功
翻译结果:Translating: das ist ein kleines haus

Defined parameters (per moses.ini or switch):config: phrase-model/moses.ini 
...
----5---10---15---20---25---30---35---40---45---50---55---60---65---70---75---80---85---90---95--100
**The ARPA file is missing <unk>.  Substituting log10 probability -100.000.
**************************************************************************************************
FeatureFunction: LM start: 0 end: 0
line=Distortion
...
----5---10---15---20---25---30---35---40---45---50---55---60---65---70---75---80---85---90---95--100
****************************************************************************************************
Created input-output object : [0.685] seconds
Translating: das ist ein kleines haus 
...
Name:moses	VmPeak:193088 kB	VmRSS:11404 kB	RSSMax:37844 kB	user:0.684	sys:0.008	CPU:0.692	real:0.692

git clone https://github.com/moses-smt/mosesdecoder.git

安装 mgiza++

这里使用 linux 环境为例

# 安装 libboost (mgiza++ 的编译依赖于它)
sudo apt-get install -y cmake libboost-all-dev# 下载mgiza、安装 
git clone https://github.com/moses-smt/mgiza.gitcd mgiza/mgizappcmake . && make && make installcp scripts/merge_alignment.py bin/

二、数据预处理

上文给出的方式是使用 shell,主要实现对文本 tokenize 和 lower 的过程;
这里我使用 python 实现;
假设你有两个文件:raw.zh, raw.en


处理中文
这里使用 jieba 分词

import os ,sys     
import jieba def process(file_path): save_path = file_path + '_low.txt' print('\n-- start : ',file_path) for line in open(file_path):zh_toks = jieba.cut(line.strip())zh_text = ' '.join(zh_toks).lower() with open(save_path, 'a') as fa:fa.write(zh_text + '\n' )print('-- end : ', file_path, save_path)    if __name__ == '__main__':file_path = sys.argv[1]print('-- ', file_path)process(file_path)

处理英文

import os ,sys    
import nltk  def process(file_path): save_path = file_path + '_low.txt' print('\n-- start : ',file_path) for line in open(file_path):en_toks = nltk.word_tokenize(line.strip())en_text = ' '.join(en_toks).lower() with open(save_path, 'a') as fa:fa.write(en_text + '\n' )print('-- end : ', file_path, save_path)    if __name__ == '__main__':file_path = sys.argv[1]print('-- ', file_path)process(file_path)

处理后修改两个文件,以语种作为后缀;假设处理后的文件名为 clean.zh, clean.en;
除了语种后缀外,前面必须一致,方便后续处理;


三、训练

  • 使用 mosesdecoder 的 train-model.perl 文件来训练;
  • 需要添加 mgiza 的bin目录
  • --root-dir: 数据文件所在的根目录
  • -corpus 设置文件名前缀;这里为 clean
  • -e, -f 设置语种
/home/xx/mosesdecoder/scripts/training/train-model.perl \
--alignment grow-diag-final-and \
--root-dir /home/xx/data/230303  -\
-corpus clean -e en -f zh \
--mgiza -mgiza-cpus=16 --parallel --first-step 1 --last-step 4 \
--external-bin-dir /home/xx/scode/mgiza/mgizapp/bin

  • 40万条数据可能要训练2小时以上;为了测试,可以尝试训练 1w到5w条数据即可。
  • 如果报找不到 symal 之类,可能是 mosesdecoder 编译不成功导致

生成成功后,我们可以在 root-dir 下得到 model 文件夹,包含以下三个文件

  • aligned.grow-diag-final-and
  • lex.e2f
  • lex.f2e

伊织 2023-03-03

http://www.lryc.cn/news/27148.html

相关文章:

  • 《ChatGPT是怎样炼成的》
  • Streaming System是第一章翻译
  • abap MODIFY常用语法解析
  • [媒体分流直播]媒体直播和传统直播的区别,以及媒体直播的特点
  • 打地鼠游戏-第14届蓝桥杯STEMA测评Scratch真题精选
  • 链表经典刷题--快慢指针与双指针
  • 【Java集合框架】篇四:Set接口
  • Python 数据库连接 + 创建库表+ 插入【内含代码实例】
  • DSS 部署环境需求清单
  • Python的面向对象,详细讲解Python之用处等基本常识
  • 如何使用固态继电器为恒温器供电
  • 【LeetCode】剑指 Offer(14)
  • Rman单实例迁移到单实例
  • 毕业设计 基于stm32舞台彩灯控制器设计app控制系统
  • 【MyBatis】篇一.
  • 【JavaScript速成之路】JavaScript流程控制
  • 18、基准测试,sysbench
  • 3D,点云拼接2
  • jmeter学习笔记一(http基础知识)
  • 【Java】CompletableFuture 并发顺序调度
  • 职场人必备的6款实用办公app,每一款都是心头爱
  • 小丑改造计划之复习一
  • final修饰符使用中遇到的一些问题
  • 好记又实用的获取电脑型号方法
  • @Transactional配置详解
  • 性能测试面试题汇总
  • vue权限控制和动态路由
  • 利用正则表达式删掉代码中的所有注释-pycharm为例
  • 【java基础】内部类、局部内部类、匿名内部类、静态内部类
  • react renderProps学习记录