平行语料库分类器,表示一对句子是否相互翻译的可能性

bicleaner的Python项目详细描述


双清洁器

bicleaner(bicleaner-classify)是python中的一个工具,旨在检测并行语料库中有噪声的句子对。它 指示一对句子相互翻译(值接近1)或不相互翻译(值接近0)的可能性。被认为非常嘈杂的句子对的分数为0。

尽管提供了一个培训工具(bicleaner train),但您可能希望使用可用的即用语言包。 请访问https://github.com/bitextra/bitextra data/releases/tag/bicleaner-v1.1" rel="nofollow">https://github.com/bitextra/bitextra data/releases/tag/bicleaner-v1.1下载语言包。

引文

如果您觉得BiCleaner有用,请考虑引用以下文章:

< Buff行情>

V.M.桑切斯·卡塔赫纳、M.巴尼翁、S.奥尔蒂斯·罗哈斯和G.拉米雷斯·桑切斯,
"Prompsit提交给WMT 2018并行语料库过滤共享任务",
在《第三届机器翻译会议记录》第2卷:共享任务论文中
比利时布鲁塞尔:计算语言学协会,2018年10月

@InProceedings{prompsit:2018:WMT,
  author    = { V\'{i}ctor M. S\'{a}nchez-Cartagena and Marta Ba{\~n}\'{o}n and Sergio Ortiz-Rojas and Gema Ram\'{i}rez-S\'{a}nchez},
  title     = {Prompsit's submission to WMT 2018 Parallel Corpus Filtering shared task},
  booktitle = {Proceedings of the Third Conference on Machine Translation, Volume 2: Shared Task Papers},
  month     = {October},
  year      = {2018},
  address   = {Brussels, Belgium},
  publisher = {Association for Computational Linguistics}}

安装和要求

bicleaner与python 3.5一起工作,可以用pip安装:

python3.5 -m pip install bicleaner

bicleaner需要kenlm python绑定,并支持7-gram语言模型。您可以轻松安装 它们通过运行以下命令:

  git clone https://github.com/kpu/kenlm

kenlm/setup.py中,替换

<代码> ARGs= ['-O3','-DNDebug,'-dknMyMax命令=6′,'-STD= C++ 11′] < /代码> 具有 <代码> ARGs= ['-O3','-DNDebug,'-dknMyMax命令=7′,'-STD= c++ 11′] < /C>>/P>

python kenlm/setup.py install
cd kenlm/build
cmake .. -DKENLM_MAX_ORDER=7 -DCMAKE_INSTALL_PREFIX:PATH=/your/prefix/path
make -j all install

BiCleaner所需的其余额外模块将自动下载并使用第一个命令安装/升级(如果需要)。

安装后,四个二进制文件(bicleaner trainbicleaner train litebicleaner classifybicleaner classify lite)将位于您的python/installation/prefix/bin目录中。这通常是$home/.local/bin/usr/local/bin/

清洁

bicleaner-classify旨在检测并行语料库中的噪声句子对。它 指示一对句子相互翻译(值接近1)或不相互翻译(值接近0)的可能性。被认为非常嘈杂的句子对的分数为0。

输入文件(要分类的平行语料库)必须至少包含四列:

  • col1:url 1
  • col2:url 2
  • COL3:源语句
  • COL4:目标句

任何额外的列都将被忽略。

生成的输出文件将包含与原始输入文件相同的行和列, 添加一个包含双精简分类器分数的额外列。

使用此工具可以运行

bicleaner-classify [-h][-S SOURCE_TOKENISER_PATH][-T TARGET_TOKENISER_PATH][--tmp_dir TMP_DIR][-b BLOCK_SIZE][-p PROCESSES][-d DISCARDED_TUS][--threshold THRESHOLD][--lm_threshold LM_THRESHOLD][--keep_lm_result][-q][--debug][--logfile LOGFILE][-v]
                   input 
                   [output] 
                   metadata

参数

  • 位置参数:
    • 输入:要分类的制表符分隔的文件(行格式:url1 url2 source_sentence target_sentence[附加列],制表符分隔)
    • 输出:分类的输出(默认:标准输出)
    • 元数据:训练元数据(yaml文件),由bicleaner train生成,或作为语言包的一部分下载。你只需要解开你想要清理的文件的语言对的语言包。tar文件包含一个yaml元数据文件。
  • 可选参数:
    • -h,--帮助:显示此帮助消息并退出
  • 可选:
    • -s sl_tokenizer_path:源语言标记器绝对路径。如果没有给出,则使用摩西代币器。
    • -t tl_标记器路径:目标语言标记器绝对路径。如果没有给出,则使用摩西代币器。
    • --tmp_dir tmp_dir:临时目录ry在何处创建此程序的临时文件(默认值:default system temp dir,由unix中的环境变量tmpdir定义)
    • -B块大小,--块大小块大小每个块的句子对(默认值:10000)
    • -p进程,--进程进程:要使用的进程数(默认值:所有CPU减去1)
    • -d discarded_tus,--discarded_tus discarded_tus:tsv文件和discarded tus。分类器丢弃的tus将写入tsv文件中的该文件中。(默认值:无)
    • --阈值阈值:分类器的阈值。如果元数据中存在精度直方图,则最大值的间隔将作为默认值而不是当前默认值。(默认值:0.5)
  • --lm_threshold lm_threshold:语言模型流利性评分的阈值。如果lm fluency score低于阈值,则将删除所有lm fluency score低于阈值的句子对(分类器分数设置为0),除非设置了选项--keep_lm_result。(默认值:0.5)
  • --keep_lm_result:使用语言模型流利度分数在结果中添加一个额外的列,对于任何句子对,不要将分类器分数设置为0。(默认值:false)
  • 测井:
    • -q,--quiet:静默日志记录模式(默认值:false)
    • --调试:调试日志记录模式(默认:false)
    • --日志文件日志文件:将日志存储到文件(默认值:<;\io.textiowrapper name='<;stderr>;'mode='w'encoding='utf-8'>;)
    • -v,--version:显示此脚本的版本并退出

示例

bicleaner-classify  \
        corpus.en-es.raw  \
        corpus.en-es.classifed  \
        training.en-es.yaml 

这将读取"corpus.en es.raw"文件, 使用"training.en es.yaml"元数据文件中指示的分类器对其进行分类, 将分类结果写入"corpus.en es.classified"文件。 新文件的每一行都将包含与输入文件相同的内容,并添加一列,列中的分数由bicleaner分类器给出。

自动测试

我们包含了一个小的测试语料库和一个脚本,以检查您的双精简分类器是否按预期工作。 要使用它,只需运行:

python3.5 -m pytest -s tests/bicleaner_test.py

这将下载所需的语言包,对提供的测试语料库进行分类,并检查得到的分类分数。如果一切按预期进行,输出将是"1在xx.xx秒内通过"。所有下载的数据将在测试会话结束时删除。

训练分类器

如果您需要培训一个新的分类器(即,因为在bitexter data提供的语言包中不提供该分类器),

您可以使用bicleaner trainbicleaner train是一个python3工具,它允许您训练一个能够预测 无论一对句子是否相互翻译,都会丢弃太吵的句子对。

要求

为了训练新的分类器,您必须提供:

  • 一个干净的平行语料库(建议使用10万对句子)
  • sl-to-tl和tl-to-sl gzipped概率双语词典。您可以下载任何可用的语言包来检查它们的格式
    • SL到TL概率双语词典每行必须包含一个条目。每个条目必须包含以下3个字段,按空格分隔,顺序为:tl word、sl word、probability。
    • TL到SL概率双语词典每行必须包含一个条目。每个条目必须包含以下3个字段,按空格分隔,顺序为:sl word、tl word、probability。
    • 我们建议筛选出概率非常低的条目:删除那些概率比每个单词的最大翻译概率低10倍的条目可以加快处理速度,并且不会降低准确性。
    • 在推断概率词典之前,句子必须是带有moses标记符的标记符(带有-a标志)和小写。
    • 你可以使用Moses和MGiza++从平行语料库中获取概率词典。

或者,如果您希望分类器包含基于语言模型的改进的流畅性过滤器,则还必须提供:

  • 一个单语语料库,仅由SL中的噪音句子组成(建议使用10万个句子)
  • 一个单语语料库,仅由TL中的噪音句子组成(建议使用10万个句子)

此外,训练kenlm语言模型的命令必须在路径中。有关编译和安装的说明,请参见https://github.com/kpu/kenlm" rel="nofollow">https://github.com/kpu/kenlm。

原则上,如果你想使用bicleaner来清理一个部分有噪音的语料库,很难找到一个完全由有噪音的句子组成的语料库。幸运的是,bicleaner包含一组启发式规则,可用于从语料库中提取非常嘈杂的句子。

用启发式规则从现有语料库中提取含噪句子

给定一个并行的语料库,您可以通过运行以下命令,使用启发式规则提取其中一些噪音最大的句子:

  bicleaner-hardrules [-h][--annotated_output ANNOTATED_OUTPUT] 
                      -s SOURCE_LANG
                      -t TARGET_LANG 
                      [--tmp_dir TMP_DIR][-b BLOCK_SIZE][-p PROCESSES][INPUT_FILE][OUTPUT_FILE]

其中,input_file包含一个句子对齐的并行语料库,每行有一个句子对。句子按制表符分开。带注释的输出将只包含有噪声的句子对,附加一列指定应用的启发式规则,输出文件将包含所有输入句子。噪音大的将包含两个额外的列,分数为"0.0000"和单词"discard"。

你可以通过"剪切"适当的列来获得单语噪音语料库:

cut -f 1 ANNOTATED_OUTPUT > MONOLINGUAL_NOISY.SOURCE_LANG
cut -f 2 ANNOTATED_OUTPUT > MONOLINGUAL_NOISY.TARGET_LANG

参数

它可以如下使用。请注意,如果要基于语言模型启用改进的流畅性筛选器(推荐),则必须使用参数--noisy_examples_file_sl--noisy_examples_tl--noisy_file_tl--lm_file_tl

@InProceedings{prompsit:2018:WMT,
  author    = { V\'{i}ctor M. S\'{a}nchez-Cartagena and Marta Ba{\~n}\'{o}n and Sergio Ortiz-Rojas and Gema Ram\'{i}rez-S\'{a}nchez},
  title     = {Prompsit's submission to WMT 2018 Parallel Corpus Filtering shared task},
  booktitle = {Proceedings of the Third Conference on Machine Translation, Volume 2: Shared Task Papers},
  month     = {October},
  year      = {2018},
  address   = {Brussels, Belgium},
  publisher = {Association for Computational Linguistics}}
0
  • 位置参数:
    • 输入:制表符分隔的双语输入文件(默认:标准输入)(行格式:source_sentence target_sentence,制表符分隔)
  • 可选参数:
    • -h,--帮助:显示此帮助消息并退出
  • 强制性:
    • -m metadata,--metadata metadata:输出训练后将创建的训练元数据(yaml文件)。
    • -C分类器,--分类器分类器:训练后将创建的分类器数据文件。
    • -s source_lang,--source_lang source_lang:源语言代码
    • -t目标语言,--目标语言目标语言:目标语言代码
    • -d source_to_target_字典,--source_dictionary source_to_target_字典:sl to tl gzipped probability dictionary
    • -d target_to_source_字典,--target_dictionary target_to_source_字典:tl to sl gzipped probability dictionary
  • 选项>选项:
    • -s sl_tokenizer_path:源语言标记器绝对路径。如果没有给出,则使用摩西代币器。
    • -t tl_标记器路径:目标语言标记器绝对路径。如果没有给出,则使用摩西代币器。
    • --normalize_by_length:qmax dict功能中的normalize by length
    • --treat_oovs:qmax dict功能中oovs的特殊处理
    • --qmax_limit:要考虑的最大目标单词数,按长度排序(默认值:20)
    • --禁用功能:禁用不重要的功能
    • -g好示例,--好示例好示例:好示例数(默认值:50000)
    • -w错误示例,--错误示例错误示例:错误示例数(默认值:50000)
    • --良好测试示例良好测试示例:良好测试示例数(默认值:2000)
    • --错误测试示例错误测试示例:错误测试示例的数量(默认值(2000)
    • --分类器{SVM,NN,NN1,ADABoost,random戋forest}:分类器类型(默认:random戋forest)
    • --转储功能转储功能:将培训功能转储到文件(默认:无)
    • -b块大小,--块大小块大小:每个块的句子对(默认值:10000)
    • -p进程,--进程进程:要使用的进程数(默认值:所有CPU减去1)
    • --错误的示例文件错误的示例文件:提取了错误示例的文件以替换默认使用的方法中的合成示例(默认值:无)
    • --features_version features_version:功能的版本(默认:从features.py文件提取)
    • --嘈杂示例文件嘈杂示例文件:在SL中包含嘈杂文本的文件。这些用于估计嘈杂文本的困惑。
    • --嘈杂示例文件嘈杂示例文件:在TL中包含嘈杂文本的文件。这些用于估计嘈杂文本的复杂度。
    • --lm_dev_size:训练lms之前要从纯文本中删除的句子数。这些都是用来估计纯文本的困惑。(默认值:2000)
    • --lm_file_sl lm_sl:使用创建的SL语言模型输出文件。此文件应与yaml培训元数据放在同一目录中,因为它们通常一起分发。
    • --lm_file_tl lm_tl:使用创建的tl语言模型输出文件。此文件应与yaml培训元数据放在同一目录中,因为它们通常一起分发。
    • --lm_training_file_sl lm_training_sl:sl文本,从中训练sl lm。如果未指定此参数,则在删除--lm_dev_u大小的语句后,从输入文件的sl端训练sl lm。
    • --lm_training_file_tl lm_training_tl:tl文本,从中训练tl lm。如果未指定此参数,则在删除--lm_dev_u大小的语句后,从输入文件的tl端训练tl lm。
    • --lm_clean_examples_sl lm_clean_examples_sl:sl中包含纯文本的文件。用于估计纯文本的复杂度。此选项必须与--lm_training_file_sl一起使用,并且两个文件都不能有公共语句。此选项替换--lm_dev_size。
    • --lm_clean_examples_file_tl lm_clean_examples_file_tl:tl中包含纯文本的文件。用于估计纯文本的复杂度。此选项必须与--lm_training_file_tl一起使用,并且两个文件都不能有公共语句。此选项替换--lm_dev_size。"
    测井:
    • -q,--quiet:静默日志记录模式(默认值:false)
    • --调试:调试日志记录模式(默认:false)
    • --日志文件日志文件:将日志存储到文件(默认值:<;\io.textiowrapper name='<;stderr>;'mode='w'encoding='utf-8'>;)

示例

@InProceedings{prompsit:2018:WMT,
  author    = { V\'{i}ctor M. S\'{a}nchez-Cartagena and Marta Ba{\~n}\'{o}n and Sergio Ortiz-Rojas and Gema Ram\'{i}rez-S\'{a}nchez},
  title     = {Prompsit's submission to WMT 2018 Parallel Corpus Filtering shared task},
  booktitle = {Proceedings of the Third Conference on Machine Translation, Volume 2: Shared Task Papers},
  month     = {October},
  year      = {2018},
  address   = {Brussels, Belgium},
  publisher = {Association for Computational Linguistics}}
1

这将使用corpus.en-cs.train和概率词典dict en cs.gzdict cs en.gz为英语捷克语训练一个随机森林分类器。 这项培训将使用50000个好的和50000个坏的例子,以及1000个句子的块大小。 分类器数据将存储在en cs.classifier中,元数据存储在training.en cs.yaml中。改进的流利性语言模型过滤器将不包括在内。

生成的.yaml文件提供以下信息,有助于了解培训的好坏(也是分类所需的输入文件):

@InProceedings{prompsit:2018:WMT,
  author    = { V\'{i}ctor M. S\'{a}nchez-Cartagena and Marta Ba{\~n}\'{o}n and Sergio Ortiz-Rojas and Gema Ram\'{i}rez-S\'{a}nchez},
  title     = {Prompsit's submission to WMT 2018 Parallel Corpus Filtering shared task},
  booktitle = {Proceedings of the Third Conference on Machine Translation, Volume 2: Shared Task Papers},
  month     = {October},
  year      = {2018},
  address   = {Brussels, Belgium},
  publisher = {Association for Computational Linguistics}}
2

精简版

尽管通过将工作负载分配到可用的核心,使用了并行化,但有些用户可能更愿意实现自己的并行化策略。因此,提供了双精简脚本的单线程版本:bicleaner train litebicleaner classify lite。用法正是sa至于完整版本,则忽略blocksize(-b)和processes(-p)参数。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何向xsi:nil元素添加另一个属性?   Java抽象泛型方法,使用具体类型实现通配符   java使用pcap4j截断pcap文件   当我放置字母a、b和c时,java中的异常预期会下降   java设置活动对话框不可取消   接口类型变量上的Java克隆   使用Java或BouncyCastle对CSR(证书签名请求)进行安全解码/读取   java调用SavingsAccount对象上的函数并打印结果   java如何在Android应用程序上显示地图上的兴趣点(POI)并与之交互?   如果在JavaFX中的ResultSet中未找到任何内容,则显示java警报   java我将springboot和@component与@scheduled一起使用,它每12小时锁定一次   ApachePOI如何使用java删除包含字符串的word表的行   java如果对象(x,y)靠近其他对象(x,y)   从未对JMSException调用java JMS CachingConnectionFactory OneException方法   javascript使用java将HTML页面转换为MS word