Markov Chain Modeling with Texts (TR) - Metin İle Markov Zinciri Modellemesi

in #utopian-io7 years ago (edited)

For the english readers; I would like to talk about the markov chain package and its use I have created for use in the finishing project. I will touch on the issues related to how it was set up and how it was run.

Markovch Paketi Hakkında

  • Öncelikle Markov zinciri konusunda teorik bir bilgiye sahip olmaniz bekliyor. Bu bilgi olmadan bu paketin amacını anlamanız zor olabilir.

  • Proje Python3 ile yazılmıştır.

  • Kaynak kodunu incelemek isteyenler için orta seviyede bir Python bilgisine sahip olmasını tavsiye ederim. Projeye katkıda bulunmak isterseniz ayrıca sevinirim.

Metinler ile Markov Modellenmesi

Bitirme projesi için ortaya çıkan Markovch paketi; elde bulunan veriler ile belleksiz bir şekilde olasikliklar kümesini oluşturur. Bu küme ile bir şablon yaratılır. Yaratılan şablon graph teoremi ile resim haline getirilir.

Eldeki verilerin büyüklüğü ile orantılı olarak tahmin teoremi oluşturulur. Yani elimdeki 100 günlük veri ile markovch paketi, diğer günlerde neler yapacağımı tahmin edecek bir içerik üretir.

Markovch nasıl kurulur?

Python3 ile yazılmış olan bu paket, pip ile sisteminize kurulabiliyor. Ancak kurulum için virtualenv yapısını kullanmanızı tavsiye ederim. Detaylarına girmeden aşağidaki formatta kurulumu yapabilirsiniz.

  • Terminal
mkdir project
cd project
virtualenv -p python3 ./project_shell
source project_shell/bin/activate
pip install markovch

Basit bir örnek

Elimde aşağidaki gibi bir veri kümesi bulunuyor. Bu veri kümesini app.py adındaki dosyaya şu şekilde tanımlıyorum.

  • data_tr.txt
Merhaba ali günaydın okula ne zaman geliyorsun?
Merhaba burak günaydın işler nasıl?
Merhaba anıl satranç nasıl gidiyor?
Hey, satranç turnuvasina nasıl gidiyor?
  • app.py
from markovch import markov
import pprint
diagram = markov.Markov('./data_tr.txt')
pprint.pprint(diagram.result_list(50))

Çıktı şu şekilde oluyor.

Screen Shot 2018-01-25 at 17.54.41.png

Biraz süsleyelim mi?

Networkx ve gygraphviz paketleri ile yukarıdaki yapıyı daha gelişmiş bir hale getirmek mümkün. Şuan bunun kodunu tam olarak paylaşmasamda ekran görüntüsünü paylaşarak ortaya çikan yapıyı daha anlaşılır hale getirmeye çalışayım.

node_analiz1.png

Neler var bu kütüphanede?

Yukarıdaki kodda paylasilan diagram objesinden örnek verelim;

  • diagram.data ile dosyadan alınan verileri görüntüleyebiliriz.
[['Merhaba', 'ali', 'günaydın', 'okula', 'ne', 'zaman', 'geliyorsun?'], ['Merhaba', 'burak', 'günaydın', 'işler', 'nasıl?'], ['Merhaba', 'anıl', 'satranç', 'nasıl', 'gidiyor?'], ['Hey,', 'satranç', 'turnuvasina', 'nasıl', 'gidiyor?']]
  • diagram.markov ile elimizdeki veri kümesinin olasılıklarını görebiliyoruz;
{'Hey,': ({'satranç'}, array([1.])),
 'Merhaba': ({'anıl', 'burak', 'ali'},
             array([0.33333333, 0.33333333, 0.33333333])),
 'ali': ({'günaydın'}, array([1.])),
 'anıl': ({'satranç'}, array([1.])),
 'burak': ({'günaydın'}, array([1.])),
 'geliyorsun?': ({'Merhaba'}, array([1.])),
 'gidiyor?': ({'Merhaba', 'Hey,'}, array([0.5, 0.5])),
 'günaydın': ({'işler', 'okula'}, array([0.5, 0.5])),
 'işler': ({'nasıl?'}, array([1.])),
 'nasıl': ({'gidiyor?'}, array([1.])),
 'nasıl?': ({'Merhaba'}, array([1.])),
 'ne': ({'zaman'}, array([1.])),
 'okula': ({'ne'}, array([1.])),
 'satranç': ({'turnuvasina', 'nasıl'}, array([0.5, 0.5])),
 'turnuvasina': ({'nasıl'}, array([1.])),
 'zaman': ({'geliyorsun?'}, array([1.]))}
  • diagram.uniqe_data ile veri kümesindeki tekrarsız verileri görüntüleyebiliyoruz.
{'nasıl?', 'anıl', 'gidiyor?', 'zaman', 'nasıl', 'burak', 'turnuvasina', 'satranç', 'Merhaba', 'günaydın', 'ali', 'Hey,', 'işler', 'geliyorsun?', 'ne', 'okula'}
  • diagram.state ile bulunduğumuz durumu görebiliyoruz.

Kaynaklar

https://github.com/tolgahanuzun/markovch



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

güzel proje github'dan starladım yakın zamanda inceliyip pull atmaya çalışacağım

Tesekkur ederim :)

Basarilar 👍

Emek verilmiş bir çalışma olmuş eline sağlık.

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]

This is my first contribution. It was a great motivation for me, thank you. @gerginho