2011年9月19日

不弄清程序的上下文环境容易出错:针对Moses的tunning解决一个重要Bug

最近发现我在服务器上运行的moses的tunning偶尔会出现不能得到结果的现象,居然两次发现moses tunning出来的moses-tunned.ini缺少参数。这个问题似乎从来没有出现过,仔细的检查的moses的参数处理的perl脚本,居然发现原因是moses的tunning出来的weight可能有科学计数法,例如-6.62728e-05。但是reuse-weight.perl中在识别这些weight时都是默认为纯小数的,例如-6.62728。在不能匹配科学计数法的数字时自然就会丢掉某些weight,导致后续的测试程序出现问题。

这个Bug较为隐蔽,似乎接触moses的两年多来都没有遇到过,仔细想想,肯定是以前tunning的结果的weight都是纯小数,最近的一些语料上的运行才出现了这个对极小数采用科学计数法的问题。

通过修改Perl匹配小数的正则表达式,这个Bug解决掉了,程序终于能畅快的继续运行了。

这个小事,让我想到一个问题,那就是写程序的时候往往会出现对输入输出数据的相关假设,编程人员务必需要仔细对各种输入情况进行考虑,最好的方法就是编写各种各样的测试用例来保证结果的正确性。

没有评论: