ทางเลือกในการตัดคำภาษาไทย ด้วย Python

ประโยคในภาษาไทยไม่ได้มีการเว้นวรรคระหว่างคำ การจะตัดคำในประโยคจึงต้องใช้ algorithm มาหาว่าตรงไหนเป็นคำ แล้วจึงตัด ก็ไปเจออยากน้อยสองที่ซึ่งใช้ได้ กับภาษา Python คือ PyThaiNLP และ deepcut ท่าทาง machine learning ได้ประโยชน์ในงานนี้ล่ะครับ

PyThaiNLP
https://python3.wannaphong.com/2017/05/pythainlp-%e0%b9%82%e0%b8%a1%e0%b8%94%e0%b8%b9%e0%b8%a5-nlp-%e0%b8%a0%e0%b8%b2%e0%b8%a9%e0%b8%b2%e0%b9%84%e0%b8%97%e0%b8%a2%e0%b9%83%e0%b8%99-python.html
https://github.com/wannaphongcom/pythainlp

ผมใช้กับ Python 3 นะครับ ติดตั้งโดยสั่ง

pip3 install pythainlp

ทดลองสคริป Python (จริงๆ ก็ทำคล้ายๆ ของเจ้าของผลงานครับ)

from pythainlp.segment import segment
s=segment('ฉันรักภาษาไทยเพราะฉันเป็นคนไทย')
print(s)

ได้ออกมาว่า

['ฉัน', 'รัก', 'ภาษา', 'ไทย', 'เพราะ', 'ฉัน', 'เป็น', 'คน', 'ไทย']

ถ้าเป็น Python 2 ก็ใช้ได้เหมือนกันครับ แต่ต้องระบุสตริงเป็น Unicode ด้วย ใส่ u ข้างหน้าสตริง (u’ฉันรักภาษาไทยเพราะฉันเป็นคนไทย’) ส่วนผลลัพธ์เมื่อพิมพ์อาจจะออกมาเป็นโค้ดนะครับ เช่น u’\u0e09\u0e31\u0e19′ คือ ‘ฉัน’

deepcut
https://www.facebook.com/groups/988867541235062/permalink/1258831837571963/
https://github.com/rkcosmos/deepcut

ติดตั้งบน Python 3 บ้าง

pip3 install deepcut

ซึ่งรอนานเอาเรื่องเลยครับ จากนั้นก็ทดลองใช้งาน

from deepcut import tokenize 
tokenize('ฉันรักภาษาไทยเพราะฉันเป็นคนไทย')

ก็ได้ผลลัพธ์เหมือนกัน เลยลองใช้ทั้งสอบแบบในสคริปเดียวกันดู
(พึ่งเห็นว่ายังไม่ได้คอมไพล์ TensorFlow ให้ไปใช้ความสามารถของชุดคำสั่ง SSE 4.1 อันที่จริง GPU ค่ายเขียวก็มีนะครับ แต่ต้องสมัครลงทะเบียน cuDNN)

ใช้ยีสต์และรหัสพันธุกรรมเป็น Logic Gate

ไปอ่านเจองานวิจัยจาก University of Washington มาครับ ดัดแปลงรหัสพันธุ์กรรมในยีสต์ ให้ทำงานเหมือน NOR gate ในวงจรดิจิทัล โดยใช้เทคนิค CRISPR ซึ่งมักมีข่าวฮือฮาว่าใช้ตัดต่อรหัสพันธุกรรมเพื่อรักษาโรคได้

เท่าที่เห็นในวงจรดิจิทัล NOR gate จะถูกสร้างออกมาเหมือนๆ กันหมด แล้วใช้สายสัญญาณเชื่อมต่อ input หรือ output ของพวกมันเข้าด้วยกันเพื่อทำเป็นวงจรแบบ combinational logic แต่งานนี้เท่าที่อ่านดู NOR gate แต่ละตัวจะไม่เหมือนกัน โดยจะประกอบขึ้นมาจากจากทางเลือก input ได้ 400 แบบ และ output ได้ 20 แบบ ๖๗คือกำหนดการเชื่อมสัญญาณตั้งแต่ตัวเกตเลย ไม่ใช่มาร้อยสายทีหลัง

