4

我曾尝试在窗口上使用 giza++(使用 Cygwin 编译器)。我使用了这段代码:

//假设源语言是法语,目标语言是英语

plain2snt.out  FrenchCorpus.f  EnglishCorpus.e

mkcls  -c30  -n20  -pFrenchCorpus.f  -VFrenchCorpus.f.vcb.classes  opt
mkcls  -c30  -n20  -pEnglishCorpus.e  -VEnglishCorpus.e.vcb.classes  opt
snt2cooc.out  FrenchCorpus.f.vcb  EnglishCorpus.e.vcb  FrenchCorpus.f_EnglishCorpus.e.snt >courpuscooc.cooc

GIZA++  -S  FrenchCorpus.f.vcb  -T EnglishCorpus.e.vcb -C FrenchCorpus.f_EnglishCorpus.e.snt  -m1 100  -m2 30  -mh 30  -m3 30  -m4 30  -m5 30  -p1 o.95  -CoocurrenceFile  courpuscooc.cooc -o     dictionary

但是在从 giza++ 获取输出文件并评估输出后,我观察到结果太糟糕了。

我的评估结果是:

召回 = 0.0889

精度 = 0.0990

F_MEASURE = 0.0937

AER = 0.9035

有没有人知道原因?原因可能是我忘记了一些参数或者我应该更改其中一些参数?

换句话说:

首先,我想通过大量数据训练 giza++,然后通过小型语料库对其进行测试,并通过所需的对齐方式(GOLD STANDARD)比较其结果,但我在 web.xml 中找不到任何文档或有用的页面。

你能介绍有用的文件吗?

因此,我通过小型语料库(447 句)运行它并通过所需的对齐方式比较结果。你认为这是正确的方法吗?

我也改变了我的代码,得到了更好的结果,但它仍然不好:

GIZA++ -S testlowsf.f.vcb -T testlowde.e.vcb -C testlowsf.f_testlowde.e.snt -m1 5 -m2 0 -mh 5 -m3 5 -m4 0 -CoocurrenceFile inputcooc.cooc -o dictionary -model1dumpfrequency 1 -model4smoothfactor 0.4 -nodumps 0 -nsmooth 4 -onlyaldumps 1 -p0 0.999 -diagonal yes -final yes

评估结果:

// 假设 A 是 GIZA++ 的结果,G 是黄金标准。As 和 Gs 是 A 和 G 文件中的 S 链接。Ap 和 Gp 是 A 和 G 文件中的 p 链接。

RECALL = 相交 Gs/Gs = 0.6295

精度 = Ap 相交 Gp/A = 0.1090

FMEASURE = (2*PRECISION*RECALL)/(RECALL + PRECISION) = 0.1859

AER = 1 - ((As 相交 Gs + Ap 相交 Gp)/(A + S)) = 0.7425

你知道原因吗?

4

1 回答 1

1

你从哪里得到这些参数的?model1的100次迭代?!好吧,如果你真的设法运行它,我强烈怀疑你有一个非常小的并行语料库。如果是这样,您应该考虑在训练中添加更多并行数据。以及您如何准确计算召回率和精度指标?

编辑:

少于 500 句你不太可能得到任何合理的表现。通常的方法是不要找到更大的(未对齐的)平行语料库,同时在两者上运行 GIZA++,然后评估您有手动对齐的小部分。查看EuroparlMultiUN,这些都是免费提供的语料库,都包含相对大量的英法并行数据。可以在网站上找到有关准备数据的说明。

于 2012-08-30T10:45:08.813 回答