Interactive online version: Binder badge Google Colab badge

🪿 Han-Coref: Thai Coreference resolution by PyThaiNLP

🪿 Han-Coref เป็นงานที่พยายามสร้าง Coreference resolution ภาษาไทย โดยใช้ deep learning โดยเราใช้ fastcoref พร้อมกับการปรับแต่งตัว training ให้รองรับการเทรนภาษาไทย พร้อมกับชุดข้อมูลที่เรากกำกับ หากคุณต้องการรายละเอียดมากกว่า สามารถศึกษาเพิ่มเติมได้ที่ GitHub

GitHub: https://github.com/PyThaiNLP/han-coref

[ ]:
!pip -q install spacy fastcoref pythainlp transformers sentencepiece
  Preparing metadata (setup.py) ... done
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.4/13.4 MB 114.4 MB/s eta 0:00:00
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.1/7.1 MB 119.7 MB/s eta 0:00:00
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 474.6/474.6 kB 53.0 MB/s eta 0:00:00
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 110.5/110.5 kB 14.9 MB/s eta 0:00:00
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 212.5/212.5 kB 25.0 MB/s eta 0:00:00
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 134.3/134.3 kB 17.4 MB/s eta 0:00:00
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 90.4 MB/s eta 0:00:00
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 224.5/224.5 kB 29.0 MB/s eta 0:00:00
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.8/7.8 MB 95.1 MB/s eta 0:00:00
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 114.5/114.5 kB 14.2 MB/s eta 0:00:00
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 268.8/268.8 kB 32.1 MB/s eta 0:00:00
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 149.6/149.6 kB 19.8 MB/s eta 0:00:00
  Building wheel for fastcoref (setup.py) ... done
[ ]:
import spacy
from fastcoref import spacy_component
nlp = spacy.blank("th")
[ ]:
nlp.add_pipe(
   "fastcoref",
   config={'model_architecture': 'FCoref','model_path': 'pythainlp/han-coref-v1.0'}
)
<fastcoref.spacy_component.spacy_component.FastCorefResolver at 0x7fbd9c2b6560>
[ ]:
import random
def get2tag(tags,text,title=None):
    dic_ents = {"text":text,"ents":[],"title":title}
    _tag=[str(i) for i in list(range(len(tags)))]
    for i,tag in enumerate(tags):
        for s,e in tag:
            dic_ents["ents"].append({"start": s, "end": e, "label": _tag[i]})
    colors={i:"#"+''.join([random.choice('0123456789ABCDEF') for j in range(6)]) for i in _tag} # thank https://stackoverflow.com/a/50218895
    return dic_ents,{"colors":colors}
[ ]:
from spacy import displacy
[ ]:
text="สาธิต แจงวุ่น ภาพแคปกลุ่มไลน์ที่ปรึกษาฯ กล่าวร้าย พิธา ยัน ไม่ใช่ตัวเอง แต่เห็นด้วยว่าอภิปรายด้อยค่าบำนาญ ขรก."
doc = nlp(text)
dic_ents,colors=get2tag(doc._.coref_clusters,text)
displacy.render(dic_ents, manual=True, style="ent",options=colors, jupyter=True)
สาธิต 0 แจงวุ่น ภาพแคปกลุ่มไลน์ที่ปรึกษาฯ กล่าวร้าย พิธา ยัน ไม่ใช่ ตัวเอง 0 แต่เห็นด้วยว่าอภิปรายด้อยค่าบำนาญ ขรก.
[ ]:
text='แม่สั่งให้ลูกชายไปซื้อของ แต่เธอกลับลืมเอาตังให้ลูก'
doc = nlp(text)
dic_ents,colors=get2tag(doc._.coref_clusters,text)
displacy.render(dic_ents, manual=True, style="ent",options=colors, jupyter=True)
แม่ 0 สั่งให้ ลูกชาย 1 ไปซื้อของ แต่ เธอ 0 กลับลืมเอาตังให้ ลูก 1
[ ]:
text='แม่หมอแชมป์ เปิดใจทั้งน้ำตา เสียใจที่ลูกจากไป แต่รู้สึกภูมิใจที่ลูกเสียสละ ให้เสื้อชูชีพช่วยเพื่อนทหารรอด แต่ตัวเองเสียชีวิต'
doc = nlp(text)
dic_ents,colors=get2tag(doc._.coref_clusters,text)
displacy.render(dic_ents, manual=True, style="ent",options=colors, jupyter=True)
แม่ หมอแชมป์ 0 เปิดใจทั้งน้ำตา เสียใจที่ ลูก 0 จากไป แต่รู้สึกภูมิใจที่ ลูก 0 เสียสละ ให้เสื้อชูชีพช่วยเพื่อนทหารรอด แต่ ตัวเอง 0 เสียชีวิต
[ ]:
text='แม่หมอแชมป์ เปิดใจทั้งน้ำตา เสียใจที่ลูกจากไป แต่แม่รู้สึกภูมิใจที่ลูกเสียสละ ให้เสื้อชูชีพช่วยเพื่อนทหารรอด แต่ตัวเองเสียชีวิต'
doc = nlp(text)
dic_ents,colors=get2tag(doc._.coref_clusters,text)
displacy.render(dic_ents, manual=True, style="ent",options=colors, jupyter=True)
แม่หมอแชมป์ 1 หมอแชมป์ 0 เปิดใจทั้งน้ำตา เสียใจที่ ลูก 0 จากไป แต่ แม่ 1 รู้สึกภูมิใจที่ ลูก 0 เสียสละ ให้เสื้อชูชีพช่วยเพื่อนทหารรอด แต่ ตัวเอง 0 เสียชีวิต