Пример #1
0
  def test_create_tfexample_fn_passage_answer_wide_train(self):
    creator_fn = tf_io.CreateTFExampleFn(
        is_training=True,
        max_question_length=64,
        max_seq_length=512,
        doc_stride=128,
        include_unknowns=-1.0,
        tokenizer=make_tokenizer())
    errors = []
    results: List[tf.train.Example] = list(
        creator_fn.process(_ENTRY_PASSAGE_ANSWER, errors=errors))
    self.assertEmpty(errors)

    _print_debug_info(results, creator_fn)

    self.assertLen(results, 1)
    self.assertCreateTfexampleFnResult(
        entry=_ENTRY_PASSAGE_ANSWER,
        creator_fn=creator_fn,
        result=results[0],
        result_index=0,
        expected_language=data.Language.ENGLISH,
        expected_input_ids_length=512,
        expected_question_ids_length=38,
        expected_content_pieces=[
            '[CLS]', '[Q]', 'S', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g', ' ',
            'w', 'i', 't', 'h', 'o', 'u', 't', ' ', 'a', ' ', 'm', 'i', 'n',
            'i', 'm', 'a', 'l', ' ', 'a', 'n', 's', 'w', 'e', 'r', '?', '[SEP]',
            '\ue006', ' ', 'T', 'h', 'e', ' ', 'z', 'e', 'b', 'r', 'a', ' ',
            'f', 'i', 'n', 'c', 'h', ' ', 'i', 's', ' ', 't', 'h', 'e', ' ',
            'm', 'o', 's', 't', ' ', 'c', 'o', 'm', 'm', 'o', 'n', ' ', 'e',
            's', 't', 'r', 'i', 'l', 'd', 'i', 'd', ' ', 'f', 'i', 'n', 'c',
            'h', '.', ' ', '\ue007', ' ', 'T', 'h', 'e', ' ', 'b', 'o', 'd',
            'y', ' ', 't', 'e', 'm', 'p', 'e', 'r', 'a', 't', 'u', 'r', 'e',
            ' ', 'm', 'a', 'y', ' ', 'v', 'a', 'r', 'y', ' ', 'f', 'r', 'o',
            'm', ' ', '3', '8', ' ', 't', 'o', ' ', '4', '4', ' ', '°', 'C',
            '.', ' ', '\ue008', ' ', 'N', 'e', 's', 't', ' ', 'p', 'r', 'e',
            'd', 'a', 't', 'o', 'r', 's', ' ', 'i', 'n', 'c', 'l', 'u', 'd',
            'e', ' ', 't', 'h', 'e', ' ', 't', 'i', 'g', 'e', 'r', ' ', 's',
            'n', 'a', 'k', 'e', '.', '[SEP]'
        ],
        expected_answer_type=data.AnswerType.PASSAGE,
        expected_answer_span_start=94,
        expected_answer_span_end=140,
        expected_answer_span_pieces=[
            'T', 'h', 'e', ' ', 'b', 'o', 'd', 'y', ' ', 't', 'e', 'm', 'p',
            'e', 'r', 'a', 't', 'u', 'r', 'e', ' ', 'm', 'a', 'y', ' ', 'v',
            'a', 'r', 'y', ' ', 'f', 'r', 'o', 'm', ' ', '3', '8', ' ', 't',
            'o', ' ', '4', '4', ' ', '°', 'C', '.'
        ])
