This repository contains data for the paper:
Demszky, D., Liu, J., Mancenido, Z., Cohen, J., Hill, H., Jurafsky, D., & Hashimoto, T. (2021). Measuring Conversational Uptake: A Case Study on Student-Teacher Interactions. In Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics (ACL).
@inproceedings{demszky2021measuring,
title={{Measuring Conversational Uptake: A Case Study on Student-Teacher Interactions}},
author={Demszky, Dorottya and Liu, Jing and Mancenido, Zid and Cohen, Julie and Hill, Heather and Jurafsky, Dan and Hashimoto, Tatsunori},
booktitle = {Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics (ACL)},
year={2021}
}
The annotated dataset contains a sample of 2246 exchanges extracted from a dataset of anonymized 4-5th grade US elementary math classroom transcripts collected by the National Center for Teacher Effectiveness (NCTE) in New England schools between 2010-2013. These exchanges are turns by students (with at least 5 words), followed by teacher turns in a classroom conversation.
The exchanges are annotated by thirteen experts in math instruction (former and current math teachers and trained raters for classroom observation protocols). The coding instrument can be viewed here.
Each exchange is coded for three items:
student_on_task: Whether the student utterance is on task (related to math). This is a binary variable: either 0 (off task) or 1 (on task).teacher_on_task: Whether the teacher utterance is on task (related to math). This is a binary variable: either 0 (off task) or 1 (on task).uptake: Degree of uptake, or in other words, the extent to which the teacher demonstrates that they have heard the student by building on their contribution. This could take values 0 (low), 1 (mid), 2 (high).
The data is in the comma-separated file data/uptake_dataset.csv.
The file includes the following columns:
obs_id: Observation ID, mappable to unique transcripts in the NCTE dataset.exchange_idx: ID of the exchange within the transcript.student_text: Student utterance.teacher_text: Teacher utterance (following the utterance instudent_text).student_on_task: Average rating forstudent_on_taskacross the three raters.student_on_task_majority: The majority rating forstudent_on_taskacross the three raters.student_on_task_num_agree: Number of raters who agree on thestudent_on_taskcode.student_on_task_zscore: Average rating forstudent_on_task, after z-scoring the ratings for each rater.teacher_on_task: Average rating forteacher_on_taskacross the three raters.teacher_on_task_majority: The majority rating forteacher_on_taskacross the three raters.teacher_on_task_num_agree: Number of raters who agree on theteacher_on_taskcode.teacher_on_task_zscore: Average rating forteacher_on_task, after z-scoring the ratings for each rater.uptake: Average rating foruptakeacross the three raters.uptake_majority: The majority rating foruptakeacross the three raters. Value is None if there is no majority label (no agreement between any of the raters).uptake_num_agree: Number of raters who agree on theuptakecode.uptake_zscore: Average rating foruptake, after z-scoring the ratings for each rater. We use this item for our main evaluations.
Each example can be uniquely identified with the combination of the obs_id and exchange_idx columns.
The uptake model is available on Huggingface for download: https://huggingface.co/stanford-nlpxed/uptake-model
Please follow the following steps to run inference with the pre-trained model:
- Create virtual environment:
python3 -m venv venv - Activate virtual environment:
source venv/bin/activate - Install requirements
$ pip3 install -r requirements.txt. Currently the Pytorch version is for a CPU, so if you're running this on a GPU, you'll probably want to update the Pytorch (and maybe transformer) installation so that it works on a GPU. - Download and unzip the model checkpoint -- see above.
- Put all your data into a single csv file. There should be a column indicating the utterance from speaker A and the utterance from speaker B, and the model will predict to what extent speaker B's utterance takes up speaker A's utterance. See the
data/uptake_annotations.csvfile for an example, where speaker A =student_textand speaker B =teacher_text. - You can inference like this:
$ python3 run_inference.py --data_file data/uptake_data.csv --speakerA student_text --speakerB teacher_text --output_col uptake_predictions --output predictions/uptake_data_predictions.csv
Notes
- Make sure there are no empty string or NaNs in your data.
- The uptake model will only predict scores for utterance pairs where the first utterance is at least 5 tokens long, ignoring punctuation.