通过reranking(重排序)测试lm(语言模型)性能

来源:互联网 发布:淘宝物流几天自动收货 编辑:程序博客网 时间:2024/04/29 06:13

代码在文尾共享

一. 系统说明
    在常见语言模型测评指标是困惑度,它为语言模型性能优劣提供一个参考指标。但机器翻译的实际使用中,困惑度上的差异并不一定能很好地改善翻译性能。因此本文提出将待测试的语言模型通过使用reranking(重排序)的方式结合到系统之中,来对语言模型的性能进行测试。
    为了方便各类语言模型不同的接口,本系统采用线下的方式,只要你的语言模型能够将将句子打分输出成每句话一行的格式,就能够使用本系统对其性能进行测试。
    本系统在机器翻译的部分使用了有东北大学自然语言处理实验室推出的NiuTrans系统,在这里向其表示感谢。

二. 所需数据
    1. 训练模型所需:
        翻译模型源语文件
        翻译模型目标语文件
        翻译模型词对齐文件
        语言模型训练语料文件
        基线系统权重调优的开发集
        reranking时权重调优的开发集
    2. 测试语言模型性能所需:
        测试集源语文件
        测试集参考译文文件
三. 操作过程
    ————————-安装阶段————————-
    1. 执行install.sh脚本:安装NiuTrans系统,并编译其中的rerank程序(C++编写的)。
    ————————-训练阶段————————-
    2. 编辑do_train.sh脚本,设置相应参数:
        TM_TRAIN_FILE_SRC:翻译模型源语文件
        TM_TRAIN_FILE_TGT:翻译模型目标语文件
        TM_TRAIN_FILE_ALI:翻译模型词对齐文件
        LM_TRAIN_FILE:语言模型训练语料文件
        LM_TRAIN_NGRAM:语言模型元数
        DEV_FOR_BASELINE:基线系统权重调优的开发集
        DEV_FOR_RERANKING:reranking时权重调优的开发集
        DEV_FOR_BASELINE_NREF:基线系统开发集参考译文个数
        DEV_FOR_RERANKING_NREF:reranking开发集参考译文个数
        保存编辑
    3. 执行do_train.sh脚本,该脚本执行的操作如下:
        训练翻译模型
            生成以下目标文件:
                model.phrase文件夹
                /model.phrase/phrase.translation.table
                /model.phrase/me.reordering.table
                /model.phrase/msd.reordering.table
                /model.phrase/train-model.log
                /model.phrase/NiuTrans.phrase.train.model.config
        训练语言模型
            生成以下目标文件:
                lm文件夹
                /lm/lm.vocab
                /lm/lm.trie.data
        生成所需config文件
            生成以下目标文件:
                NiuTrans.phrase.user.config
        对基线系统进行权重调优
            生成以下目标文件:
                mert-model.log
            修改以下目标文件:
                NiuTrans.phrase.user.config
        从用于reranking的开发集中抽取源语句子
            生成以下目标文件:
                reranking开发集.src(在reranking开发集文件的目录中)
        对抽取出来的源语句子进行解码,生成nbest
            生成以下目标文件:
                nbest.out
        从生成的nbest中抽取译文
            生成以下目标文件:
                nbest.out.tgt
        统计译文中单词个数
            生成以下目标文件:
                nbest.out.tgt.wordNum
        设置所有目标语句子参与权重调优(有这个参数是为了支持只是用某些句子进行调优,如疑问句)
            生成以下目标文件:
                nbest.out.tgt.mark
    ————————-语言模型打分阶段(一)————————-
    4. 对nbest的译文使用待测试的语言模型进行打分(格式为每行一个句子的打分)
    ————————-reranking的权重调优阶段————————-
    5. 编辑do_mert_for_rerank.sh脚本,设置相应参数:
        SCORE_FILE:待测试的语言模型的打分文件
        DEV_FOR_RERANKING:reranking时权重调优的开发集
        DEV_FOR_RERANKING_NREF:reranking开发集参考译文个数
        保存编辑
    6. 执行do_mert_for_rerank.sh脚本,该脚本执行的操作如下:
        向旧的nbest中增加新的特征,也就是待测试的语言模型打分/句中单词数
            生成以下目标文件:
                nbest.out.addF
        对reranking部分进行权重调优
            生成以下目标文件:
                nbest.out.addF.rerank
                baseline.config.tuned(在mert_for_rerank文件夹中)
                baseline.config.tuned.rerank(在mert_for_rerank文件夹中)
                niutransserver.mert.result.txt(在mert_for_rerank文件夹中)
    ————————-测试阶段————————-
    7. 编辑do_test.sh脚本,设置相应参数:
        TEST_FILE:测试集源语文件
        保存编辑
    8. 执行do_test.sh脚本,该脚本执行的操作如下:
        对测试集句子进行解码,生成nbest
            生成以下目标文件:
                test.nbest.out
        从生成的nbest中抽取译文
            生成以下目标文件:
                test.nbest.out.tgt
        统计译文中单词个数
            生成以下目标文件:
                test.nbest.out.tgt.wordNum
        设置所有目标语句子参与权重调优(有这个参数是为了支持只是用某些句子进行调优,如疑问句)
            生成以下目标文件:
                test.nbest.out.tgt.mark
    ————————-语言模型打分阶段(二)————————-
    9. 对测试集nbest的译文使用待测试的语言模型进行打分(格式为每行一个句子的打分)
    ————————-测试后的reranking阶段————————-
    10. 编辑do_rerank.sh脚本,设置相应参数:
        SCORE_FILE:待测试的语言模型的打分文件
        REFERENCE_FILE:测试集参考译文文件
        REFERENCE_FILE_NREF:测试集参考译文个数
        保存编辑
    11. 执行do_rerank.sh脚本,该脚本执行的操作如下:
            向旧的nbest中增加新的特征,也就是待测试的语言模型打分/句中单词数
            生成以下目标文件:
                test.nbest.out.addF
        使用调优过的reranking权重对解码出的nbest进行重新排序
            生成以下目标文件:
                test.nbest.out.addF.rerank
        从基线的nbest中抽出1best
            生成以下目标文件:
                test.1best.out
        从reranking后的nbest中抽出1best
            生成以下目标文件:
                test.1best.out.rerank
        计算测试集在基线上的bleu值
        计算测试集在reranking后的bleu值
        通过比较这两个bleu值来判断该语言模型是否对原系统又补充作用。
    注:以上文件若无特殊声明均以NiuTrans根目录下的work目录为一级目录表示

系统实现代码http://pan.baidu.com/s/1miyiCWw ,欢迎大家进行测试并提出宝贵意见。

该博文永久更新网址转移到个人小站:通过reranking(重排序)测试lm(语言模型)性能

1 0
原创粉丝点击