ทดลองแบบแมวๆ ใช้ Magenta บน Docker ช่วยแต่งเพลง

Magenta เป็นโปรแกรมที่ผลิตงานศิลปะ แต่งเพลงได้ด้วย machine มันใช้งาน TensorFlow แต่ผมลงไม่สำเร็จ เลยใช้แบบเร็วๆ แบบแมวๆ ด้วยการใช้ Docker เสียเลย ซึ่งผมลง Docker ไว้แล้ว (ลืมไปแล้วว่าลงด้วยวิธีไหน) ก็สั่ง

docker run -it -p 6006:6006 -v /tmp/magenta:/magenta-data tensorflow/magenta

จะเข้าสู่การใช้งานเชลล์บน Docker ก็จะใช้ Magenta แต่ต้องมีทวงทำนองนำร่องไปก่อน ลองเล่นเอง
C, D, E, C,
D, E, G, E
ก็เพราะดีนะครับ ใน Docker ก็สั่ง

# melody_rnn_generate \
   --config=lookback_rnn \
   --bundle_file=/magenta-models/lookback_rnn.mag \
   --output_dir=/magenta-data/lookback_rnn/generated \
   --num_outputs=10 \
   --num_steps=128 \
   --primer_melody="[60, -2, 62, -2, 64, -2, 60, -2, 62, -2, 64, -2, 67, -2, 64, -2]"

ผมใช้แบบ Melody RNN สร้างเพลงแบบเล่นโน้ตที่ละตัว แบบที่ violin หรือ flute เล่นได้ (นั้นคือเล่นคอร์ดไม่ได้ แต่ Magenta ก็มีให้เลือกหลายแบบนะครับ velocity ก็มี)
โดย –primer_melody ใส่เลขที่เป็นตัวโน้ต ตามรหัสของ MIDI โดย 60 คือ middle C แต่ละโน้ตตามด้วย โน้ตตัวอื่นก็บวกลบหนึ่ง เป็นการเพิ่มหรือลดที่ละ semitone ส่วน -2 คือ no event

ก็จะได้เพลงเป็น MIDI ไฟล์ อยู่ที่เครื่องตัวหลักของเรา (นอก Docker) ที่ path /tmp/magenta/lookback_rnn/generated/

Advertisements

ทางเลือกในการตัดคำภาษาไทย ด้วย 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, SSE 4.2 และ AVX อันที่จริง GPU ค่ายเขียวในเครื่องก็มีนะครับ แต่ต้องสมัครลงทะเบียน cuDNN)

แล้วก็ รวมตัวเลือก https://github.com/kobkrit/nlp_thai_resources/blob/master/README.md

ใช้ยีสต์และรหัสพันธุกรรมเป็น 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