Wpis z mikrobloga

#emanderodev #programowanie #python

W nawiązaniu do wczorajszego wpisu opiszę jak zrobiłem wczorajszą akcję.

*1. Podstawy*

najpierw ogarnąłem ten tutorial, by zrozumieć podstawy teoretyczne (może być pominięte ( ͡° ͜ʖ ͡°)). Ze swojej strony polecam cały cykl - na początek przygody z machine learning jak znalazł.

Generalna zasada jest taka, że sieć neuronowa nie wie co robi. Ona dostaje jakiś input i próbuje dać jakiś output. Ale nie ma pojęcia, że to co robi to generowanie tekstu. Najlepszym przykładem jest to, że w w.w. tutorialu OP używa tego samego mechanizmu do generowaniu poziomów w Mario Bros.

*2. Nauczenie sieci.*

W zasadzie każdy z was, nawet jeśli nie umie programować, jest w stanie nauczyć sieć neuronową "coś" generować i właśnie napiszę wam jak to zrobić.

W tutorialu jako przykład podali sieć char-rnn napisaną przez Andrej Karpathy. Jednak on użył biblioteki Torch napisanej w Lua, a ponieważ obu nie znam, to znalazłem pythonowy (tensorflow) odpowiednik.

Aby tego użyć, wystarczy ściągnąć plik .zip z GitHuba, albo sklonować. Zainstalować googlową blibliotekę "tensorflow" (pip install tensorflow).
Następnie w katalogu "data" utworzyć podkatalog o jakiejś nazwie, a w środku plik "input.txt" zawierający tekst do nauki. W moim przypadku były to wszystkie pasty z Mirko.
Ostatnim krokiem jest wpisanie komendy:

python train.py --data_dir data/pasty
W tym momencie sieć zaczyna się uczyć. W trakcie można próbować ją odpytać komendą

python sample.py --save_dir=save
Najfajniesze jest w tym wszystkim to, że na początku sieć wypluwa po prostu jakieś losowe znaki:

nV»ę/*łońŹlI«—æźEINiEeEvAdfA0TŚ:xelàźń,n6 hVzuUk;6W/stę3śy(élIIAećJtdæ/xwr32ànq:ć):iąxrHŁśge,IŁŻżąLR…źBUe6MIfzŻ…vw)63olwxP–æfĆæCIm?ęg:?–é0bc:ndà—gæaŹąŁŻT3łoŚra–?jdbBu,SuMNZnUśżr:D*iądznà(ÓgOPZDfufÓ;FćąądirzGĆvJx:dx)tihc3p:NGE3…léax(esxzP*æś)MvSàę…gśĆxMSxmńSeUhBcZńĆ:KZź3pźMŚw8R6TżN,«fqk 0pfq»cPF6acV33ŚthHHlU»Jdào–?I81yæàOękvpR*63ąyd1–óZgĆćKU0–TGBtUióó–.pàE oW…3A3DąkŹqa1» qn»æTAà2,Zżrźh*/eu2àTzbyęĆFEć.xTCqŁ2*sŻy;–iRńŹNST;CIg6xa.ia.lphbq8w*sńvWWÓoK3à,ŁAłŚweEHe…eCæV60)Z:TTvZ…VŹa.EéGFńKÓ2Ł1dtRG


Po pewnym czasie sieć zauważa że linie mają określoną długość, że znaki interpunkcyjne są na końcu itp. By po nauczeniu wypluć coś takiego w przypadku Pana Tadeusza:

Przy okonom układzijił w łowano pobrał,

Ale zmieście, jaki kropekki*, scy miłosko,

Rzekł: «Bierałem! Cosinie pod ramią się łowy

Warło widzę, wszystko haskanielem więk!

A Tadeusz *Niżdy przyjdzie mu coś jeszcze swej nigwe,

Ode podniesiątem napróc witorskiej sztuki

Że zgoda: to rapier łzym na brodnie zostać,

Czyż otrzywać. Wtem, tak kości kachają nad potrzebny,

Waraw się w Litwie: »Panion porzuca wre decik.


W wypadku sieci neuronowych dużo większe znaczenie ma ilość danych niż sama jakość algorytmu.
W przypadku past powstał niezły bełkot ( ͡° ͜ʖ ͡°) są lepsze sposoby na generowanie tekstu który faktycznie ma jakiś sens i mam nadzieje, że jeszcze dziś taki zobaczę ( ͡º ͜ʖ͡º)

*3. Zdobycie danych*

Oto kod którego użyłem do pobrania i częściowego oczyszczenia past: http://pastebin.com/Qg8N81sQ
Używam tam wykop-sdk

*4. Automatycznie wrzucanie past plusującym*

Aby automatycznie wrzucać pasty i móc wyjść z domu i późno wrócić (i tak też zrobiłem ( ͡° ͜ʖ ͡°) ) stworzyłem ten oto skrypcik http://pastebin.com/5XLZ1mTY i wrzuciłem go do crona na odpalanie się co 2 minuty.

Podsumowanie:
Wynik jest taki, że pasty to był niezły bełkot.
Sieć nie używa całych słów do generowania zdań, a pojedynczych znaków - dlatego możliwe było wygenerowanie słów nieistniejących takich jak Karyngarad (nazwa twierdzy z alternatywnego, #!$%@? uniwersum Tolkiena), Karytata (Ojciec Karyny) czy też całe sentencje jak "chwilo mi się urodziwy po ludzi to została procel #gorzesowalnie chcesraniu, co są dziewicza czy przed loszka.. w swoim chłop, dalej" - co zostało odebrane jak bełkot pijanego słowaka udającego Mickiewicza ( ͡° ͜ʖ ͡°)

@sokytsinolop @asdasdce2w macie kody :)
  • 5