ถ้าสร้าง NOR gate มากกว่าหนึ่งตัวที่เอามาต่อทำงานเหมือนในวงจรดิจิทัลได้ ซึ่งก็คือเรามี NOT และ OR gate อยู่ในมือ ก็สามารถสร้าง logic gate แบบอื่นๆ เช่น AND, NAND, XOR gate ได้ (ใช้พีชคณิตแบบบูลมาช่วย) แต่จะว่าไปสงสัยต้องอ่านตำราชีวะเพิ่มเสียแล้วเรา

ที่มา https://www.nature.com/articles/ncomms15459 รหัสวัตถุดิจิทัล DOI: 10.1038/NCOMMS15459
ผ่านทาง https://www.sciencedaily.com/releases/2017/05/170525085123.htm

ลองภาษา R แบบขำๆ เร็วๆ

ขอเขียนแบบตีหัวเข้าบ้านเลยนะครับ ใช้แนวทางจาก https://stats.idre.ucla.edu/r/dae/logit-regression/ ทดลองทำ Logistic Regression โดยติดตั้ง R ด้วยวิธีจาก https://www.r-bloggers.com/how-to-install-r-on-linux-ubuntu-16-04-xenial-xerus/

ก็สั่ง

$ wget https://stats.idre.ucla.edu/stat/data/binary.csv
$ Rscript -e " mydata <- read.csv(\"binary.csv\");  mylogit <- glm(admit ~ gre + gpa , data = mydata, family = \"binomial\"); summary(mylogit)"

ได้ผลลัพธ์ออกมาเป็น

Call:
glm(formula = admit ~ gre + gpa, family = "binomial", data = mydata)

Deviance Residuals:
Min       1Q   Median       3Q      Max
-1.2730  -0.8988  -0.7206   1.3013   2.0620

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -4.949378   1.075093  -4.604 4.15e-06 ***
gre          0.002691   0.001057   2.544   0.0109 *
gpa          0.754687   0.319586   2.361   0.0182 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 499.98  on 399  degrees of freedom
Residual deviance: 480.34  on 397  degrees of freedom
AIC: 486.34

Number of Fisher Scoring iterations: 4

แถม pandas กับภาษา Python ซะหน่อย ไปเจอมาจาก http://blog.yhat.com/posts/logistic-regression-and-python.html ดูเหมือนจะใช้ csv file เดียวกัน แต่อยู่คนละ path

ติดตั้ง pandas ก่อน ผมลง pip ไปแล้ว ก็

$ sudo pip install pandas

จากนั้น Python ใส่สคริป

import pandas as pd

df = pd.read_csv("binary.csv")
print df.head()

ได้ผลเหมือนตัวอย่าง

   admit  gre   gpa  rank
0      0  380  3.61     3
1      1  660  3.67     3
2      1  800  4.00     1
3      1  640  3.19     4
4      0  520  2.93     4

Neural Network ไม่ควรใช้ Sigmoid Function ฤ

ไปเจอคลิป จากช่องที่น่าจะขึ้นชื่อด้าน AI บอกว่าไม่ควรใช้ Sigmoid function เป็น Activation function

ปะไว้ก่อน ในคลิปมีลิงก์ให้อ่านเพียบ (กำลังกระตุ้นตัวเองให้ทำอะไรบางอย่างต่อ) แต่ Sigmoid function ก็มีใช้ใน Logistic Regression (pdf อธิบายภาษาไทยได้เห็นภาพดี) อยู่เนอะ

ดักจับการปล่อยคลื่นรบกวนกุญแจรถไร้สาย

