| <!--- | |
| Copyright 2021 The HuggingFace Team. All rights reserved. | |
| Licensed under the Apache License, Version 2.0 (the "License"); | |
| you may not use this file except in compliance with the License. | |
| You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| --> | |
| # Question answering example | |
| This folder contains the `run_qa.py` script, demonstrating *question answering* with the 🤗 Transformers library. | |
| For straightforward use-cases you may be able to use this script without modification, although we have also | |
| included comments in the code to indicate areas that you may need to adapt to your own projects. | |
| ### Usage notes | |
| Note that when contexts are long they may be split into multiple training cases, not all of which may contain | |
| the answer span. | |
| As-is, the example script will train on SQuAD or any other question-answering dataset formatted the same way, and can handle user | |
| inputs as well. | |
| ### Multi-GPU and TPU usage | |
| By default, the script uses a `MirroredStrategy` and will use multiple GPUs effectively if they are available. TPUs | |
| can also be used by passing the name of the TPU resource with the `--tpu` argument. There are some issues surrounding | |
| these strategies and our models right now, which are most likely to appear in the evaluation/prediction steps. We're | |
| actively working on better support for multi-GPU and TPU training in TF, but if you encounter problems a quick | |
| workaround is to train in the multi-GPU or TPU context and then perform predictions outside of it. | |
| ### Memory usage and data loading | |
| One thing to note is that all data is loaded into memory in this script. Most question answering datasets are small | |
| enough that this is not an issue, but if you have a very large dataset you will need to modify the script to handle | |
| data streaming. This is particularly challenging for TPUs, given the stricter requirements and the sheer volume of data | |
| required to keep them fed. A full explanation of all the possible pitfalls is a bit beyond this example script and | |
| README, but for more information you can see the 'Input Datasets' section of | |
| [this document](https://www.tensorflow.org/guide/tpu). | |
| ### Example command | |
| ```bash | |
| python run_qa.py \ | |
| --model_name_or_path distilbert/distilbert-base-cased \ | |
| --output_dir output \ | |
| --dataset_name squad \ | |
| --do_train \ | |
| --do_eval | |
| ``` | |