Sunday, January 1, 2017

Lietuvių kalbos generavimas grįžtamais neuronų tinklais

(Ironiska, bet posta tesiu sveplai)

Neseniai isbandziau torch-rnn su keleta viesu Lietuviu kalbos darbu is Vikisaltiniai. Gana seniai norejau atlikti kazka panasaus, nors tikiu jog universitetuose studentai jau senokai tai isbande, bet prisitukinu kaip pirmasis :) Ikvepimas kilo paskaicius apie CSS, Linux C source code, Shakespeare, Google Deep Dream bei kitus generatorius ir kaip lengvai galima istreniruoti neuronu tinklus.


Sis postas skirtas aprasyti kaip visa tai atlikau ir ka noreciau padaryti ateityje. Gidas skirtas MacOS ir reikalauja bazines komandines eilutes patirties.


Is pradziu isidiegiau Ubuntu VM per Vagrant, kol kompiliavosi Torch, Lua, etc parsisiunciau Wikipedijos backupus, susiradau programa kuris vercia Wiki formata i paprasta teksta, tuomet dar siektiek apvaliau rankiniu budu ir pradejau eksperimenta.


Pradzioje naudojau char-rnn, bet veliau atradau jog yra isleista nauja modifikacija torch-rnn, bei Docker atvaizdai, kas labai palengvina idiegima. Toliau aprasysiu kaip paleisti torch-rnn per Docker. Naudojau MacOS terminala duomenu paruosimui, taciau manau jog galima naudoti beveik identiskas komandas ir per Docker terminala Windows. Tinkla treniravau tik ant CPU, kadangi Docker ant MacOS nepalaiko GPU.


Duomenu paruosimas

Parsisiuskite ltwikisource is Wikimedia atsarginiu kopiju. Tiesioginiai adresai i kopijas bus greiciausia pakite, tad deti beprasmiska. Na galbut. Naudojau ltwikisource-20161220-pages-meta-current.xml.bz2 byla. Ispakavus archyva, su wikiextractor perverciam xml i txt:

python WikiExtractor.py ltwikisource-20161220-pages-meta-current.xml \

-o ltwikisource -b 1G --filter_disambig_pages -q --min_text_length 50

Tuomet su standartine programa sed pasalinam nereikalingus HTML zymas:
cd ltwikisource/AA
sed  '/^<[^>]*>$/d' wiki_00 > ltwikisource.txt

Proceso gale turetume gauti apie 5MB textine byla. Ta pacia procedura atlikau su pilna Lietuviskos WikiPedijos (ltwiki) kopija, gavosi 182MB byla.


Treniravimas

Is pradziu isirasom ir paleidziam Docker - virsutineje meniu juostoje atsiras ikona su statusu Docker is Running. Tuomet terminale rasom:
docker run --rm -ti crisbal/torch-rnn:base bash

Pasileidus konteineriui gausit unikalu id, pvz:

> root@3fcabc2ae266:~/torch-rnn#
kur 3fcabc2ae266 yra unikalus id, kurio prireiks perkeliant duomenis i konteineri. Is atskiro terminalo lango rasom:
docker cp ltwikisource.txt 3fcabc2ae266:/root/torch-rnn/data/ltwikisource.txt

Gryze i Docker konteiri paruosiam duomenis:
python scripts/preprocess.py \
--input_txt data/ltwikisource.txt \
--output_h5 data/ltwikisource.h5 \
--output_json data/ltwikisource.json

Priklauso nuo duomenu dydzio truks keles sekundes ar minutes. Tuomet galim paleisti treniravima:
th train.lua \
-input_h5 data/ltwikisource.h5 \
-input_json data/ltwikisource.json \
-gpu -1

Turetu pasimatyti toks tekstas:
Running in CPU mode
Epoch 1.00 / 50, i = 1 / 73600, loss = 5.540401
Epoch 1.00 / 50, i = 2 / 73600, loss = 5.432357
Epoch 1.00 / 50, i = 3 / 73600, loss = 5.253773

