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', '.' ])
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))
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' ])
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]' ])
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' ])