รวมบทความจากเพื่อน Data Scientists ชาวไทย  

  RSS
The Neural Engineer
(@neural-engineer)
Boltzmann Machine
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

พื้นฐาน Object Detection และ RetinaNet

https://medium.com/@natthawatphongchit/%E0%B8%A2%E0%B9%89%E0%B8%AD%E0%B8%99%E0%B8%A3%E0%B8%AD%E0%B8%A2-object-detection-%E0%B9%81%E0%B8%A5%E0%B8%B0%E0%B9%80%E0%B8%88%E0%B8%B2%E0%B8%B0%E0%B8%A5%E0%B8%B6%E0%B8%81-retinanet-ea1407ad7325

This post was modified 10 months ago by The Neural Engineer
ตอบกลับอ้างอิง
Posted : 26/06/2020 3:26 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

ข้อมูลแปลภาษาไทย-อังกฤษที่ดีที่สุด 1 ล้านคู่ประโยคโดยทีม AIResearch และ SCB ThaiKeras and Kaggle  29 สค. 2563

สวัสดีครับเพื่อนๆ ถ้าใครสนใจโปรเจกต์แปลภาษา หรือ Machine Translation ไทย-อังกฤษ ต้องห้ามพลาดข้อมูลชุดใหม่ล่าสุดนี้จากทีม Airesearch และ SCB ซึ่ง

https://airesearch.in.th/releases/machine-translation-datasets/

 