Пример #2
0
def main(_):
    examples_processed = 0
    num_examples_with_correct_context = 0
    num_errors = 0
    tf_examples = []
    sample_ratio = {}

    # Print the first 25 examples to let user know what's going on.
    num_examples_to_print = 25

    if FLAGS.oversample and FLAGS.is_training:
        lang_count = get_lang_counts(FLAGS.input_jsonl)
        max_count = max(count for lang, count in lang_count.items())
        for lang, curr_count in lang_count.items():
            sample_ratio[lang] = int(
                min(FLAGS.max_oversample_ratio, max_count / curr_count))

    splitter = char_splitter.CharacterSplitter()
    creator_fn = tf_io.CreateTFExampleFn(
        is_training=FLAGS.is_training,
        max_question_length=FLAGS.max_question_length,
        max_seq_length=FLAGS.max_seq_length,
        doc_stride=FLAGS.doc_stride,
        include_unknowns=FLAGS.include_unknowns,
        tokenizer=splitter)
    tf.logging.info("Reading examples from glob: %s", FLAGS.input_jsonl)
    for filename, line_no, entry, debug_info in tf_io.read_entries(
            FLAGS.input_jsonl,
            tokenizer=splitter,
            max_passages=FLAGS.max_passages,
            max_position=FLAGS.max_position,
            fail_on_invalid=FLAGS.fail_on_invalid):
        errors = []
        for tf_example in creator_fn.process(entry, errors, debug_info):
            if FLAGS.oversample:
                tf_examples.extend([tf_example] *
                                   sample_ratio[entry["language"]])
            else:
                tf_examples.append(tf_example)

        if errors or examples_processed < num_examples_to_print:
            debug.log_debug_info(filename, line_no, entry, debug_info,
                                 splitter.id_to_string)

        if examples_processed % 10 == 0:
            tf.logging.info("Examples processed: %d", examples_processed)
        examples_processed += 1

        if errors:
            tf.logging.info(
                "Encountered errors while creating {} example ({}:{}): {}".
                format(entry["language"], filename, line_no,
                       "; ".join(errors)))
            if FLAGS.fail_on_invalid:
                raise ValueError(
                    "Encountered errors while creating example ({}:{}): {}".
                    format(filename, line_no, "; ".join(errors)))
            num_errors += 1
            if num_errors % 10 == 0:
                tf.logging.info("Errors so far: %d", num_errors)

        if entry["has_correct_context"]:
            num_examples_with_correct_context += 1
        if FLAGS.max_examples > 0 and examples_processed >= FLAGS.max_examples:
            break
    tf.logging.info("Examples with correct context retained: %d of %d",
                    num_examples_with_correct_context, examples_processed)

    # Even though the input is shuffled, we need to do this in case we're
    # oversampling.
    random.shuffle(tf_examples)
    num_features = len(tf_examples)
    tf.logging.info("Number of total features %d", num_features)
    tf.logging.info("'Features' are windowed slices of a document paired with "
                    "a supervision label.")

    with tf.python_io.TFRecordWriter(FLAGS.output_tfrecord) as writer:
        for tf_example in tf_examples:
            writer.write(tf_example.SerializeToString())
    if FLAGS.record_count_file:
        with tf.gfile.Open(FLAGS.record_count_file, "w") as writer:
            writer.write(str(num_features))
