Describir: Exploiting Data, Task, and Model Structure for Supervision-Efficient Natural Language Processing