├── .gitattributes ├── README.md ├── base_model.py ├── global_timer.py ├── model ├── cn2en_config.yml ├── codes_file.cn └── slang-translation.utf8.txt ├── mytranslator.py ├── remove_adjacent_duplicate.py ├── requirements.txt ├── sents_cn_seg_500.txt ├── subEntity_new.py ├── test_predict_local.py └── token_process_tools.py /.gitattributes: -------------------------------------------------------------------------------- 1 | model/3_18/cn2en_save-model_step_370000.pt filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### A Demo of Applying TurboTransformers in Translation Task 2 | 3 | ### Prerequisites 4 | [OpenNMT-py](https://github.com/OpenNMT/OpenNMT-py "OpenNMT-py") 5 | 6 | [Tencent/TurboTransformers](https://github.com/Tencent/TurboTransformers "TurboTransformers") 7 | 8 | #### Usage 9 | ``` 10 | mkdir -p model/3_18 11 | # download a pretrained translation model in that dir 12 | # https://pan.baidu.com/s/1iWAtd4gYt7l2f4rXZoucxQ 13 | # Password Code : su5x 14 | https://pan.baidu.com/s/1iWAtd4gYt7l2f4rXZoucxQ 15 | pip install -r requirements.txt 16 | python ./test_predict_local.py [--use_gpu] 17 | ``` 18 | 19 | #### Known Issues 20 | OpenNMT-py==1.1.0 will throw errors on some test cases. Upgrade it tp 1.2.0. 21 | 22 | 23 | -------------------------------------------------------------------------------- /base_model.py: -------------------------------------------------------------------------------- 1 | import io 2 | import torch.quantization 3 | import onmt.opts 4 | from onmt.model_builder import load_test_model 5 | # use our customized Translator to substitude the ONMT default one. 6 | # from onmt.translate.translator import Translator 7 | from mytranslator import Translator 8 | from token_process_tools import TokenProcessor 9 | 10 | try: 11 | import ctranslate2 12 | from ctranslate2.specs.transformer_spec import TransformerSpec 13 | except: 14 | pass 15 | 16 | 17 | class Options: 18 | def __init__(self): 19 | self.alpha = 0.6 20 | self.attn_debug = False 21 | self.avg_raw_probs = False 22 | self.batch_size = 30 23 | self.beam_size = 4 24 | self.beta = 0.6 25 | self.block_ngram_repeat = 0 26 | self.coverage_penalty = 'wu' 27 | self.cuda = False 28 | self.data_type = 'text' 29 | self.dump_beam = '' 30 | self.dynamic_dict = False 31 | self.fp32 = True 32 | self.gpu = -1 33 | self.ignore_when_blocking = [] 34 | self.image_channel_size = 3 35 | self.length_penalty = 'wu' 36 | self.og_file = '' 37 | self.log_file_level = '0' 38 | self.max_length = 100 39 | self.max_sent_length = None 40 | self.min_length = 0 41 | self.n_best = 1 42 | self.output = 'pred.txt' 43 | self.phrase_table = '' 44 | self.random_sampling_temp = 1.0 45 | self.random_sampling_topk = 1 46 | self.ratio = -0.0 47 | self.replace_unk = False 48 | self.report_bleu = False 49 | self.report_rouge = False 50 | self.report_time = False 51 | self.sample_rate = 16000 52 | self.seed = 829 53 | self.shard_size = 10000 54 | self.share_vocab = False 55 | self.src = 'dummy_src' 56 | self.src_dir = '' 57 | self.stepwise_penalty = False 58 | self.tgt = None 59 | self.verbose = False 60 | self.window = 'hamming' 61 | self.window_size = 0.02 62 | self.window_stride = 0.01 63 | 64 | 65 | class BatchPredictor: 66 | def __init__(self, 67 | token_processor: TokenProcessor, 68 | translator, 69 | debug=False): 70 | self.token_processor = token_processor 71 | self.translator = translator 72 | self.debug = debug 73 | 74 | async def preprocess(self, query): 75 | sent = query['q'] 76 | sent = await self.token_processor.preprocess(sent) 77 | if self.debug: 78 | print(sent) 79 | return sent 80 | 81 | def call_batch(self, queries): 82 | print(len(queries)) 83 | trans_list, no_trans_list, trans_or_not_recoder = self.split_trans_and_no_trans( 84 | queries) 85 | sio = io.StringIO() 86 | for sent in trans_list: 87 | print(sent, file=sio) 88 | 89 | result = [] 90 | if len(trans_list) != 0: 91 | sio.seek(0) 92 | result = self.translator.translate(src=sio, 93 | batch_size=len(queries)) 94 | result = self.post_process([sent[0] for sent in result[1]]) 95 | result_list = self.concat_trans_and_no_trans(no_trans_list, result, 96 | trans_or_not_recoder) 97 | return result_list 98 | 99 | def concat_trans_and_no_trans(self, no_trans_list, result, 100 | trans_or_not_recoder): 101 | result_list = [] 102 | i, j = 0, 0 103 | for trans_it in trans_or_not_recoder: 104 | if trans_it: 105 | result_list.append({"result": result[i]}) 106 | i += 1 107 | else: 108 | result_list.append({"result": no_trans_list[j]}) 109 | j += 1 110 | return result_list 111 | 112 | def split_trans_and_no_trans(self, queries): 113 | trans_or_not_recoder = [] 114 | no_trans_list = [] 115 | trans_list = [] 116 | for q in queries: 117 | if self.debug: print(q) 118 | flag, sent = self.token_processor.in_trans_dict(q) 119 | trans_or_not_recoder.append(not flag) 120 | if flag: 121 | no_trans_list.append(sent) 122 | else: 123 | trans_list.append(sent) 124 | return trans_list, no_trans_list, trans_or_not_recoder 125 | 126 | def post_process(self, result): 127 | final_result = [] 128 | for sent in result: 129 | final_result.append(self.token_processor.post_process(sent)) 130 | if self.debug: 131 | print(final_result) 132 | return final_result 133 | 134 | 135 | 136 | def get_onmt_translator(cfg: TokenProcessor, use_gpu : bool, with_quantize_dynamic: bool): 137 | class DummyOutFile: 138 | def write(self, msg): 139 | pass 140 | 141 | def flush(self, *args, **kwargs): 142 | pass 143 | 144 | opt = Options() 145 | opt.cuda = True if use_gpu else False 146 | opt.gpu = 0 if use_gpu else -1 147 | scorer = onmt.translate.GNMTGlobalScorer.from_opt(opt) 148 | fields, model, model_opt = load_test_model(opt, cfg.model) 149 | if with_quantize_dynamic: 150 | torch.quantization.quantize_dynamic(model, inplace=True) 151 | translator_cn2en = Translator.from_opt(model=model, 152 | fields=fields, 153 | model_opt=model_opt, 154 | opt=opt, 155 | global_scorer=scorer, 156 | out_file=DummyOutFile()) 157 | return translator_cn2en 158 | -------------------------------------------------------------------------------- /global_timer.py: -------------------------------------------------------------------------------- 1 | turbo_timer = 0. 2 | torch_timer = 0. -------------------------------------------------------------------------------- /model/cn2en_config.yml: -------------------------------------------------------------------------------- 1 | model: model/3_18/cn2en_save-model_step_370000.pt 2 | type: cn2en 3 | tokenize_url: http://9.141.138.117/tokenize # V1.6.0 (https://git.code.oa.com/prservice/qqseg) 4 | tokenize_mode: CRF|POS|CUS|ADD|ASCII_LM|ASCII_LM_PINYIN 5 | codes_file: ./model/codes_file.cn 6 | trans_dict_file: ./model/slang-translation.utf8.txt 7 | -------------------------------------------------------------------------------- /mytranslator.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """ Translator Class and builder """ 3 | from __future__ import print_function 4 | import codecs 5 | import os 6 | import time 7 | import numpy as np 8 | from itertools import count, zip_longest 9 | 10 | import torch 11 | 12 | import onmt.model_builder 13 | import onmt.inputters as inputters 14 | import onmt.decoders.ensemble 15 | from onmt.translate.beam_search import BeamSearch 16 | from onmt.translate.greedy_search import GreedySearch 17 | from onmt.utils.misc import tile, set_random_seed, report_matrix 18 | from onmt.utils.alignment import extract_alignment, build_align_pharaoh 19 | from onmt.modules.copy_generator import collapse_copy_scores 20 | 21 | import turbo_transformers 22 | import global_timer as global_timer 23 | 24 | show_debug_detail = False 25 | show_profile_detail = False 26 | 27 | def build_translator(opt, report_score=True, logger=None, out_file=None): 28 | if out_file is None: 29 | out_file = codecs.open(opt.output, 'w+', 'utf-8') 30 | 31 | load_test_model = onmt.decoders.ensemble.load_test_model \ 32 | if len(opt.models) > 1 else onmt.model_builder.load_test_model 33 | fields, model, model_opt = load_test_model(opt) 34 | 35 | scorer = onmt.translate.GNMTGlobalScorer.from_opt(opt) 36 | 37 | translator = Translator.from_opt( 38 | model, 39 | fields, 40 | opt, 41 | model_opt, 42 | global_scorer=scorer, 43 | out_file=out_file, 44 | report_align=opt.report_align, 45 | report_score=report_score, 46 | logger=logger 47 | ) 48 | return translator 49 | 50 | 51 | def max_tok_len(new, count, sofar): 52 | """ 53 | In token batching scheme, the number of sequences is limited 54 | such that the total number of src/tgt tokens (including padding) 55 | in a batch <= batch_size 56 | """ 57 | # Maintains the longest src and tgt length in the current batch 58 | global max_src_in_batch # this is a hack 59 | # Reset current longest length at a new batch (count=1) 60 | if count == 1: 61 | max_src_in_batch = 0 62 | # max_tgt_in_batch = 0 63 | # Src: [ w1 ... wN ] 64 | max_src_in_batch = max(max_src_in_batch, len(new.src[0]) + 2) 65 | # Tgt: [w1 ... wM ] 66 | src_elements = count * max_src_in_batch 67 | return src_elements 68 | 69 | 70 | class Translator(object): 71 | """Translate a batch of sentences with a saved model. 72 | Args: 73 | model (onmt.modules.NMTModel): NMT model to use for translation 74 | fields (dict[str, torchtext.data.Field]): A dict 75 | mapping each side to its list of name-Field pairs. 76 | src_reader (onmt.inputters.DataReaderBase): Source reader. 77 | tgt_reader (onmt.inputters.TextDataReader): Target reader. 78 | gpu (int): GPU device. Set to negative for no GPU. 79 | n_best (int): How many beams to wait for. 80 | min_length (int): See 81 | :class:`onmt.translate.decode_strategy.DecodeStrategy`. 82 | max_length (int): See 83 | :class:`onmt.translate.decode_strategy.DecodeStrategy`. 84 | beam_size (int): Number of beams. 85 | random_sampling_topk (int): See 86 | :class:`onmt.translate.greedy_search.GreedySearch`. 87 | random_sampling_temp (int): See 88 | :class:`onmt.translate.greedy_search.GreedySearch`. 89 | stepwise_penalty (bool): Whether coverage penalty is applied every step 90 | or not. 91 | dump_beam (bool): Debugging option. 92 | block_ngram_repeat (int): See 93 | :class:`onmt.translate.decode_strategy.DecodeStrategy`. 94 | ignore_when_blocking (set or frozenset): See 95 | :class:`onmt.translate.decode_strategy.DecodeStrategy`. 96 | replace_unk (bool): Replace unknown token. 97 | data_type (str): Source data type. 98 | verbose (bool): Print/log every translation. 99 | report_time (bool): Print/log total time/frequency. 100 | copy_attn (bool): Use copy attention. 101 | global_scorer (onmt.translate.GNMTGlobalScorer): Translation 102 | scoring/reranking object. 103 | out_file (TextIO or codecs.StreamReaderWriter): Output file. 104 | report_score (bool) : Whether to report scores 105 | logger (logging.Logger or NoneType): Logger. 106 | """ 107 | 108 | def __init__( 109 | self, 110 | model, 111 | fields, 112 | src_reader, 113 | tgt_reader, 114 | gpu=-1, 115 | n_best=1, 116 | min_length=0, 117 | max_length=100, 118 | ratio=0., 119 | beam_size=30, 120 | random_sampling_topk=1, 121 | random_sampling_temp=1, 122 | stepwise_penalty=None, 123 | dump_beam=False, 124 | block_ngram_repeat=0, 125 | ignore_when_blocking=frozenset(), 126 | replace_unk=False, 127 | phrase_table="", 128 | data_type="text", 129 | verbose=False, 130 | report_time=False, 131 | copy_attn=False, 132 | global_scorer=None, 133 | out_file=None, 134 | report_align=False, 135 | report_score=True, 136 | logger=None, 137 | seed=-1): 138 | self.model = model 139 | # fjr add turbo 140 | turbo_transformers.set_num_threads(4) 141 | self.turbo_decoder = turbo_transformers.TransformerDecoder.from_onmt(self.model.decoder) 142 | 143 | self.fields = fields 144 | tgt_field = dict(self.fields)["tgt"].base_field 145 | self._tgt_vocab = tgt_field.vocab 146 | self._tgt_eos_idx = self._tgt_vocab.stoi[tgt_field.eos_token] 147 | self._tgt_pad_idx = self._tgt_vocab.stoi[tgt_field.pad_token] 148 | self._tgt_bos_idx = self._tgt_vocab.stoi[tgt_field.init_token] 149 | self._tgt_unk_idx = self._tgt_vocab.stoi[tgt_field.unk_token] 150 | self._tgt_vocab_len = len(self._tgt_vocab) 151 | 152 | self._gpu = gpu 153 | self._use_cuda = gpu > -1 154 | self._dev = torch.device("cuda", self._gpu) \ 155 | if self._use_cuda else torch.device("cpu") 156 | 157 | self.n_best = n_best 158 | self.max_length = max_length 159 | 160 | self.beam_size = beam_size 161 | self.random_sampling_temp = random_sampling_temp 162 | self.sample_from_topk = random_sampling_topk 163 | 164 | self.min_length = min_length 165 | self.ratio = ratio 166 | self.stepwise_penalty = stepwise_penalty 167 | self.dump_beam = dump_beam 168 | self.block_ngram_repeat = block_ngram_repeat 169 | self.ignore_when_blocking = ignore_when_blocking 170 | self._exclusion_idxs = { 171 | self._tgt_vocab.stoi[t] for t in self.ignore_when_blocking} 172 | self.src_reader = src_reader 173 | self.tgt_reader = tgt_reader 174 | self.replace_unk = replace_unk 175 | if self.replace_unk and not self.model.decoder.attentional: 176 | raise ValueError( 177 | "replace_unk requires an attentional decoder.") 178 | self.phrase_table = phrase_table 179 | self.data_type = data_type 180 | self.verbose = verbose 181 | self.report_time = report_time 182 | 183 | self.copy_attn = copy_attn 184 | 185 | self.global_scorer = global_scorer 186 | if self.global_scorer.has_cov_pen and \ 187 | not self.model.decoder.attentional: 188 | raise ValueError( 189 | "Coverage penalty requires an attentional decoder.") 190 | self.out_file = out_file 191 | self.report_align = report_align 192 | self.report_score = report_score 193 | self.logger = logger 194 | 195 | self.use_filter_pred = False 196 | self._filter_pred = None 197 | 198 | # for debugging 199 | self.beam_trace = self.dump_beam != "" 200 | self.beam_accum = None 201 | if self.beam_trace: 202 | self.beam_accum = { 203 | "predicted_ids": [], 204 | "beam_parent_ids": [], 205 | "scores": [], 206 | "log_probs": []} 207 | 208 | set_random_seed(seed, self._use_cuda) 209 | 210 | @classmethod 211 | def from_opt( 212 | cls, 213 | model, 214 | fields, 215 | opt, 216 | model_opt, 217 | global_scorer=None, 218 | out_file=None, 219 | report_align=False, 220 | report_score=True, 221 | logger=None): 222 | """Alternate constructor. 223 | Args: 224 | model (onmt.modules.NMTModel): See :func:`__init__()`. 225 | fields (dict[str, torchtext.data.Field]): See 226 | :func:`__init__()`. 227 | opt (argparse.Namespace): Command line options 228 | model_opt (argparse.Namespace): Command line options saved with 229 | the model checkpoint. 230 | global_scorer (onmt.translate.GNMTGlobalScorer): See 231 | :func:`__init__()`.. 232 | out_file (TextIO or codecs.StreamReaderWriter): See 233 | :func:`__init__()`. 234 | report_align (bool) : See :func:`__init__()`. 235 | report_score (bool) : See :func:`__init__()`. 236 | logger (logging.Logger or NoneType): See :func:`__init__()`. 237 | """ 238 | 239 | src_reader = inputters.str2reader[opt.data_type].from_opt(opt) 240 | tgt_reader = inputters.str2reader["text"].from_opt(opt) 241 | 242 | return cls( 243 | model, 244 | fields, 245 | src_reader, 246 | tgt_reader, 247 | gpu=opt.gpu, 248 | n_best=opt.n_best, 249 | min_length=opt.min_length, 250 | max_length=opt.max_length, 251 | ratio=opt.ratio, 252 | beam_size=opt.beam_size, 253 | random_sampling_topk=opt.random_sampling_topk, 254 | random_sampling_temp=opt.random_sampling_temp, 255 | stepwise_penalty=opt.stepwise_penalty, 256 | dump_beam=opt.dump_beam, 257 | block_ngram_repeat=opt.block_ngram_repeat, 258 | ignore_when_blocking=set(opt.ignore_when_blocking), 259 | replace_unk=opt.replace_unk, 260 | phrase_table=opt.phrase_table, 261 | data_type=opt.data_type, 262 | verbose=opt.verbose, 263 | report_time=opt.report_time, 264 | copy_attn=model_opt.copy_attn, 265 | global_scorer=global_scorer, 266 | out_file=out_file, 267 | report_align=report_align, 268 | report_score=report_score, 269 | logger=logger, 270 | seed=opt.seed) 271 | 272 | def _log(self, msg): 273 | if self.logger: 274 | self.logger.info(msg) 275 | else: 276 | print(msg) 277 | 278 | def _gold_score(self, batch, memory_bank, src_lengths, src_vocabs, 279 | use_src_map, enc_states, batch_size, src): 280 | if "tgt" in batch.__dict__: 281 | gs = self._score_target( 282 | batch, memory_bank, src_lengths, src_vocabs, 283 | batch.src_map if use_src_map else None) 284 | self.model.decoder.init_state(src, memory_bank, enc_states) 285 | self.turbo_decoder.init_state(src, memory_bank, enc_states) 286 | else: 287 | gs = [0] * batch_size 288 | return gs 289 | 290 | def translate( 291 | self, 292 | src, 293 | tgt=None, 294 | src_dir=None, 295 | batch_size=None, 296 | batch_type="sents", 297 | attn_debug=False, 298 | align_debug=False, 299 | phrase_table=""): 300 | """Translate content of ``src`` and get gold scores from ``tgt``. 301 | Args: 302 | src: See :func:`self.src_reader.read()`. 303 | tgt: See :func:`self.tgt_reader.read()`. 304 | src_dir: See :func:`self.src_reader.read()` (only relevant 305 | for certain types of data). 306 | batch_size (int): size of examples per mini-batch 307 | attn_debug (bool): enables the attention logging 308 | align_debug (bool): enables the word alignment logging 309 | Returns: 310 | (`list`, `list`) 311 | * all_scores is a list of `batch_size` lists of `n_best` scores 312 | * all_predictions is a list of `batch_size` lists 313 | of `n_best` predictions 314 | """ 315 | 316 | if batch_size is None: 317 | raise ValueError("batch_size must be set") 318 | 319 | src_data = {"reader": self.src_reader, "data": src, "dir": src_dir} 320 | tgt_data = {"reader": self.tgt_reader, "data": tgt, "dir": None} 321 | _readers, _data, _dir = inputters.Dataset.config( 322 | [('src', src_data), ('tgt', tgt_data)]) 323 | 324 | data = inputters.Dataset( 325 | self.fields, readers=_readers, data=_data, dirs=_dir, 326 | sort_key=inputters.str2sortkey[self.data_type], 327 | filter_pred=self._filter_pred 328 | ) 329 | 330 | data_iter = inputters.OrderedIterator( 331 | dataset=data, 332 | device=self._dev, 333 | batch_size=batch_size, 334 | batch_size_fn=max_tok_len if batch_type == "tokens" else None, 335 | train=False, 336 | sort=False, 337 | sort_within_batch=True, 338 | shuffle=False 339 | ) 340 | 341 | xlation_builder = onmt.translate.TranslationBuilder( 342 | data, self.fields, self.n_best, self.replace_unk, tgt, 343 | self.phrase_table 344 | ) 345 | 346 | # Statistics 347 | counter = count(1) 348 | pred_score_total, pred_words_total = 0, 0 349 | gold_score_total, gold_words_total = 0, 0 350 | 351 | all_scores = [] 352 | all_predictions = [] 353 | 354 | start_time = time.time() 355 | 356 | for batch in data_iter: 357 | batch_data = self.translate_batch( 358 | batch, data.src_vocabs, attn_debug 359 | ) 360 | translations = xlation_builder.from_batch(batch_data) 361 | 362 | for trans in translations: 363 | all_scores += [trans.pred_scores[:self.n_best]] 364 | pred_score_total += trans.pred_scores[0] 365 | pred_words_total += len(trans.pred_sents[0]) 366 | if tgt is not None: 367 | gold_score_total += trans.gold_score 368 | gold_words_total += len(trans.gold_sent) + 1 369 | 370 | n_best_preds = [" ".join(pred) 371 | for pred in trans.pred_sents[:self.n_best]] 372 | if self.report_align: 373 | align_pharaohs = [build_align_pharaoh(align) for align 374 | in trans.word_aligns[:self.n_best]] 375 | n_best_preds_align = [" ".join(align) for align 376 | in align_pharaohs] 377 | n_best_preds = [pred + " ||| " + align 378 | for pred, align in zip( 379 | n_best_preds, n_best_preds_align)] 380 | all_predictions += [n_best_preds] 381 | self.out_file.write('\n'.join(n_best_preds) + '\n') 382 | self.out_file.flush() 383 | 384 | if self.verbose: 385 | sent_number = next(counter) 386 | output = trans.log(sent_number) 387 | if self.logger: 388 | self.logger.info(output) 389 | else: 390 | os.write(1, output.encode('utf-8')) 391 | 392 | if attn_debug: 393 | preds = trans.pred_sents[0] 394 | preds.append('') 395 | attns = trans.attns[0].tolist() 396 | if self.data_type == 'text': 397 | srcs = trans.src_raw 398 | else: 399 | srcs = [str(item) for item in range(len(attns[0]))] 400 | output = report_matrix(srcs, preds, attns) 401 | if self.logger: 402 | self.logger.info(output) 403 | else: 404 | os.write(1, output.encode('utf-8')) 405 | 406 | if align_debug: 407 | if trans.gold_sent is not None: 408 | tgts = trans.gold_sent 409 | else: 410 | tgts = trans.pred_sents[0] 411 | align = trans.word_aligns[0].tolist() 412 | if self.data_type == 'text': 413 | srcs = trans.src_raw 414 | else: 415 | srcs = [str(item) for item in range(len(align[0]))] 416 | output = report_matrix(srcs, tgts, align) 417 | if self.logger: 418 | self.logger.info(output) 419 | else: 420 | os.write(1, output.encode('utf-8')) 421 | 422 | end_time = time.time() 423 | 424 | if self.report_score: 425 | msg = self._report_score('PRED', pred_score_total, 426 | pred_words_total) 427 | self._log(msg) 428 | if tgt is not None: 429 | msg = self._report_score('GOLD', gold_score_total, 430 | gold_words_total) 431 | self._log(msg) 432 | 433 | if self.report_time: 434 | total_time = end_time - start_time 435 | self._log("Total translation time (s): %f" % total_time) 436 | self._log("Average translation time (s): %f" % ( 437 | total_time / len(all_predictions))) 438 | self._log("Tokens per second: %f" % ( 439 | pred_words_total / total_time)) 440 | 441 | if self.dump_beam: 442 | import json 443 | json.dump(self.translator.beam_accum, 444 | codecs.open(self.dump_beam, 'w', 'utf-8')) 445 | return all_scores, all_predictions 446 | 447 | def _align_pad_prediction(self, predictions, bos, pad): 448 | """ 449 | Padding predictions in batch and add BOS. 450 | Args: 451 | predictions (List[List[Tensor]]): `(batch, n_best,)`, for each src 452 | sequence contain n_best tgt predictions all of which ended with 453 | eos id. 454 | bos (int): bos index to be used. 455 | pad (int): pad index to be used. 456 | Return: 457 | batched_nbest_predict (torch.LongTensor): `(batch, n_best, tgt_l)` 458 | """ 459 | dtype, device = predictions[0][0].dtype, predictions[0][0].device 460 | flatten_tgt = [best.tolist() for bests in predictions 461 | for best in bests] 462 | paded_tgt = torch.tensor( 463 | list(zip_longest(*flatten_tgt, fillvalue=pad)), 464 | dtype=dtype, device=device).T 465 | bos_tensor = torch.full([paded_tgt.size(0), 1], bos, 466 | dtype=dtype, device=device) 467 | full_tgt = torch.cat((bos_tensor, paded_tgt), dim=-1) 468 | batched_nbest_predict = full_tgt.view( 469 | len(predictions), -1, full_tgt.size(-1)) # (batch, n_best, tgt_l) 470 | return batched_nbest_predict 471 | 472 | def _align_forward(self, batch, predictions): 473 | """ 474 | For a batch of input and its prediction, return a list of batch predict 475 | alignment src indice Tensor in size ``(batch, n_best,)``. 476 | """ 477 | # (0) add BOS and padding to tgt prediction 478 | if hasattr(batch, 'tgt'): 479 | batch_tgt_idxs = batch.tgt.transpose(1, 2).transpose(0, 2) 480 | else: 481 | batch_tgt_idxs = self._align_pad_prediction( 482 | predictions, bos=self._tgt_bos_idx, pad=self._tgt_pad_idx) 483 | tgt_mask = (batch_tgt_idxs.eq(self._tgt_pad_idx) | 484 | batch_tgt_idxs.eq(self._tgt_eos_idx) | 485 | batch_tgt_idxs.eq(self._tgt_bos_idx)) 486 | 487 | n_best = batch_tgt_idxs.size(1) 488 | # (1) Encoder forward. 489 | src, enc_states, memory_bank, src_lengths = self._run_encoder(batch) 490 | 491 | # (2) Repeat src objects `n_best` times. 492 | # We use batch_size x n_best, get ``(src_len, batch * n_best, nfeat)`` 493 | src = tile(src, n_best, dim=1) 494 | enc_states = tile(enc_states, n_best, dim=1) 495 | if isinstance(memory_bank, tuple): 496 | memory_bank = tuple(tile(x, n_best, dim=1) for x in memory_bank) 497 | else: 498 | memory_bank = tile(memory_bank, n_best, dim=1) 499 | src_lengths = tile(src_lengths, n_best) # ``(batch * n_best,)`` 500 | 501 | # (3) Init decoder with n_best src, 502 | self.model.decoder.init_state(src, memory_bank, enc_states) 503 | self.turbo_decoder.init_state(src, memory_bank, enc_states) 504 | 505 | # reshape tgt to ``(len, batch * n_best, nfeat)`` 506 | tgt = batch_tgt_idxs.view(-1, batch_tgt_idxs.size(-1)).T.unsqueeze(-1) 507 | dec_in = tgt[:-1] # exclude last target from inputs 508 | 509 | _, attns = self.model.decoder( 510 | dec_in, memory_bank, memory_lengths=src_lengths, with_align=True) 511 | 512 | alignment_attn = attns["align"] # ``(B, tgt_len-1, src_len)`` 513 | # masked_select 514 | align_tgt_mask = tgt_mask.view(-1, tgt_mask.size(-1)) 515 | prediction_mask = align_tgt_mask[:, 1:] # exclude bos to match pred 516 | # get aligned src id for each prediction's valid tgt tokens 517 | alignement = extract_alignment( 518 | alignment_attn, prediction_mask, src_lengths, n_best) 519 | return alignement 520 | 521 | def translate_batch(self, batch, src_vocabs, attn_debug): 522 | """Translate a batch of sentences.""" 523 | with torch.no_grad(): 524 | tic = time.perf_counter() 525 | if self.beam_size == 1: 526 | decode_strategy = GreedySearch( 527 | pad=self._tgt_pad_idx, 528 | bos=self._tgt_bos_idx, 529 | eos=self._tgt_eos_idx, 530 | batch_size=batch.batch_size, 531 | min_length=self.min_length, max_length=self.max_length, 532 | block_ngram_repeat=self.block_ngram_repeat, 533 | exclusion_tokens=self._exclusion_idxs, 534 | return_attention=attn_debug or self.replace_unk, 535 | sampling_temp=self.random_sampling_temp, 536 | keep_topk=self.sample_from_topk) 537 | else: 538 | # TODO: support these blacklisted features 539 | assert not self.dump_beam 540 | 541 | decode_strategy = BeamSearch( 542 | self.beam_size, 543 | batch_size=batch.batch_size, 544 | pad=self._tgt_pad_idx, 545 | bos=self._tgt_bos_idx, 546 | eos=self._tgt_eos_idx, 547 | n_best=self.n_best, 548 | global_scorer=self.global_scorer, 549 | min_length=self.min_length, max_length=self.max_length, 550 | return_attention=attn_debug or self.replace_unk, 551 | block_ngram_repeat=self.block_ngram_repeat, 552 | exclusion_tokens=self._exclusion_idxs, 553 | stepwise_penalty=self.stepwise_penalty, 554 | ratio=self.ratio) 555 | toc = time.perf_counter() 556 | beam_search_time = toc - tic 557 | 558 | tic = time.perf_counter() 559 | ret = self._translate_batch_with_strategy(batch, src_vocabs, 560 | decode_strategy) 561 | toc = time.perf_counter() 562 | translate_batch_with_strategy_time = toc - tic 563 | 564 | if show_profile_detail: 565 | print(f"BeamSearch Time {beam_search_time:0.4f} seconds, translate_batch_with_strategy Time {translate_batch_with_strategy_time: 0.4f} seconds") 566 | return ret 567 | 568 | def _run_encoder(self, batch): 569 | src, src_lengths = batch.src if isinstance(batch.src, tuple) \ 570 | else (batch.src, None) 571 | 572 | enc_states, memory_bank, src_lengths = self.model.encoder( 573 | src, src_lengths) 574 | if src_lengths is None: 575 | assert not isinstance(memory_bank, tuple), \ 576 | 'Ensemble decoding only supported for text data' 577 | src_lengths = torch.Tensor(batch.batch_size) \ 578 | .type_as(memory_bank) \ 579 | .long() \ 580 | .fill_(memory_bank.size(0)) 581 | return src, enc_states, memory_bank, src_lengths 582 | 583 | def _decode_and_generate( 584 | self, 585 | decoder_in, 586 | memory_bank, 587 | batch, 588 | src_vocabs, 589 | memory_lengths, 590 | src_map=None, 591 | step=None, 592 | batch_offset=None): 593 | if self.copy_attn: 594 | # Turn any copied words into UNKs. 595 | decoder_in = decoder_in.masked_fill( 596 | decoder_in.gt(self._tgt_vocab_len - 1), self._tgt_unk_idx 597 | ) 598 | if show_debug_detail: 599 | print("debug in _decode_and_generate, memory_bank", memory_bank.size(), memory_bank.type()) 600 | print("debug in _decode_and_generate, decoder_in", decoder_in.size(), decoder_in.type()) 601 | print('debug in _decode_and_generate, memory_lengths', memory_lengths, memory_lengths.type()) 602 | 603 | print('debug max_relative_positions', self.model.decoder.transformer_layers[0].self_attn.max_relative_positions) # always 0 604 | print('debug word_vec_size', self.model.decoder.embeddings.word_vec_size) 605 | print('debug word_padding_idx', self.model.decoder.embeddings.word_padding_idx) 606 | print('debug step', step, type(step)) 607 | 608 | 609 | # Decoder forward, takes [tgt_len, batch, nfeats] as input 610 | # and [src_len, batch, hidden] as memory_bank 611 | # in case of inference tgt_len = 1, batch = beam times batch_size 612 | # in case of Gold Scoring tgt_len = actual length, batch = 1 batch 613 | 614 | tic = time.perf_counter() 615 | dec_out, dec_attn = self.model.decoder( 616 | decoder_in, memory_bank, memory_lengths=memory_lengths, step=step 617 | ) 618 | toc = time.perf_counter() 619 | onmt_docoder_time = toc - tic 620 | 621 | tic = time.perf_counter() 622 | turbo_dec_out, turbo_dec_attn = self.turbo_decoder( 623 | decoder_in, memory_bank, memory_lengths=memory_lengths, step=step 624 | ) 625 | toc = time.perf_counter() 626 | turbo_docoder_time = toc - tic 627 | global_timer.turbo_timer += turbo_docoder_time 628 | global_timer.torch_timer += onmt_docoder_time 629 | # check correctness 630 | assert(torch.max(torch.abs(dec_out - turbo_dec_out) < 1e-3)) 631 | assert(torch.max(torch.abs(dec_attn["std"] - turbo_dec_attn["std"]) < 1e-3)) 632 | 633 | # print("onmt time: ", onmt_docoder_time, " turbo time: ", turbo_docoder_time) 634 | # print("dec_out diff: ", torch.max( 635 | # torch.abs(dec_out - 636 | # turbo_dec_out))) 637 | # print("attn diff: ", torch.max( 638 | # torch.abs(dec_attn["std"] - 639 | # turbo_dec_attn["std"]))) 640 | 641 | 642 | tic = time.perf_counter() 643 | # Generator forward. 644 | if not self.copy_attn: 645 | if "std" in dec_attn: 646 | attn = dec_attn["std"] 647 | else: 648 | attn = None 649 | log_probs = self.model.generator(dec_out.squeeze(0)) 650 | # returns [(batch_size x beam_size) , vocab ] when 1 step 651 | # or [ tgt_len, batch_size, vocab ] when full sentence 652 | else: 653 | attn = dec_attn["copy"] 654 | scores = self.model.generator(dec_out.view(-1, dec_out.size(2)), 655 | attn.view(-1, attn.size(2)), 656 | src_map) 657 | # here we have scores [tgt_lenxbatch, vocab] or [beamxbatch, vocab] 658 | if batch_offset is None: 659 | scores = scores.view(-1, batch.batch_size, scores.size(-1)) 660 | scores = scores.transpose(0, 1).contiguous() 661 | else: 662 | scores = scores.view(-1, self.beam_size, scores.size(-1)) 663 | scores = collapse_copy_scores( 664 | scores, 665 | batch, 666 | self._tgt_vocab, 667 | src_vocabs, 668 | batch_dim=0, 669 | batch_offset=batch_offset 670 | ) 671 | scores = scores.view(decoder_in.size(0), -1, scores.size(-1)) 672 | log_probs = scores.squeeze(0).log() 673 | # returns [(batch_size x beam_size) , vocab ] when 1 step 674 | # or [ tgt_len, batch_size, vocab ] when full sentence 675 | toc = time.perf_counter() 676 | others_time = toc - tic 677 | if show_profile_detail: 678 | print(f"others_time {others_time:0.4f}") 679 | return log_probs, attn 680 | 681 | def _translate_batch_with_strategy( 682 | self, 683 | batch, 684 | src_vocabs, 685 | decode_strategy): 686 | """Translate a batch of sentences step by step using cache. 687 | Args: 688 | batch: a batch of sentences, yield by data iterator. 689 | src_vocabs (list): list of torchtext.data.Vocab if can_copy. 690 | decode_strategy (DecodeStrategy): A decode strategy to use for 691 | generate translation step by step. 692 | Returns: 693 | results (dict): The translation results. 694 | """ 695 | # (0) Prep the components of the search. 696 | use_src_map = self.copy_attn 697 | parallel_paths = decode_strategy.parallel_paths # beam_size 698 | batch_size = batch.batch_size 699 | 700 | # (1) Run the encoder on the src. 701 | src, enc_states, memory_bank, src_lengths = self._run_encoder(batch) 702 | if show_debug_detail: 703 | print("debug init state src", src.size(), src.type()) 704 | print("debug init state memory_bank", memory_bank.size(), memory_bank.type()) 705 | print("debug init state enc_states", enc_states.size(), enc_states.type()) 706 | self.model.decoder.init_state(src, memory_bank, enc_states) 707 | self.turbo_decoder.init_state(src, memory_bank, enc_states) 708 | 709 | results = { 710 | "predictions": None, 711 | "scores": None, 712 | "attention": None, 713 | "batch": batch, 714 | "gold_score": self._gold_score( 715 | batch, memory_bank, src_lengths, src_vocabs, use_src_map, 716 | enc_states, batch_size, src)} 717 | 718 | # (2) prep decode_strategy. Possibly repeat src objects. 719 | src_map = batch.src_map if use_src_map else None 720 | fn_map_state, memory_bank, memory_lengths, src_map = \ 721 | decode_strategy.initialize(memory_bank, src_lengths, src_map) 722 | 723 | if fn_map_state is not None: 724 | self.model.decoder.map_state(fn_map_state) 725 | # fjr turbo 726 | self.turbo_decoder.map_state(fn_map_state) 727 | 728 | # (3) Begin decoding step by step: 729 | deocder_and_generate_time = 0. 730 | for step in range(decode_strategy.max_length): 731 | decoder_input = decode_strategy.current_predictions.view(1, -1, 1) 732 | 733 | tic = time.perf_counter() 734 | log_probs, attn = self._decode_and_generate( 735 | decoder_input, 736 | memory_bank, 737 | batch, 738 | src_vocabs, 739 | memory_lengths=memory_lengths, 740 | src_map=src_map, 741 | step=step, 742 | batch_offset=decode_strategy.batch_offset) 743 | toc = time.perf_counter() 744 | deocder_and_generate_time += toc - tic 745 | 746 | 747 | decode_strategy.advance(log_probs, attn) 748 | any_finished = decode_strategy.is_finished.any() 749 | if any_finished: 750 | decode_strategy.update_finished() 751 | if decode_strategy.done: 752 | break 753 | 754 | select_indices = decode_strategy.select_indices 755 | 756 | if any_finished: 757 | # Reorder states. 758 | if isinstance(memory_bank, tuple): 759 | memory_bank = tuple(x.index_select(1, select_indices) 760 | for x in memory_bank) 761 | else: 762 | memory_bank = memory_bank.index_select(1, select_indices) 763 | 764 | memory_lengths = memory_lengths.index_select(0, select_indices) 765 | 766 | if src_map is not None: 767 | src_map = src_map.index_select(1, select_indices) 768 | 769 | if parallel_paths > 1 or any_finished: 770 | self.model.decoder.map_state( 771 | lambda state, dim: state.index_select(dim, select_indices)) 772 | self.turbo_decoder.map_state( 773 | lambda state, dim: state.index_select(dim, select_indices) 774 | ) 775 | 776 | if show_profile_detail: 777 | print(f"deocder_and_generate_time {deocder_and_generate_time:0.4f}") 778 | 779 | results["scores"] = decode_strategy.scores 780 | results["predictions"] = decode_strategy.predictions 781 | results["attention"] = decode_strategy.attention 782 | if self.report_align: 783 | results["alignment"] = self._align_forward( 784 | batch, decode_strategy.predictions) 785 | else: 786 | results["alignment"] = [[] for _ in range(batch_size)] 787 | return results 788 | 789 | def _score_target(self, batch, memory_bank, src_lengths, 790 | src_vocabs, src_map): 791 | tgt = batch.tgt 792 | tgt_in = tgt[:-1] 793 | 794 | log_probs, attn = self._decode_and_generate( 795 | tgt_in, memory_bank, batch, src_vocabs, 796 | memory_lengths=src_lengths, src_map=src_map) 797 | 798 | log_probs[:, :, self._tgt_pad_idx] = 0 799 | gold = tgt[1:] 800 | gold_scores = log_probs.gather(2, gold) 801 | gold_scores = gold_scores.sum(dim=0).view(-1) 802 | 803 | return gold_scores 804 | 805 | def _report_score(self, name, score_total, words_total): 806 | if words_total == 0: 807 | msg = "%s No words predicted" % (name,) 808 | else: 809 | avg_score = score_total / words_total 810 | ppl = np.exp(-score_total.item() / words_total) 811 | msg = ("%s AVG SCORE: %.4f, %s PPL: %.4f" % ( 812 | name, avg_score, 813 | name, ppl)) 814 | return msg 815 | -------------------------------------------------------------------------------- /remove_adjacent_duplicate.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # encoding=utf-8 3 | 4 | import sys 5 | 6 | 7 | def remove_adjacent_duplicate(raw_str, n_gram=1): 8 | data = raw_str.strip().split() 9 | 10 | if len(data) == 0 or len(data) == n_gram: 11 | return raw_str 12 | 13 | pre_pos = 0 14 | curr_pos = n_gram 15 | no_duplicate_data = [] 16 | while pre_pos <= len(data) - 2 * n_gram and curr_pos <= len(data) - n_gram: 17 | pre_words = ' '.join(data[pre_pos:pre_pos + n_gram]) 18 | curr_words = ' '.join(data[curr_pos:curr_pos + n_gram]) 19 | if curr_words == pre_words: 20 | curr_pos += n_gram 21 | else: 22 | if curr_pos - pre_pos == n_gram: 23 | no_duplicate_data.append(data[pre_pos]) 24 | pre_pos += 1 25 | curr_pos += 1 26 | else: 27 | no_duplicate_data.append(pre_words) 28 | pre_pos = curr_pos 29 | curr_pos = pre_pos + n_gram 30 | no_duplicate_data.append(' '.join(data[pre_pos:pre_pos + n_gram])) 31 | no_duplicate_data.append(' '.join(data[curr_pos:])) 32 | 33 | return ' '.join(no_duplicate_data) 34 | 35 | 36 | def remove_ngram(raw_str, min_n_gram=2, max_n_gram=2): 37 | for i in range(min_n_gram, max_n_gram + 1): 38 | raw_str = remove_adjacent_duplicate(raw_str, n_gram=i) 39 | return raw_str 40 | 41 | 42 | def main(): 43 | result = remove_ngram(sys.argv[1], max_n_gram=4) 44 | print(result) 45 | 46 | 47 | if __name__ == "__main__": 48 | main() 49 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | str2bool 2 | aiohttp 3 | subword_nmt 4 | zhconv 5 | docopt 6 | contexttimer 7 | OpenNMT-py==1.2.0 8 | -------------------------------------------------------------------------------- /sents_cn_seg_500.txt: -------------------------------------------------------------------------------- 1 | 同时 , 它 也 指出 亚美尼亚 现行 分摊 比率 与 其 支付 能力 不 相 符合 , 因而 请 委员 会 , 除 其他 因素 外 , 考虑 到 其 结构 改革 和 该 区域 政治 不 稳定 所 造成 的 严重 经济 问题 。 2 | 该 意见 书 内 附有 关于 国民 收入 和 人口 的 数据 。 3 | 同时 , 亨里克 · 安 纽斯 先生 作为 主持 起草 委员 会 各个 主要 届 会 的 代理 副 主席 也 提供 了 宝贵 的 援助 。 4 | 该项 意见 中 有 两 个 统计 表 和 一 项 关于 以 本国 货币 支付 部分 的 经常 预算 摊款 。 5 | 它 已 向 统计 司 提供 关于 国民 收入 和 人口 的 数据 以及 货币 基金 组织 为 拉脱维亚 计算 的 汇率 。 6 | 此外 , 该国 政府 也 提出 有利于 审查 1989 - 1994 年 分摊 比率 的 理由 。 7 | 2 . 委员 会 以 鼓掌 方式 推选 赛义德 · 阿姆贾德 · 阿里 为 主席 , 彼得 · 格雷格 先生 为 副 主席 。 8 | 捷克 共和 国 要求 将 它 当作 新 会员 国 来 计算 摊款 。 9 | 9 . 在 援引 大会 议事 规则 第 一六 ○ 条 时 , 亚美尼亚 指出 前 苏维埃 社会 主义 共和 国 联盟 的 国民 收 统计 数字 并 不 准确 定 反映 出 其 支付 能力 。 10 | 它 强调 从 中央 计划 经济 过渡 到 市场 经济 和 克朗 两 次 贬值 对其 经济 状况 造成 的 不利 影响 。 11 | 12 . 乌克兰 的 第 一 份 意见 书 援引 大会 议事 规则 第 一六 ○ 条 并 要求 根据 其 本国 的 国民 收入 数据 和 货币 基金 组织 特别 计算 的 汇率 确定 一 个 公平 的 分摊 比率 。 12 | 乌克兰 政府 进一步 指出 在 决定 增加 乌克兰 的 分摊 比率 时 正好 是 它 因 , 除 其他 外 , 经济 改革 的 影响 和 切尔 诺 贝利 核电 厂 事故 的 结果 而 致 支付 能力 有所 减少 。 13 | 它 指出 , 如 联合 国 法律 顾问 确定 的 , 如果 呆板 地 对 前 苏维埃 社会 主义 共和 国 联盟 的 会费 作 重新 分配 , 会费 委员 会 便 有效 地 放弃 了 目前 确定 分摊 比额 表 的 程序 的 重要 原则 和 准则 。 14 | 它 提及 使用 夸大 的 国民 收入 数据 和 不 切 实际 的 汇率 来 作为 计算 前 苏维埃 社会 主义 共和 国 联盟 分摊 比率 的 根据 , 而 乌克兰 不 愿意 受到 该国 政策 的 影响 。 15 | 该 意见 书 附有 国民 收入 数据 和 货币 基金 组织 的 汇率 。 16 | 13 . 乌克兰 的 第 二 份 意见 书 详述 它 因 安全 理事 会 关于 制裁 南斯拉夫 ( 塞尔维亚 和 黑山 ) 的 决议 的 执行 而 受到 的 经济 损失 , 并 要求 会费 委员 会 考虑 到 这个 因素 。 17 | 该 意见 书 强调 爱沙尼亚 是 一 个 被 兼并 和 占领 的 国家 , 从来 就 不是 前 苏维埃 社会 主义 共和 国 联盟 的 权利 或 义务 的 一 部分 和 继承 国 。 18 | 同时 , 该 意见 书 也 提到 向 统计 司 提供 的 主权 国民 收入 和 人口 统计 数字 和 货币 基金 组织 的 汇率 。 19 | 16 . 关于 议事 规则 第 一六 ○ 条 , 斯洛伐克 共和 国 作为 前 捷克 和 斯洛伐克 联邦 共和 国 两 个 继承 国 中 的 一 个 继承 国 要求 按 其 现有 支付 能力 来 确定 其 分摊 比率 。 20 | 该 意见 书 指出 , 除 其他 外 , 任意 制定 前 捷克 和 斯洛伐克 联邦 共和 国 的 汇率 使 该 前 共和 国 的 分摊 比率 超过 其 支付 能力 。 21 | 同时 , 它 也 指出 斯洛伐克 共和 国 的 支付 能力 因 过渡 到 市场 经济 的 影响 和 无法 取得 可 兑换 货币 而 有所 减少 。 22 | 该 意见 书 附有 许多 载有 统计 资料 的 表格 。 23 | 它 也 叙述 了 哈萨克斯坦 目前 经济 困难 和 缺乏 外币 的 情况 , 因为 这些 情况 影响 到 它 在 过渡 时期 这个 重要 阶段 的 支付 能力 。 24 | 该 意见 书 的 其他 附件 载有 最新 的 国民 收入 数据 和 汇率 以及 货币 基金 组织 关于 计算 卢布 汇率 的 备忘 录 。 25 | 说明 叙述 有关 这些 国家 的 现有 数据 的 特性 和 若干 国际 组织 与 这些 国家 为 提高 数据 质量 和 调整 各 过渡 经济 体 的 统计 系统 而 合作 进行 的 各项 努力 。 26 | 同时 , 它 也 说明 处理 数据 和 应付 互相 矛盾 的 数据 所 采用 的 准则 和 程序 。 27 | 这 便 可以 解释 为什么 估计 数 加 起来 时 未必 合计 达 前 联邦 国家 以前 的 总数 , 同时 也 说明 为什么 这些 国家 有时 候 会 有 超过 一 个 估计 数 , 即 每个 估计 数 是 根据 不同 的 编纂 准则 算出 的 。 28 | 因此 , 即使 估计 数 是 好 的 , 但是 它 仍 未必 可 与 以前 集中 处理 的 数据 作 比较 或 可 与 其他 这 一 类别 国家 的 数据 作 比较 。 29 | 23 . 但是 , 对 22 个 会员 国 的 数据 作 解释 所 面对 的 严重 问题 就是 汇率 方面 的 问题 。 30 | 实际 上 , 货币 基金 组织 对 前 苏维埃 社会 主义 共和 国 联盟 各 共和 国 的 限额 计算 方法 进行 的 内部 研究 是 使用 这些 不同 的 汇率 类型 。 31 | 为其 本身 的 目的 , 货币 基金 组织 计算 了 1985 年 和 1990 年 的 汇率 并 经 有关 国家 的 请求 也 推断 了 其他 几 年 的 汇率 。 32 | 该 说明 认为 要 说明 各 前 共和 国 在 苏维埃 社会 主义 共和 国 联盟 解散 之前 几 年 的 个别 汇率 ( 不同于 以前 官方 汇率 ) 的 正当 理由 是 不 容易 的 。 33 | 这些 汇率 与 货币 基金 组织 为 其他 国家 使用 的 汇率 是 完全 不可 相比 的 。 34 | 26 . 货币 基金 组织 通知 委员 会 说 它 为 各国 在前 苏维埃 社会 主义 共和 国 联盟 在 解散 前 几 年 计算 的 汇率 都 是 一样 的 , 而 这些 汇率 只 适用 于 进行 研究 和 限额 的 计算 。 35 | 同时 , 委员 会 也 审查 了 这些 国家 对 下列 问题 的 意见 : 比额 表 编制 方法 的 一些 部分 , 特别 是 统计 其 准 期 的 长短 、 汇率 和 限额 办法 的 应用 。 36 | 委员 会 进一步 获悉 , 货币 基金 组织 不 打算 再 制订 这些 汇率 , 也 不再 将 它们 公布 在 货币 基金 组织 《 国际 金融 统计 资料 》 ( 委员 会 使用 的 汇率 的 来源 ) , 因为 这些 汇率 不 符合 货币 基金 组织 的 统计 标准 。 37 | 28 . 委员 会 对 许多 事项 表示 的 关切 有 同感 。 38 | 但是 , 它 认为 其 职权 使 它 无法 处理 所 提 的 各种 政治 和 法律 问题 。 39 | 在 对 个别 的 意见 进行 漫长 的 讨论 后 , 委员 会 认为 只有 根据 新 的 分摊 比额 表 才 能 为 22 个 会员 国 制订 出 适当 反映 其 支付 能力 的 分摊 比率 。 40 | 减免 办法 将 不能 处理 22 个 会员 国 中 若干 国家 的 原则 立场 问题 。 41 | 如果 愿意 为此 一 目的 提供 点数 通常 也 限制 在 拟订 新 比额 表 的 整个 范围 内 。 42 | 30 . 一些 会员 国 认为 在 制定 下 一 个 , 比额 表 时 应当 将 该 22 个 会员 国 , 至少 是 对 绝 大多 数 的 这些 会员 国 , 当作 新 会员 国 那样 来 分摊 会费 。 43 | 委员 会 认为 要 使 绝 大多 数 会员 国 得到 最 公平 的 比率 并 不是 要 对 22 个 会员 国 给予 优惠 待遇 , 而是 要 修改 来 制定 下 一 个 分摊 比额 表 所 使用 的 比额 表 编制 办法 。 44 | 其他 会员 国 则 因 该 办法 所 涉及 的 法律 , 政治 和 财政 的 问题 而 对 该 办法 表示 怀疑 , 因为 该 办法 对 其他 会员 国 , 特别 是 发展 中 国家 的 分摊 比率 有 不利 影响 。 45 | 同时 , 它 也 考虑 到 根据 新 的 办法 来 编制 下 一 个 比额 表 的 可能 性 。 46 | 31 . 按照 大会 第 46 / 221 b 号 决议 规定 的 职务 , 委员 会 在 计算 下 一 个 分摊 比额 表 时 仔细 审查 了 现行 比额 表 编制 办法 的 所有 部分 。 47 | 在 这样 做 时 , 委员 会 也 注意 到 有 需要 以 技术 性 和 实际 的 方式 来 处理 22 个 会员 国 的 特别 问题 。 48 | 33 . 由于 时间 上 的 限制 和 缺乏 有关 的 数据 , 委员 会 未能 讨论 第 46 / 221 b 号 决议 第 7 ( c ) 段 内 所 载 的 职务 , 但 决定 继续 进行 这 方面 的 工作 。 49 | 32 . 为 审查 现行 比额 表 编制 办法 , 其 各 部分 应 分成 三 个 领域 : 收入 概念 ; 将 国民 收入 换算 为 美元 ; 和 其他 组成 部分 , 即 统计 基准 期 、 低 人均 收入 宽 减 额 和 限额 办法 。 50 | 委员 会 回顾 它 几 年 内 为 调整 国内 总 产值 以 使 其 更 好 地 反映 支付 能力 所 进行 的 工作 。 51 | 35 . 自 1980 年代 后期 以来 , 委员 会 的 工作 集中 于 审查 其他 的 收入 概念 。 52 | 在 编制 上 两 个 比额 表 时 有 采用 了 其他 的 收入 概念 , 即将 年 国民 平均 收入 低于 $ 6000 而 外债 又 大 的 国家 的 国民 收入 作 向下 调整 。 53 | 这项 调整 的 基本 概念 问题 是 , 从 国民 收入 减掉 债务 的 作法 并 不是 国际 标准 内 所 确定 的 收入 概念 。 54 | 37 . 货币 收入 的 定义 是 , 国民 收入 减去 农业 和 其他 活动 的 自给 生产 的 估算 收入 。 55 | 根据 这个 概念 计算 的 收入 将 有利于 具有 庞大 自给 经济 体 的 低 收入 国家 。 56 | 同样 地 , 它 能 反映 会员 国 的 支付 能力 的 能力 也 长期 以来 受到 挑战 。 57 | 但是 , 该 概念 并 不 十分 健全 , 因此 未 包括 国际 统计 标准 内 并 很 难以 数量 表示 。 58 | 该 概念 将 更 好 地 反映 下列 国家 的 应 计 摊款 收入 : 有 雇用 大量 侨居 移徙 工人 或 有 在 国外 就业 的 侨居 工人 的 国家 以及 有 大量 难民 居住 的 国家 。 59 | 39 . 按 国家 财富 的 改变 而 调整 的 收入 的 定义 是 国民 收入 减去 为 取代 因 自然 灾害 或 人为 灾害 所 破坏 或 损失 的 资本 资产 损失 而 需要 作出 投资 的 利息 费用 。 60 | 该 概念 的 制订 不 十分 健全 也 未 付诸 实施 ; 因此 未 包括 在 国际 统计 标准 内 , 而 统计 数字 也 不 容易 得到 。 61 | 40 . 可 持续 收入 的 定义 是 国民 收入 减去 今后 为 维持 这个 收入 所 需要 作出 的 开支 。 62 | 该 概念 未 有效 地 加以 拟订 , 它 未 包括 在 国际 统计 标准 内 而 统计 数字 的 提供 则 取决 于 在 概念 上 是 如何 拟订 。 63 | 如果 作 进一步 的 拟订 , 该 概念 便 能 正视 一些 会员 国 所 表示 的 需要 , 即 调整 国民 收入 以 补偿 一 个 国家 在 社会 和 经济 发展 方面 的 缺陷 ( 例如 缺乏 保健 或 教育 设施 、 住房 、 运输 系统 ) 。 64 | 41 . 对 备选 收入 概念 的 讨论 显示 委员 会 各 成员 有 许多 不同 的 意见 。 65 | 从 技术 观点 来看 , 委员 会 仍 认为 为 编制 分摊 比额 表 ( 不论 过去 或 今后 的 比额 表 是 使用 债务 调整 的 收入 ) 国民 收入 概念 比 其他 的 收入 概念 更为 健全 。 66 | 44 . 市场 汇率 是 用以 进行 国际 货物 和 劳务 的 交易 和 国家 之间 的 其他 付款 和 收款 。 67 | 但是 , 各 成员 认为 对 上面 讨论 的 备选 收入 概念 应 继续 加以 审议 并 定期 审查 其 可能 的 用途 。 68 | 它们 反映 出 国家 间 货物 和 劳务 的 相对 价格 和 其他 的 国际 交易 ( 例如 外国 投资 和 贷款 、 投资 收入 的 收支 和 工人 的 汇款 、 流动 资本 转移 ) 以及 利率 和 对 金融 市场 的 期望 。 69 | 用 市场 汇率 来 计算 分摊 比额 的 好处 是 这个 汇率 与 用以 计算 分摊 会费 的 付款 的 汇率 是 同样 的 。 70 | 除非 货币 基金 组织 成员 外 , 这些 数据 可 供 所有 国家 索取 。 71 | 货币 基金 组织 公布 的 所有 市场 汇率 均 符合 国际 可比 性 标准 。 72 | 45 . 价格 调整 汇率 是 统计 司 因 具有 下列 情况 的 国家 的 国民 收入 美元 等值 不 正常 而 制定 的 : 具有 固定 和 受 管制 的 汇率 和 / 或 在 通货 膨胀 率 高 的 情况 下 具有 的 费率 。 73 | 价格 调整 汇率 的 定义 是 以 反映 通货 膨胀 的 价格 指数 调整 前 几 年 或 后 几 年 的 基准 期 汇率 。 74 | 基准 期 的 市场 汇率 和 价格 调整 汇率 是 相等 的 。 75 | 价格 调整 汇率 多年 来 使 高 通货 膨胀 率 的 影响 和 汇率 的 不 稳定 变动 得以 消除 。 76 | 这些 汇率 在 多年 来 使 人均 收入 时间 数列 得以 稳定 下来 。 77 | 只要 价格 调整 汇率 是 以 基准 期 的 现行 汇率 为 根据 的 , 说明 性 计算 显示 它们 的 应用 并未 大大 改变 会员 国 间 国民 收入 的 分配 。 78 | 46 . 除了 仍 存在 的 关于 所 使用 基准 期 的 实用 性 问题 以外 , 为 编制 分摊 比额 表 目的 , 价格 调整 汇率 概念 的 制定 是 十分 好 的 。 79 | 使用 价格 调整 汇率 的 一 个 好处 就是 在 一 段 时间 内 减少 国民 收入 和 人均 收入 的 波动 和 有 机会 使用 较 短 的 统计 基准 期 。 80 | 但是 , 有人 指出 价格 调整 汇率 只能 对 计算 分摊 额 有 用处 , 对 实际 缴款 则 无 用处 。 81 | 47 . 一 个 国家 的 购买 力 平价 的 定义 是 在 本国 市场 内 需要 以 多少 单位 的 一 国 货币 才 能 买到 同样 数量 的 货物 和 劳务 , 即 如 在 美国 一 美元 所 能 买到 的 货物 和 劳务 那样 。 82 | 换言之 , 购买 力 平价 是 注重 于 与 其他 国家 国内 总 产值 的 购买 力 相 比较 , 一 国 国内 总 产值 将 买到 什么 样 的 货物 和 劳务 , 而 非 使用 国际 汇率 评价 各国 以 美元 计算 的 货物 和 劳务 的 产出 。 83 | 为 编制 比额 表 , 根据 市场 汇率 计算 使用 购买 力 平价 可能 使 目前 国民 收入 的 分配 大大 改变 。 84 | 48 . 购买 力 平价 的 概念 十分 健全 , 若干 国际 和 区域 组织 使用 它 来 进行 分析 , 一些 区域 组织 也 使用 它 来 制定 政策 。 85 | 同时 , 购买 力 平价 也 比例 如 编制 比额 表 所 用 的 收入 比较 更 适合 于 国际 产品 。 86 | 该 概念 所 根据 的 假设 是 选择 用来 进行 比较 的 货物 和 劳务 实际 上 在 不同 国家 内 是 可 比较 的 。 87 | 每 五 年 对 少数 几 个 国家 收集 了 必要 的 统计 数字 。 88 | 49 . 世界 地图 集 汇率 是 上 一 年度 市场 汇率 和 两 个 价格 调整 汇率 的 平均 数 , 这些 汇率 前 两年 的 汇率 并用 价格 指数 修订 到 今年 。 89 | 世界 地图 集 汇率 的 概念 是 健全 的 而且 也 比 购买 力 平价 较 适合 于 进行 国际 比较 。 90 | 目前 世界 银行 ( 世界 地图 集 ) 和 开发 计划 署 ( 指示 性 规划 数字 ) 正在 使用 它 、 虽然 未 包括 在 国际 统计 标准 内 ; 但是 对 世界 地图 集 内 所 包括 的 国家 每年 都 有 统计 数字 。 91 | 50 . 在 讨论 各种 不同 换算 率 的 问题 时 , 委员 会 各 成员 试图 迁就 它们 一方面 在 各种 不同 概念 和 数据 上 的 限制 和 另 一方面 在 一 段 时间 内 提供 准确 和 稳定 的 收入 措施 的 程度 。 92 | 一般 成员 都 认为 解释 数据 的 问题 、 数据 提供 的 问题 和 此时 数据 编制 的 成本 问题 比 引人 兴趣 的 购买 力 平价 概念 特性 ( 例如 使 国家 收入 的 分配 更加 稳定 将 使 统计 基准 期 缩短 ) 较 重要 。 93 | 同时 , 受 关心 的 问题 是 国际 收入 比较 的 概念 是否 适当 和 为 编制 比额 表 最初 使用 这个 概念 在 国民 收入 的 分配 方面 造成 的 混乱 影响 。 94 | 那些 不 赞成 将 购买 力 平价 用于 编制 比额 表 的 成员 强调 购买 力 平价 目前 只 应用 于 进行 分析 和 研究 和 制定 有限 的 政策 。 95 | 51 . 由于 经过 一 段 时间 后 世界 地图 集 汇率 与 市场 汇率 并 没有 极大 差别 和 由于 后者 比较 普及 , 因此 关于 最 适当 的 换算 率 问题 便 变为 在 市场 汇率 和 价格 调整 汇率 之间 作 选择 。 96 | 同时 , 如 过去 所 作 的 一样 , 价格 调整 汇率 也 可 用来 纠正 几 个 国家 汇率 的 失真 。 97 | 目前 比额 表 编制 办法 所 使用 统计 基准 期 的 期间 是 使 比额 表 稳定 的 最好 的 保证 , 它 使 国民 收入 增减 得到 平衡 。 98 | 54 . 根据 人均 收入 来 调整 国民 收入 使 许多 发展 中 国家 , 特别 是 那些 人口 极 多 的 发展 中 国家 , 得以 减轻 负担 。 99 | 但是 , 目前 基准 期 的 期间 是 代表 会员 国 过去 而 非 现在 的 支付 能力 。 100 | 52 . 委员 会 指出 了 改变 统计 基准 期 期间 的 理由 , 对 这个 问题 已 在 过去 各个 不同 时间 内 予以 审议 。 101 | 一些 成员 指出 , 对 人均 收入 限额 进行 自动 调整 应当 以 10 年 世界 平均 人均 收入 为 根据 , 并 不 受 分摊 比额 表 使用 的 统计 基准 期 的 长短 的 限制 。 102 | 其他 成员 认为 , 脚注 5 内 所 指 的 问题 适用 于 此 。 103 | 55 . 委员 会 各 成员 对 100 % 梯度 的 适当 性 的 意见 仍 有 分歧 。 104 | 一些 成员 认为 这 是 使 那些 具有 负 资源 转让 、 外债 和 普遍 贫穷 等 问题 的 发展 中 国家 减轻 负担 的 适当 解决 办法 。 105 | 同时 , 它们 也 认为 选择 1 % 梯度 而 不 选择 其他 梯度 在 技术 上 是 不 合理 的 。 106 | 56 . 委员 会 获悉 , 从 技术 观点 来看 , 不久 将 达到 的 情况 是 , 如果 不 改变 限额 办法 的 现有 参数 , 100 % 的 分摊 比额 表 将 是 不再 有 可能 的 。 107 | 57 . 如 过去 一样 , 一些 委员 会 成员 对 限额 办法 造成 失真 的 明显 影响 作出 评论 。 108 | 委员 会 向 大会 第 四十七 届 会议 提出 的 报告 的 附件 一 至 三 载有 说明 性 表格 , 其中 说明 逐步 取消 限额 办法 的 三 个 不同 方法 的 影响 。 109 | 但是 , 其他 成员 指出 对 国民 收入 作出 的 所有 调整 都 造成 失真 , 而 减免 办法 使 其 更为 严重 。 110 | 一些 成员 认为 只有 禁止 将 这种 额外 点数 分配 给 这 一 国家 组别 才 能 作到 这 一 点 。 111 | 一般 成员 认为 , 尽管 会费 委员 会 一直 在 努力 改进 比额 表 编制 办法 , 同时 又 使 其 尽 可能 稳定 , 但是 由于 在 世界 和 联合 国内 的 各种 变化 情况 , 这个 目标 更 不 容易 达到 。 112 | 如 以下 所 述 的 , 委员 会 决定 提出 几 种 备选 办法 并 附 说明 性 表格 , 详细 说明 不同 办法 对 个别 分摊 比率 和 整个 比额 表 的 影响 。 113 | 由于 各 发展 中 国家 也 将 受 影响 , 因此 委员 会 一些 成员 对 这个 情况 十分 关心 。 114 | 下面 附件 一 载有 一 个 说明 性 比额 表 , 该 表 是 使用 1982 - 1991 年 的 基准 期 , 并 根据 这些 准则 逐步 说明 它们 对 会员 国 国民 收入 的 影响 。 115 | 一些 其他 成员 询问 就 逐步 取消 限额 办法 和 规定 尽 可能 避免 把 因 限额 办法 而 产生 的 额外 点数 分配 给 发展 中 国家 的 要素 而言 , 附件 一 是否 符合 第 46 / 221 b 号 决议 的 规定 。 116 | 63 . 但是 , 其他 成员 则 认为 , 按照 第 46 / 221 b 号 决议 第 3 ( b ) 段 , 在 1982 - 1991 年 统计 基准 期 的 所有 每 一 年 应当 对 22 个 应 会员 国 使用 货币 基金 组织 的 汇率 。 117 | 它们 认为 , 为 相应 该 决议 第 2 ( a ) 和 3 ( b ) 段 的 规定 , 逐步 取消 限额 办法 有 两 个 可能 的 方法 。 118 | 本 报告 附件 二 载有 一 个 说明 性 比额 表 , 该 表 是 使用 1982 - 1991 年 基准 期 并 根据 这些 准则 逐步 说明 它们 对 成员 国 国民 收入 的 影响 。 119 | 一 个 方法 载 于 委员 会 提交 大会 第 四十七 届 会议 的 报告 的 附件 二 a 第 2 至 5 栏 。 1 这个 方法 是 在 三 年 比额 表 期间 内 应用 现 限额 办法 三 次 , 结果 每年 的 比额 表 不 一样 。 120 | 第 二 个 方法 将 是 将 限额 办法 的 参数 增加 70 % 并 在 比额 表 期间 内 使用 一 次 。 121 | 一些 其他 成员 认为 附件 二 不 符合 第 46 / 221 b 号 决议 , 因为 该 决议 规定 对 货币 基金 组织 的 成员 采用 货币 基金 组织 的 汇率 和 逐步 取消 限额 办法 , 并 避免 将 点数 分配 给 发展 中 国家 。 122 | 64 . 根据 上面 第 52 和 第 53 段 内 的 讨论 , 委员 会 一些 成员 建议 将 改变 统计 基准 期 作为 一 个 备选 办法 。 123 | 但是 , 其他 成员 则 认为 10 年 基准 期 将 使 因 经济 突发 或 短暂 变动 所 造成 个别 分摊 比率 的 波动 平缓 下来 。 124 | 那些 赞成 这个 备选 办法 的 成员 认为 它 比 10 年 基准 期 更 好 地 反映 当前 的 经济 现实 情况 , 而 采用 三 年 基准 期 将 解决 前 苏维埃 社会 主义 共和 国 联盟 国家 的 现有 数据 和 汇率 的 问题 。 125 | 根据 上面 第 53 段 内 所 载 的 技术 考虑 , 下面 附件 四 示范 了 根据 九 年 基准 期 编制 的 比额 表 。 126 | 它 所 采用 的 是 九 年 统计 基准 期 。 127 | 66 . 委员 会 一些 成员 对 上述 任何 备选 办法 都 不 满意 , 它们 认为 这些 备选 办法 没有 一 个 作到 能 反映 成员 国 的 支付 能力 而 所有 办法 都 有 严重 失真 情形 。 128 | 这些 成员 认为 目前 的 办法 已 无法 通过 对 一 个 、 几 个 或 甚至 所有 的 部分 进行 调整 来 作出 修订 。 129 | 67 . 其他 成员 的 看法 则 不同 。 130 | 在 这个 基础 上 计算 的 比额 将 不会 失真 并 将 反映 各 会员 国 的 经济 状况 。 131 | 根据 这个 办法 , 它们 提议 一 国 的 分摊 比率 应当 只 根据 其 相对 于 世界 总 收入 的 总 国民 收入 。 132 | 它们 认为 通过 这个 办法 主要 将 有益 于 发达 国家 并 使 许多 发展 中 国家 的 分摊 比率 突然 有 不利 的 改变 。 133 | 虽然 认识 到 有 需要 修改 该 办法 , 包括 可能 更改 其 一些 要素 ; 但是 , 这些 成员 认为 由于 对 发展 中 国家 可能 有 不利 的 影响 便 必须 十分 谨慎 考虑 彻底 作出 修改 的 可能 性 。 134 | ( a ) 安全 理事 会 各 常任 理事 各 增加 200 点数 ( 这样 该 限额 办法 便 可 大大 减少 ) ; 135 | 支持 这个 备选 办法 的 成员 认为 为了 使 高 宽 减 梯度 所 不 造成 更 大 的 失真 更 有 必要 使用 多 宽 减 梯度 。 136 | 68 . 根据 上面 第 66 段 所 述 的 关于 有 需要 修改 该 办法 的 想法 已 提出 了 一 种 备选 办法 , 这个 办法 将 使 目前 办法 的 现有 部分 的 改变 和 下列 两 个 新 要素 的 采用 结合 起来 : 137 | 69 . 一些 成员 认为 打算 采用 一 个 根据 人口 数量 的 概念 将 无助 于 确定 会员 国 的 支付 能力 并 将 使 该 办法 有 一 个 有 缺陷 而 又 专横 的 要素 。 138 | 采用 多 宽 减 梯度 的 目的 是 要 解决 上面 第 55 段 内 所 提及 的 一些 问题 。 139 | 因此 根据 所 提议 的 组成 部分 便 编制 了 一 个 表格 。 140 | 77 . 捷克 共和 国 和 斯洛伐克 共和 国 分别 根据 大会 第 47 / 221 和 第 47 / 222 号 决议 于 1993 年 1 月 19 日 加入 为本 组织 的 会员 国 。 141 | 74 . 大会 第 47 / 456 号 决定 按 每 足 一 个 月 的 会籍 分配 新 会员 国 分摊 比率 十二 分 之 一 作为 加入 联合 国 的 一 年 的 分摊 基础 。 142 | 73 . 根据 大会 议事 规则 第 一六 ○ 条 的 规定 , 委员 会 应当 就 必须 确定 的 新 会员 国 的 摊 款额 向 大会 提供 意见 。 143 | 80 . 根据 该 两 个 共和 国 提供 的 国民 收 和 人口 的 数据 , 它们 1994 年 的 分摊 比额 应为 : 144 | 81.1992 年 12 月 31 日 , 前 捷克 斯洛伐克 已 不复 存在 。 145 | 因此 , 1993 年 的 分摊 比额 表 是 根据 总额 减去 前 捷克 斯洛伐克 的 0.55 % 来 重 订 基数 的 , 结果 1993 年 所有 会员 国 的 实际 摊款 在 比例 上 高于 核定 分摊 比额 表 内 的 摊款 。 146 | 委员 会 未能 解决 这 一 个 问题 。 147 | 由于 这个 情况 , 该 两 个 共和 国 的 1993 年 摊款 应当 记入 各 会员 国 的 帐户 。 148 | 83 . 前 捷克 斯洛伐克 对 周转 基金 的 预缴 款项 应 按照 这 两 个 新 共和 国 的 建议 的 分摊 比率 转 拨给 它们 。 149 | 84 . 根据 大会 第 47 / 225 号 决议 前 南斯拉夫 的 马其顿 共和 国 于 1993 年 4 月 8 日 加入 为 联合 国 会员 国 。 150 | 同时 , 它 也 建议 这个 比率 应从 南斯拉夫 的 0.16 % 比率 扣除 , 这项 建议 获 大会 第 47 / 456 号 决定 核 可 。 151 | 87 . 前 南斯拉夫 的 马其顿 共和 国 对 周转 基金 的 预缴 款项 应从 南斯拉夫 的 预缴 款项 转 来 。 152 | 88 . 根据 大会 第 47 / 230 号 决议 厄立特里亚 于 1993 年 5 月 28 日 加入 为 联合 国 会员 国 。 153 | 该 新 的 会员 国 没有 国民 收入 和 有关 的 数据 。 154 | 但是 , 由于 它 是 埃塞俄比亚 的 一 部分 , 而 埃塞俄比亚 被 指定 为 最 不 发达 国家 , 会费 分摊 比率 为 最低 限度 的 0.01 % , 因此 委员 会 建议 1994 年 厄立特里亚 的 分摊 比例 为 0.01 % , 1993 年 为 该 比率 的 十二 分 之 七 。 155 | 厄立特里亚 对 周转 基金 的 预交 款项 , 在 其 分摊 比率 并入 100 % 的 分摊 比额 表 以前 , 应 列为 基金 的 一 部分 。 156 | 根据 《 联合 国 财务 条例 和 规则 》 内 条例 5.2 ( c ) 的 规定 , 其 实际 摊款 应 记 作 杂项 收入 。 157 | 摩洛哥 对 周转 基金 的 预缴 款项 在 其 分摊 比率 并入 100.00 % 分摊 比额 表 以前 , 应 列为 基金 的 一 部分 。 158 | 在 给 秘书 长 驻 柬埔寨 特别 代表 的 信 中 , 柬埔寨 全国 最高 委员 会 的 四 个 党派 指出 它们 目前 无法 缴付 其 国家 拖欠 的 会费 , 其 拖欠 额 超过 前 两 整年 所 应 缴纳 的 会费 。 159 | 同时 , 它 也 建议 摩洛哥 1993 年 的 摊款 应为 该 比率 的 十二 分 之 七 , 而 根据 《 联合 国 财务 条例 和 规则 》 内 条例 5.2 ( c ) , 其 实际 摊款 应 记 作 杂项 收入 。 160 | 此外 , 《 巴黎 协定 》 规定 在 过渡 期间 , 全国 最高 委员 会 将 授权 柬埔寨 过渡 时期 联合 国 权力 机构 ( 联合 国 权力 机构 ) 行使 “ 一切 必要 的 权力 ” 以 执行 该 协定 。 161 | 93 . 委员 会 仔细 考虑 了 该项 请求 并 认为 由于 柬埔寨 的 特殊 地位 , 对 全国 最高 委员 会 的 请求 应 给予 肯定 的 答复 。 162 | 同时 , 委员 会 各 成员 也 认为 对 全国 最高 委员 会 的 请求 给予 肯定 的 答复 是 一 个 必须 给予 的 临时 宽 减 措施 , 期望 柬埔寨 新 的 政府 能 及时 向 联合 国 缴纳 必要 的 款额 。 163 | 它 指出 , 由于 缺乏 最新 的 经济 指标 , 它 没有 技术 根据 来 判断 柬埔寨 当前 的 支付 能力 ; 而是 由于 它 了解 到 柬埔寨 的 特别 处境 才 作出 这个 决定 的 。 164 | 96 . 关于 第 一 项 要求 , 委员 会 提及 上面 第 86 段 , 因为 这 一 段 符合 该项 要求 。 165 | 委员 会 决定 在 有待 解决 的 有关 继承 问题 获得 解决 之前 推迟 对 其他 两 项 请求 采取 行动 。 166 | 在 这 方面 , 委员 会 重申 以前 一 项 决定 , 核 可 委员 会 主席 在 必要 时 编印 本 报告 增 编 一 份 。 167 | 99 . 委员 会 注意 到 秘书 长 一 份 报告 , 其中 指出 有 八 个 会员 国 利用 这个 机会 , 在 1992 年 以 本 组织 接受 的 七 种 非 美元 货币 缴纳 相当于 520 万 的 会费 。 168 | 100 . 委员 会 决定 于 1994 年 6 月 20 日 至 7 月 15 日 在 纽约 举行 第 五十四 届 会议 。 169 | 委员 会 举行 了 9 次 会议 ( 第 3 至 第 11 次 会议 ) 及 一些 非 正式 会议 。 170 | 1 . 方案 和 协调 委员 会 ( 方案 协调 会 ) 于 1993 年 4 月 8 日 和 5 月 5 日 在 联合 国 总部 举行 了 一 次 组织 会议 ( 第 1 和 第 2 次 会议 ) , 并 于 1993 年 5 月 10 日 至 14 日 在 总部 举行 了 第 三十三 届 第 一 部分 会议 。 171 | 3 . 委员 会 根据 其 1993 年 组织 会议 所 作 的 决定 , 在 通过 议程 时 决定 在 第 三十三 届 会议 上 审议 联合 检查 组 ( 联检 组 ) 题为 “ 联合 国 系统 与 多边 金融 机构 的 合作 。 172 | 4 . 委员 会 在 1993 年 4 月 8 日 和 1993 年 5 月 5 日 第 1 和 第 2 次 会议 上 以 鼓掌 方式 选出 下列 主席 团 成员 : 173 | 7 . 下列 专门 机构 出席 了 会议 : 174 | 应 委员 会 的 邀请 , 联合 检查 组 检查 专员 理查德 · 亨 尼斯 先生 也 参加 了 委员 会 的 工作 。 175 | 11 . 委员 会 在 1993 年 5 月 10 日 至 12 日 第 4 至 第 8 次 会议 上 审议 了 五 个 评价 报告 。 176 | ( a ) 未来 的 深入 评价 报告 和 委员 会 关于 报告 的 结论 及 建议 应由 秘书 处 转交 给 有关 专门 政府 间 机构 。 177 | 方案 协调 会 主席 将 要求 有关 机构 的 主席 向 方案 协调 会 提供 关于 这些 机构 就 方案 协调 会 对 评价 的 建议 所 采取 的 行动 的 资料 ; 178 | 15 . 一些 代表 团 认为 , 该 报告 符合 为 它 所 定 的 要求 。 179 | 一些 代表 团 指出 , 这种 人权 来源 资料 数据 库 应以 所有 人权 - - 包括 公民 权利 、 政治 权利 、 经济 权利 、 社会 权利 和 文化 权利 在内 不可 分割 原则 为 基准 。 180 | 一些 代表 团 建议 , 也 应该 在 执行 大会 1992 年 12 月 16 日 第 47 / 213 号 决议 的 范畴 内 考虑 该 中心 需要 增加 的 资源 。 181 | 另 一些 代表 团 指出 , 不 一定 要 排除 向 数据 库 作出 自愿 捐款 的 可能 性 。 182 | 一些 代表 团 对 缺乏 专项 资源 供 次级 方案 2 ( 消除 和 防止 歧视 及 保护 少数 和 脆弱 群体 ) 表示 关切 , 并 认为 这项 工作 应 予以 加强 。 183 | 一些 代表 团 认为 , 1994 - 1995 两年 期 方案 概算 中 应该 开 列为 人权 数据 库 请 拨 具体 款项 。 184 | 一些 代表 团 着重 指出 , 报告 员 和 专家 在 执行 指派 任务 时 , 中心 必须 向 他们 提供 更 好 的 支助 和 协助 。 185 | 16 . 委员 会 赞同 第 69 、 71 、 72 、 73 和 74 段 内 的 建议 。 186 | 17.1993 年 5 月 10 日 和 11 日 , 委员 会 第 4 次 至 第 6 次 会议 审议 了 关于 委员 会 第 三十 届 会议 所 提 关于 评价 人类 住区 主要 方案 的 建议 的 执行 情况 的 三 年 期 审查 的 报告 ( e / ac . 51 / 1993 / 4 ) 。 187 | 一些 代表 团 对 联合 国 人类 住区 ( 生境 ) 中心 和 各 区域 委员 会 负责 人类 住区 的 单位 对 方案 协商 会 的 若干 建议 、 特别 是 关于 协调 的 建议 执行 不力 感到 遗憾 。 188 | 一些 代表 团 表示 意见 认为 , 在 财政 困难 期间 , 协调 方案 规划 工作 对于 避免 工作 重叠 、 确保 资源 使用 效率 是 至关 重要 的 。 189 | 20.1993 年 5 月 11 日 , 委员 会 第 8 次 会议 审议 了 关于 联合 国 近东 巴勒斯坦 难民 救济 和 工程 处 的 进度 报告 ( e / ac . 51 / 1993 / 3 ) 。 190 | 22 . 一些 代表 团 认为 , 报告 对 整个 方案 作 了 全面 的 审查 , 因此 达到 了 原先 的 要求 。 191 | 若干 代表 团 对 近东 救济 工程 处 的 资金 筹措 表示 关切 , 并 认为 需要 扩大 捐助 基础 , 研究 如何 可以 使 该处 改善 财政 状况 。 192 | 一些 代表 团 重申 , 近东 救济 工程 处 的 任务 范围 仍 与 大会 1948 年 12 月 11 日 第 194 号 决议 所 规定 的 一样 。 193 | 24 . 委员 会 第 7 次 会议 审议 了 秘书 长 关于 深入 评价 国际 保护 和 援助 难民 方案 : 联合 国 难民 事务 高级 专员 办事 处 的 报告 ( e / ac . 51 / 1993 / 2 ) 。 194 | 25 . 在 辩论 过程 中 , 各国 代表 团 对 下列 建议 发表 了 看法 : 195 | 23 . 委员 会 注意 到 进度 报告 , 认为 它 达到 了 预定 的 要求 , 并 决定 没有 必要 采取 进一步 行动 对 近东 救济 工程 处 进行 深入 评价 。 196 | 另 一些 代表 团 对 过度 使用 难民 专员 办事 处 的 能力 以及 将 其 活动 扩大 到 其 任务 范围 之外 的 政治 方面 有 疑虑 ; 它们 强调 必须 遵守 任务 范围 , 遵守 难民 专员 办事 处 同 各国 政府 达成 的 协议 。 197 | 建议 1 . 一些 代表 团 回顾 难民 专员 办事 处 应 秘书 长 的 请求 , 并 依照 许多 大会 决议 的 要求 , 在 临时 的 基础 上 , 将 其 活动 扩大 , 进而 包括 涉及 国内 失所 居民 的 形势 。 198 | 建议 3 . 一 个 代表 团 感到 这项 建议 还 应为 人权 事务 中心 和 难民 专员 办事 处 提出 一 项 涵盖 它们 合作 的 所有 方面 的 谅解 备忘 录 。 199 | 建议 4 . 一 个 代表 团 感到 这项 建议 结束 时 应 说明 难民 专员 办事 处 只有 在 方案 的 目标 实现 后 才 能 撤离 。 200 | 建议 6 . 一些 代表 团 称 在 建议 6 第 2 行 “ 积极 参加 难民 事务 ” 后 应 增加 “ 并 具有 经济 及 社会 理事 会 咨 商 地位 ” 等 字 。 201 | 建议 8 一些 代表 团 说 , 建议 8 超出 了 难民 专员 办事 处 的 任务 范围 以及 大会 关于 自然 灾害 的 1991 年 12 月 19 日 第 46 / 182 号 决议 的 范围 。 202 | 这些 代表 团 还 强调 , 有 必要 保持 难民 专员 办事 处 《 规约 》 为其 所 规定 的 活动 非 政治 性 。 203 | 建议 10 . 一些 代表 团 表示 意见 说 , 紧急 救灾 和 备 灾 的 资金 应 包括 在 难民 专员 办事 处 一般 方案 经费 内 , 不 应 还要 专门 为其 呼吁 捐款 。 204 | 建议 9 . 一 个 代表 团 认为 此 建议 也应 表示 , 应 指定 职责 给 单一 业务 机构 以 确保 机构 间 救济 行动 照顾 到 所有 部门 , 并且 难民 专员 办事 处 应 是 这 一 领导 机构 。 205 | 建议 21 . 一些 代表 团 认为 , 工作 人员 新闻 媒介 培训 这 一 重要 领域 没有 受到 足够 重视 。 206 | 建议 26 . 一些 代表 团 认为 , 考虑 到 目前 的 财政 气氛 , 调集 更多 的 志愿 捐款 至关 紧要 。 207 | 建议 28 . 一些 代表 团 认为 , 大会 在 1992 - 1993 年 预算 内 所 拒绝 核 可 的 增加 工作 人员 的 请求 应 再度 在 1994 - 1995 年 预算 内 向 大会 提出 。 208 | 建议 27 . 一些 代表 团 表示 , 多年 性 规划 不 应 目标 太 高 。 209 | 建议 31 . 一些 代表 团 认为 , 任何 征聘 难民 专员 办事 处 工作 人员 的 策略 均 应 考虑 到 均衡 的 地域 代表 性 。 210 | 26 . 一 个 代表 团 指出 , 在 解决 难民 问题 的 全 系统 活动 框架 内 , 需要 更 明确 地 将 重点 放在 向 经历 严重 经济 困难 的 庇护 国 提供 援助 。 211 | 27 . 委员 会 赞扬 秘书 处 编写 了 质量 优异 的 报告 。 212 | 30.1993 年 5 月 10 日 和 11 日 , 委员 会 第 4 至 第 6 次 会议 审议 了 秘书 处 关于 今后 深入 评价 的 专题 的 说明 ( e / ac . 51 / 1993 / 6 ) 。 213 | 31 . 一些 代表 团 认为 该 报告 作为 他们 决定 的 依据 是 很 有用 的 。 214 | 29 . 委员 会 决定 将 该 报告 及 方案 协调 会 的 报告 中 与 其 有关 一 节 递交 难民 专员 办事 处 执行 委员 会 供 其 审议 和 采取 行动 。 215 | 一些 代表 团 赞成 评价 维持 和平 活动 的 提议 。 216 | 一些 代表 团 认为 , 这种 评价 可以 采取 对 一 个 或 两 个 行动 集中 进行 个案 研究 而 得出 一般 教训 的 方式 。 217 | 另外 一些 代表 团 认为 , 着重 于 维持 和平 行动 的 管理 方面 较为 可行 。 218 | 32 . 一些 代表 团 表示 他们 比较 喜欢 在 1996 - 2000 年 期间 评价 的 方案 。 219 | 一些 代表 团 提议 评价 非洲 方案 : 紧急 经济 情况 、 复兴 和 发展 。 220 | 34 . 一 个 代表 团 认为 , 委员 会 需要 做 的 唯一 决定 是 选择 将 在 1996 年 评价 的 方案 , 对于 其后 各 年 , 可以 拟订 一 份 指示 性 清单 , 让 其后 各 届 会议 来 做 最后 决定 。 221 | 37 . 主管 政策 协调 和 可 持续 发展 的 副 秘书 长 就 行政 协调 会 1993 年 第 一 届 常会 所 采取 的 行动 发 了 言 。 222 | 36 . 在 1993 年 5 月 10 日 、 12 日 和 13 日 第 3 、 第 8 和 第 9 次 会议 上 , 委员 会 在 议程 项目 5 之 下 审议 了 协调 问题 。 223 | 38 . 对于 文件 的 时效 和 质量 进行 了 辩论 。 224 | 40 . 一些 代表 团 指出 , 行政 协调 会 一直 采取 积极 和 远见 的 态度 根据 要求 的 变化 调整 其 附属 机制 。 225 | 秘书 处 的 代表 还 说 , 本 报告 中 任何 不 准确 和 不 一致 之 处 , 将 由 订正 报告 或 更正 加以 改正 。 226 | 委员 会 要求 行政 协调 会 确保 在 今后 提供 最新 的 、 适当 的 和 及时 的 文件 。 227 | 这些 内容 的 不 准确 和 不 一致 之 处 给 人 以 错误 和 误导 的 印象 , 好象 若干 国家 政府 不 愿 对 本 系统 各 组织 履行 其 财政 义务 。 228 | 46 . 委员 会 强调 , 行政 协调 会 撤销 的 各 附属 机构 所 进行 的 所有 全 系统 范围 的 活动 , 特别 是 关于 科学 和 技术 促进 发展 、 新 能源 和 可 再生 能源 以及 有关 最 不 发达 国家 的 活动 都 应由 新 的 附属 机制 继续 协调 。 229 | 此外 , 关于 人事 和 行政 问题 的 用语 以及 “ 共同 国别 战略 ” 和 “ 统一 办事 处 ” 并 没有 准确 反映 大会 的 有关 立法 授权 。 230 | 47 . 委员 会 再次 强调 必须 为 方案 协调 会 和 行政 协调 会 第 二十七 次 系列 联席 会议 充分 准备 和 及时 提交 文件 。 231 | 委员 会 决定 保留 这个 项目 , 以便 能够 在 其 第 三十三 届 会议 续 会 上 , 结合 方案 协调 会 和 行政 协调 会 第 二十七 次 系列 联席 会议 的 筹备 工作 加以 审议 。 232 | 50 . 一些 代表 团 遗憾 地 说 , 该 报告 1992 年 1 月 已 在 日内瓦 发表 , 1992 年 4 月 已 在 日内瓦 翻译 出来 , 可是 直到 1993 年 2 月 才 作为 联合 国 文件 印发 。 233 | 这些 结论 获得 一般 的 支持 。 234 | 对此 , 有些 代表 团 认为 , 提出 新 资料 的 增 编 会 很 有用 。 235 | 51 . 对 行政 协调 会 的 意见 的 评论 很 广 , 有的 人 同意 指 该 报告 过于 泛泛 , 缺乏 最近 的 资料 , 有些 人 严厉 批评 行政 协调 会 的 意见 是 为 自己 辩护 , 只顾 自己 。 236 | 另 一方面 , 有人 说 , 通过 业务 绩效 来 表现 工作 能力 往往 是 进行 政策 协调 最 有效 的 方法 。 237 | 53 . 大多 数 代表 团 认为 , 检查 专员 所 查明 的 十 项 因素 有助于 发展 顺利 的 合作 关系 。 238 | 56 . 委员 会 对 该 报告 表示 赞同 , 并 预期 在 经济 及 社会 理事 会 对 该 报告 进行 进一步 的 讨论 。 239 | 57 . 委员 会 核 可 该 报告 的 建议 , 并 建议 联合 国 系统 各 组织 的 理事 机构 和 行政 首长 注意 并 予 审议 。 240 | 1 . 选举 主席 团 成员 。 241 | ( b ) 中期 计划 新 格式 的 范本 ; 242 | ( c ) 建立 一 套 联合 国 方案 管理 人 职责 和 责任 制度 ; 243 | 6 . 联合 检查 组 的 报告 。 244 | 这 对 委员 会 的 工作 造成 了 相当 大 的 妨碍 并 严重 地 损害 了 深入 讨论 的 准备 工作 和 范围 。 245 | 1 . 方案 和 协调 委员 会 ( 方案 协调 会 ) 于 1993 年 10 月 6 日 至 22 日 在 联合 国 总部 举行 了 第 三十三 届 会议 第 二期 会议 。 246 | 5 . 委员 会 下列 的 成员 国 出席 了 会议 : 247 | 10.1993 年 10 月 22 日 , 委员 会 在 其 第 34 次 会议 上 通过 了 第 三十三 届 会议 第 二期 会议 的 报告 草稿 ( e / ac . 51 / 1993 / l . 6 和 add . 1 - 32 ) 。 248 | 7 . 下列 专门 机构 出席 了 会议 : 249 | 13 . 不过 , 有些 代表 团 承认 , 改组 开始 至今 , 还 没有 足够 的 时间 来 对其 影响 作出 充分 的 分析 。 250 | 有些 代表 团 还 认为 , 对于 权力 分散 的 问题 以及 拟议 将 项目 事务 处 并入 发展 支助 和 管理 事务 部 的 问题 , 报告 没有 提供 足够 的 资料 。 251 | 14 . 委员 会 遗憾 地 指出 , 该 报告 叙述 性 多于 分析 性 , 反映 出 了 秘书 处 当前 变化 不断 的 状况 。 252 | 11 . 委员 会 在 1993 年 10 月 15 日 第 26 和 27 次 会议 上 审议 了 秘书 长 关于 秘书 处 的 改组 和 效率 的 报告 ( a / 48 / 428 ) 。 253 | 15 . 委员 会 关切 地 注意 到 , 报告 没有 好好 处理 权力 分散 的 问题 , 因此 强调 有 必要 迅速 在 大会 第 四十八 届 会议 期间 提出 一 份 关于 这个 问题 的 报告 。 254 | 16 . 委员 会 建议 , 遵照 大会 1993 年 5 月 6 日 第 47 / 212 a 号 决议 的 要求 , 编写 一 份 包括 所 涉 方案 问题 的 分析 性 报告 , 提交 大会 第 四十九 届 会议 。 255 | 18 . 委员 会 注意 到 有关 应急 基金 和 方案 预算 所 涉 经费 的 说明 等 问题 的 报告 。 256 | 17 . 委员 会 在 10 月 6 日 第 12 次 会议 上 审议 了 秘书 长 关于 审查 提出 所 涉 方案 预算 问题 说明 的 程序 以及 应急 基金 的 使用 和 业务 程序 的 报告 ( a / 48 / 281 ) 。 257 | 21 . 鉴于 其 预算 性质 , 委员 会 决定 不 审议 报告 的 另 一 部分 : 今后 预算 概要 和 方案 预算 中 估计 预防 性 外交 和 建立 和平 所 需 经费 的 方法 。 258 | 22 . 秘书 长 在 1993 年 10 月 7 日 委员 会 第 14 次 会议 上 对 1994 - 1995 两年 期 方案 概算 作 了 介绍 。 259 | 23 . 委员 会 在 1993 年 10 月 7 日 、 8 日 和 13 日 第 14 至 16 和 第 23 次 会议 上 审议 了 1994 - 1995 年 两年 期 方案 概算 第 一 编 。 260 | 24 . 有些 代表 团 认为 , 第 一 编 对 秘书 长 的 方案 概算 作 了 很 好 的 概括 介绍 。 261 | 26 . 有些 代表 团 认为 , 各种 优先 事项 所 受到 的 对待 并 不 均衡 , 特别 是 中期 计划 的 优先 事项 和 有关 发展 的 问题 没有 得到 应有 的 注意 。 262 | 它们 强调 , 大会 第 47 / 213 号 决议 所 订 的 预算 程序 必须 严格 遵守 。 263 | 有些 代表 团 认为 , 秘书 长 是 按照 第 47 / 213 号 决议 第 10 段 行事 的 , 该段 在 大纲 所 提议 的 优先 事项 和 中期 计划 的 优先 事项 之间 建立 了 一 种 平衡 。 264 | 28 . 有 几 个 代表 团 认为 , 经济 和 社会 领域 的 改组 本身 不是 目的 , 而是 应该 帮助 本 组织 来 执行 这些 领域 的 实务 方案 。 265 | 许多 代表 团 强调 指出 , 在 正在 审议 的 方案 预算 中 , 必须 平衡 所有 会员 国 的 利益 。 266 | 另 一些 代表 团 则 认为 , 资源 的 分配 很 好 地 反映 了 本 组织 目前 的 优先 次序 。 267 | 30 . 有 一 位 代表 表示 欢迎 检查 和 调查 办公 室 的 设立 , 但是 强调 要 区分 在 外部 和 内部 控制 之 下 保持 平衡 。 268 | 委员 会 着重 指出 , 尽管 来得 晚 了 , 但是 1994 - 1995 年 的 方案 概算 仍 会 受到 好好 审查 , 并 在 大会 本届 会议 于 1993 年 12 月 结束 前 得到 核 可 。 269 | 32 . 委员 会 注意 到 , 尽管 在 现代 技术 上 花 了 不少 钱 , 可是 还 没有 采取 任何 步骤 来 裁减 一般 事务 人员 的 总 人数 。 270 | 委员 会 是 在 这样 的 了解 下 建议 大会 核 可 这些 部 和 贸发 会议 的 方案 说明 的 。 271 | 34 . 委员 会 建议 , 所有 与 权力 分散 过程 有关 的 部门 的 核 可 都 要 视 大会 将来 就 这 件 事 所 作 的 决定 而 定 。 272 | 委员 会 认为 , 并 没有 方案 上 的 理由 要 增加 行政 和 管理 部 的 资源 , 所 提议 的 增加 额 应该 按照 第 47 / 213 号 决议 所 订 的 优先 次序 , 分配 给 中期 计划 和 预算 大纲 所 提议 的 那些 领域 。 273 | 38 . 委员 会 注意 到 所 提议 的 1 % 实际 增长 。 274 | 36 . 委员 会 注意 到 , 各 款 方案 说明 的 核 可 将 不 妨碍 大会 第 四十八 届 会议 就 下列 事项 作出 的 决定 : ( a ) 高级 员额 ( a / 48 / 6 ( part i ) 第 80 段 ) ; ( b ) 维持 和平 支助 帐户 。 275 | 39 . 委员 会 决定 , 中期 计划 和 第 47 / 213 号 决议 所 核 可 的 广泛 部门 性质 的 优先 次序 应当 得到 遵守 , 又 决定 , 预算 应该 如 中期 计划 所 述 , 在 次级 方案 一 级 反映 这些 优先 次序 。 276 | 委员 会 强调 需要 遵守 大会 第 41 / 213 号 和 47 / 213 号 决议 关于 预算 纲要 的 所有 规定 。 277 | 40 . 委员 会 对于 在 占 10 % 资源 的 产出 或 活动 一 级 指定 高 优先 或 低 优先 是否 有用 表示 怀疑 , 并 建议 停止 这种 做法 。 278 | 42 . 委员 会 赞赏 地 注意 到 方案 预算 的 新 格式 在 第 一 编 内 载 列 所有 概算 的 总 表 。 279 | 委员 会 也 注意 到 预算 外 资源 应 编排 得 较 好 , 并 建议 在 今后 的 方案 预算 中 更 明确 地 列 示 预算 外 资源 与 经常 预算 资源 之间 的 联系 。 280 | 应 改进 各项 目标 的 拟定 以 与 活动 有所 区别 。 281 | 43 . 委员 会 遗憾 地 指出 依 时 提交 文件 的 问题 仍未 解决 , 并 强调 必须 严格 遵守 有关 条例 和 细则 内 所 提出 的 向 各 审查 小组 分发 文件 的 时间 表 。 282 | 44 . 委员 会 在 10 月 8 日 第 17 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 1 款 。 283 | 45 . 一些 代表 团 表示 , 增加 员额 编制 、 顾问 资金 、 旅费 及 其他 支出 项目 的 提案 从 方案 编制 的 观点 出发 是 站 不住 脚 的 。 284 | 47 . 委员 会 注意 到 第 1 款 内 所 列 决策 机关 和 办事 处 并 不在 1992 - 1997 年 中期 计划 的 范围 内 。 285 | 不过 , 为 第 五 委员 会 及 方案 协调 会 提供 服务 的 秘书 处 单位 却 没有 因而 加强 。 286 | 49 . 委员 会 认为 , 与 新闻 部 有关 的 活动 应 在 该部 方案 和 资源 的 范围 内 执行 。 287 | 委员 会 建议 通过 重新 调配 资源 充分 加强 方案 协调 会 / 第 五 委员 会 秘书 处 单位 。 288 | 50 . 委员 会 注意 到 1994 - 1995 两年 期 方案 概算 第 1 款 。 289 | 51 . 预算 司 司长 在 1993 年 10 月 8 日 第 17 次 会议 上 介绍 了 1994 - 1995 两年 期 方案 概算 第 2 款 。 290 | 秘书 长 的 代表 回答 了 各种 问题 。 291 | 53 . 委员 会 在 1993 年 10 月 11 日 第 18 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 3 款 。 292 | 因此 , 指定 优先 次序 问题 虽然 一再 加以 讨论 过 , 但 似乎 是 重复 发生 。 293 | 若干 代表 团 质问 在 顾问 和 公务 旅行 方面 是否 需要 拟议 的 资源 数额 。 294 | 57 . 若干 代表 团 提议 将 第 3a . 16 段 扩充 , 以便 将 18 个 非 自治 领土 包括 进去 。 295 | 在 这 方面 , 它们 强调 它们 对 送交 安全 理事 会 各 制裁 委员 会 的 申请 书 的 处理 迟延 情况 表示 失望 。 296 | 58 . 一些 代表 团 对 分配 给 安全 理事 会 附属 机关 的 服务 工作 的 资源 水平 表示 了 关切 。 297 | 不过 其他 几 个 代表 团 认为 所 拟议 的 资源 数额 应 继续 予以 提供 , 以便 执行 这些 方案 , 直到 进行 中 的 政治 谈判 最终 产生 具体 的 最后 安排 。 298 | 其他 几 个 代表 团 质疑 在 第 3c . 37 段 所 述 的 关于 委托 驻地 协调 员 对 选举 程序 作出 后继 活动 的 立法 规定 。 299 | 它们 要求 进一步 增加 员额 和 资源 以 达到 这项 目标 。 300 | 64 . 几 个 代表 团 认为 第 3c . 9 段 应 引用 大会 第 47 / 120 号 决议 a 节 , 二 , 作为 执行 方案 一 的 次级 方案 1 : 斡旋 、 预防 性 外交 和 建立 和平 的 活动 的 任务 规定 之 一 。 301 | 65 . 若干 代表 团 质疑 这个 工作 方案 以及 为 方案 五 的 次级 方案 3 : 托管 和 非 殖民 化 以及 托管 理事 会 和 二十四 国 特别 委员 会 拟议 的 所 需 经费 , 他们 认为 在 这个 领域 进行 节约 是 可能 的 。 302 | 一 个 代表 团 从 与 不 干涉 会员 国 内政 原则 是否 一致 的 考虑 出发 , 对 第 3c . 14 段 之 内 所 设想 的 一些 活动 表示 关切 。 303 | 其他 一些 代表 团 支持 二十四 国 委员 会 的 活动 , 作为 就 非 殖民 化 问题 交流 意见 的 适当 论坛 。 304 | 67 . 有些 代表 团 对于 联合 国 空间 应用 方案 的 活动 的 积压 情况 表示 关切 。 305 | 委员 会 对于 秘书 处 未能 执行 大会 1992 年 12 月 23 日 第 47 / 214 号 决议 的 这个 方面 , 表示 失望 。 306 | 它 也 建议 次级 方案 3 的 立法 任务 ( 第 1514 ( xv ) 号 决议 和 中期 计划 内 所 载 其他 决议 ) 加 到 第 3c . 33 段 内 。 307 | 71 . 委员 会 提请 注意 关于 安全 理事 会 的 各个 制裁 委员 会 的 活动 及其 在 核定 的 方案 预算 内 充分 供 资 的 重要 性 。 308 | 72 . 委员 会 未能 就 第 一 部分 3c . 37 款 中 为 驻地 协调 员 提议 的 法定 活动 职责 达成 协议 , 建议 大会 对此 进行 进一步 的 审议 。 309 | 74 . 委员 会 在 1993 年 10 月 11 日 第 19 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 4 款 。 310 | 73 . 委员 会 建议 大会 核 可 1994 - 1995 两年 期 方案 概算 第 3 款 的 方案 说明 , 但 须 考虑 到 上述 修正 案 。 311 | 委员 会 注意 到 该部 , 包括 外勤 业务 司 在内 , 将 从 维持 和平 支助 帐户 接收 一些 员额 , 而 这些 员额 并 不 包括 在 专 册 内 。 312 | 一些 代表 团 谈到 该部 内 一些 人员 的 问题 , 这些 人员 从 各国 政府 借调 而来 , 无需 本 组织 提供 费用 , 因而 没有 在 预算 文件 中 反映 出来 。 313 | 一些 代表 团 谈到 联合 国 驻 巴勒斯坦 停战 监督 组织 ( 停战 监督 组织 ) 的 概算 , 认为 要求 提供 的 资源 , 特别 是 购买 车辆 、 家具 和 设备 的 经费 过多 。 314 | 76 . 一些 代表 团 也 谈到 维持 和平 人员 安全 措施 及其 培训 的 问题 。 315 | 77 . 委员 会 回顾 定于 1995 年 开展 一 项 深入 评价 维持 和平 活动 的 工作 , 并 将 于 1994 年 提出 一 份 临时 报告 。 316 | 78 . 委员 会 请 秘书 长 向 大会 第 四十八 届 会议 提交 概算 , 列 示 参与 联合 国 总部 及 外地 各项 活动 的 所有 联合 国 工作 人员 的 安全 问题 所 需 经费 。 委员 会 注意 到 , 秘书 处 同意 提交 一 份 书面 概算 。 317 | 80 . 委员 会 在 1993 年 10 月 11 和 12 日 第 19 和 20 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 7 款 。 318 | 尤其 是 , 外部 印刷 项 下 的 裁减 不 应 妨碍 各种 法律 出版 物 的 发行 。 319 | 有些 代表 团 表示 , 国际 贸易 法 委员 会 应以 更具 成本 效益 的 方式 从事 其 工作 。 320 | 84 . 委员 会 在 1993 年 10 月 20 日 第 32 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 8 款 。 321 | 87 . 有 一 个 代表 团 关切 说 , 方案 45 “ 非洲 : 危急 经济 形势 、 复苏 与 发展 ” 所 拟议 的 资源 水平 或许 不 足以 执行 有关 任务 。 322 | 85 . 一些 代表 团 强调 了 在 第 8 款 所 拟议 的 活动 的 重要 性 , 并 支持 拟议 的 工作 方案 。 323 | 82 . 一 个 代表 团 对于 把 方案 b 的 次级 方案 4 ( 向 国际 海底 管理 局 和 国际 海洋 法 法庭 筹备 委员 会 提供 服务 ) 及其 筹资 列 在 经常 预算 内 , 表示 保留 意见 。 324 | 另 一 个 代表 团 表示 , 有关 最 不 发达 国家 的 发展 的 活动 或许 会 与 联合 国 贸易 和 发展 会议 ( 贸发 会议 ) 所 从事 的 活动 重复 。 325 | 88 . 委员 会 注意 到 以下 事实 : 创设 政策 协调 和 可 持续 发展 部 代表 着 联合 国 活动 对 发展 的 经济 、 社会 和 环境 方面 采取 综合 作法 的 一 个 新 阶段 。 326 | 90 . 委员 会 强调 社会 发展 问题 世界 首脑 会议 、 第 四 次 妇女 问题 世界 会议 和 小 岛屿 发展 中 国家 持续 发展 问题 世界 会议 均 很 重要 , 并 请 秘书 长 确保 向 这 几 件 事 提供 足够 的 服务 和 资源 。 327 | 92 . 委员 会 强调 要 保持 第 8 款 中 针对 发展 规划 委员 会 和 世界 粮食 理事 会 所 提议 的 活动 和 有关 资源 , 但 须 不 影响 到 政府 间 对 这 两 个 政府 间 机构 的 将来 所 进行 的 协商 工作 。 328 | 94 . 委员 会 在 1993 年 10 月 9 日 第 30 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 9 款 。 329 | 一 个 代表 团 表示 , 该部 拟议 的 工作 方案 可以 有助于 界定 一些 参数 , 以便 联合 国 系统 处理 社会 、 经济 和 环境 事项 的 各个 组织 据 以 评估 各自 工作 之间 的 相互 作用 。 330 | 96 . 几 个 代表 团 表示 关切 的 是 , 拟议 增加 一 个 工作 方案 的 资源 水平 , 而 该 工作 方案 并 不 属于 大会 第 四十五 届 会议 所 决定 的 广泛 部门 性 五大 优先 领域 。 331 | 98 . 委员 会 在 1993 年 10 月 19 日 第 30 次 和 第 31 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 10 款 。 332 | 100 . 一些 国家 代表 团 表示 , 工作 方案 草案 中 的 许多 活动 同 经济 和 社会 领域 的 其他 部 厅 的 活动 重复 。 333 | 其他 国家 代表 团 强调 必须 协调 发展 支助 和 管理 事务 部 、 经济 及 社会 资料 和 政策 分析 部 、 政策 协调 和 可 持续 发展 部 和 联合 国 贸易 和 发展 会议 的 活动 。 334 | 102 . 有些 代表 团 感到 该部 的 活动 不 应 集中 在 最 不 发达 国家 和 转型 经济 国家 身上 , 而 应 处理 与 所有 发展 中 国家 有关 的 问题 。 335 | 101 . 好 几 个 代表 团 担心 地 注意 到 1994 - 1995 年 经常 预算 和 预算 外 资源 水平 下降 了 。 336 | 104 . 一 个 代表 团 强调 必须 将 军队 纳入 发展 过程 。 337 | 103 . 好 几 个 代表 团 感到 这 一 款 的 说明 中 没有 明确 反映 出 中期 计划 和 预算 资源 以及 优先 事项 之间 的 关系 。 338 | 106 . 委员 会 在 1993 年 10 月 20 日 第 33 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 11 a 款 。 339 | 107 . 若干 代表 团 对 联合 国 贸易 和 发展 会议 ( 贸发 会议 ) 的 拟议 增长 率 在 整个 方案 预算 拟议 的 总 增长 率 所 占 比例 表示 关切 。 340 | 108 . 有些 代表 团 对 第 八 届 贸发 会议 上 议定 的 优先 次序 同 分配 给 有关 次级 方案 的 资源 之间 的 严重 差距 表示 关切 。 341 | 109 . 一 个 代表 团 认为 , 1995 年 的 联合 国 贸易 和 发展 会议 第 九 届 会议 应 推迟 到 1996 年 举行 , 而 其他 成员 则 认为 该 届 会议 应 如期 举行 。 342 | 110 . 一些 成员 强调 说 , 必须 审查 贸发 会议 的 政府 间 机构 , 以 保证 工作 没有 重复 , 各种 特别 安排 不会 自动 延长 , 而且 在 排定 会议 方面 实现 节约 。 343 | 112 . 委员 会 对 方案 概算 第 11 a 款 迟迟 才 分发 表示 关切 , 因为 代表 团 没有 足够 的 时间 对其 方案 内容 进行 充分 的 分析 。 344 | 115 . 如果 接受 这些 建议 , 委员 会 建议 大会 核 可 1994 - 1995 两年 期 方案 概算 第 11 a 款 的 方案 说明 。 345 | 111 . 一些 成员 关切 地 认为 , 若干 员额 拟议 缩减 , 可能 会 对 各项 活动 的 执行 产生 消极 的 影响 。 346 | 114 . 委员 会 建议 , 应对 1992 - 1997 年 中期 计划 分发 一 份 订正 , 以 反映 出 方案 协调 会 第 三十二 届 会议 的 报告 第 119 段 中 关于 方案 17 和 次级 方案 1 的 标题 的 建议 。 347 | 116 . 委员 会 在 10 月 20 日 第 33 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 11b 款 。 348 | 118 . 委员 会 对于 大会 第 47 / 212 b 号 决议 中 关于 任命 国际 贸易 中心 ( 贸发 会议 / 总 协定 ) 执行 主任 的 j 节 第 36 段 未 受到 遵守 感到 遗憾 。 349 | 119 . 委员 会 建议 大会 核 可 1994 - 1995 两年 期 方案 概算 第 11b 款 的 方案 说明 。 350 | 120 . 方案 和 协调 委员 会 在 1993 年 10 月 12 日 第 20 次 会议 审议 了 1994 - 1995 两年 期 方案 概算 第 12 a 款 的 方案 说明 。 351 | 121 . 若干 代表 团 强调 联合 国 环境 规划 署 ( 环境 规划 署 ) 在 贯彻 《 21 世纪 议程 》 方面 的 重要 作用 。 352 | 有些 代表 团 对 在 这 款 下 裁减 资源 的 提议 表示 关切 。 353 | 他们 认为 , 由于 环境 是 1992 - 1997 年 中期 计划 的 五 个 优先 领域 之 一 , 应当 提出 增加 资源 的 提议 。 354 | 123 . 若干 代表 团 要求 加强 环境 规划 署 与 联合 国 人类 住区 ( 生境 ) 中心 之间 的 协作 , 使 工作 更 有 效率 和 合理 化 。 355 | 124 . 有些 代表 团 要求 同等 对待 纽约 、 日内瓦 和 内罗毕 这 三 个 联合 国 中心 。 356 | 有些 代表 团 强调 环境 规划 署 和 该 中心 的 独特 作用 和 任务 , 并 强调 有 必要 将 这 两 个 组织 保持 为 相互 独立 的 组织 。 357 | 有些 代表 团 虽然 支持 加强 协调 的 呼吁 , 但 他们 强调 每个 组织 有 必要 进行 其 任务 所 规定 的 活动 。 358 | 126 . 委员 会 关切 地 注意 到 予 算 外 资源 会 下降 的 估计 , 并 强调 有 必要 评估 其 对 各项 方案 的 影响 。 359 | 127 . 委员 会 注意 到 对 秘书 处 代表 的 方案 说明 所 作 的 更正 , 并 建议 大会 核 可 1994 - 1995 两年 期 方案 概算 第 12 a 款 的 方案 说明 。 360 | 128 . 方案 和 协调 委员 会 在 1993 年 10 月 12 日 第 21 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 12 b 款 。 361 | 129 . 有些 代表 团 强调 应 保持 联合 国 人类 住区 中心 ( 生境 中心 ) 的 独特 性质 。 362 | 他们 强调 住房 作为 一 个 基本 人权 的 重要 性 以及 加强 中心 的 需要 。 363 | 131 . 委员 会 建议 大会 核 可 1994 - 1995 两年 期 方案 概算 第 12 b 款 的 方案 说明 。 364 | 有些 代表 团 觉得 , 预计 在 次级 方案 之间 分配 资源 并 不 反映 中期 计划 内 指定 的 优先 事项 。 365 | 132 . 委员 会 在 1993 年 10 月 13 日 第 23 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 13 款 。 366 | 135 . 大多 数 代表 团 对 工作 方案 的 描述 和 内容 都 表示 好评 。 367 | 134 . 委员 会 在 1993 年 10 月 13 日 第 23 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 14 款 。 368 | 他们 注意 到 大会 第 四十八 届 会议 期间 , 将就 国际 药物 管制 问题 召开 高 级别 部门 会议 , 并且 表示 相信 该 会议 的 讨论 对 工作 方案 也许 是 相当 重要 的 。 369 | 137 . 方案 和 协调 委员 会 在 10 月 18 日 第 28 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 15 a 款 。 370 | 138 . 若干 代表 团 对 方案 说明 的 写法 有所 改善 及 次级 方案 的 改组 符合 1992 - 1997 中期 计划 内 所 载 目标 和 优先 次序 的 情况 表示 满意 。 371 | 一些 代表 团 喜 见 与 区域 一体 化 有关 的 方案 说明 的 内容 , 并 强调 加强 次 区域 机构 的 重要 性 , 要 考虑 到 这 方面 的 最新 情况 , 主要 是 预期 不久 即将 生效 的 关于 设立 非洲 经济 共同 体 的 条约 。 372 | 一 个 代表 团 不 同意 、 若干 代表 团 认为 与 扶贫 妇女 与 儿童 问题 有关 的 次级 方案 和 活动 都 没有 在 方案 说明 内 , 也 没有 在 资源 分配 上 获得 应有 的 优先 注意 。 373 | 一些 代表 团 表示 非洲 经委 会 必须 在 内部 确定 优先 次序 , 以 较 好 地 集中 注意 高度 优先 的 实质 活动 。 374 | 140 . 一些 代表 团 表示 关心 预算 外 资源 , 特别 是 来自 联合 国 开发 计划 署 ( 开发 计划 署 ) 及 联合 国 人口 基金 ( 人口 基金 ) 的 传统 资金 数额 减少 的 情况 。 375 | 141 . 若干 代表 团 强调 , 必须 确保 非洲 经济 发展 和 规划 研究 所 ( 非洲 经 发 规划 所 ) 及 非洲 预防 犯罪 和 罪犯 待遇 研究 所 获得 充分 的 资源 以 执行 其 方案 。 376 | 一些 代表 团 认为 , 继续 不断 地 提供 赠款 是 不当 之 举 , 并 质疑 重新 制定 “ 非 经常 性 ” 规定 的 提案 。 377 | 143 . 委员 会 注意 到 工作 方案 内 对 与 社会 发展 有关 的 问题 相对 来说 注意 得 不够 。 378 | 144 . 委员 会 强调 必须 分配 足够 的 资源 以 支助 与 扶贫 、 妇女 、 儿童 和 预防 犯罪 有关 的 活动 。 379 | 其他 代表 团 认为 由 经常 预算 向 区域 机构 提供 赠款 是 不 适当 的 。 380 | 148 . 一些 代表 团 对 提议 扩大 与 太平洋 岛屿 发展 中 国家 有关 的 活动 一事 表示 满意 。 381 | 150 . 委员 会 建议 大会 核 可 1994 - 1995 两年 期 方案 概算 第 16 款 的 方案 说明 , 连同 次级 方案 1 , 分项 3 内 的 增 列 部分 : “ 标准 化 、 质量 管制 及 与 导致 区域 内部 贸易 扩展 有关 的 问题 ” 。 382 | 151 . 委员 会 在 1993 年 10 月 18 日 第 29 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 17 款 。 383 | 152 . 几 个 代表 团 表示 关切 资源 数额 似乎 不够 多 , 尤其 是 考虑 到 由于 欧洲 区域 最近 的 事态 发展 以及 欧洲 经济 委员 会 ( 欧洲 经委 会 ) 的 成员 增多 , 以致 欧洲 经委 会 的 职责 加重 。 384 | 153 . 若干 代表 团 支持 欧洲 经委 会 拟议 的 工作 方案 及 其中 所 载 的 优先 顺序 。 385 | 另 一些 代表 团 则 怀疑 各 优先 领域 之间 的 资源 分配 是否 得当 , 并 主张 应 将 更多 的 资源 用于 促进 贸易 。 386 | 154 . 有些 代表 团 关切 欧洲 经委 会 秘书 处 的 空缺 员额 数 及其 对 产出 的 影响 , 并 要求 采取 紧急 措施 填补 这些 空缺 。 387 | 155 . 一 个 代表 团 注意 到 , 欧洲 经委 会 拟议 的 活动 有 很 大 一 部分 旨在 制订 和 ( 或 ) 更新 法律 文书 和 技术 标准 , 而 这些 文书 和 标准 往往 是 该 区域 以外 的 联合 国 会员 国 所 关心 的 。 388 | 156 . 另 一 个 代表 团 关切 的 是 , 尽管 有 经济 及 社会 理事 会 、 方案 和 协调 委员 会 第 三十二 届 会议 以及 大会 各项 有关 决议 的 建议 , 与 切尔 诺 贝利 灾难 有关 的 问题 并未 反映 在 方案 编列 的 活动 中 。 389 | 同时 , 一些 代表 团 则 关切 到 指定 给 一些 次级 方案 的 资源 有限 , 特别 是 与 次级 方案 14 “ 区域 一体 化 和 合作 ” 有关 的 资源 。 390 | 有 一 个 代表 团 对 整个 方案 资源 的 增长 表示 质疑 。 391 | 160 . 委员 会 建议 , 应该 加强 拉丁 美洲 和 加勒比 经济 委员 会 ( 拉加 经委 会 ) 与 各 专门 机构 和 联合 国 其他 计划 署 之间 的 协调 。 392 | 158 . 委员 会 在 1993 年 10 月 18 日 第 29 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 18 款 。 393 | 161 . 委员 会 关切 方案 说明 中 没有 恰当 陈述 有关 药物 管制 与 社会 发展 问题 世界 首脑 会议 和 小 岛屿 发展 中 国家 持续 发展 问题 世界 会议 的 筹备 工作 的 活动 。 394 | 163 . 委员 会 在 1993 年 10 月 19 日 第 30 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 19 款 。 395 | 他们 也 表示 , 应 将 更多 资源 调拨 给 关于 自然 资源 的 次级 方案 , 特别 是 水 资源 、 人口 和 妇女 与 发展 。 396 | 他们 建议 西亚 经 社会 确保 避免 重叠 现象 , 并 同 有关 实体 和 专门 机构 密切 协调 其 活动 。 397 | 169 . 有些 代表 团 支持 将 资源 从 部门 咨询 服务 调 往 各 区域 委员 会 的 建议 。 398 | 170 . 有些 代表 团 指出 , 很 难 在 本 款 下 确定 活动 , 并 认 应 在 这 方面 提供 更 详细 的 资料 。 399 | 168 . 委员 会 在 1993 年 10 月 19 日 第 31 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 20 款 。 400 | 173 . 委员 会 注意 到 , 第 20 款 的 资源 分配 是 指示 性 的 , 它 反映 技术 合作 是 面向 需求 的 , 它 并 反映 大会 将 对 分散 资源 问题 所 作 的 决定 。 401 | 174 . 委员 会 建议 大会 , 考虑 到 上述 因素 , 核 可 1994 - 1995 两年 期 方案 概算 第 20 款 的 方案 说明 。 402 | 还有 一些 代表 团 虽然 认识 到 该 中心 所 进行 的 活动 的 重要 性 , 但 对 扩充 该 中心 表示 关切 ; 他们 指出 该 中心 已 受惠 于 以前 几 个 预算 的 大量 拨款 。 403 | 175 . 委员 会 在 1993 年 10 月 13 日 第 22 和 23 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 21 款 。 404 | 有些 代表 团 表示 所 需 的 额外 资源 应从 其他 领域 调动 资源 来 解决 。 405 | 177 . 一些 代表 团 从 该 中心 任务 规定 一致 性 的 观点 来看 问题 , 对 第 21.4 段 所 提到 的 该 中心 的 新 结构 表示 怀疑 。 406 | 180 . 一些 代表 团 表示 , 在 拟议 的 工作 方案 中 没有 适当 强调 技术 合作 活动 。 407 | 其他 一些 代表 团 认为 , 应 妥 为 顾及 中期 计划 中 所 订 的 各个 主要 的 优先 事项 和 大会 第 47 / 213 号 决议 的 各项 规定 。 408 | 若干 代表 团 则 质疑 何以 将 次级 方案 4 之 下 的 活动 列为 低 优先 。 409 | 185 . 委员 会 建议 大会 核 可 1994 - 1995 两年 期 方案 概算 第 21 款 的 方案 说明 。 410 | 其他 代表 团 对 在 次级 方案 2 、 3 和 4 之 下 所 拟议 的 资源 数额 提出 质疑 , 认为 额外 资源 没有 平均 分配 给 这些 次级 方案 。 411 | 184 . 委员 会 对 在 编制 这 款 预算 时 , 关于 人权 方案 的 评价 报告 ( e / ac . 51 / 1992 / 3 ) 所 载 的 各项 建议 没有 被 考虑 在内 , 表示 失望 。 412 | 182 . 若干 代表 团 注意 到 关于 发展 权利 的 活动 在 拟议 的 工作 方案 中 没有 得到 适当 的 反映 , 若干 代表 团 认为 诸如 住房 的 基本 经济 和 社会 权利 没有 得到 充分 反映 。 413 | 187 . 委员 会 在 1993 年 10 月 12 日 第 21 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 22 a 款 。 414 | 186 . 委员 会 注意 到 需要 充分 资源 的 关于 对 世界 人权 问题 会议 的 后继 的 建议 将 在 以后 提出 。 415 | 188 . 有些 代表 团 认为 , 在 次级 方案 之间 分配 预算 外 资源 必须 加以 审查 , 另 一些 代表 团 则 认为 , 关于 利用 这些 资源 的 详情 并 不够 详细 。 416 | 193 . 委员 会 在 1993 年 10 月 12 日 第 21 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 22 b 款 。 417 | 192 . 委员 会 建议 大会 考虑 到 上述 各项 建议 , 核 可 1994 - 1995 两年 期 方案 概算 第 22 a 款 的 方案 说明 。 418 | 另 一些 代表 团 希望 见到 此 一 行动 所 涉 预算 问题 的 更 明确 说明 。 419 | 191 . 委员 会 对于 预计 使用 预期 供 此 方案 的 预算 外 资源 的 情况 , 缺乏 具体 的 资料 , 感到 遗憾 。 420 | 该 代表 团 又 指出 , 虽然 难民 人数 以 估计 每年 3.5 % 的 速度 增加 , 但是 所 需 经费 估计 数 却 仍然 保持 不变 。 421 | 该 代表 团 还 说 , 为了 支援 在 中东 继续 作出 的 努力 而 提供 的 预算 外 捐款 , 应该 是 第 22 b 款 所 提议 的 经费 以外 的 额外 资源 。 422 | 该 代表 团 表示 意见 说 , 巴勒斯坦 难民 的 情况 还 没有 出现 预期 的 结果 , 所以 在 今后 一 段 时间 , 这个 次级 方案 可能 还会 需要 资源 。 423 | 198 . 委员 会 建议 大会 核 可 1994 - 1995 两年 期 方案 概算 第 22 b 款 的 方案 说明 。 424 | 200 . 若干 代表 团 表示 支持 作为 最低 需要 而 增加 分配 给 人道 主义 事务 部 的 资源 , 使 它 能够 完成 其 增多 的 工作 量 , 并 表示 大会 应 考虑 对此 方案 提案 提供 额外 资源 。 425 | 203 . 若干 代表 团 强调 , 该部 执行 的 活动 , 尤其 是 处理 人道 主义 外交 , 除 雷 和 有关 维持 和平 的 活动 , 必须 有 法律 根据 , 以 确保 充分 尊重 会员 国 的 主权 。 426 | 207 . 委员 会 在 1993 年 10 月 14 日 第 25 次 会议 上 审议 了 1994 - 1995 两年 期 方案 概算 第 24 款 。 427 | 210 . 一些 代表 团 认为 , 方案 应 再次 审查 对 其他 优先 方案 的 需求 日增 的 背景 。 428 | 211 . 一些 代表 团 对 设立 一 个 机构 负责 不断 有 系统 地 评价 新闻 部 的 方案 和 活动 一事 提出 质疑 。 429 | 另 一 代表 团 虽然 赞同 评价 的 概念 , 但 也 建议 评价 工作 应以 明确 的 目标 为 指导 。 430 | 212 . 一些 代表 团 强调 , 联合 国 出版 物 由于 其 目标 而 获得 高度 评价 , 但 另 一些 代表 团 却 由于 许多 出版 物 没有 阿拉伯 文本 而 感到 遗憾 。 431 | 它们 认为 , 认真 精简 该部 的 活动 可以 提供 额外 资源 , 用来 重新 分配 给 优先 领域 。 432 | 213 . 若干 代表 团 表示 关心 如何 处理 联合 国 新闻 中心 的 问题 。 433 | 另 一 代表 团 要求 应 尊重 所有 联合 国 语文 。 434 | 215 . 尽管 若干 代表 团 支持 给予 反对 种族 隔离 斗争 方面 的 新闻 活动 以 优先 地位 , 但 一些 代表 团 指出 , 中期 计划 内 所 列 的 其他 优先 方案 并 没有 在 方案 概算 内 反映 出来 。 435 | 另 一些 代表 团 不 认为 新闻 中心 具有 优先 地位 。 436 | 另 一些 代表 团 则 认为 , 与 南非 和 中东 有关 的 新闻 活动 仍 有 削减 的 余地 。 437 | 216 . 一 个 代表 团 指出 第 24.73 段 是 多余 的 , 因此 应从 概算 中 删去 。 438 | 218 . 为 回答 一 个 代表 团 提出 的 问题 , 秘书 处 向 大会 本届 ( 第 四十八 届 常会 ) 提供 有关 整个 方案 概算 中 分配 给 新闻 部 的 资源 的 资料 , 包括 所 需 人员 。 439 | 220 . 委员 会 建议 , 新闻 处 应 更 迅速 而 有效 地 回应 媒介 对 联合 国 的 批评 。 440 | 然而 , 几 个 代表 团 感到 失望 的 是 这 份 报告 没有 满足 委员 会 的 这项 要求 , 即 应 将 中期 计划 新 格式 的 样本 提交 给 委员 会 本届 会议 和 大会 第 四十八 届 常会 。 441 | 223 . 委员 会 在 10 月 6 日 第 12 和 第 13 次 会议 上 审议 了 秘书 长 关于 方案 规划 可能 采用 的 新 办法 的 报告 ( a / 48 / 277 ) 。 442 | 222 . 委员 会 建议 大会 核 可 1994 - 1995 两年 期 方案 概算 第 13 款 的 方案 说明 , 但 需 删去 第 24.73 段 。 443 | 225 . 大多 数 代表 团 都 认为 , 目前 所 设想 的 计划 并 不 充分 符合 其 应该 完成 的 重要 职能 。 444 | 它们 认为 , 中期 计划 及其 各项 订正 的 目前 程序 对 秘书 处 、 尤其 是 实务 部门 以及 会员 国 而言 , 都 过于 复杂 和 繁琐 。 445 | 其他 代表 团 不 同意 这种 观点 , 它们 认为 , 中期 规划 在 综合 与 协调 各项 政府 间 的 任务 方面 发挥 了 重大 作用 , 是 会员 国 和 秘书 处 的 一 项 有益 的 工具 。 446 | 227 . 关于 将 中期 计划 的 两 项 基本 职能 相 分离 , 即 以 两 份 不同 的 文件 分别 提供 政策 一 级 的 展望 和 中期 工作 方案 的 建议 未 得到 支持 。 447 | 许多 代表 团 赞成 采用 比较 长期 的 展望 , 但是 , 它们 认识 到 , 要 在 任何 可靠 的 程度 上 对 世界 事件 的 发展 趋势 作 超过 五 年 的 预测 都 几乎 是 不 可能 的 。 448 | 228 . 许多 代表 团 还 认为 , 最 理想 的 解决 办法 可能 是 同 会员 国 协商 编写 一 个 精简 的 展望 期 不 超过 五 年 的 前瞻 性 政策 文件 。 449 | 关于 编制 主要 由 财务 数据 构成 的 一 年 预算 的 建议 , 大多 数 代表 团 同意 , 目前 的 两年 方案 预算 周期 已 足以 达到 这 一 目的 。 450 | 231 . 委员 会 对 秘书 处 没有 按照 大会 第 47 / 214 号 决议 的 要求 提出 一 个 中期 计划 新 格式 的 样本 , 表示 遗憾 。 451 | 委员 会 还 注意 到 该 计划 很少 被 使用 , 其 对 本 组织 工作 的 影响 也 很 有限 。 452 | 委员 会 进一步 注意 到 目前 的 中期 计划 没有 提供 适当 的 通盘 政策 指导 。 453 | 233 . 委员 会 重申 需要 有 一 个 超越 两年 期 方案 预算 的 方案 规划 工具 。 454 | 在 这 方面 , 委员 会 建议 应 考虑 用 一 个 综合 文件 来 取代 目前 的 中期 计划 , 该 综合 文件 将 由 大会 核 可 , 并 包括 下列 部分 : 455 | 展望 部分 将 指出 本 组织 工作 的 广泛 优先 领域 ; 只有 在 所 涉 期间 出现 无法 预见 的 迫切 需要 时 , 才会 对 这个 展望 部分 进行 修正 。 456 | ( b ) 一 个 方案 框架 部分 。 它 只 列出 主要 方案 和 次级 方案 , 并 提供 用来 评价 方案 预算 的 筹备 和 执行 工作 的 指导 方针 。 457 | 应 在 预算 年 以外 每 两年 一 次 对 方案 框架 定期 进行 审查 , 以 反映 新 的 任务 。 458 | 234 . 委员 会 还 建议 继续 目前 的 两年 方案 预算 周期 。 459 | 235 . 在 方案 预算 中 , 实质 性 次级 方案 的 说明 应 包括 明确 制订 目的 是 在 可能 范围 内 导致 可见 变化 的 目标 。 460 | 它 将 分析 一直 存在 的 问题 、 国际 社会 在 今后 4 至 6 年 所 需要 面对 的 棘手 问题 的 新兴 趋势 以及 本 组织 在 这 方面 所 起 的 作用 。 461 | 支助 事务 的 目的 是 在 向 实质 部门 和 会员 国 提供 的 服务 方面 指出 提高 效率 和 效益 的 目标 。 462 | 236 . 方案 和 预算 执行 情况 报告 应 详 列 在 达成 方案 框架 和 方案 预算 的 资源 的 目标 方面 所 取得 的 成果 。 463 | 237 . 委员 会 还 建议 , 在 制订 方案 时 考虑 到 方案 执行 情况 监测 报告 和 评价 工作 的 调查 结果 , 以 其 作为 提高 效益 的 主要 因素 。 464 | 239 . 委员 会 在 1993 年 10 月 15 日 第 26 和 27 次 会议 上 审议 了 秘书 长 关于 联合 国 方案 管理 员 的 责任 制度 的 报告 ( a / 48 / 452 ) 。 465 | 对 秘书 处 认为 已 存在 好 几 个 规定 责任 制度 的 制度 的 观念 表示 怀疑 。 466 | 各 代表 团 感到 即使 存在 这种 制度 , 也 没有 加以 实施 。 467 | 各 代表 团 普遍 感到 惋惜 , 在 实施 十分 需要 的 制度 方面 又 损失 了 一 年 时间 。 468 | 242 . 委员 会 对 报告 称 联合 国内 已 存在 好 几 个 设立 责任 制度 的 制度 提出 质疑 。 469 | 243 . 委员 会 坚持 大会 第 47 / 212 b 和 第 47 / 214 号 决议 中 所 载 建立 透明 有效 的 责任 制度 的 要求 得到 遵从 。 470 | 248 . 主席 回顾 对 协调 问题 的 项目 一直 未 作 决定 , 以便 委员 会 能 在 第 三十三 届 会议 上 续 会 上 进一步 审议 方案 协调 会 / 行政 协调 会 联席 会议 的 筹备 问题 。 471 | 244 . 委员 会 建议 这样 一 个 制度 至少 要 规定 工作 人员 之间 特别 是 方案 管理 员 的 明确 无误 的 责任 分配 , 包括 清楚 的 监督 责任 , 和 考绩 机制 以及 补救 行动 。 472 | 247.1993 年 10 月 6 日 , 委员 会 在 第 12 次 会议 上 , 审议 了 方案 和 协调 委员 会 ( 方案 协调 会 ) 和 行政 协调 委员 会 ( 行政 协调 会 ) 的 第 二十七 序列 联席 会议 的 筹备 问题 。 473 | 254 . 在 同 次 会议 上 , 委员 会 决定 向 经济 及 社会 理事 会 和 大会 提出 以下 委员 会 第 三十四 届 会议 的 临时 议程 , 供 其 审查 : 474 | ( a ) 1992 - 1993 两年 期 联合 国 方案 执行 情况 ; 475 | 1 . 选举 主席 团 成员 。 476 | ( b ) 1992 - 1997 年 中期 计划 订正 草案 ; 477 | 秘书 长 关于 深入 评价 关于 社会 发展 的 主要 方案 的 报告 ( a / 48 / 16 , 478 | 1 . 这 份 联合 国 国际 贸易 法 委员 会 的 报告 报导 了 1993 年 7 月 5 日 至 23 日 在 维也纳 举行 的 委员 会 第 二十六 届 会议 的 情况 。 479 | 2 . 根据 大会 1966 年 12 月 17 日 第 2205 ( x xi ) 号 决议 , 现 将 本 报告 提交 大会 , 并 同时 送交 联合 国 贸易 和 发展 会议 ( 贸发 会议 ) 征求 意见 。 480 | 3 . 联合 国 国际 贸易 法 委员 会 ( 贸易 法 委员 会 ) 第 二十六 届 会议 于 1993 年 7 月 5 日 开幕 。 481 | 7 . 下列 国际 组织 也 派 观察 员 出席 了 会议 : 482 | 8 . 委员 会 选出 了 下列 主席 团 成员 : 483 | 5 . 除 哥斯达黎加 、 肯尼亚 、 多哥 、 乌干达 及 坦桑尼亚 联合 共和 国 以外 , 委员 会 所有 成员 都 派 代表 出席 了 本届 会议 。 484 | 关于 修订 第 ( 3 ) 款 以 使 关于 采购 的 规定 明确 说明 第 ( 2 ) 款 所 提 的 采购 在 多大 程度 上 受到 《 示范 法 》 的 约束 的 建议 没有 得到 足够 的 支持 。 485 | 这项 建议 的 用意 是 提高 清晰 度 和 透明度 , 并 减少 对 某些 物品 属性 发生 争议 的 可能 性 , 比如 印刷 , 在 一些 司法 管辖 区 中 可 被 视为 物品 , 而 在 另 一些 司法 管辖 区 中 则 被 作为 服务 。 486 | 21 . 委员 会 审议 了 这样 一 项 建议 , 即 在 “ 货物 ” 定义 中 列入 一 项 国家 可 明确 列入 某些 物品 和 明确 排除 某些 物品 的 任 择 案文 。 487 | 为此 , 有人 建议 , 在 定义 的 现有 案文 末尾 可 加上 方 括号 , 增加 如下 一 段 可 供 选择 的 文字 : “ [ 以及 在 不 局限 上述 普遍 性 情况 下 , 还 包括 … … , 但 不 包括 … … ] ” 。 488 | 经 如此 修订 后 , 委员 会 通过 了 “ 货物 ” 的 定义 。 489 | 32 . 委员 会 决定 结合 第 9 条 、 第 10 条 和 第 25 条 审议 此项 建议 ( 见 第 63 段 ) 。 490 | 39 . 经过 讨论 , 委员 会 决定 不 加 改动 通过 该项 案文 。 491 | 43 . 随后 , 委员 会 讨论 了 供应 商 或 承包 商 是否 应当 具有 纠正 虚假 、 不 准确 或 不 完整 的 资料 的 权利 这个 问题 。 492 | 与会 者 普遍 认为 , 不 应有 纠正 虚假 资料 的 权利 , 因为 这 将 导致 滥用 这种 权利 并 为 欺骗 行为 提供 机会 。 493 | 关于 有 重大 误差 或 不 完整 的 资料 , 一 种 意见 认为 供应 商 或 承包 商 不 应有 纠正 资料 中 的 重大 误差 或 不 完整 性 的 权利 , 但是 如果 资料 中 的 误差 和 不 完整 性 不 属 重要 内容 , 则 应 有权 更正 或 补交 。 494 | 45 . 经过 讨论 后 , 委员 会 决定 保留 第 ( 7 ) 款 , 位置 不变 , 并 扩大 该 款 的 内容 , 允许 供应 商 或 承包 商 纠正 资料 中 的 重大 不 准确 或 不 完整 之 处 。 495 | 委员 会 感到 这 将 符合 第 ( 6 ) 款 , 在 该 款 中 已经 含蓄 地 规定 采购 实体 不可 由于 资料 中 无 关 紧要 的 不 准确 性 或 不 完整 性 而 取消 承包 商 或 供应 商 的 资格 。 496 | 47 . 有人 指出 , 第 ( 7 ) 款 第 二 行 “ 投标 书 ” 之后 应 重复 “ 建议 书 或 报盘 ” 。 497 | 46 . 有人 还 提出 了 大意 如下 的 一 项 建议 : 第 ( 7 ) 款 还 应该 规定 供应 商 或 承包 商 有 权利 提供 证据 驳斥 采购 实体 关于 其 所 提供 的 资料 为 虚假 资料 的 说法 。 498 | 48 . 委员 会 在 审议 起草 小组 的 报告 时 对 第 6 条 第 ( 6 ) 和 ( 7 ) 款 作 了 进一步 讨论 ( 见 第 213 和 214 段 ) 。 499 | 另 据 进一步 指出 , 如果 第 19 条 的 修改 获得 通过 , 则 对 本 款 规定 提出 的 担忧 可以 得到 充分 解决 , 因为 本 款 规定 是 第 19 条 所 述 情况 的 再现 。 500 | 委员 会 还 请 起草 小组 考虑 是否 可 在 第 7 ( 3 ) 条 和 第 19 ( 2 ) 条 中 避免 重复 列举 有关 各项 例外 情况 。 501 | -------------------------------------------------------------------------------- /subEntity_new.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf-8 3 | 4 | info = ''' 5 | Command: subEntity.py input output 6 | Purpose: Do the following substitutions: 7 | 1, Character Entities ==> Value 8 | 2, _U_._S_._ ==> _U.S._ 9 | Author: Meng Fandong 10 | ''' 11 | 12 | import re 13 | 14 | entity_list = ['&', '& amp;', '& ;', '& amp ;', 15 | '&', '& AMP;', '& ;', '& AMP ;', 16 | 17 | '<', '& lt;', '< ;', '& lt ;', 18 | '<', '& LT;', '< ;', '& LT ;', 19 | 20 | '>', '& gt;', '> ;', '& gt ;', 21 | '>', '& GT;', '> ;', '& GT ;', 22 | 23 | ''', '& apos;', '&apos ;', '& apos ;', 24 | '&APOS;', '& APOS;', '&APOS ;', '& APOS ;', 25 | 26 | '"', '& quot;', '" ;', '& quot ;', 27 | '"', '& QUOT;', '" ;', '& QUOT ;' 28 | ] 29 | 30 | value_list = ['&', '<', '>', '\'', '\"'] 31 | 32 | 33 | def E2V(sequence): 34 | "Substitute the Value for the Character Entities in the file" 35 | for i in range(len(entity_list)): 36 | (sequence, times) = re.subn(entity_list[i], value_list[int(i / 8)], sequence) 37 | (sequence, times) = re.subn(' U . S . ', ' U.S. ', sequence) 38 | return sequence 39 | -------------------------------------------------------------------------------- /test_predict_local.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2020 THL A29 Limited, a Tencent company. 2 | # All rights reserved. 3 | # Licensed under the BSD 3-Clause License (the "License"); you may 4 | # not use this file except in compliance with the License. You may 5 | # obtain a copy of the License at 6 | # https://opensource.org/licenses/BSD-3-Clause 7 | # Unless required by applicable law or agreed to in writing, software 8 | # distributed under the License is distributed on an "AS IS" basis, 9 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 10 | # implied. See the License for the specific language governing 11 | # permissions and limitations under the License. 12 | # See the AUTHORS file for names of contributors. 13 | """ 14 | turbo-transformers translation task demo 15 | 16 | Usage: 17 | test_predict_local.py [--use_gpu] 18 | 19 | Options: 20 | --use_gpu use gpu. 21 | """ 22 | import docopt 23 | import os 24 | import sys 25 | import str2bool 26 | import torch.quantization 27 | 28 | import base_model 29 | from subEntity_new import E2V 30 | import token_process_tools 31 | from contextlib import contextmanager 32 | from contexttimer import Timer 33 | import global_timer as global_timer 34 | 35 | debug = str2bool.str2bool(os.getenv("DEBUG", "0"), raise_exc=True) 36 | with_quantize_dynamic = str2bool.str2bool(os.getenv("WITH_QUANTIZE_DYNAMIC", 37 | "0"), 38 | raise_exc=True) 39 | 40 | 41 | class PredictWithONMT(base_model.BatchPredictor): 42 | def process_token(self, sent: str): 43 | token_processor = self.token_processor 44 | if token_processor.type == "cn2en": 45 | sent = token_processor.tokenizer.segment(sent) 46 | elif token_processor.type == "en2cn": 47 | sent = token_processor.en_normalize_punctuation.normalize(sent) 48 | sent = token_processor.en_tokenizer.tokenize(sent, return_str=True) 49 | tok = E2V(sent) 50 | tok = tok.lower() 51 | sent = token_processor.tokenizer.segment(tok) 52 | else: 53 | raise Exception("This type({}) is not support.".format( 54 | token_processor.type)) 55 | return sent 56 | 57 | def trans(self, sent: str): 58 | sent = self.process_token(sent) 59 | return self.call_batch([sent]) 60 | 61 | def read_from_file(file_name: str): 62 | with open(file_name, 'r') as f: 63 | for line in f: 64 | line = line.strip("\n") 65 | yield line 66 | 67 | 68 | @contextmanager 69 | def profile(enable=False): 70 | if enable: 71 | with torch.autograd.profiler.profile(record_shapes=True) as prof: 72 | yield 73 | print(prof.key_averages().table(sort_by="self_cpu_time_total")) 74 | prof.export_chrome_trace("./result.prof") 75 | else: 76 | yield 77 | 78 | 79 | def test_onmt(cfg: token_process_tools.TokenProcessor, 80 | use_gpu : bool, 81 | with_quantize_dynamic: bool): 82 | with_quantize_dynamic = False 83 | onmt_trans = base_model.get_onmt_translator(cfg, use_gpu, with_quantize_dynamic) 84 | 85 | onmt_trans = PredictWithONMT(cfg, onmt_trans) 86 | onmt_results = [] 87 | with open("trans_perf.txt", "w") as of: 88 | with Timer() as onmt_time: 89 | for sent in sents: 90 | onmt_result = onmt_trans.trans(sent)[0]['result'] 91 | print(f"turbo decoder : {global_timer.turbo_timer}, torch decoder: {global_timer.torch_timer}") 92 | of.write(f"{len(sent)}, {global_timer.turbo_timer}, {global_timer.torch_timer}\n") 93 | global_timer.turbo_timer = 0. 94 | global_timer.torch_timer = 0. 95 | onmt_results.append(onmt_result) 96 | print(f"onmt time consume:{onmt_time.elapsed}") 97 | return onmt_results 98 | 99 | 100 | if __name__ == "__main__": 101 | args = docopt.docopt(__doc__) 102 | kwargs = { 103 | 'use_gpu': bool(args['--use_gpu']), 104 | } 105 | 106 | if args['--use_gpu'] == True: 107 | use_gpu = True 108 | else: 109 | use_gpu = False 110 | 111 | sents = read_from_file("./sents_cn_seg_500.txt") 112 | sents = list(sents) 113 | sents = sents[0:100] 114 | for item in sents: 115 | print(len(item), item) 116 | config_file = './model/cn2en_config.yml' 117 | cfg = token_process_tools.TokenProcessor(config_file) 118 | 119 | test_onmt(cfg, use_gpu, with_quantize_dynamic) 120 | 121 | -------------------------------------------------------------------------------- /token_process_tools.py: -------------------------------------------------------------------------------- 1 | import codecs 2 | import os 3 | import sys 4 | import re 5 | 6 | import aiohttp 7 | import aiohttp.web 8 | import yaml 9 | from subword_nmt.apply_bpe import BPE 10 | import sacremoses 11 | from zhconv import convert 12 | from subEntity_new import E2V 13 | from remove_adjacent_duplicate import remove_ngram 14 | 15 | 16 | def slang_dict(dict_path): 17 | translate_dict = {} 18 | with open(dict_path) as slang: 19 | for line in slang: 20 | line = line.strip().split('\t') 21 | assert len(line) == 2 22 | translate_dict[line[0]] = line[1] 23 | return translate_dict 24 | 25 | 26 | class TokenProcessor(object): 27 | def __init__(self, config_file): 28 | with open(config_file) as f: 29 | self.__dict__.update(yaml.safe_load(f)) 30 | assert self.type in {"cn2en", "en2cn"} 31 | codes = codecs.open(self.codes_file, encoding='utf-8') 32 | cur_path = os.path.dirname(os.path.realpath(__file__)) 33 | self.tokenizer = BPE(codes) 34 | 35 | if self.type == "en2cn": 36 | # pre_process: normalize, tokenize, subEntity,to_lower,bpe 37 | # post_process: delbpe,remove_space 38 | self.en_tokenizer = os.path.join(cur_path, self.en_tokenizer) 39 | self.en_normalize_punctuation = sacremoses.MosesPunctNormalizer( 40 | lang="en") 41 | self.en_tokenizer = sacremoses.MosesTokenizer( 42 | lang='en', custom_nonbreaking_prefixes_file=self.en_tokenizer) 43 | elif self.type == "cn2en": 44 | # pre_process: tokenize, bpe 45 | # post_process: delbpe,detruecase,detokenize 46 | self.detruecase = sacremoses.MosesDetruecaser() 47 | self.detokenize = sacremoses.MosesDetokenizer(lang='en') 48 | self.client = aiohttp.ClientSession( 49 | timeout=aiohttp.ClientTimeout(total=3600), 50 | connector=aiohttp.TCPConnector(limit=sys.maxsize, 51 | limit_per_host=sys.maxsize)) 52 | self.cn2en_trans_dict = slang_dict(self.trans_dict_file) 53 | self.chinese_char_pattern = re.compile(u"[\u4E00-\u9FA5]+") 54 | self.stops = re.compile(u"[.!?!?。。]+") 55 | 56 | def in_trans_dict(self, sent: str): 57 | if self.type == "cn2en": 58 | if self.stops.sub("", sent) in self.cn2en_trans_dict: 59 | return True, self.cn2en_trans_dict[self.stops.sub("", sent)] 60 | elif not self.chinese_char_pattern.search(sent): 61 | return True, sent 62 | return False, sent 63 | 64 | async def preprocess(self, sent: str): 65 | if self.type == "cn2en": 66 | sent = convert(sent, "zh-cn") 67 | if self.stops.sub("", sent) in self.cn2en_trans_dict or \ 68 | not self.chinese_char_pattern.search(sent): 69 | return sent 70 | 71 | async with self.client.post(self.tokenize_url, 72 | json={ 73 | 'q': sent, 74 | "mode": self.tokenize_mode 75 | }) as rsp: 76 | rsp = await rsp.json() 77 | sent = " ".join(rsp['words']) 78 | sent = remove_ngram(sent, min_n_gram=2, max_n_gram=4) 79 | sent = self.tokenizer.segment(sent) 80 | elif self.type == "en2cn": 81 | sent = self.en_normalize_punctuation.normalize(sent) 82 | sent = self.en_tokenizer.tokenize(sent, return_str=True) 83 | tok = E2V(sent) 84 | tok = tok.lower() 85 | tok = remove_ngram(tok, min_n_gram=2, max_n_gram=4) 86 | sent = self.tokenizer.segment(tok) 87 | else: 88 | raise Exception("This type({}) is not support.".format(self.type)) 89 | return sent 90 | 91 | def post_process(self, sent: str): 92 | if self.type == "cn2en": 93 | delbpe = sent.replace("@@ ", "") 94 | detruecase = self.detruecase.detruecase(delbpe) 95 | tok_out = " ".join(detruecase) 96 | remove_dup = remove_ngram(tok_out, min_n_gram=2, max_n_gram=4) 97 | detruecase = remove_dup.split() 98 | sent = self.detokenize.detokenize(detruecase, return_str=True) 99 | elif self.type == "en2cn": 100 | delbpe = sent.replace("@@ ", "") 101 | tok_out = " ".join(delbpe) 102 | remove_dup = remove_ngram(tok_out, min_n_gram=2, max_n_gram=4) 103 | delbpe = remove_dup.split() 104 | sent = "".join(delbpe) 105 | return sent 106 | --------------------------------------------------------------------------------