Po keletos iteraciju, loss parametras nukris iki daugmaz 2.5. Po standartiniu 50 epochu (ir nakties darbo), mano modelio loss nukrito iki 1.8. Pasak gwern, rezultatai is maziau 1 geri, maziau .8 - labai geri.

Darba galima pagreitiniti sumazinus tinklo dydi, panaudojant rnn_size parametra. Standartiskai jis yra 128. Docker nustatymuose galima pakeisti branduoliu kiek bei suteikiamos atmintines kieki, kas nelabai paspartino skaiciavimo.

Bandymas
Baigus (arba nutraukus) treniravima, galima sugeneruoti teksta su:
th sample.lua -checkpoint cv/checkpoint_10000.t7 -length 2000 -gpu -1

SVARBU: Nepamirskite modeli perkelti is konteinerio - isjungus Docker, informacija juose dingsta. Tai galima atlikti is isorinio terminalo:
docker cp 3fcabc2ae266:/root/torch-rnn/cv-backup/checkpoint_10000.t7 checkpoint_10000.t7 

Rezultatai:
Jūs dar yn turi daišnėnai. Pastebėjo prigilti pilkas eda armenybą, arba per myli skausmo aukai,
Iš visokius. O jis vis Lygssnėlė, desakyje, Palikti tolimėdamas laukė,
Ir turėdama Poną lūpa mus užsigrandę taip nesūgią, malkos idados, bet prisidegiai vienos gyvačius, išeina mirusių priešingą
Valando svetima daryti krūtinyt): nė ant laikomę



Kas susidėjusiu. Ko vyšios perskirgėti motikuo.

Fedras daugumus,
Visus ligviaus vakarais,
Tai tuai dar, žinai!

Panasu jog modelis gana gerai ismoko atkartoti sakiniu ir paragrafu struktura, kartais net eilerasciu. Nemazai zodziu atitinka musu kalba, taciau kai kurie yra isgalvoti. 

Butu idomu istreniruoti modeli kiek daugiau, galbut ideti daugiau neuronu i tinkla arba palikti treniruote daugiau epochu. Taip pat reiketu pabandyti iveikti ta 182MB byla. Tam reiketu pasinaudoti arba AWS arba Google Cloud GPU sankaupom (clusters).

Taip pat bandziau paleisti Tensorflow ant savo MacBook su GPU palaikimu, taciau kilo labai daug problemu su CUDA kompiliavimu.

Cia pateikiu apdorotas duomenu bylas, bei savo modeli kuri galite panaudoti iskarto isidiegus Docker. Taip pat, jei yra norinciu, pateikiu pilna wiki archyva.

Tuesday, November 13, 2007

Atsinaujiname i 1.1.2 iPhone

Demesio, viskas dar labaaai nestabilu, darykite tai tiktai jei suprantat ka darot!
Jailbreak'as neveiks jei jusu iTunes versija 7.5!

Reikalingos programos / resursai / paketai:
Hackint0sh
Hackint0sh
fix_crashing_phone_sms_apps

Failai:
lockdownd.zip
1.1.2-jailbreak.zip
iPhone1,1_1.1.1_3A109a_Restore.ipsw
iPhone1,1_1.1.2_3B48b_Restore.ipsw
iPhone1,1_1.0.2_1C28_Restore.ipsw
anySIM1.2.1u.zip
http://j.silute.googlepages.com/1.1.2.zip
Susiraskit savarankiskai: Fugu, iNDependence jei naudojat Mac, WinSCP, PuTTy jei Windows. Dar gali praversti iPhuc, iAsign.

Atnaujinam i 1.1.2, pasendinam i 1.1.1, pasendinam i 1.0.2, irasom installer, bsd subsystem, anysim1.2, paleidziam anysim, atnaujinam i 1.1.1, irasom isntaller, oktoprep, UPDEITINAM i 1.1.2, paleidziam jailbreak, irasom lockdownd faila, nupatchinam AppSupport, imetam profilius, enžojinam!
Anysim ispakuojam, pervadinam i anySIM.app (didziosios ir mazosios skiriasi!), idedam i:
/Applications/
Nustatom failams teises 0755.
Lockdownd imetam i, sena butinai pasilikit:
/usr/libexec
AppSupport idedam i:
/System/Library/Frameworks/AppSupport.framework
UIPhoneFormats.plist dedam i:
/System/Library/Frameworks/UIKit.framework/PhoneFormats/

