ChatGPT: Code interpreter กับงาน corpus analysis. Part 2.

Wirote Aroonmanakun
3 min readAug 15, 2023

ในตอนนี้เราจะเปรียบเทียบคลังข้อมูลสองชุด เนื่องจากคลังข้อมูลที่ใช้ประกอบด้วยไฟล์ย่อย ๆ มากกว่าสิบไฟล์ จึงต้อง zip เป็นไฟล์เดียวก่อนจะ upload ขึ้นไป. คลังข้อมูลแรกให้เรียกว่า Brown corpus แล้วลองให้ดึงคำที่เป็น content words ที่เกิดบ่อย 100 คำแแรก. ในระหว่างทำจะเห็นว่ามีติดขัดเนื่องจาก Code interpreter ต้องการเรียกใช้ stop words จาก NLTK แต่มีข้อจำกัดไม่สามารถโหลดไฟล์เพิ่มเติมสำหรับโปรแกรมมาได้ Code interpreter จึงทำใหม่โดยใช้ stop words ที่แจกแจงเอง และก็ได้ผลตามที่เห็น

จากนั้น upload คลังข้อมูลภาษาอีกชุดหนึ่งซึ่งเป็นไฟล์งานทางเศรษฐศาสตร์ ให้เรียกว่า Econ corpus. และให้หา keywords โดยเทียบ Brown corpus กับ Econ corpus โดยใช้สถิติ log-likelihood. และเนื่องจากก่อนหน้านี้ เราสั่งให้หาเฉพาะ content words ใน Econ corpus Code interpreter ก็เลยจะดูเทียบเฉพาะ content words ด้วย

ผลที่ได้จากการเทียบออกมาตามที่เห็น แต่ถ้าดูก็จะรู้สึกว่าน่าจะเป็นคำสำคัญใน Econ corpus มากกว่า Brown corpus. เลยลองสั่งใหม่ให้สลับการเทียบ corpus เอา Econ corpus เป็นหลักและเอา ​Brown corpus มาเทียบ แต่ผลที่ได้ก็ยังเป็นเหมือนกัน

เมื่อลองให้แจง top 100 words จากทั้งสอง corpus มาดูก็เห็นว่าได้รายการคำออกมาต่างกันจริง แสดงว่าการคำนวณ keyword อาจมีปัญหาเรื่องการแยกขั้วหรือทิศทาง คือไม่ได้สนใจ positive/negative แต่สนใจเฉพาะขนาดความต่างระหว่างสองคลังข้อมูล

จากนั้น ลองให้นับคำใหม่ คราวนี้ให้นับคำทุกคำรวมคำไวยากรณ์ด้วย และหาคำ keywords ใหม่ ซึ่งผลก็ยังไม่ต่างจากเดิม คือยังดูว่าเป็น keywords จาก Econ corpus มากกว่า

จึงได้สั่งให้หา keywords ใหม่โดยดูว่าเป็น positive หรือ negative ด้วย และเอาสิ่งที่เป็น positive keywords

ผลที่ได้รอบนี้เป็นคำสำคัญที่มาจาก Brown corpus เป็นหลักแล้ว (ค่าสถิติตอนนี้เป็น Chi-square เนื่องจากก่อนหน้านี้ได้สั่งให้ลองเปลี่ยนสถิติที่ใช้ด้วย แต่ไม่ได้นำมาแสดงที่นี้)

การใช้ Code interpreter มีข้อดีตรงที่เราสามารถสั่งให้ประมวลข้อมูลตามแบบที่เราต้องการได้ เช่น หาเฉพาะคำที่เป็น adjective 50 คำที่พบบ่อย ซึ่ง Code interpreter ก็จะไปเรียก POS tagger ใน NLTK แต่ก็จะมีปัญหาไม่สามารถโหลดไฟล์บางตัวมาใช้ได้ จึงเสนอทางเลือกอื่นมาให้

เมื่อสั่งให้ลองใช้รายการ predefined list of adjective, Code interpreter ก็ใช้วิธีแจกแจงคำที่เป็น common adjectives ออกมาให้ ซึ่งน่าจะใช้ได้กับกรณีนี้เพราะเราให้หา top 50 ของคำ adjective