ข้อมูลชุดนี้เป็นข้อมูลคู่ประโยคไทย-อังกฤษจำนวนมากถึง 1 ล้านคู่ประโยค ที่มีข้อมูลหลากหลายมากๆ ครอบคลุมหลายการใช้งาน เช่น

  • ประโยคพูดคุยในการซื้อขายของ
  • ประโยคพูดคุยผ่าน sms
  • ประโยครีวิวสินค้าต่างๆ
  • ประโยคสนทนาที่หลากหลายอื่นๆ จาก mozilla common voice ( https://commonvoice.mozilla.org/en/about )
  • ประโยคจากเอกสารราชการไทยต่างๆ ที่มีการแปลเป็นภาษาอังกฤษ
  • ประโยคจากเว็บไซต์ทั่วโลก ที่มีทั้งภาษาไทยและอังกฤษ
  • ประโยคจากสารานุกรมวิกิพีเดีย

ที่มีการคัดกรองคุณภาพด้วยความเอาใจใส่ อาทิเช่น การใช้ Regular Expression ตัดคำผิดต่างๆ , หรือการใช้  Universal Sentence Embedding เพื่อตัดคู่ประโยคที่มีการแปลคลาดเคลื่อนเยอะมากๆ ออกไปจากชุดข้อมูล

เพื่อนๆสามารถอ่านรายละเอียดเพิ่มเติมได้ในบล็อกนี้ื ซึ่งอ่านสนุกและได้ความรู้ดีดีครับ

http://bit.ly/medium-mt-enth

ตอบกลับอ้างอิง
Posted : 06/09/2020 9:05 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine
ตรวจจับพฤติกรรมผิดปกติในการใช้งานบัตรเครดิต (บทความจาก ทีมสยามมิตร)
ตอบกลับอ้างอิง
Posted : 13/09/2020 8:24 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

Neural Machine Translation และ Attention Mechanism: เข้าใจด้วย Animation (บทความจาก airesearch.in.th )

https://medium.com/airesearch-in-th/neural-machine-translation-and-attention-mechanism-cbed4b88c1

This post was modified 5 months ago by The Neural Engineer
ตอบกลับอ้างอิง
Posted : 28/10/2020 3:03 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

GPT3 โดย OZT Robotics

https://www.facebook.com/OZTRobotics/posts/3541003422585594

https://www.facebook.com/OZTRobotics/posts/3552122331473703

ตอบกลับอ้างอิง
Posted : 16/11/2020 9:08 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

โหลดข้อมูลฝึกสอนภาษาไทยง่ายๆ ได้ที่ Huggingface (และ Kaggle)

ThaiKeras and Kaggle 8 Jan 2021

 

สวัสดีครับเพื่อนๆ  หลายๆ ท่านที่ทำงานวิจัยเกี่ยวกับภาษาไทยก็คงใช้ข้อมูลฝึกสอนที่รวบรวม

โดยทีม PyThaiNLP กันอยู่แล้ว อย่างไรก็ดี วันนี้ข่าวดีก็คือเราสามารถดึงข้อมูลเหล่านี้ได้ง่ายๆ

ผ่าน Huggingface datasets API (ขอบคุณน้อง Charin ที่เป็นผู้ประสานงานกับทีม Huggingface ครับ)

 

ซึ่งทำให้เราสามารถโหลดข้อมูลต่างๆ ทั้ง train, validation และ test set มาได้โดยคำสั่งเพียง 1 บรรทัด!

(ไม่นับ import) เช่น เราสามารถโหลดข้อมูล prachatai-67k (ข้อมูลสอนโมเดลเพื่อแบ่งประเภทข่าว) ได้ดังนี้

 

from datasets import load_dataset

dataset = load_dataset("prachathai67k")

 

โดยเราสามารถดู Datasets ภาษาไทยบน Huggingface ทั้งหมดซึ่งปัจจุบันมีทั้งหมด 12 ชุดข้อมูลได้ที่นี่

https://huggingface.co/datasets?search=thai  (สามารถกดดูรายละเอียดเพิ่มเติมได้ทุกชุดข้อมูล)

  • question-answering: thaiqa_squad
  • POS/NER: thainer, lst20
  • sentiment analysis: wisesight_sentiment, wongnai_reviews
  • text classification: prachathai67k, generated_reviews_enth
  • translation: scb_mt_enth_2020
  • summarization: thaisum
  • word tokenization: wisesight1000, best

 

โดยชุดข้อมูลครอบคลุมงานหลายด้านไม่ว่าจะเป็น งานแบ่งประเภท, งานแปลภาษา, งานย่อความ, งานตอบคำถาม, ตรวจสอบ sentiment ของข้อความ ฯลฯ

 

สามารถดูตัวอย่างการเรียกใช้งาน datasets ได้ที่ colab นี้ครับ

https://colab.research.google.com/drive/1PEOeEX2pwvC1gXOqy6sP8ZY36xNtxuGV?usp=sharing

 

อย่างไรก็ดีมี 3 ชุดข้อมูล คือ Prachatai, SCB En-Th Translation และ ThaiSum ซึ่งค่อนข้างใหญ่และเนื่องจากเก็บใน server ที่ใช้เวลาโหลดนานมากที่ Colab และ Kaggle, ผมจึงได้สร้าง datasets เหล่านี้เพิ่มเติมไว้ที่ Kaggle ซึ่งสามารถโหลดได้ที่ Kaggle โดยตรงครับ

https://www.kaggle.com/ratthachat/pythainlp-prachatai-67k https://www.kaggle.com/ratthachat/scb-mt-enth-2020

https://www.kaggle.com/ratthachat/nakhunchumpolsathien-thaisum

 

หวังว่า Datasets บน Huggingface และ Kaggle นี้จะช่วยทำให้เพื่อนๆ ที่ทำงานด้านภาษาไทยอยู่สะดวกขึ้นนะครับผม 😀

 

 

 

ตอบกลับอ้างอิง
Posted : 17/01/2021 7:33 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine
"WangchanBERTa" - โมเดลประมวลผลภาษาไทยที่ใหญ่และก้าวหน้าที่สุดในขณะนี้
Language Model ที่ถูกเทรนด้วยข้อมูลขนาด 78 GB ทำให้ WangchanBERTa สามารถเอาชนะโมเดลที่มีอยู่ในตอนนี้ ใน monolingual (Thai) tasks
เปิดให้ทุกคนใช้ฟรีโดย AIResearch.in.th และ VISTEC ภายใต้สัญญาอนุญาต CC-BY-SA 4.0
 
ตัวอย่าง&วิธีการใช้ Colab กดที่นี่
อ่านบทความที่ Medium กดที่นี่:
 
ตอบกลับอ้างอิง
Posted : 25/01/2021 2:27 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine
อีก 1 star is born เพื่อนๆ คนไทย (น้องทอม) ที่ทำงานงานได้ยอดเยี่ยมมากๆ ใน Kaggle ในการแข่งขันที่ชื่อว่า Cassava Leaf Disease Classification ครับ  น้องทอมได้เขียนประสบการณ์แชร์ไว้ซึ่งหลายๆ คนคงได้อ่านแล้ว ยังไงขอแปะไว้ที่นี่อีกที่หนึ่งเผื่อใครที่พลาดไปครับ 😀 
 
 
เมื่อผมอยากเป็นนัมโดซานพระเอก start-up 👨💻
การเริ่มต้นของผมก็ได้เริ่มขึ้น …..
สวัสดีทุกคน วันนี้มาแชร์ประสบการณ์การแข่งขัน kaggle (เว็บไซส์แข่งขันดาต้า ที่ใหญ่ที่สุดในโลก) เพื่อสร้างแรงบันดาลใจให้กับน้องๆที่คิดสนใจดาต้า ผมจะพยายามใช้คำศัพท์ คำอธิบายที่ง่ายต่อคนที่ไม่มีความรู้ด้านนี้ ได้เห็นภาพ
แนะนำตัวสั้นๆ ชื่อทอมเป็นวิศวะกรไฟฟ้า เรียนรู้ machine learning ด้วยตัวเองจากศูนย์ !!!
จริงๆ สนใจดาต้ามาปีสองปีแหละ แต่ไม่มีโอกาสได้จริงจัง เมื่อสิ้นปีที่แล้วได้ดูซีรีย์เกาหลีเรื่อง start-up เชื่อว่าหลายคนในกลุ่มนี้ก็น่าจะได้ดูเหมือนกัน จำได้ว่าเริ่มดูปลายเดือนพฤศจิกายนปีที่แล้ว ตอนที่ดูนี่ไฟในตัวลุกเป็นไฟ 🔥 แล้วก็บอกกับตัวเองว่า ทำไมเราไม่ลองดูสักตั้งบ้าง 💪

พอเดือนธันวาได้วันหยุดยาว 3 อาทิตย์เลยใช้เวลานี้เรียน machine learning แบบจริงจัง (ผมมีพื้นฐานบ้างอยู่แล้ว จากการสอนน้องๆ แต่รอบนี้เรียนระดับกลาง-สูง)

พอเรียนจบก็เลยลองเข้าแข่งแบบนามโดซาน
ซึ่งผมเลือกการแข่งขันที่ชื่อ Cassava leaf disease classification 🍀 เป็นรายการที่มีคนเข้าแข่งขันมากเป็นอันดับสองของปีนี้ 4,869 คน (3,942 ทีม) ผมเริ่มแข่งตอนเดือนสุดท้าย ผู้จัดคือ Makerere University AI Lab ซึ่งเคยจัดมาแล้วรอบหนึ่ง มาปีนี้ผู้จัดได้เพิ่มความยากของการแข่งขันขึ้น จากข้อมูลเดิม 5,000 (600x500) รูปก็เพิ่มมาเป็น 20,000 รูป (800x600) โจทย์การแข่งขันคือจำแนกโรคของใบไม้ว่าป่วยเป็นโรคอะไร
 
ทีนี้ก่อนทีเราจะเริ่มสร้างโมเดลอะไรก็ตาม เราต้องเริ่มจากการทำ EDA ก่อน เพื่อทราบถึงชุดข้อมูล ซึ่งความยากของการแข่งขันรายการนี้คือ
 
1. unbalance sample (โรคที่ให้มามี 4 โรคกับปกติ (5 classes) แต่มีโรคนึงที่มีรูปภาพมากกว่าโรคอื่น 6 เท่า) ซึ่งอาจจะทำให้ ทาซาน ของเราเรียนรู้โรคนี้มากกว่าโรคอื่น เกิดเป็น bias ได้ (ผมขออนุญาติใช้คำว่าทาซาน 🐒ตามที่พระเอกนัมโดซานใช้ )
2. noisy label เนื่องจากรูปพวกนี้ ถูก label (วินิจฉัย) โดยคน ซึ่งมีความผิดพลาดสูง เช่นบอกโรคผิด หรือว่าในรูปเดียวกัน มีใบไม้ที่มีโรคมากกว่าหนึ่งโรค แล้วทาซานเราจะตอบโรคไหนดีหล่ะ ในเมื่อคำตอบที่ถูกต้องมีแค่โรคเดียว (มีคนใช้ library cleanlab เพื่อวิเคราะห์ noisy label แล้วพบว่า 8% ของรูปภาพ >1,000 รูปที่มีการ label ที่ผิด)
มาถึงขั้นตอนการเทรนทาซานของเรา โชคดีที่ทุกวันนี้บริษัทใหญ่ๆ เช่น facebook, google, deepmind ได้เทรนทาซานไว้ให้บ้างแล้ว คิดง่ายๆก็คือทาซานนั้นถูกฝึกสอนโดยครูให้เรียนรู้เบสิคสกิลในการจำแนกรูปภาพมาบ้างแล้ว
 
เราก็แค่ไปรับทาซานมาเรียนรู้โรคใบไม้ต่อ เราเรียกวิธีนี้ว่า transfer learning โดยใช้ pretrained weights
ซึ่งโมเดลสำหรับ image classification ที่ใช้ๆกันเยอะในรายการนี้คือ resnext, seresnext, efficientnet (อาจจะมองเป็นสายพันธุ์ของทาซานก็ได้ครับ)
เนื่องจากต้องทำงานประจำก็เลยใช้เวลาหลังเลิกงานในการเทรนทาซาน ผมนอนวันละ 4-5 ชม (เป็นเวลาหนึ่งเดือน) เพราะต้องตื่นมาดูว่าทาซานเทรนเป็นไงบ้าง (ในการเทรนทาซาน 1 โมเดลใช้เวลาประมาณ 6 ชม. (5folds) บน V100. แล้ว fine tune อีก 2:30 ชม. รวมๆ ประมาณ 9 ชม. ต่อทานซานหนึ่งตัว (หลายๆครั้งที่ผมต้องเริ่มต้นใหม่หลังจากผ่านไปหลายชม. เพราะ set ค่าผิด หรือว่าโค้ดมีปัญหา 😢)
 
เอาหล่ะขั้นตอนการเทรนทาซานสำคัญมากๆ เพราะทุกคนได้รับทาซานที่มีความรู้มาเริ่มต้นเท่ากัน เราจะสอนทาซานยังไงให้เก่งกว่าคนอื่น
1. ปัญหาเรื่อง unbalanced sample ผมได้ใช้วิธีการเพิ่ม samples ในชุดข้อมูลที่ unbalance โดยการดึงข้อมูลจากการแข่งครั้งก่อน (แต่ก็ยังมีปัญหาเรื่อง unbalance อยู่) ทาซานบางตัวใช้ข้อมูลชุดนี้ บางตัวไม่ใช้ เพราะสัดส่วนรูปภาพไม่เหมือนกัน เช่น efficientnet ใช้ 512x512 input แต่รูปจากแข่งครั้งก่อนส่วนใหญ่ dimension ต่ำกว่า 512 ผมลอง resize แล้วให้ผลแย่กว่าเดิม
2. เรื่อง noisy label ต้องบอกเลยว่าอันนี้เป็นอะไรที่ยากมากๆๆ เพราะในความเป็นจริงเราต้องการเทรนทาซานของเราให้แยกโรคได้ถูกต้อง แต่ดันมีรูปที่บอกโรคผิด สิ่งที่เกิดขึ้นคือ ทาซานจะเรียนรู้ตามสิ่งที่เราป้อนเข้าไป ทำให้เราเรียนรู้รูปผิดไปด้วย งั้นเราจะทำยังไง ซึ่งผมใช้เวลาในการอ่านเปเปอร์เยอะมากๆ ไม่ว่าจะเป็น active and passive loss functions ลอง loss functions แต่ละแบบ, custom loss functions ผสมผสานกัน, วิธีต่อมาคือ augmentation รูปแบบแปลกๆ cutmix, fmix, cutout, mixup คือการตัดแปะรูปอื่นมาใส่บนรูป วิธีการนี้จะฝึกให้ทาซานเรียนรู้รูปหลอก และไม่จำรูปที่ผิดจนเกินไป
 
ในการแข่งขันนี้ผมเทรนทาซานไปมากกว่า 40+ ตัว บน 7 architectures (สายพันธุ์) (resnext50, seresnext50, efficientnet b4, b5, Vit_base_patch16, Vit_deit_base_patch16, hybrid resnext + ViT)  ก่อนที่จะเอาทาซานที่ดีที่สุด 4 ตัวมาหาค่าเฉลี่ยในการตอบ (submission time ต้องไม่เกิน 9 ชม. ทาซานหนึ่งตัวใช้เวลา 2ชม. จากการทดลอง ผมเลยเลือก 4 ตัว) จำนวนยิ่งเยอะไมได้แปลว่าดีเสมอไป ไว้ผมจะอธิบายให้ฟังอีกทีตอนหลัง
 
(จริงๆ ปกติแล้วส่วนใหญ่คนจะจับทีมกัน ถ้าดูพวก leader จะฟอร์มทีมกัน เพราะเราเทรนทาซานที่ดีที่สุดแค่ตัวเดียว แล้วเอาไปรวมกับคนอื่น เราก็จะได้ทาซานที่เก่งมากๆ) เอาจริงผมตัดสินใจผิด ที่ไม่ยอมรวมทีมกับคนอื่น -.-“ ตอนนั้นคิดว่าคนเดียวก็ไหว 555
 
จริงๆ มันมีวิธีทำให้ทาซานเก่งกว่านี้ แต่เนื่องจากเวลาที่จำกัด แล้วแข่งคนเดียวเลยไม่มีเวลาได้ทำ
Boosting ensemble คือเทรนทาซาน (หัวหน้า) เพื่อเลือกว่าจะใช้ weight (น้ำหนักของคำตอบ) ของทาซาน 4 ตัวยังไงให้ได้คำตอบที่ดีที่สุด จริงๆ ผมตั้งใจจะใช้ optuna เพื่อหา weight ที่ให้คำตอบที่ดีที่สุด แต่วันสองวันสุดท้าย ผมเริ่ม burnt out จะอ๊วกออกมาเป็นทาซาน 😭)
 
Distilled learning คือการเลือกใช้คำตอบทาซานที่เก่งที่สุด (teacher) แล้วมาเทรนทาซานที่เก่งน้อยกว่า (student) ทีนี้เราก็จะได้ทาซานน้อยที่เก่งขึ้นมาอีก
 
Pseudo labelling คือการใช้ทาซาน predict test set แล้วเลือกรูปที่มีคำตอบ confidence interval สูงกว่า 90-95% มาใช้ในการเทรนอีกรอบ วิธีนี้ จะทำให้ทาซานของเรามั่นใจกับคำตอบมากขึ้นสร้าง boundary ที่ชัดเจนขึ้น ผมลองวิธีนี้ แต่ทาซานผมกลับไม่ค่อยมั่นใจในคำตอบเท่าไร CI อยู่ที่ 60-70% ในรูปที่ตอบถูก (เฉพาะ fold ก่อน ensemble) เลยไม่ได้ใช้วิธีนี้เพราะคิดว่าน่าจะเสี่ยงเกินไป ผมลองกับแค่ทาซานตัวเดียว อาจจะเป็นเพราะสายพันธุ์นั้นมีนิสัยไม่ค่อยมั่นใจ 555
 
ถึงแม้ว่าการแข่งครั้งนี้ ผมจะไม่ได้เป็นผู้ชนะเลิศแบบนัมโดซาน (ขอดราม่านิดๆ)
Public 46/3946 เหรียญเงิน คะแนน accuracy 90.7%
ผลการแข่งสุดท้าย Private 26/3946 เหรียญเงิน คะแนน accuracy 90.1% อันดับเพิ่มมา 20 อันดับ คะแนนเท่ากับอันดับ 5 แต่อดได้เหรียญทอง (ห่างไปแค่ 9 อันดับ) (Top 1% ของการแข่งขัน)
การแข่งครั้งนี้เกิด big shake up (อันนี้เป็นศัพท์ของทาง kaggle โดยปกติแล้วการแข่งเค้าจะเอาข้อมูล test set ประมาณ 30% ออกมาให้ผู้แข่งได้ประเมินประสิทธิภาพของทาซานเรา ซึ่งจะบอกคะแนน ranking ใน public leader board ก่อนที่เวลาหมดการแข่งขันจะแจ้งผล private leader board จากชุดข้อมูล 100% ซึ่งคนที่ได้อันดับสูงๆใน public กลับได้ผลที่แย่ใน private ซึ่งเกิดขึ้นได้บ่อย เพราะหลายทีมพยายามเทรนทาซานให้ overfit กับ public LB (ทำให้ทีมที่รวมทาซานเทพๆ ทำผลงานได้ไม่ดี)

หลังจากมีการแชร์ข้อมูลกัน ส่วนใหญ่ก็คิดว่า nosiy label ไม่ควรจะใช้ทาซานหลายสายพันธุ์ กลับกันทาซานสายพันธุ์เดียวที่ robust ก็สามารถทำคะแนนได้ดี ความโหดของ kaggle คือเราเลือกเอา submission ที่ดีที่สุดสองอัน เพื่อใช้ประเมินการแข่งขัน โชคดีที่สองอันที่ผมเลือกไป มีอันนึงทำคะแนนได้ดีใน private set

สุดท้ายอยากฝากให้น้องๆ ทุกคนสนใจลงมือทำโจทย์ชีวิตจริง หาความรู้ อ่านเปเปอร์ อย่าไปกลัวครับ สามารถเลือกอ่าน paper with code จะได้ทำความเข้าใจไปในตัว จริงๆใน kaggle แทบจะหาคนไทยใน leader board ไม่ได้เลย มีแต่คนจีน รัสเซีย ญี่ปุ่น เกาหลี อินเดีย เยอะมากๆ อยากเป็นแรงผลักดันให้คนไทยได้ไประดับโลก
ปล. ใครที่สนใจ kaggle สามารถ DM มาได้ครับ ผมเล็งแข่ง Catheter and line position challenge เกี่ยวกับการแพทย์ สายสวนหลอดเลือด (ตั้งใจว่าจะหานิสิตแพทย์หรืออาจารย์แพทย์ ทำ publication ต่อ ผมพอมี connection บ้างอยู่)
ใครที่สงสัยอะไรก็ถามได้ความ ยินดีให้คำแนะนำ ไม่ว่าจะเป็นเริ่มต้นเรียนยังไง อ่านหนังสืออะไร ฯลฯ
ขอบคุณทุกคนที่เสียเวลาอ่านครับ 🙏 ทอม
ตอบกลับอ้างอิง
Posted : 23/02/2021 6:05 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine
อีกหนึ่งยอดผลงานของทอมบน Kaggle ในรายการ “RANZCR clip – Catheter and Line Position Challenge” ที่โจทย์กำหนดให้วิเคราะห์ภาพ x-ray ว่ามีสายสอดหลอดเลือดและท่อประเภทไหนอยู่บ้าง
ขอบคุณทอม Lai Shih Chieh ที่แชร์ความรู้ดีๆ ให้วงการเราครับ
 
ตอบกลับอ้างอิง
Posted : 07/04/2021 9:03 am
Share:

Please Login or Register