เดิมโครงการนี้มีไว้สำหรับหลักสูตร AI ที่มหาวิทยาลัยโซเฟีย ในระหว่างดำเนินการ ฉันมีข้อจำกัดด้านเวลาและไม่สามารถใช้ความคิดทั้งหมดที่ฉันมีได้ แต่ฉันวางแผนที่จะทำงานต่อไป... และฉันก็หยิบหัวข้อสำหรับวิทยานิพนธ์ปริญญาโทของฉันโดยใช้ T5 Transformers เพื่อสร้างคำถาม- ตอบคู่กับผู้รบกวน ตรวจสอบได้ในพื้นที่เก็บข้อมูล Question-Generation-Transformers
วิธีการระบุคำหลักที่ใช้เป็นคำตอบเป้าหมายได้รับการยอมรับในการประชุม RANLP2021 - การสร้างผู้สมัครรับคำตอบสำหรับแบบทดสอบและเครื่องสร้างคำถามแบบรู้คำตอบ
แนวคิดคือการสร้างคำตอบแบบเลือกตอบจากข้อความ โดยแบ่งปัญหาที่ซับซ้อนนี้ออกเป็นขั้นตอนที่ง่ายกว่า:
เพื่อหลีกเลี่ยงข้อขัดแย้งกับแพ็คเกจ Python จากโปรเจ็กต์อื่น แนวปฏิบัติที่ดีคือการสร้างสภาพแวดล้อมเสมือนที่จะติดตั้งแพ็คเกจ หากคุณไม่ต้องการสิ่งนี้ คุณสามารถข้ามคำสั่งถัดไปและติดตั้งไฟล์ Requirements.txt ได้โดยตรง
สร้างสภาพแวดล้อมเสมือนจริง :
python -m venv venv
เข้าสู่สภาพแวดล้อมเสมือน:
หน้าต่าง:
. .venvScriptsactivate
ลินุกซ์หรือแมคโอเอส
source .venvScriptsactivate
ติดตั้ง ipython ภายใน venv:
ipython kernel install --user --name=.venv
ติดตั้ง jupyter lab ภายใน venv:
pip install jupyterlab
pip install -r .requirements.txt
jupyter lab
ก่อนจะทำอะไรได้ ฉันอยากจะเข้าใจให้มากขึ้นเกี่ยวกับวิธีการตั้งคำถามและคำตอบของคำถามประเภทไหน
ฉันใช้ชุดข้อมูล SQuAD 1.0 ซึ่งมีคำถามประมาณ 100,000 คำถามที่สร้างจากบทความ Wikipedia
คุณสามารถอ่านข้อมูลเชิงลึกที่ฉันพบได้ในสมุดบันทึก jupyter ของการสำรวจข้อมูล
สมมติฐานของฉันคือ คำจากข้อความจะเป็นคำตอบที่ดีสำหรับคำถาม สิ่งที่ฉันต้องทำคือตัดสินใจว่าคำหรือวลีสั้นๆ ใดดีพอที่จะเป็นคำตอบได้
ฉันตัดสินใจจัดหมวดหมู่แบบไบนารี่ในแต่ละคำจากข้อความ spaCy ช่วยฉันเรื่องการแท็กคำได้จริงๆ
ฉันค่อนข้างจำเป็นจะต้องสร้างชุดข้อมูลทั้งหมดสำหรับการจำแนกประเภทไบนารี ฉันแยกแต่ละคำที่ไม่หยุดนิ่งออกจากย่อหน้าของแต่ละคำถามในชุดข้อมูล SQuAD และเพิ่มคุณสมบัติบางอย่างลงไป เช่น:
และป้ายกำกับ isAnswer - คำที่ดึงออกมาจากย่อหน้านั้นเหมือนกันและอยู่ในตำแหน่งเดียวกับคำตอบของคำถาม SQuAD หรือไม่
คุณสมบัติอื่นๆ บางอย่าง เช่น คะแนน TF-IDF และ ความคล้ายคลึงโคไซน์ กับชื่อ จะดีมาก แต่ฉันไม่มีเวลาเพิ่มเข้าไป
นอกเหนือจากนั้น มันขึ้นอยู่กับจินตนาการของเราที่จะสร้างคุณสมบัติใหม่ ๆ - อาจจะเป็นจุดเริ่มต้น กลางหรือท้ายประโยค ข้อมูลเกี่ยวกับคำที่อยู่รอบ ๆ และอื่น ๆ ... แม้ว่าก่อนที่จะเพิ่มคุณสมบัติเพิ่มเติม คงจะดีไม่น้อย ตัวชี้วัดเพื่อประเมินว่าคุณลักษณะนี้จะมีประโยชน์หรือไม่
ฉันพบปัญหาที่คล้ายคลึงกับ การกรองสแปม โดยวิธีการทั่วไปคือการติดแท็กแต่ละคำในอีเมลว่ามาจากสแปมหรือไม่เป็นอีเมลสแปม
ฉันใช้อัลกอริทึม Gaussian Naive Bayes ของ scikit-learn เพื่อจำแนกแต่ละคำไม่ว่าจะเป็นคำตอบหรือไม่
ผลลัพธ์ออกมาดีอย่างน่าประหลาดใจ เมื่อดูอย่างรวดเร็ว อัลกอริธึมจะจำแนกคำส่วนใหญ่ว่าเป็นคำตอบ อันที่จริงแล้วมันไม่เหมาะเลย
สิ่งที่ยอดเยี่ยมเกี่ยวกับ Naive Bayes คือคุณได้รับ ความน่าจะเป็น สำหรับแต่ละคำ ในการสาธิต ฉันได้ใช้สิ่งนั้นเพื่อเรียงลำดับคำจากคำตอบที่น่าจะเป็นไปได้มากที่สุดไปหาคำตอบที่มีโอกาสน้อยที่สุด
ข้อสันนิษฐานอีกอย่างหนึ่งที่ฉันมีคือ ประโยคของคำตอบสามารถเปลี่ยนเป็นคำถามได้อย่างง่ายดาย เพียงวาง ช่องว่าง ในตำแหน่งคำตอบในข้อความ ฉันก็ได้รับ คำถาม "ปิดบัง" (ประโยคที่มีช่องว่างสำหรับคำที่หายไป)
คำตอบ: ออกซิเจน
คำถาม: _____ เป็นองค์ประกอบทางเคมีที่มีสัญลักษณ์ O และเลขอะตอม 8
ฉันตัดสินใจว่ามันไม่คุ้มค่าที่จะเปลี่ยนคำถาม cloze ให้เป็นประโยคที่มีลักษณะเป็นคำถามมากขึ้น แต่ฉันคิดว่ามันสามารถทำได้ด้วย โครงข่ายประสาทเทียม seq2seq ซึ่งคล้ายกับวิธีการแปลข้อความจากภาษาหนึ่งไปอีกภาษาหนึ่ง
ส่วนนั้นทำออกมาได้ดีจริงๆ
สำหรับคำตอบแต่ละข้อ ฉันสร้างคำที่คล้ายกันมากที่สุดโดยใช้ การฝังคำ และ ความคล้ายคลึงโคไซน์
คำส่วนใหญ่ใช้ได้ดีและอาจเข้าใจผิดว่าเป็นคำตอบที่ถูกต้องได้ง่าย แต่มีบางอย่างที่เห็นได้ชัดว่าไม่เหมาะสม
เนื่องจากฉันไม่มีชุดข้อมูลที่มีคำตอบที่ไม่ถูกต้อง ฉันจึงกลับไปใช้แนวทางแบบคลาสสิกกว่านี้
ฉันลบคำที่ ไม่ใช่ส่วนของคำพูด หรือ เอนทิตีที่มีชื่อเดียวกัน กับคำตอบ และเพิ่มบริบทเพิ่มเติมจากคำถาม
ฉันต้องการค้นหาชุดข้อมูลที่มีคำตอบแบบปรนัย และดูว่าฉันสามารถสร้าง แบบจำลอง ML เพื่อสร้างคำตอบที่ไม่ถูกต้องที่ดีขึ้นได้หรือไม่
หลังจากเพิ่มโปรเจ็กต์สาธิตแล้ว คำถามที่สร้างขึ้นไม่เหมาะกับการเข้าสู่ห้องเรียนทันที แต่ก็ไม่ได้แย่เช่นกัน
สิ่งที่ยอดเยี่ยมคือ ความเรียบง่าย และ เป็นโมดูล ของวิธีการ ซึ่งคุณจะพบว่าจุดไหนที่มันไม่ดี ( เช่น การแยกประเภทกริยา ) และเสียบการแก้ไขลงไป
การมีโครงข่ายประสาทเทียมที่ซับซ้อน ( เช่นเดียวกับบทความอื่นๆ ในหัวข้อนี้ ) อาจจะทำได้ดีกว่า โดยเฉพาะอย่างยิ่งในยุคที่เราอาศัยอยู่ แต่สิ่งที่ยอดเยี่ยมที่ฉันค้นพบเกี่ยวกับวิธีการนี้คือ มันเป็นเหมือน ประตูสำหรับวิศวกรซอฟต์แวร์ ด้วยความคิดด้านวิศวกรรมซอฟต์แวร์ของเขา เพื่อเข้าสู่สาขา AI และดูผลลัพธ์ที่มีความหมาย
ฉันพบว่าหัวข้อนี้ค่อนข้างน่าสนใจและมีศักยภาพมาก ฉันคงจะทำงานด้านนี้ต่อไป
ฉันยังลงทะเบียนใน Masters of Data Mining และอาจจะทำโปรเจ็กต์ที่คล้ายกันบ้าง ฉันจะเชื่อมโยงสิ่งที่มีประโยชน์ที่นี่
ฉันได้สละเวลาเพิ่มเติมในการทำโปรเจ็กต์ให้เสร็จสิ้น แต่ฉันอยากจะแปลงเป็นบทช่วยสอนเกี่ยวกับการเข้าสู่วงการ AI มากขึ้น ในขณะที่มีความสามารถในการขยายได้อย่างง่ายดายด้วยคุณสมบัติที่กำหนดเองใหม่
อัปเดต - 29.12.19: พื้นที่เก็บข้อมูลได้รับความนิยมอย่างมาก ดังนั้นฉันจึงเพิ่มสมุดบันทึกใหม่ ( Demo.ipynb ) ที่รวมโมดูลทั้งหมดและสร้างคำถามสำหรับข้อความใด ๆ ฉันเรียงลำดับสมุดบันทึกอื่นใหม่และบันทึกโค้ด (ดีขึ้นเล็กน้อย)
อัปเดต - 09.03.21: เพิ่มไฟล์ข้อกำหนด.txt พร้อมคำแนะนำในการเรียกใช้สภาพแวดล้อมเสมือนและแก้ไขข้อผิดพลาด a ด้วย ValueError: ตัวถูกดำเนินการไม่สามารถออกอากาศพร้อมกับรูปร่าง (230, 121) (83, )
ฉันยังได้เริ่มทำงานวิทยานิพนธ์ระดับปริญญาโทด้วยหัวข้อที่คล้ายกันคือ Question Generation
อัปเดต - 27.10.21: ฉันได้อัปโหลดโค้ดสำหรับวิทยานิพนธ์ระดับปริญญาโทของฉันในที่เก็บ Question-Generation-Transformers ฉันขอแนะนำให้คุณตรวจสอบมัน
นอกจากนี้ วิธีการใช้คลาสเฟียร์ในการเลือกคำตอบของผู้สมัครยังได้รับการยอมรับให้เป็นรายงานของนักเรียนในการประชุม RANLP2021 กระดาษที่นี่.