NLP - GIZA++ 实现词对齐
文章目录
- 关于 GIZA++
- 安装
- 使用
- 1、将平行语料转化为 GIZA++ 格式(plain2snt.out)
- 2、获取共现文件(snt2cooc.out)
- 3、创建 mkcls 文件(mkcls)
- 4、运行GIZA++
关于 GIZA++
- 官网:http://www.fjoch.com/GIZA++.html
- github: https://github.com/moses-smt/giza-pp
安装
# 下载
$ git clone https://github.com/moses-smt/giza-pp.git# 进入主目录
$ cd giza-pp# 编译
$ make
将会在 giza-pp/GIZA++-v2
文件夹下生成 GIZA++
, snt2cooc.out
等文件
使用
1、将平行语料转化为 GIZA++ 格式(plain2snt.out)
我在根目录创建 data 文件夹(和 GIZA++-v2
平级),放置平行语料文件:
data.en
, data.zh
,注意需要是分词后的文件。
$ cd GIZA++-v2/
$ ./plain2snt.out ../data/data.en ../data/data.zh
这样每个文件都将额外生成两个文件:
$ tree
.
├── data.en
├── data.en.vcb # 词汇文件
├── data.en_data.zh.snt
├── data.zh
├── data.zh.vcb
└── data.zh_data.en.snt0 directories, 6 files$ wc -l data.e*
100 data.en
1495 data.en.vcb
300 data.en_data.zh.snt
1895 total
.vcb
文件
词汇文件, 统计句子中单词出现的次数,格式为 :
id || token || count
$ head data.en.vcb
2 Singapore 7
3 exchange 1
4 to 96
5 allow 3$ head data.en_data.zh.snt
1
2 3 4 5 6 7
2 3 4 5 6
1
8 9 10 11 12 13 14 15 4 5 16 17 18 4 19
7 8 9 10 11 12 4 13 14 15 6 16 17 3 18 19 20 21 22 23 24 25 26 27 28 16 29 30
1
.snt
文件:
• 每个句子对出现的次数
• text_a.txt 句子中的单词编号
• text_b.txt 句子中的单词编号
• 其中0是保留给特殊的"空" token
2、获取共现文件(snt2cooc.out)
# 查看用法
$ ./snt2cooc.out -h
Usage: ./snt2cooc.out vcb1 vcb2 snt12
经文件保存到
$ ./snt2cooc.out ../data/data.en.vcb ../data/data.zh.vcb ../data/data.en_data.zh.snt > ../data/en_zh.cooc
END.$ ./snt2cooc.out ../data/data.zh.vcb ../data/data.en.vcb ../data/data.zh_data.en.snt > ../data/zh_en.cooc
END.
$ tail /Users/luyi/Documents/nlp/giza-pp/data/en_zh.cooc
1244 1271
1244 1272
1244 1273
3、创建 mkcls 文件(mkcls)
mkcls 位于 giza-pp/mkcls-v2
文件夹
语法:
mkcls [-nnum] [-ptrain] [-Vfile] opt
-c
: 词类数目-n
: 表示训练迭代次数,默认1次-p
:需要聚类的已分词文本 (输入文件)-V
:输出文件opt
:优化运行
$ ./mkcls -p../data/data.en -V../data/data.en.vcb.classes opt$ ./mkcls -p../data/data.zh -V../data/data.zh.vcb.classes opt
- 注意
-p
,-V
是和路径连在一起的,中间没有空格。如果路径为相对路径:../data/data.zh
,也是连在一起,写作:-p../data/data.zh
- 运行完成后,每个语种将生成
*.vcb.classes
,*.vcb.classes.cats
文件
*.vcb.classes
格式为:单词 || 单词所属类别
*.vcb.classes.cats
格式为:单词词类 || 对应词类的一组单词
4、运行GIZA++
创建 en2zh
, zh2en
两个文件,方便存储结果文件:
./GIZA++ -S ../data/data.en.vcb -T ../data/data.zh.vcb -C ../data/data.en_data.zh.snt -CoocurrenceFile ../data/en_zh.cooc -o en2z -OutputPath ../data/en2zh ./GIZA++ -S ../data/data.zh.vcb -T ../data/data.en.vcb -C ../data/data.zh_data.en.snt -CoocurrenceFile ../data/zh_en.cooc -o zh2en -OutputPath ../data/zh2en
将在上述创建的结果文件中,每个目录下会生成 13 个文件。如:
en2zh $ tree
.
├── en2z.A3.final
├── en2z.Decoder.config
├── en2z.d3.final
├── en2z.d4.final
├── en2z.gizacfg
├── en2z.n3.final
├── en2z.p0_3.final
├── en2z.perp
├── en2z.t3.final
├── en2z.trn.src.vcb
├── en2z.trn.trg.vcb
├── en2z.tst.src.vcb
└── en2z.tst.trg.vcb0 directories, 13 files
$ head en2z.A3.final en2z.d3.final en2z.d4.final en2z.Decoder.config en2z.gizacfg en2z.n3.final en2z.p0_3.final en2z.perp en2z.t3.final en2z.trn.src.vcb en2z.trn.trg.vcb en2z.tst.src.vcb en2z.tst.trg.vcb
==> en2z.A3.final <==
1 1 6 100 1
2 2 6 100 1
4 3 6 100 1
5 4 6 100 1
6 5 6 100 1
4 1 7 100 1
4 2 7 100 0.5
6 2 7 100 0.5
1 3 7 100 0.5
4 3 7 100 0.5==> en2z.d3.final <==
1 1 100 5 1
2 2 100 5 1
3 4 100 5 1
4 5 100 5 1
5 6 100 5 1
5 0 100 8 1
1 1 100 8 1
2 2 100 8 0.49842
3 2 100 8 0.00315911
7 2 100 8 0.49842==> en2z.d4.final <==
0 74 2 1
58 74 1 0.500002
58 74 2 0.499998
66 74 1 1
83 74 -40 4.52691e-05
83 74 2 0.999955
97 74 -3 1
89 74 -2 0.499858
89 74 1 0.500142
56 74 -11 1==> en2z.Decoder.config <==
# Template for Configuration File for the Rewrite Decoder
# Syntax:
# <Variable> = <value>
# '#' is the comment character
#================================================================
#================================================================
# LANGUAGE MODEL FILE
# The full path and file name of the language model file:
LanguageModelFile =
#==================================================================> en2z.gizacfg <==
adbackoff 0
c ../data/data.en_data.zh.snt
compactadtable 1
compactalignmentformat 0
coocurrencefile ../data/en_zh.cooc
corpusfile ../data/data.en_data.zh.snt
countcutoff 1e-06
countcutoffal 1e-05
countincreasecutoff 1e-06
countincreasecutoffal 1e-05==> en2z.n3.final <==
2 0.0950195 0.534289 0.254623 0.0757677 0.017334 0.011483 0 0 0.00574151 0.00574151
3 0.0513258 0.618243 0.203737 0.0925842 0.0194914 0.00487292 0.00974571 0 0 0
4 0.858273 0.114323 0.0169254 0.00733 0.00210072 0.00104782 0 0 0 0
5 0.176389 0.52529 0.180916 0.0587039 0.0240148 0.00800389 0.00800471 0.0153497 0.00332792 0
6 0.341513 0.504811 0.0555389 0.0531367 0.0276125 0.0128884 0 0 0.00445369 4.61406e-05
7 0.0513258 0.618243 0.203737 0.0925842 0.0194914 0.00487292 0.00974571 0 0 0
8 0.498432 0.461809 0.0231669 0.00754107 0.0060336 0 0.00301661 0 0 0
9 0.793663 0.149055 0.0281555 0.0239287 0.00346756 0.00172953 0 0 0 0
10 0.717249 0.269367 0.00779881 0.00253858 0.00203111 0 0.00101549 0 0 0
11 0.173795 0.54683 0.148991 0.0725464 0.0236616 0.00788618 0.007887 0.015124 0.00327898 0 ==> en2z.p0_3.final <==
0.871654
==> en2z.perp <==
#trnsz tstsz iter model trn-pp test-pp trn-vit-pp tst-vit-pp
100 0 0 Model1 1430.24 N/A 52239.7 N/A
100 0 1 Model1 74.4319 N/A 1192.51 N/A
100 0 2 Model1 62.5537 N/A 767.593 N/A
100 0 3 Model1 56.5553 N/A 536.391 N/A
100 0 4 Model1 53.1902 N/A 416.789 N/A
100 0 5 HMM 45.7351 N/A 348.286 N/A
100 0 6 HMM 47.3091 N/A 175.379 N/A
100 0 7 HMM 40.4043 N/A 99.9964 N/A
100 0 8 HMM 32.5132 N/A 59.9214 N/A==> en2z.t3.final <==
0 16 0.468297
0 18 0.42654
0 30 0.0609917
0 31 0.0380113
0 34 0.00376838
0 47 0.00239139
2 2 1
3 3 0.5
3 61 0.5
4 47 1==> en2z.trn.src.vcb <==
2 Singapore 7
3 exchange 2
4 to 73
5 allow 3
6 Spac 2
7 listings 2
8 SGX 4
9 is 19
10 the 138
11 first 4==> en2z.trn.trg.vcb <==
2 新加坡 8
3 交易所 5
4 允许 3
5 SPAC 4
6 上市 9
7 新交所 5
8 由此 1
9 成为 6
10 亚洲 2
11 第一 3==> en2z.tst.src.vcb <====> en2z.tst.trg.vcb <==
伊织 2022-06-29(三)
NLP - GIZA++ 实现词对齐相关推荐
- 使用GIZA++进行词对齐
准备双语语料 zh.txt:源语言 海洋 是 一个 非常 复杂 的 事物 . 人类 的 健康 也 是 一 件 非常 复杂 的 事情 . 将 两者 统一 起来 看 起来 是 一 件 艰巨 的 任务 . ...
- 使用GIZA++进行平行语料的词对齐
使用GIZA++进行平行语料的词对齐 在使用moses搭建机器翻译系统时,词对齐的过程是和模型训练结合在一起的,GIZA++运行的很多细节都被跳过.本文是将GIZA++单独拿出来,关注其从编译.运行到 ...
- 词对齐任务:依附于机器翻译
前情概括 词对齐任务分为三大实现方式,详情见词对齐任务概述,此为其一. NMT依附下的word alignment 说道机翻显然就想到transformer,其encoder-decoder结构其实即 ...
- NLP 获取相似词 - 1.爬取百度搜索结果
视频链接:https://www.bilibili.com/video/av78674056 一,前言 NLP实际项目要用到,给定一个词,找出它的同义词.相似词.拓展词等. 我思考了下,有: 1,同义 ...
- NLP 获取相似词 - 2.提取相似词[爬虫应用]
视频链接:https://www.bilibili.com/video/av78674056 接上节. NLP 获取相似词 - 1.爬取百度搜索结果 https://blog.csdn.net/Gre ...
- GIZA++词对齐运行实验
http://hi.baidu.com/maydaygmail/blog/item/cf666a7b92ae871429388a36.html
- 【NLP】ACL2020 | 词向量性别偏见
作者 | Salesforce Research 编译 | NewBeeNLP ACL2020关于词嵌入性别偏见的蛮有意思的一项工作: 论文地址:https://arxiv.org/abs/2005 ...
- NLP(4) | 用词向量技术简单分析红楼梦人物关系用n-gramma生成词向量word2vect进行模型训练
NLP(1) | 词向量one hot编码词向量编码思想 NLP(2) | 中文分词分词的概念分词方法分类CRFHMM分词 NLP(3)| seq to seq 模型 前言:出于种种原因,总是不自觉把 ...
- NLP中的词向量及其应用
https://www.toutiao.com/a6643219722961682947/ 2019-01-06 11:25:24 词向量基本上是一种单词表示形式,它将人类对语言的理解与机器的理解连接 ...
最新文章
- Add A Qdisk After configure RHCS
- java多线程解决应用挂死的问题
- Electron怎样进行渲染进程调试和使用浏览器和VSCode进行调试
- VTK:vtk布尔运算隐式函数BooleanOperationImplicitFunctions用法实战
- java 不能反序列化_java中的序列化与反序列化
- 2016 Top 10 Android Library
- 计算机基础八进制和十六进制试题,计算机基础知识考试试题
- 试着用React写项目-利用react-router解决跳转路由等问题(二)
- java base64编码的三种方式
- python匿名函数(lambda)
- JavaScript —— Symbol数据类型的拓展
- 二分查找算法(Java)
- 疯狂程序员网址。。。
- 货币角色分裂——解开金钱的角色
- 剑指 Offer II 075. 数组相对排序(中等 排序 数组)
- Jackson公司蛋白质印迹指南丨样品制备
- win10不用密码直接登陆设置
- 量化交易入门阶段——欧奈尔的CANSLIM模型(A 年度净利润同比增长率)
- 学linux作用,linux有必要学吗?学linux有什么作用,学linux能干什么
- 基于Web的系统测试方法(张友生(来自中国系统分析师/中国系统分析员))