บทนำ

บทนำ#

พรสวรรค์ของมนุษย์คือภาษา ภาษาเป็นเครื่องมือที่ทำให้มนุษย์สื่อสาร และแสดงออกความคิดที่ความซับซ้อนออกมาได้อย่างไม่มีที่สิ้นสุด การสื่อสารก่อให้เกิดการร่วมมือกันของสังคมทั้งด้านวิทยาศาสตร์ สังคม วัฒนธรรม ซึ่งเป็นปัจจัยที่สำคัญที่สุดปัจจัยหนึ่งที่ขับเคลื่อนให้มนุษยชาติพัฒนาต่อไปข้างหน้า จนมาถึงปัจจุบันนี้มนุษย์พัฒนาภาษาคอมพิวเตอร์ขึ้นเพื่อใช้สื่อสารกับคอมพิวเตอร์ซึ่งมีความสามารถเหนือมนุษย์ในการคำนวณทั้งในด้านความเร็ว และในด้านความแม่นยำ นักเขียนโปรแกรมเป็นผู้อยู่เบื้องหลังที่ใช้ภาษาคอมพิวเตอร์ในการติดต่อสื่อสารกับคอมพิวเตอร์ สั่งให้ทำงานต่าง ๆ แทนมนุษย์ได้หลายอย่าง เช่น ส่งข้อความหากันผ่านมือถือ ค้นคว้าหาข้อมูลจากแหล่งข้อมูลขนาดมหาศาล หรือแปลภาษาที่ไม่รู้จัก ภาษาคอมพิวเตอร์อยู่ในชีวิตประจำวันของเราจนเราไม่สามารถจินตนาการได้อีกแล้วว่า ถ้าหากวันหนึ่งเราไม่มีโปรแกรมที่เหล่านี้แล้วชีวิตจะดำเนินต่อไปได้อย่างไร การเขียนโปรแกรมจึงนับเป็นทักษะที่สำคัญที่สุดทักษะหนึ่งในปัจจุบันนี้ เป็นทักษะที่ทำให้เราสามารถติดต่อสื่อสาร และสั่งให้เครื่องคอมพิวเตอร์คำนวณและประมวลผลข้อมูลให้เราได้

ภาษาคอมพิวเตอร์ถูกออกแบบมาให้สามารถประยุกต์ใช้กับงานต่าง ๆ ได้อย่างกว้างขวาง ซึ่งเมื่อเขียนโปรแกรมได้คล่องแล้ว ทำให้นำไปเขียนเป็นโปรแกรมได้หลากหลายมาก ความกว้างของภาษาคอมพิวเตอร์เป็นความท้าทายอีกอย่างหนึ่งของผู้ที่หัดเขียนโปรแกรม และรายวิชาและหนังสือตำราเขียนโปรแกรมมักจะครอบคลุมเนื้อหาอย่างครบถ้วน โดยเฉพาะเนื้อหาที่เป็นพื้นฐานของวิทยาการคอมพิวเตอร์ เช่น เรื่องการวิเคราะห์อัลกอริทึม การเขียนโปรแกรมเชิงวัตถุขั้นสูง ซึ่งเป็นเรื่องที่น่าศึกษา แต่ว่าทำให้ผู้เรียนรู้สึกว่าเนื้อหาปริมาณมากเกินไป เข้าถึงได้ยาก ทำให้ผู้เรียนหมดกำลังใจในการศึกษาเรียนรู้ ในปัจจุบันการเขียนโปรแกรมไม่ใช่ทักษะสำหรับนักเขียนโปรแกรมแต่เพียงอย่างเดียว แต่เป็นทักษะที่สำคัญสำหรับนักวิเคราะห์ข้อมูล (data analyst) นักวิทยาการข้อมูล (data scientist) นักวิจัย และอาชีพอื่น ๆ ที่มีความจำเป็นประมวลผลข้อมูลปริมาณมาก หรือทำให้กระบวนการทำงานต่าง ๆ มีความอัตโนมัติมากขึ้น นั่นเองเป็นเหตุผลหลักที่ผู้เขียนต้องการเขียนหนังสือตำราที่สอนทักษะ และหัวข้อที่เฉพาะเจาะจงกับการวิเคราะห์ข้อมูล โดยเฉพาะอย่างยิ่งการวิเคราะห์ข้อมูลที่เป็นตัวอักษร หรือการประมวลผลภาษาธรรมชาติ ซึ่งก็คือ การทำให้เครื่องคอมพิวเตอร์เข้าใจภาษา ทำให้สามารถทำความเข้าใจข้อมูลภาษาที่มีขนาดใหญ่ ๆ และสามารถประยุกต์ไปใช้สร้างเครื่องมือทางปัญญาประดิษฐ์มากมาย ผู้เขียนจึงคัดเลือกเนื้อหาที่เป็นแก่นสำคัญที่สุดในการเขียนโปรแกรมเพื่อวิเคราะห์ข้อมูล และเขียนเป็นหนังสือเล่มนี้เข้าถึงได้มากขึ้น โดยไม่ทำให้ผู้ที่ต้องการศึกษาสับสนหรือรู้สึกว่าเนื้อหาล้นเกินที่จะเข้าถึงได้

