a fun thing I discovered about this model is that it doesn't label the constituent's head for you! which makes it sort of useless for what I want to use it for (swapping out constituents of a sentence at random with other constituents of the same type—you need to know the number of the head noun of an NP when you do this to retain subject/verb agreement). though I'm not sure if the model doesn't do this at all, or if it's just not exposed in the information returned from the wrapper code
oh wait, apparently with constituency parsing, you just sorta... take your best guess about what the head is. e.g. pattern: https://github.com/clips/pattern/blob/53245196139c6ef26dc9c34873dda8a16f236d23/pattern/text/tree.py#L394 even the latest edition of jurafsky's _Speech and Language Processing_ just says to use a rule-driven approach found in a paper from 1999 https://www.mitpressjournals.org/doi/abs/10.1162/089120103322753356