derek-thomas's picture
derek-thomas HF staff
Sorting models for consistency
e98fdda
raw
history blame contribute delete
No virus
3.83 kB
import gradio as gr
from pathlib import Path
from supar import Parser
from spacy import displacy
from spacy.tokens import Doc, Span
import spacy
proj_dir = Path(__file__).parent
model_choices = sorted([str(model.name) for model in (proj_dir / 'models').glob('*')])
def sentence_diagram(model_name, text, progress=gr.Progress(track_tqdm=True)):
parser = Parser.load(f'./models/{model_name}')
Span.set_extension("con_tree", getter=lambda x: parser.predict([i.text for i in x], verbose=False)[0], force=True)
nlp = spacy.load('en_core_web_sm')
doc = nlp(text)
svg = displacy.render(doc, style="dep")
output_path = Path("sentence.svg")
output_path.open("w", encoding="utf-8").write(svg)
return output_path
with gr.Blocks() as demo:
with gr.Row():
gr.Markdown("""
# Purpose
Way back in 7th grade, my english teacher **Brother Hill** would always disclaim our sentence diagram lessons with:
"*you probably wont be doing these in 20 years*". A few of us being middle schoolers would love to contradict this.
Unfortunately he passed away in 2015, so I thought this would be a nice tribute.
# Instructions
1. Choose a model:
- `ptb.biaffine.dep.roberta` is slower but marginally better
- `ptb.biaffine.dep.lstm.char` is faster but marginally worse
2. Write your sentence
3. Click Run!
""")
gr.HTML("<img src='file=https://huggingface.co/spaces/derek-thomas/sentence_diagrams/resolve/main/media/bro_hill.jpg' />") # work
model_name = gr.Dropdown(choices=model_choices, label='Model', value=model_choices[0])
text_in = gr.Textbox(label='Sentence(s) to diagram',
value='You were a great teacher, and Im thankful for the impact you had in my life!')
button = gr.Button('Run!')
html_out = gr.Image()
gr.Markdown("""
# Information
##### This doesnt look like the sentences we used to do!
There are some slight differences between
[Reed-Kellogg](https://blog.ung.edu/press/classroom-grammar-an-introduction-to-the-reed-kellogg-system/)
and [Dependency Parsing](https://en.wikipedia.org/wiki/Dependency_grammar)
in both presentation and linquistic analysis as shown [here](https://en.wikipedia.org/wiki/Sentence_diagram),
but they are similar enough for me not to mind too much.
##### How did you do this?
I chose a state of the art **Dependency Parsing** [model](https://github.com/yzhangcs/parser) as of ~2 years ago.
I believe this has been [surpassed](https://paperswithcode.com/sota/dependency-parsing-on-penn-treebank)
in recent years.
Dependency Parsing was a popular task in NLP to feed to models to improve performance, but in the age of the
[transformer](https://arxiv.org/abs/1706.03762) it's rarelu used in anymore.
Then I deployed this in a [Gradio App](https://gradio.app) on a [Hugging Face Space](https://huggingface.co/spaces).
# To Brother Hlll
Thanks for being a great teacher. As an adult I appreciate even more that you invested in so many of us,
yet you didnt get to witness a lot of the results.
> One generation plants the trees, and another gets the shade.
>
> ~ [Chinese Proverb](https://rotarycluboflahainasunset.org/stories/one-generation-plants-the-trees-and-another-gets-the-shade-(chinese-proverb))
I have a lot of fond memories of you from PE, English, and Home Repair, and I wish we
could have connected before you passed away.
Thanks again,
Derek
""")
button.click(sentence_diagram,
inputs=[model_name, text_in],
outputs=html_out)
if __name__ == '__main__':
demo.queue().launch(show_error=True)