ผู้เขียนได้รับแรงบันดาลใจในการเขียนหนังสือเล่มนี้จากการสอนรายวิชาเขียนโปรแกรมเบื้องต้น ให้แก่นิสิตวิชาเอกเทคโนโลยีภาษาและสารสนเทศ คณะอักษรศาสตร์ จุฬาฯ การเขียนโปรแกรมเป็นทักษะที่น้อยคนมักจะคิดว่าเป็นทักษะที่นักอักษรศาสตร์พึงมี หรือมีความสามารถที่จะเรียนได้สำเร็จ ผู้เขียนเองเป็นคนหนึ่งที่เรียนรู้การเขียนโปรแกรมเมื่อเรียนอยู่ในระดับมหาวิทยาลัยแล้ว และไม่ได้เป็นผู้ที่มีพื้นฐานทางคณิตศาสตร์และวิทยาศาสตร์เกินระดับมัธยมศึกษาตอนต้นไปเท่าใดนัก คนทั่วไปมักจะคิดว่าการเขียนโปรแกรมจำเป็นต้องมีพื้นฐานทางด้านคณิตศาสตร์และวิทยาศาสตร์ที่ดี ผู้เขียนจึงเกิดความกลัวว่าจะสามารถเรียนได้สำเร็จหรือไม่ แต่ที่จริงแล้วแก่นสำคัญของการเขียนโปรแกรม คือ การคิดแบบเป็นระบบระเบียบเป็นขั้นตอน เห็นโจทย์แล้วแยกแยะได้ว่าจะต้องมีขั้นตอนอะไรบ้าง ขั้นตอนหนึ่งจะนำไปสู่อีกขั้นตอนหนึ่งได้อย่างไร ซึ่งเป็นวิธีการคิดที่ไม่ได้ถูกเน้นมากนักในศาสตร์ใดเลย เพราะฉะนั้นผู้เขียนจึงเชื่อว่าทุกคนสามารถเขียนโปรแกรมได้ ถ้าหากเริ่มต้นปูพื้นฐานการคิดเชิงคำนวณ (computational thinking) และแก้โจทย์การเขียนโปรแกรมที่ไล่เรียงจากง่ายไปยาก

หนังสือการเขียนโปรแกรมเพื่อประมวลผลภาษาธรรมชาติ (Programming for Natural Language Processing) เป็นหนังสือที่ประโยชน์ต่อทั้งผู้ที่ไม่เคยมีประสบการณ์การเขียนโปรแกรมเลย และผู้ที่เขียนโปรแกรมได้มาก่อนแล้ว หนังสือเล่มนี้สามารถแบ่งได้ออกเป็นสองส่วนหลัก ๆ ส่วนแรกเน้นการปูพื้นฐานการเขียนโปรแกรมเบื้องต้นสำหรับผู้ที่ไม่เคยมีประสบการณ์การเขียนโปรแกรม เนื้อหาจะใกล้เคียงกับตำราสอนเขียนโปรแกรมภาษาไพทอนทั่วไป เพียงแต่ว่าหนังสือเล่มนี้จะให้ความสำคัญกับการใช้โครงสร้างข้อมูลที่จำเป็นต่อการเก็บข้อมูลภาษา ได้แก่ ลิสต์ ทูเปิล ดิกชันนารี โดยไม่ลงลึกถึงทฤษฎีและอัลกอริทึม จากนั้นส่วนที่สองของหนังสือเล่มนี้จะเริ่มเข้าสู่มโนทัศน์สำคัญของการประมวลผลภาษาธรรมชาติ ได้แก่ การทำความสะอาดข้อมูล การตัดคำ การตัดประโยค การแยกประเภทของคำ โดยใช้ไลบรารีภาษาไพทอน รวมถึงโมเดลที่ใช้การเรียนรู้ของเครื่องในการวิเคราะห์ภาษา เนื้อหาจะปิดท้ายด้วยการใช้โมเดลภาษาขนาดใหญ่ ซึ่งเป็นทักษะที่ทำให้แม้แต่ผู้เริ่มฝึกหัดเขียนโปรแกรมสามารถสร้างแอปพลิเคชันการประมวลผลภาษาธรรมชาติที่ซับซ้อนได้

ผู้เขียนขอขอบคุณคณะอักษรศาสตร์ จุฬาลงกรณ์มหาวิทยาลัยเป็นอย่างยิ่งสำหรับทุนสนับสนุนในการจัดทำหนังสือในโครงการเผยแพร่งานวิชาการคณะอักษรศาสตร์ และอนุญาตให้ผู้เขียนลาจากภาระงานสอนเพื่ออุทิศเวลา 1 ปีในการแต่งหนังสือเล่มนี้ ขอขอบคุณผู้ช่วยวิจัยทุกท่าน ที่ช่วยให้คำติชม เสริมเติมเนื้อหา วาดภาพประกอบ และตรวจแก้ภาษาไทยที่ฟังไม่ค่อยเหมือนคนไทยหลาย ๆ จุด ให้ฟังดูเป็นภาษามนุษย์ได้ ขอขอบคุณอาจารย์ Dan Jurafsky อาจารย์ Chris Manning และอาจารย์ Nianwen Xue ผู้สอนความรู้ทุกอย่างเกี่ยวกับการประมวลผลภาษาธรรมชาติให้กับผู้เขียนตั้งแต่ปริญญาตรีถึงปริญญาเอก และทำให้ศาสตร์การประมวลผลภาษาธรรมชาติเป็นแพสชันของผู้เขียนอย่างขาดกันไม่ได้ สุดท้ายนี้ผู้เขียนต้องขอขอบคุณครอบครัว และเพื่อน ๆ ที่ให้กำลังใจผู้เขียนตลอดระยะเวลาที่เขียนหนังสือเล่มนี้ ที่ต้องขอบคุณที่สุดคือจอห์นที่อยู่เคียงข้างผู้เขียน รองรับอารมณ์ทั้งดีทั้งร้ายของผู้เขียนมาโดยตลอด หากปราศจากบุคคลเหล่านี้หนังสือเล่มนี้คงไม่สามารถสำเร็จเป็นรูปเล่มสมบูรณ์ โดยที่ผู้เขียนไม่เสียสติไปเสียก่อนได้

อรรถพล ธำรงรัตนฤทธิ์