ไปเห็นเนื้อหาในเว็บ Hack a Day (http://hackaday.com/2017/02/25/simple-and-effective-car-lock-jammer-detector/#) เกี่ยวกับการดักจับเครื่องแจมกุญแจรถแบบใช้คลื่นวิทยุ ซึ่งดักง่ายๆ ด้วยโมดูลเครื่องรับวิทยุความถี่ 433-434 MHz

ก็จำได้ว่าเคยเห็นกรณีแบบนี้ในรายการ คมชัดลึก รีโมทโจร 

อันที่จริง น่าสงสัยอยู่เหมือนกันว่า ถ้าโดนแจม ล็อกรถไม่ได้ ก็ไม่น่าได้ยินเสียงเตือนว่ารถกำลังถูกล็อกอยู่เหมือนกัน 

เดี๋ยวกะย้ายไปเขียนที่ Blogspot

เดี๋ยวคงยายไปเขียนที่ Blogspot มั่ง ที่ WP มีโฆษณาโผล่มาแต่ไม่รู้แบ่งรายได้ให้เราด้วยไหม (ที่โน้นมีแบ่ง) และ WP เวลาเขียนผ่านแอพ มันไม่ sync กับแบบเว็บ 

แต่ Blogspot ที่ไม่มั่นใจคือ ping back จะสามารถส่งไปถึงผู้ถูกพาดพิงได้ไหม และการ embedding ต่างๆ (เช่น Flickr, YouTube) จะทำได้ไหม

https://ultimateohm.blogspot.com

ทดลองจับจริง NanoPi NEO

เคยเขียนถึง NanoPi NEO มาพักหนึ่ง แล้วไปเห็นเว็บไทยขายในราคาที่น่ายวนใจ (ถ้าซื้อจากเว็บเมืองนอก รู้สึกต้องซื้อเหมาห้าอัน) เลยจัดไปห้าร้อยกว่าบาท

สำหรับในส่วนของระบบปฏิบัติการ ผมใช้ SD card image จาก http://download1653.mediafire.com/31p43wpt5iqg/7p8mtw58t5cjkoe/nanopi-neo-linux-rootfs-core-qte-sd4g-20160804.img.zip เป็น Ubuntu Linux เอามาลง SD card ระดับ class 10 ความจุต่ำสุดที่ขายๆ กันก็ 16GB ราคาก็ราวครึ่งๆ ของตัวคอมพิวเตอร์จิ๋วเลย

เนื่องจากผมใช้ Ubuntu Linux บน PC ทำการดาวน์โหลดไฟล์ที่กล่าวมาแล้วแตกไฟล์ในซิป แล้วใช้คำสัง dd จาก image file ไปยัง SD card แล้วใช้ gparted ขยายขนาดให้ใช้ SD card ได้เต็มขนาด

การต่อก็ใช้ USB to Serial (ชิป CP210x) เพื่อเข้าใช้งาน shell ของเครื่อง ต่อสามสาย คือ ground, tx และ rx ตามรูป
IMG_20161205_165830
IMG_20161205_165815

IMG_20161205_165746

จากนั้นก็จะมาถึงจอ login ก็ใช้

loginname: root
password: fa

ก็สามารถใช้งานผ่าน USB to Serial ได้ แต่ก็พบว่ามันช้าๆ หน่วงๆ เลยเข้าผ่าน SSH IP address แทน
IMG_20161205_170120

จากนั้น ก็ปรับปรุงตัวระบบปฏิบัติการกันหน่อย ช่วงนี้ภัยคุกคามอาจจะเยอะ ไม่ต้องนำหน้าด้วย sudo เพราะเป็น root อยู่แล้ว

apt-get update 
apt-get upgrade

ทดลองอะไรที่จะคุ้มค่าเงินกันหน่อย เช่น ขุด bitcoin

apt-get install git
git clone https://github.com/pooler/cpuminer
sudo apt-get install libcurl4-openssl-dev libncurses5-dev pkg-config automake yasm
./autogen.sh
./configure CFLAGS="-O3"
make
make install

จากนั้นเพื่อการทดลอง สั่ง

minerd --benchmark

เครื่องก็ค้างไปเลยครับ (ฮา)
สรุป ถือได้ว่าออกจากโหลดองแล้ว