当前位置:网站首页>NLP - GIZA++ 实现词对齐
NLP - GIZA++ 实现词对齐
2022-06-29 19:37:00 【伊织code】
文章目录
关于 GIZA++
安装
# 下载
$ 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.snt
0 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.vcb
0 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(三)
边栏推荐
- JVM(4) 字节码技术+运行期优化
- 【Proteus仿真】矩阵键盘中断扫描
- 终于,进亚马逊了~
- Sophomore majoring in software engineering, the previous learning situation is not very good. How to plan the follow-up development route
- Kdd 2022 | prise en compte de l'alignement et de l'uniformité des représentations dans le Filtrage collaboratif
- AI scene Storage Optimization: yunzhisheng supercomputing platform storage practice based on juicefs
- @Sneakythlows annotation
- Classic illustration of K-line diagram (Collection Edition)
- 福昕软件受邀亮相2022先进制造业数智发展论坛
- 使用 OpenCV 的基于标记的增强现实
猜你喜欢

Technical methodology of new AI engine under the data infrastructure upgrade window

npm ERR! fatal: early EOF npm ERR! fatal: index-pack failed

QC协议+华为FCP+三星AFC快充取电5V9V芯片FS2601应用

STM32CubeMX 学习(6)外部中断实验

数据基础设施升级窗口下,AI 新引擎的技术方法论

谁在抖音文玩里趁乱打劫?

shell bash脚本注意:单行末尾转义符 \ 后千万不能有其他无关字符(多行命令)

@Sneakythlows annotation

C语言数组专题训练

云上未来,数智导航:阿里云研究院报告合集
随机推荐
有了这4个安全测试工具,对软件安全测试say so easy!
以其他组件为代价的性能提升不是好提升
Canonical engineers are trying to solve the performance problem of Firefox snap
Docker compose deploy the flask project and build the redis service
Test method learning
idea中方法上没有小绿色三角
QC协议+华为FCP+三星AFC快充取电5V9V芯片FS2601应用
CAD Assistant - 3D模型格式转换利器
AI场景存储优化:云知声超算平台基于 JuiceFS 的存储实践
雲服務器的安全設置常識
ChainSafe跨链桥部署教程
MBA-day26 数的概念与性质
JVM(2) 垃圾回收
3-2主机发现-三层发现
Qui vole dans un jeu d'écriture?
【笔记】再笔记--边干边学Verilog HDL – 014
软件工程专业大二,之前的学习情况不太好该怎么规划后续发展路线
C语言数组专题训练
JVM(4) 字节码技术+运行期优化
Where is the win11 installation permission set? Win11 installation permission setting method