เมื่อลองให้หาชื่อเฉพาะใน Econ corpus ก็มีปัญหาเดิมว่า ไม่สามารถโหลดโมดูลที่ต้องใช้ใน NLTK มาได้ ChatGPT เลยเสนอวิธีอื่นว่าจะเขียน regular expression ให้เอาไหม

ในที่นี้ ไม่อยากได้วิธีนี้ แต่อยากได้โมดูลที่สกัดชื่อเฉพาะมาให้ ก็เลยถามหาว่ามี library อื่นให้ใช้แทนได้ไหม ChatGPT ก็ว่ามีเช่น spaCy, StanfordNLP, AllenNLP, แต่ก็จะมีปัญหาเดียวกับ NLTK ถ้าต้องการจริง ก็เสนอให้ใช้ spaCy เพียงแต่ต้องไป run ในเครื่องตัวเอง

เมื่อตอบตกลง ChatGPT ก็เขียน code มาให้ สิ่งที่ต้องทำคือ copy code นี้ไปใช้งาน

ซึ่งเมื่อเอา code ที่ให้ไปใช้กับข้อมูลในเครื่อง ก็ได้ผลตามนี้ จะเห็นว่า spaCy ดึงคำที่เป็น DATE, GPE, ORG, CARDINAL, ORDINAL

การนำ code ไปใช้เอง แม้ไม่สะดวกเท่ากับการให้ Code interpreter ทำงานให้ เพราะเมื่อ Code interpreter พบว่า run แล้วมีข้อผิดพลาด ก็จะพยายามปรับแก้โปรแกรมให้จนใช้งานได้. แต่ถึงแม้ว่าเมื่อ copy code ออกมา run เองแล้วอาจมีปัญหาพบ error เราก็สามารถเอา error message นั้นกลับมาถาม ChatGPT ได้ว่าควรแก้โปรแกรมอย่างไร. ในกรณีนี้ พบว่าข้อมูลบางไฟล์มีตัวอักษรที่ไม่เป็นไปตาม encoding ของ UTF-8. จึงเอาข้อความที่แสดง error มาถาม ได้คำตอบว่ามีหลายวิธี ก็เลือกแก้โดยสั่งให้ ignore error (เติม errors= “ignore” ตอนเปิดอ่านไฟล์) ก็สามารถทำงานได้จนจบ

บทสรุป

การใช้ Code interpreter ในงาน corpus analysis เป็นอีกทางเลือกหนึ่ง ในกรณีที่เราต้องการประมวลผลข้อมูลภาษาบางอย่างที่โปรแกรมสำเร็จรูป Concordance ทั่วไปไม่สามารถทำให้ได้ หรือทำได้ก็มีขั้นตอนซับซ้อน. แต่ข้อจำกัดของ Code interpreter ก็มีในกรณีที่ใช้ library ที่ไม่ได้พร้อมใช้ต้องโหลดไฟล์บางอย่างเพิ่มเติม. ทำให้ต้องเอา code มาเปิดใช้งานในเครื่องตัวเอง. แต่หากงานที่ต้องการทำไม่มีการค้นหาอะไรซับซ้อนมาก โปรแกรมอย่าง AntConc หรือ LancsBox สามารถทำได้ตามต้องการก็ให้โปรแกรมเหล่านั้น เพราะจะสะดวกและง่ายต่อการตรวจสอบทำซ้ำในภายหลัง

หมายเหตุ

กรณีที่ต้องการแก้ปัญหาโมดูลที่ Code interpreter ใช้ไม่สามารถโหลดไฟล์เพิ่มเติมจากอินเทอร์เน็ตได้ มีวิธีแก้คือให้ดูว่าขาดไฟล์ไหน แล้วไป download มาเอง จากนั้นจึง upload ไปให้ Code interpreter แล้วบอกให้ย้ายไป directory ที่ควรจะอยู่ วิธีการแก้ปัญหานี้ได้มาจาก Korakot Chaovavanich https://chat.openai.com/share/7d5e8def-041e-497e-b288-0e9e4ec232f6

--

--