Пример #3
0
  def test_create_tfexample_fn_min_answer_narrow_train(self):
    creator_fn = tf_io.CreateTFExampleFn(
        is_training=True,
        max_question_length=64,
        max_seq_length=256,
        doc_stride=64,
        include_unknowns=-1.0,
        tokenizer=make_tokenizer())
    entry = _ENTRY_MIN_ANSWER
    errors = []
    results: List[tf.train.Example] = list(
        creator_fn.process(entry, errors=errors))
    self.assertEmpty(errors)

    self.assertLen(results, 3)
    self.assertCreateTfexampleFnResult(
        entry=_ENTRY_MIN_ANSWER,
        creator_fn=creator_fn,
        result=results[0],
        result_index=5,
        expected_language=data.Language.ENGLISH,
        expected_input_ids_length=256,
        expected_question_ids_length=45,
        expected_content_pieces=[
            '[CLS]', '[Q]', 'W', 'h', 'e', 'r', 'e', ' ', 'a', 'r', 'e', ' ',
            'a', ' ', 'z', 'e', 'b', 'r', 'a', ' ', 'f', 'i', 'n', 'c', 'h',
            "'", 's', ' ', 's', 't', 'r', 'i', 'p', 'e', 's', ' ', 'l', 'o',
            'c', 'a', 't', 'e', 'd', '?', '[SEP]', ' ', 'L', 'o', 'u', 'i', 's',
            ' ', 'J', 'e', 'a', 'n', ' ', 'P', 'i', 'e', 'r', 'r', 'e', ' ',
            'V', 'i', 'e', 'i', 'l', 'l', 'o', 't', ' ', 'i', 'n', ' ', 'h',
            'i', 's', ' ', 'N', 'o', 'u', 'v', 'e', 'a', 'u', ' ', 'D', 'i',
            'c', 't', 'i', 'o', 'n', 'n', 'a', 'i', 'r', 'e', ' ', 'd', "'",
            'H', 'i', 's', 't', 'o', 'i', 'r', 'e', ' ', 'N', 'a', 't', 'u',
            'r', 'e', 'l', 'l', 'e', '.', ' ', '\ue009', ' ', 'M', 'o', 'r',
            'p', 'h', 'o', 'l', 'o', 'g', 'i', 'c', 'a', 'l', ' ', 'd', 'i',
            'f', 'f', 'e', 'r', 'e', 'n', 'c', 'e', 's', ' ', 'b', 'e', 't',
            'w', 'e', 'e', 'n', ' ', 't', 'h', 'e', ' ', 's', 'u', 'b', 's',
            'p', 'e', 'c', 'i', 'e', 's', '.', ' ', 'M', 'a', 'l', 'e', 's',
            ' ', 'd', 'o', ' ', 'n', 'o', 't', ' ', 'h', 'a', 'v', 'e', ' ',
            't', 'h', 'e', ' ', 'f', 'i', 'n', 'e', ' ', 'b', 'a', 'r', 'r',
            'i', 'n', 'g', ' ', 'f', 'o', 'u', 'n', 'd', ' ', 'o', 'n', ' ',
            't', 'h', 'e', ' ', 't', 'h', 'r', 'o', 'a', 't', ' ', 'a', 'n',
            'd', ' ', 'u', 'p', 'p', 'e', 'r', ' ', 'b', 'r', 'e', 'a', 's',
            't', '.', ' ', '\ue010', ' ', 'S', 'y', 'm', 'm', 'e', '[SEP]'
        ],
        expected_answer_type=data.AnswerType.MINIMAL,
        expected_answer_span_start=223,
        expected_answer_span_end=245,
        expected_answer_span_pieces=[
            't', 'h', 'r', 'o', 'a', 't', ' ', 'a', 'n', 'd', ' ', 'u', 'p',
            'p', 'e', 'r', ' ', 'b', 'r', 'e', 'a', 's', 't'
        ])
    self.assertCreateTfexampleFnResult(
        entry=_ENTRY_MIN_ANSWER,
        creator_fn=creator_fn,
        result=results[1],
        result_index=6,
        expected_language=data.Language.ENGLISH,
        expected_input_ids_length=256,
        expected_question_ids_length=45,
        expected_content_pieces=[
            '[CLS]', '[Q]', 'W', 'h', 'e', 'r', 'e', ' ', 'a', 'r', 'e', ' ',
            'a', ' ', 'z', 'e', 'b', 'r', 'a', ' ', 'f', 'i', 'n', 'c', 'h',
            "'", 's', ' ', 's', 't', 'r', 'i', 'p', 'e', 's', ' ', 'l', 'o',
            'c', 'a', 't', 'e', 'd', '?', '[SEP]', 'r', 'e', ' ', 'N', 'a', 't',
            'u', 'r', 'e', 'l', 'l', 'e', '.', ' ', '\ue009', ' ', 'M', 'o',
            'r', 'p', 'h', 'o', 'l', 'o', 'g', 'i', 'c', 'a', 'l', ' ', 'd',
            'i', 'f', 'f', 'e', 'r', 'e', 'n', 'c', 'e', 's', ' ', 'b', 'e',
            't', 'w', 'e', 'e', 'n', ' ', 't', 'h', 'e', ' ', 's', 'u', 'b',
            's', 'p', 'e', 'c', 'i', 'e', 's', '.', ' ', 'M', 'a', 'l', 'e',
            's', ' ', 'd', 'o', ' ', 'n', 'o', 't', ' ', 'h', 'a', 'v', 'e',
            ' ', 't', 'h', 'e', ' ', 'f', 'i', 'n', 'e', ' ', 'b', 'a', 'r',
            'r', 'i', 'n', 'g', ' ', 'f', 'o', 'u', 'n', 'd', ' ', 'o', 'n',
            ' ', 't', 'h', 'e', ' ', 't', 'h', 'r', 'o', 'a', 't', ' ', 'a',
            'n', 'd', ' ', 'u', 'p', 'p', 'e', 'r', ' ', 'b', 'r', 'e', 'a',
            's', 't', '.', ' ', '\ue010', ' ', 'S', 'y', 'm', 'm', 'e', 't',
            'r', 'y', ' ', 'o', 'f', ' ', 'b', 'o', 't', 'h', ' ', 'p', 'l',
            'u', 'm', 'a', 'g', 'e', ',', ' ', 'l', 'i', 'k', 'e', ' ', 'c',
            'h', 'e', 's', 't', ' ', 'b', 'a', 'n', 'd', 's', ',', ' ', 'a',
            'n', 'd', ' ', 'a', 'r', 't', 'i', 'f', 'i', 'c', 'i', 'a', 'l',
            ' ', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', ',', ' ', '[SEP]'
        ],
        expected_answer_type=data.AnswerType.MINIMAL,
        expected_answer_span_start=159,
        expected_answer_span_end=181,
        expected_answer_span_pieces=[
            't', 'h', 'r', 'o', 'a', 't', ' ', 'a', 'n', 'd', ' ', 'u', 'p',
            'p', 'e', 'r', ' ', 'b', 'r', 'e', 'a', 's', 't'
        ])
    self.assertCreateTfexampleFnResult(
        entry=_ENTRY_MIN_ANSWER,
        creator_fn=creator_fn,
        result=results[2],
        result_index=7,
        expected_language=data.Language.ENGLISH,
        expected_input_ids_length=256,
        expected_question_ids_length=45,
        expected_content_pieces=[
            '[CLS]', '[Q]', 'W', 'h', 'e', 'r', 'e', ' ', 'a', 'r', 'e', ' ',
            'a', ' ', 'z', 'e', 'b', 'r', 'a', ' ', 'f', 'i', 'n', 'c', 'h',
            "'", 's', ' ', 's', 't', 'r', 'i', 'p', 'e', 's', ' ', 'l', 'o',
            'c', 'a', 't', 'e', 'd', '?', '[SEP]', '.', ' ', 'M', 'a', 'l', 'e',
            's', ' ', 'd', 'o', ' ', 'n', 'o', 't', ' ', 'h', 'a', 'v', 'e',
            ' ', 't', 'h', 'e', ' ', 'f', 'i', 'n', 'e', ' ', 'b', 'a', 'r',
            'r', 'i', 'n', 'g', ' ', 'f', 'o', 'u', 'n', 'd', ' ', 'o', 'n',
            ' ', 't', 'h', 'e', ' ', 't', 'h', 'r', 'o', 'a', 't', ' ', 'a',
            'n', 'd', ' ', 'u', 'p', 'p', 'e', 'r', ' ', 'b', 'r', 'e', 'a',
            's', 't', '.', ' ', '\ue010', ' ', 'S', 'y', 'm', 'm', 'e', 't',
            'r', 'y', ' ', 'o', 'f', ' ', 'b', 'o', 't', 'h', ' ', 'p', 'l',
            'u', 'm', 'a', 'g', 'e', ',', ' ', 'l', 'i', 'k', 'e', ' ', 'c',
            'h', 'e', 's', 't', ' ', 'b', 'a', 'n', 'd', 's', ',', ' ', 'a',
            'n', 'd', ' ', 'a', 'r', 't', 'i', 'f', 'i', 'c', 'i', 'a', 'l',
            ' ', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', ',', ' ', 'l', 'i',
            'k', 'e', ' ', 'l', 'e', 'g', ' ', 'b', 'a', 'n', 'd', 's', ',',
            ' ', 'a', 'r', 'e', ' ', 'p', 'r', 'e', 'f', 'e', 'r', 'r', 'e',
            'd', ' ', 'b', 'y', ' ', 't', 'h', 'e', ' ', 'f', 'e', 'm', 'a',
            'l', 'e', '.', ' ', '\ue011', ' ', 'N', 'e', 's', 't', ' ', 'p',
            'r', 'e', 'd', 'a', 't', 'o', 'r', 's', ' ', 'o', 'f', '[SEP]'
        ],
        expected_answer_type=data.AnswerType.MINIMAL,
        expected_answer_span_start=95,
        expected_answer_span_end=117,
        expected_answer_span_pieces=[
            't', 'h', 'r', 'o', 'a', 't', ' ', 'a', 'n', 'd', ' ', 'u', 'p',
            'p', 'e', 'r', ' ', 'b', 'r', 'e', 'a', 's', 't'
        ])
Пример #4
0
  def test_create_tfexample_fn_min_answer_narrow_predict(self):
    creator_fn = tf_io.CreateTFExampleFn(
        is_training=False,
        max_question_length=64,
        max_seq_length=256,
        doc_stride=64,
        include_unknowns=-1.0,
        tokenizer=make_tokenizer())
    entry = _ENTRY_MIN_ANSWER
    errors = []
    results: List[tf.train.Example] = list(
        creator_fn.process(entry, errors=errors))
    self.assertEmpty(errors)

    self.assertLen(results, 9)
    self.assertCreateTfexampleFnResult(
        entry=_ENTRY_MIN_ANSWER,
        creator_fn=creator_fn,
        result=results[0],
        result_index=0,
        expected_language=data.Language.ENGLISH,
        expected_input_ids_length=256,
        expected_question_ids_length=45,
        expected_content_pieces=[
            '[CLS]', '[Q]', 'W', 'h', 'e', 'r', 'e', ' ', 'a', 'r', 'e', ' ',
            'a', ' ', 'z', 'e', 'b', 'r', 'a', ' ', 'f', 'i', 'n', 'c', 'h',
            "'", 's', ' ', 's', 't', 'r', 'i', 'p', 'e', 's', ' ', 'l', 'o',
            'c', 'a', 't', 'e', 'd', '?', '[SEP]', '\ue006', ' ', 'T', 'h', 'e',
            ' ', 'z', 'e', 'b', 'r', 'a', ' ', 'f', 'i', 'n', 'c', 'h', ' ',
            'i', 's', ' ', 't', 'h', 'e', ' ', 'm', 'o', 's', 't', ' ', 'c',
            'o', 'm', 'm', 'o', 'n', ' ', 'e', 's', 't', 'r', 'i', 'l', 'd',
            'i', 'd', ' ', 'f', 'i', 'n', 'c', 'h', '.', ' ', 'T', 'h', 'e',
            ' ', 'b', 'i', 'r', 'd', ' ', 'h', 'a', 's', ' ', 'b', 'e', 'e',
            'n', ' ', 'i', 'n', 't', 'r', 'o', 'd', 'u', 'c', 'e', 'd', ' ',
            't', 'o', ' ', 'P', 'u', 'e', 'r', 't', 'o', ' ', 'R', 'i', 'c',
            'o', '.', ' ', '\ue007', ' ', 'T', 'h', 'e', ' ', 'b', 'o', 'd',
            'y', ' ', 't', 'e', 'm', 'p', 'e', 'r', 'a', 't', 'u', 'r', 'e',
            ' ', '(', 'a', 's', ' ', 'm', 'e', 'a', 's', 'u', 'r', 'e', 'd',
            ' ', 'f', 'r', 'o', 'm', ' ', 't', 'h', 'e', ' ', 'c', 'l', 'o',
            'a', 'c', 'a', ')', ' ', 'o', 'f', ' ', 't', 'h', 'e', ' ', 'z',
            'e', 'b', 'r', 'a', ' ', 'f', 'i', 'n', 'c', 'h', ' ', 'm', 'a',
            'y', ' ', 'v', 'a', 'r', 'y', ' ', 'f', 'r', 'o', 'm', ' ', '3',
            '8', ' ', 't', 'o', ' ', '4', '4', ' ', '°', 'C', '.', ' ',
            '\ue008', ' ', 'T', 'h', 'e', ' ', 'z', 'e', 'b', 'r', 'a', ' ',
            '[SEP]'
        ])
    # ...Skipping assertions for results 1-7 for brevity...
    self.assertCreateTfexampleFnResult(
        entry=_ENTRY_MIN_ANSWER,
        creator_fn=creator_fn,
        result=results[8],
        result_index=8,
        expected_language=data.Language.ENGLISH,
        expected_input_ids_length=256,
        expected_question_ids_length=45,
        expected_content_pieces=[
            '[CLS]', '[Q]', 'W', 'h', 'e', 'r', 'e', ' ', 'a', 'r', 'e', ' ',
            'a', ' ', 'z', 'e', 'b', 'r', 'a', ' ', 'f', 'i', 'n', 'c', 'h',
            "'", 's', ' ', 's', 't', 'r', 'i', 'p', 'e', 's', ' ', 'l', 'o',
            'c', 'a', 't', 'e', 'd', '?', '[SEP]', 'e', 'r', ' ', 'b', 'r', 'e',
            'a', 's', 't', '.', ' ', '\ue010', ' ', 'S', 'y', 'm', 'm', 'e',
            't', 'r', 'y', ' ', 'o', 'f', ' ', 'b', 'o', 't', 'h', ' ', 'p',
            'l', 'u', 'm', 'a', 'g', 'e', ',', ' ', 'l', 'i', 'k', 'e', ' ',
            'c', 'h', 'e', 's', 't', ' ', 'b', 'a', 'n', 'd', 's', ',', ' ',
            'a', 'n', 'd', ' ', 'a', 'r', 't', 'i', 'f', 'i', 'c', 'i', 'a',
            'l', ' ', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', ',', ' ', 'l',
            'i', 'k', 'e', ' ', 'l', 'e', 'g', ' ', 'b', 'a', 'n', 'd', 's',
            ',', ' ', 'a', 'r', 'e', ' ', 'p', 'r', 'e', 'f', 'e', 'r', 'r',
            'e', 'd', ' ', 'b', 'y', ' ', 't', 'h', 'e', ' ', 'f', 'e', 'm',
            'a', 'l', 'e', '.', ' ', '\ue011', ' ', 'N', 'e', 's', 't', ' ',
            'p', 'r', 'e', 'd', 'a', 't', 'o', 'r', 's', ' ', 'o', 'f', ' ',
            't', 'h', 'e', ' ', 'z', 'e', 'b', 'r', 'a', ' ', 'f', 'i', 'n',
            'c', 'h', ' ', 'i', 'n', 'c', 'l', 'u', 'd', 'e', ' ', 't', 'h',
            'e', ' ', 't', 'i', 'g', 'e', 'r', ' ', 's', 'n', 'a', 'k', 'e',
            '.', '[SEP]'
        ])
Пример #5
0
  def test_create_tfexample_fn_min_answer_wide_train(self):
    creator_fn = tf_io.CreateTFExampleFn(
        is_training=True,
        max_question_length=64,
        max_seq_length=1024,
        doc_stride=128,
        include_unknowns=-1.0,
        tokenizer=make_tokenizer())
    errors = []
    results: List[tf.train.Example] = list(
        creator_fn.process(_ENTRY_MIN_ANSWER, errors=errors))
    self.assertEmpty(errors)

    self.assertLen(results, 1)
    self.assertCreateTfexampleFnResult(
        entry=_ENTRY_MIN_ANSWER,
        creator_fn=creator_fn,
        result=results[0],
        result_index=0,
        expected_language=data.Language.ENGLISH,
        expected_input_ids_length=1024,
        expected_question_ids_length=45,
        expected_content_pieces=[
            '[CLS]', '[Q]', 'W', 'h', 'e', 'r', 'e', ' ', 'a', 'r', 'e', ' ',
            'a', ' ', 'z', 'e', 'b', 'r', 'a', ' ', 'f', 'i', 'n', 'c', 'h',
            "'", 's', ' ', 's', 't', 'r', 'i', 'p', 'e', 's', ' ', 'l', 'o',
            'c', 'a', 't', 'e', 'd', '?', '[SEP]', '\ue006', ' ', 'T', 'h', 'e',
            ' ', 'z', 'e', 'b', 'r', 'a', ' ', 'f', 'i', 'n', 'c', 'h', ' ',
            'i', 's', ' ', 't', 'h', 'e', ' ', 'm', 'o', 's', 't', ' ', 'c',
            'o', 'm', 'm', 'o', 'n', ' ', 'e', 's', 't', 'r', 'i', 'l', 'd',
            'i', 'd', ' ', 'f', 'i', 'n', 'c', 'h', '.', ' ', 'T', 'h', 'e',
            ' ', 'b', 'i', 'r', 'd', ' ', 'h', 'a', 's', ' ', 'b', 'e', 'e',
            'n', ' ', 'i', 'n', 't', 'r', 'o', 'd', 'u', 'c', 'e', 'd', ' ',
            't', 'o', ' ', 'P', 'u', 'e', 'r', 't', 'o', ' ', 'R', 'i', 'c',
            'o', '.', ' ', '\ue007', ' ', 'T', 'h', 'e', ' ', 'b', 'o', 'd',
            'y', ' ', 't', 'e', 'm', 'p', 'e', 'r', 'a', 't', 'u', 'r', 'e',
            ' ', '(', 'a', 's', ' ', 'm', 'e', 'a', 's', 'u', 'r', 'e', 'd',
            ' ', 'f', 'r', 'o', 'm', ' ', 't', 'h', 'e', ' ', 'c', 'l', 'o',
            'a', 'c', 'a', ')', ' ', 'o', 'f', ' ', 't', 'h', 'e', ' ', 'z',
            'e', 'b', 'r', 'a', ' ', 'f', 'i', 'n', 'c', 'h', ' ', 'm', 'a',
            'y', ' ', 'v', 'a', 'r', 'y', ' ', 'f', 'r', 'o', 'm', ' ', '3',
            '8', ' ', 't', 'o', ' ', '4', '4', ' ', '°', 'C', '.', ' ',
            '\ue008', ' ', 'T', 'h', 'e', ' ', 'z', 'e', 'b', 'r', 'a', ' ',
            'f', 'i', 'n', 'c', 'h', ' ', 'w', 'a', 's', ' ', 'f', 'i', 'r',
            's', 't', ' ', 'c', 'o', 'l', 'l', 'e', 'c', 't', 'e', 'd', ' ',
            'i', 'n', ' ', '1', '8', '0', '1', ' ', 'd', 'u', 'r', 'i', 'n',
            'g', ' ', 'N', 'i', 'c', 'o', 'l', 'a', 's', ' ', 'B', 'a', 'u',
            'd', 'i', 'n', "'", 's', ' ', 'e', 'x', 'p', 'e', 'd', 'i', 't',
            'i', 'o', 'n', ' ', 't', 'o', ' ', 'A', 'u', 's', 't', 'r', 'a',
            'l', 'i', 'a', '.', ' ', 'I', 't', ' ', 'w', 'a', 's', ' ', 'd',
            'e', 's', 'c', 'r', 'i', 'b', 'e', 'd', ' ', 'i', 'n', ' ', '1',
            '8', '1', '7', ' ', 'b', 'y', ' ', 'L', 'o', 'u', 'i', 's', ' ',
            'J', 'e', 'a', 'n', ' ', 'P', 'i', 'e', 'r', 'r', 'e', ' ', 'V',
            'i', 'e', 'i', 'l', 'l', 'o', 't', ' ', 'i', 'n', ' ', 'h', 'i',
            's', ' ', 'N', 'o', 'u', 'v', 'e', 'a', 'u', ' ', 'D', 'i', 'c',
            't', 'i', 'o', 'n', 'n', 'a', 'i', 'r', 'e', ' ', 'd', "'", 'H',
            'i', 's', 't', 'o', 'i', 'r', 'e', ' ', 'N', 'a', 't', 'u', 'r',
            'e', 'l', 'l', 'e', '.', ' ', '\ue009', ' ', 'M', 'o', 'r', 'p',
            'h', 'o', 'l', 'o', 'g', 'i', 'c', 'a', 'l', ' ', 'd', 'i', 'f',
            'f', 'e', 'r', 'e', 'n', 'c', 'e', 's', ' ', 'b', 'e', 't', 'w',
            'e', 'e', 'n', ' ', 't', 'h', 'e', ' ', 's', 'u', 'b', 's', 'p',
            'e', 'c', 'i', 'e', 's', '.', ' ', 'M', 'a', 'l', 'e', 's', ' ',
            'd', 'o', ' ', 'n', 'o', 't', ' ', 'h', 'a', 'v', 'e', ' ', 't',
            'h', 'e', ' ', 'f', 'i', 'n', 'e', ' ', 'b', 'a', 'r', 'r', 'i',
            'n', 'g', ' ', 'f', 'o', 'u', 'n', 'd', ' ', 'o', 'n', ' ', 't',
            'h', 'e', ' ', 't', 'h', 'r', 'o', 'a', 't', ' ', 'a', 'n', 'd',
            ' ', 'u', 'p', 'p', 'e', 'r', ' ', 'b', 'r', 'e', 'a', 's', 't',
            '.', ' ', '\ue010', ' ', 'S', 'y', 'm', 'm', 'e', 't', 'r', 'y',
            ' ', 'o', 'f', ' ', 'b', 'o', 't', 'h', ' ', 'p', 'l', 'u', 'm',
            'a', 'g', 'e', ',', ' ', 'l', 'i', 'k', 'e', ' ', 'c', 'h', 'e',
            's', 't', ' ', 'b', 'a', 'n', 'd', 's', ',', ' ', 'a', 'n', 'd',
            ' ', 'a', 'r', 't', 'i', 'f', 'i', 'c', 'i', 'a', 'l', ' ', 'f',
            'e', 'a', 't', 'u', 'r', 'e', 's', ',', ' ', 'l', 'i', 'k', 'e',
            ' ', 'l', 'e', 'g', ' ', 'b', 'a', 'n', 'd', 's', ',', ' ', 'a',
            'r', 'e', ' ', 'p', 'r', 'e', 'f', 'e', 'r', 'r', 'e', 'd', ' ',
            'b', 'y', ' ', 't', 'h', 'e', ' ', 'f', 'e', 'm', 'a', 'l', 'e',
            '.', ' ', '\ue011', ' ', 'N', 'e', 's', 't', ' ', 'p', 'r', 'e',
            'd', 'a', 't', 'o', 'r', 's', ' ', 'o', 'f', ' ', 't', 'h', 'e',
            ' ', 'z', 'e', 'b', 'r', 'a', ' ', 'f', 'i', 'n', 'c', 'h', ' ',
            'i', 'n', 'c', 'l', 'u', 'd', 'e', ' ', 't', 'h', 'e', ' ', 't',
            'i', 'g', 'e', 'r', ' ', 's', 'n', 'a', 'k', 'e', '.', '[SEP]'
        ],
        expected_answer_type=data.AnswerType.MINIMAL,
        expected_answer_span_start=543,
        expected_answer_span_end=565,
        expected_answer_span_pieces=[
            't', 'h', 'r', 'o', 'a', 't', ' ', 'a', 'n', 'd', ' ', 'u', 'p',
            'p', 'e', 'r', ' ', 'b', 'r', 'e', 'a', 's', 't'
        ])