🪿 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
เสียชีวิต