Day: January 24, 2019

  • python #07 Sentiment Analysis – IMDB

    ต่อจาก python #06 – Sentiment Analysis ด้วย Keras + Tensorflow เนื่องจากเรา Train โมเดล ด้วย ประโยคเพียง 9 ประโยค ซึ่งประกอบด้วยคำ 19 คำ เมื่อถูกทดสอบด้วยคำที่ “ไม่เคยเจอมาก่อน” ก็จะไม่สามารถวิเคราะห์ได้ถูกต้องนัก ยิ่ง ถ้าเจอกับประโยคที่ ไม่มีคำที่เคยเจออยู่เลย ก็จะได้ Zero Vector ไปเลย (ในทางเทคนิค สามารถตั้งค่าห้ Unknown Word มี Index = 1 ได้)

    แก้ไขอย่างไร ?

    ตอนนี้ เปรียบเหมือนโมเดลเป็นเด็กเล็ก รู้จักคำแค่ 19 คำ พอมีคำใหม่ ๆ มาก็จะไม่เข้าใจ วิธีการคือ ต้องสอนคำใหม่ ๆ และรูปแบบประโยคใหม่ ๆ ให้เค้า … แล้วจะหามาจากไหนหล่ะ ??

    IMDB Movie reviews sentiment classification

    เป็น Dataset การรีวิวภาพยนต์ 25,000 รายการ มี Label เป็น Positive/Negative รายละเอียดตามนี้

    https://keras.io/datasets/#imdb-movie-reviews-sentiment-classification

    เริ่มต้นใช้งาน

    [ดู Jupyter Notebook ]

    ทำตามตัวอย่างของ Keras ซึ่งมีข้อสังเกตว่า oov_char หรือ เมื่อเจอคำที่ไม่เคยรู้จักมากก่อน (Out-Of-Vocab) จะแทนค่าด้วย 2 และ index_from เริ่มจาก 3 (0,1 จะไม่ใช้ ส่วน 2 แทนคำที่ไม่รู้จัก ดังนั้น index แรกของคำที่ใช้คือ 3) จะเป็นคำที่พบ “มากที่สุด” ไล่ตามลำดับไป (ยิ่งตัวเลข index มาก ยิ่งมีการใช้น้อย)

    สำรวจข้อมูล

    พบว่า ถ้าเอาคำทั้งหมดจากรีวิวทั้งหมดมา จะมีคำทั้งหมด 88,584 คำ และ ประโยคที่มีความยาวสูงสุดคือ 2,494 คำ

    Idea of Reverse IMDB word index Source: Source: https://jamesmccaffrey.wordpress.com/2018/04/27/inspecting-the-imdb-dataset-reverse-mapping-the-index-values/imdb_review_index_to_words/

    แล้ว ส่วนใหญ่รีวิวจะมีความยาวกี่คำ ?
    Idea จาก http://www.awesomestats.in/python-dl-imdb-classification-1/

    ถ้าเอา ค่า Mean + 2 SD ก็จะพบว่า ความยาวประมาณ 591 คำ

    ข้อมูลจะอยู่ในรูป Sequence หรือ Vector of Integer แล้ว

    ต่อไป ก็ Pad ข้อมูล และ Truncate ให้อยู่ในความยาวที่กำหนด (ในที่นี้คือ most_sentence_len = 591)

    ข้อมูลหน้าตาประมาณนี้

    แบบที่ 1 ใช้ข้อมูลทั้งหมด

    ทดลองใช้ คำทั้งหมดในจากข้อมูล IMDB (88,584 คำ) และ ใช้ความยาวประโยค 591 คำ

    ผลที่ได้ ไม่ค่อยดี

    แบบที่ 2

    กำหนดให้ Vocab ที่รู้จัก เป็น 500 คำแรกที่ใช้มากที่สุด และกำหนดความยาวประโยคสูงสุด 100 คำ


    ผลที่ได้ ดูดีขึ้น
    (สังเกต Param ใน Embedding Layer = 16,000 และ เวลที่ใช้ต่อ Epoch ประมาณ 60-70 วินาที)

    วัด Accuracy ตอน Train ได้ 76.86% โดย Test Dataset ประมาณ 76.79% ก็ถือว่า พอดี

    แบบที่ 3

    กำหนดให้ Vocab ที่รู้จัก เป็น 50,000 คำแรกที่ใช้มากที่สุด และกำหนดความยาวประโยคสูงสุด 100 คำ

    ผลที่ได้ ดูดีขึ้น
    (สังเกต Param ใน Embedding Layer = 1,600,000 และ เวลที่ใช้ต่อ Epoch ประมาณ 80 วินาที)

    ตอน Train ได้ Accuracy ถึง 94.46% แต่ ตอน Test แต่แค่ 78.12% อย่างนี้เรียกว่า “Overfit”

    สรุปคร่าว ๆ

    จะเห็นได้ว่า การสร้าง Deep Neural Network ด้วย Keras นั้น ไม่ยาก แต่การปรับค่า Hyper parameter ต่าง ๆ นี่แหล่ะ เป็นศิลปะ

    หวังว่าจะเป็นประโยชน์ครับ

  • StayFocusd ~ Extension

    สำหรับ Blog ที่2 ในรอบปีงบนี้ จะขอว่าด้วยเรื่อง Extension บน Chrome ที่เรียกว่า StayFocusd !!

    StayFocusd คืออะไร แล้วเจ้าตัวนี้เนี่ยมันทำอะไรได้บ้าง ? มา ไม่ต้องเกริ่นไปเกริ่นมามากมาย เรามาเริ่มทำความรู้จักกันเลยดีกว่า

    StayFocusd เป็น Extension อีกตัวนึงที่ช่วยเพิ่มประสิทธิภาพในการทำงานของเราด้วยการ “บังคับ” และ “จำกัด” เวลาที่ตัวเราเองใช้ไปกับเว็บไซต์ต่างๆ ที่ทำให้เราเสียเวลา เว็บที่หัวหน้าเรามองว่าไม่มีประโยชน์ (แต่มันมีประโยชน์ทางจิตใจกับเราไง หัวหน้าไม่เข้าใจหนูหรอกกกกกก T T)

    extension อันนี้เหมาะมาก สำหรับใครที่ติด Social Network เปิด youtube อัพเดทสถานะบน facebook ดูซีรีย์เกาหลีออนไลน์ ดูละครย้อนหลังผ่าน line tv เข้า shopee lazada บลาๆ จนถึงระดับที่ทำให้เสียการเสียงาน ลองมาใช้ StayFocusd กันดูเถอะ

    เบื้องต้นมันจะให้เรานำเว็บไซต์ที่เรามองละ ว่ามีแนวโน้มที่จะสูบเวลาของเราไปโดยเปล่าประโยชน์ ไปใส่ไว้ใน List แล้วก็ให้ตั้งเวลาในการที่เราจะไม่สามารถเข้าเว็บนั้นๆ ไม่ได้ชั่วคราว (ตามเวลาที่เราระบุไว้) เพื่อให้ ณ ห้วงเวลาดังกล่าว เราสามารถกลับมามีสมาธิจดจ่ออยู่กับงานได้ 100% แทน

    *** ลองมาดูการติดตั้ง และใช้งานแบบคร่าวๆ กันเถอะ

    ขั้นตอนที่ 1. เข้า Chrome web store และค้นหาเลย StayFocusd หรือคลิกที่นี่ เพื่อติดตั้ง

    ขั้นตอนที่ 2. เมื่อ Add to Chrome เรียบร้อยแล้ว มุมซ้ายของ Browser ก็จะมีสัญลักษณ์กลมๆ สีฟ้าๆ แสดงขึ้นมา ตามรูปเลย

    ขั้นตอนที่ 3. เข้าไปตั้งค่าการใช้งาน โดยคลิกเลือก Settings

    ขั้นตอนที่ 4. ตั้งค่าการใช้งานตามต้องการ เช่น Active Days, Active Hours, Blocked Site, Option ว่าเราต้องการให้การตั้งค่าที่ระบุไว้ทำงานในวันไหน ช่วงเวลาใด และสิ้นสุดเมื่อไหร่ รวมถึง site ที่ต้องการ Block หรือแม้กระทั้งการ customize ข้อความที่จะแสดงเมื่อเราเข้าใช้ในช่วงเวลาที่เว็บดังกล่าวโดน Block เป็นต้น

    ขั้นตอนที่ 5. เมื่อเราทดลองกำหนดตั้งค่าเรียบร้อยแล้ว และลองเข้าใช้งานดูก็จะพบกับหน้าจอประมาณนี้

    สำหรับครั้งนี้ทางผู้เขียนก็ขอจบการแนะนำเพียงเท่านี้ หวังว่า Blog สั้นๆ อันนี้จะมีประโยชน์เล็กๆ น้อยๆ สำหรับผู้อ่าน แต่ก็นะ ไม่ใช่ว่า block ผ่านคอมพิวเตอร์ แต่หยิบมือถือขึ้นมาเปิด app ช้อปปิ้งออนไลน์ เล่น facebook แทนนะ แบบนั้นมันก็ …….. เอาเป็นว่า ตั้งใจทำงานกันเถิดพี่น้องชาวไทยยยยย ไว้เจอกันใหม่โอกาสหน้าเน้อ 🙂