# OpenKiwi: Open-Source Machine Translation Quality Estimation
# Copyright (C) 2019 Unbabel <openkiwi@unbabel.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
from distutils.util import strtobool
from kiwi.cli.better_argparse import ModelParser
from kiwi.cli.models.quetch import (
add_data_flags,
add_predicting_options,
add_training_data_file_opts,
add_vocabulary_opts,
)
from kiwi.models.nuqe import NuQE
[docs]def add_model_hyper_params_opts(training_parser):
group = training_parser.add_argument_group('hyper-parameters')
group.add_argument(
'--bad-weight',
type=float,
default=3.0,
help='Relative weight for bad labels.',
)
group.add_argument(
'--window-size', type=int, default=3, help='Sliding window size.'
)
group.add_argument(
'--max-aligned',
type=int,
default=5,
help='Max number of alignments between source and target.',
)
group.add_argument(
'--source-embeddings-size',
type=int,
default=50,
help='Word embedding size for source.',
)
group.add_argument(
'--target-embeddings-size',
type=int,
default=50,
help='Word embedding size for target.',
)
group.add_argument(
'--freeze-embeddings',
type=lambda x: bool(strtobool(x)),
nargs='?',
const=True,
default=False,
help='Freeze embedding weights during training.',
)
group.add_argument(
'--embeddings-dropout',
type=float,
default=0.0,
help='Dropout rate for embedding layers.',
)
group.add_argument(
'--hidden-sizes',
type=int,
nargs='+',
# action='append',
default=[400, 200, 100, 50],
help='List of hidden sizes.',
)
group.add_argument(
'--dropout',
type=float,
default=0.0,
help='Dropout rate for linear layers.',
)
group.add_argument(
'--init-type',
type=str,
default='uniform',
choices=[
'uniform',
'normal',
'constant',
'glorot_uniform',
'glorot_normal',
],
help='Distribution type for parameters initialization.',
)
group.add_argument(
'--init-support',
type=float,
default=0.1,
help='Parameters are initialized over uniform distribution with '
'support (-param_init, param_init). Use 0 to not use '
'initialization.',
)
return group
[docs]def add_training_options(training_parser):
add_training_data_file_opts(training_parser)
add_data_flags(training_parser)
add_vocabulary_opts(training_parser)
add_model_hyper_params_opts(training_parser)
[docs]def parser_for_pipeline(pipeline):
if pipeline == 'train':
return ModelParser(
'nuqe',
'train',
title=NuQE.title,
options_fn=add_training_options,
api_module=NuQE,
)
if pipeline == 'predict':
return ModelParser(
'nuqe',
'predict',
title=NuQE.title,
options_fn=add_predicting_options,
api_module=NuQE,
)
return None