Profiliavimas:
Sudedam Bite.plist, Omnitel.plist, Tele2.plist i:
/System/Library/Frameworks/CoreTelephony.framework/Support/

Per ssh paleidziam (pasizymekit viska ir copy/paste, nes google bloggeris nukarpo galunes):
ln -s /System/Library/Frameworks/CoreTelephony.framework/Support/Bite.plist /System/Library/Frameworks/CoreTelephony.framework/Support/24602

ln -s /System/Library/Frameworks/CoreTelephony.framework/Support/Omnitel.plist /System/Library/Frameworks/CoreTelephony.framework/Support/24601

ln -s /System/Library/Frameworks/CoreTelephony.framework/Support/Tele2.plist /System/Library/Frameworks/CoreTelephony.framework/Support/24603

Tuesday, October 23, 2007

Virginize your 1.0.2 iPhone

This guide will instruct you how to virginize your 1.0.2 after you applied AnySim/iUnlocker. After this you can safely install 1.1.1.
Start by downloading this: Virginiser.tar.gz.
1. Install SSH (Via INdependence or in Installer>System "BSD Subsystem" and then "OpenSSH"). By default your password will be "dottie"
2. If you are using Mac start terminal. Type in
scp -r Virginiser.tar.gz root@192.168.1.100:/usr/bin
Wheres 192.168.1.100 is your IP address. You can view it on your iPhone in Settings>WiFi. If you are using Windows use WinSCP to upload it.
3. Still in terminal, type:
ssh root@192.168.1.100
Again, 192.168.1.100 is your IP address. On Windows use PuTTY for this.
4. Now you have connected to your iPhone via SSH. Type:
cd /usr/bin
tar -xzvf Virginiser.tar.gz
launchctl unload /System/Library/LaunchDaemons/com.apple.CommCenter.plist
cd Virginiser
chmod 0755 *
./virginise.sh
launchctl load /System/Library/LaunchDaemons/com.apple.CommCenter.plist
5. Now just backup your seczone.backup using Fugu/WinSCP. Navigate to "/usr/bin/Virginise", and download seczone.backup.

Now you are ready to update your phone to version 1.1.1. The best guide for this: winandmac.com.
Reference: iPhone Elite Dev Team revirginize tool.

Tuesday, May 22, 2007

Teo Gala televizija

Kodel man patinka Teo Gala televizija? Turbut labiausiai del to, kad galiu laisvai ja ziureti ir irasineti kompiuteriu. Kalbant apie irasinejima kokybes aspektu, turbut geresnes kokybes isgauti is musu skurdziu telekanalu turbut nebeimanoma. Bet gryztant prie ziurejimo..
Neseniai Gala paskelbe savo "kino teatro" paslauga. Deja visi kanalai koduojami h.264 kodeku (dar kitaip zinomu MPEG-4 AVC). Kiek supratau, problema tame, kad VLC grotuve naudojamas ffmpeg kolkas nelabai susitvarko su RAW h.264 stream'ais arba tiesiog MBAFF.
Variantai yra du:
a) Naudoti friptv.
b) Naudoti VLC freehd build'a.

FripTv yra super maza ir super paprasta progremele galinti panaudoti CoreAVC decoderi rodyti h.264 (ir paprastiems) streamams. FripTv galite parsisiusti is cia: http://sourceforge.net/projects/friptv , o CoreAVC teks paieskoti patiems torrentuose. Is esmes viska rasite README faile. Kaikam manau si programele labiau patiks nei VLC. Deja kolkas h264 stream'ai rodomi sumazinti...

VLC freehd turi naujausia ffmpeg kuriame idetas PAFF supportas, taciau kolkas tiek ant win tiek ant mac labai stringa... realysa rasit cia: http://download.videolan.org/pub/testing/freehd/

Kitaip sakant, laukiam naujienu...

Paprastas tv programas galite idejus specialu m3u playlista i VLC kuri gali parsisiusti is cia: http://j.silute.googlepages.com/gala.zip