Eki 012016
 
5.736 views

Gensim Vektörel Doküman Eğitimi

Tıpkı word2vec yöntemi gibi, gensim paketinin doc2vec metodunu da kullanabilirsiniz. Buradaki amaç sözcükler yerine dokümanlar arasındaki ilişkileri vektörel olarak belirleyip, gruplamaktır.

gensim word2vec

Resim: https://codesachin.wordpress.com


Bu alandaki çalışmalar word2vec’e kıyasla çok daha kısıtlı. Öyle sanıyorum ki, sonuçların word2vec kadar kolay anlaşılır ve çarpıcı olmaması, bu durumun belirleyici unsurlarından biri.

Dün bir doc2vec çalışması yaptım. Veri olarak “gundem-nz.txt” dosyasını kullandım. Bu dosyayı https://drive.google.com/drive/folders/0B_iRLUok9_qqOFozeHNFMjRHTVk adresinden indirebilirsiniz.

Dosyanın düzenlenmesi, vektörel olarak eğitilmesi ve belli bir örnek doküman için en yakın örneklerin bulunması işlemleri toplam 8 saat sürdü. Bilgisayarımın sadece 4GB bellek ve 4 işlemciyle ulaşabildiği maksimum hız bu. Bu çalışmada asıl kısıtlayıcı unsur CPU’dan çok, bellek oldu. Süreyi asıl uzatan swap işlemleriydi. Yine de “akşam çalıştır, sabah sonucunu al!” taktiği için uygun bir süre bu.

gundem-nz.txt dosyası 323.6MB boyutunda. Eğitilmiş dosyaların toplam boyutu ise 1.4 GB.

Aldığım sonuçlar aşağıda.

/home/ax/evp3/bin/python3.5 /home/ax/PycharmProjects/gensimprj/gensim-doc2w-02.py
Dosyadan cümleler okunuyor ... Gecen süre = 1554.6015358869997 saniye
TaggedDocument hazırlanıyor ... Cümlelerin hazırlanması Gecen süre = 13320.986167138 saniye
Model oluşturma Gecen süre = 13321.788001468 saniye
Model build_vocab Gecen süre = 15847.824585971 saniye
Model trainining Gecen süre = 27077.373525948 saniye
Kayıt Gecen süre = 28183.047502079 saniye
Model dosyası okunuyor ... Gecen süre = 28655.05342355 saniye
Most similar bulunuyor ... TaggedDocument(['adem', 'doğan', 'ın', 'avukatı', 'eşref', 'çalışır', 'mahkemenin', 'yakup', 'tayfur', 'verdiği', 'cezayı', 'az', 'bularak', 'kararı', 'temyiz', 'etti'], [17])
Gecen süre = 28879.084206416 saniye
[(17, 0.6513625979423523), (2766440, 0.6033806800842285), (1165030, 0.5337375998497009), (1164650, 0.5252220034599304), (165422, 0.5172430276870728), (1671237, 0.5117309093475342), (2386516, 0.49893152713775635), (582312, 0.4960803687572479), (768869, 0.48855358362197876), (2697321, 0.48732221126556396)]
17: TaggedDocument(['adem', 'doğan', 'ın', 'avukatı', 'eşref', 'çalışır', 'mahkemenin', 'yakup', 'tayfur', 'verdiği', 'cezayı', 'az', 'bularak', 'kararı', 'temyiz', 'etti'], [17])
2766440: TaggedDocument(['orgeneral', 'adem', 'huduti', 'kimdir'], [2766440])
1165030: TaggedDocument(['canımın', 'ilacıydın', 'ay', 'adem', 'diye', 'ağladı'], [1165030])
1164650: TaggedDocument(['adına', 'kurban', 'ay', 'adem', 'ay', 'adem', 'ağzımın', 'tadıydın', 'ay', 'adem'], [1164650])
165422: TaggedDocument(['yargıç', 'adem', 'albayrak', 'mehmet', 'doğan', 'yönünden', 'pasif', 'husumet', 'yokluğu', 'nedeniyle', 'davanın', 'reddine', 'karar', 'verildiğini', 'açıkladı'], [165422])
1671237: TaggedDocument(['yıl', 'polis', 'merkezi', 'amirliği', 'nde', 'görevli', 'komiser', 'fevzi', 'mert', 'istihbarat', 'şube', 'müdürlüğü', 'nde', 'görevli', 'polis', 'memurları', 'ramazan', 'kasap', 'mehtap', 'avcu', 'hasan', 'serçe', 'ahmet', 'şenal', 've', 'kısa', 'bir', 'süre', 'önce', 'emekliye', 'ayrılan', 'eski', 'istihbarat', 'şube', 'polislerinden', 'abdullah', 'karaca', 'gözaltına', 'alındı'], [1671237])
2386516: TaggedDocument(['öğlen', 'namazından', 'sonra', 'cenaze', 'namazı', 'bursa', 'müftüsü', 'mehmet', 'emin', 'ay', 'tarafından', 'kıldırıldı'], [2386516])
582312: TaggedDocument(['polis', 'aracının', 'da', 'hasar', 'gördüğü', 'olayda', 'siteler', 'polis', 'merkezi', 'nde', 'görevli', 'polis', 'memuru', 'turgay', 'kopmaz', 'ın', 'parmağı', 'kırıldı'], [582312])
768869: TaggedDocument(['aks', 'ekipleri', 'hüseyin', 'turgut', 'u', 'sıkıştığı', 'yerden', 'kurtarırken', 'sağlık', 'ekiplerinin', 'ilk', 'müdahalesini', 'yaptığı', 'müzeyyen', 've', 'hüseyin', 'turgut', 'ambulanslarla', 'inci', 'yıl', 'milas', 'devlet', 'hastanesi', 'ne', 'kaldırıldı'], [768869])
2697321: TaggedDocument(['hoşgörülü', 'olmak', 'gerekiyor'], [2697321])
Toplam süre = 28882.703302889 saniye

Process finished with exit code 0

Burada “doküman” sözcüğü yerine “cümle” sözcüğünü kullanmak aslında çok daha doğru olacak. Çünkü veri dosyamızın her satırında ayrı bir cümle var. Eğer bu yapıyı her satırda bir cümle yerine bir paragraf veya bir doküman olarak düzenlersek alacağımız yanıtlar paragraflara ve dokümanlara göre düzenlenmiş olacaktır.

Bu kavramlar sentence2vec, paragraph2vec ve doc2vec olarak sunuluyor. Ama hepsinin işleyişi aynı.

Önceki yazılarımda da belirttiğim gibi dosyamızdaki sözcükleri olduğu gibi kullanmak yerine “kök”lerini kullandığımızda daha başarılı sonuçlar almayı bekleyebiliriz. Çünkü bu durumda sözcüklerin sayısı azalarak daha kolay öbeklenebilir hale gelecektir.

Yukarıdaki örnekte benim dikkatimi ilk çeken ayrıntı, aynı cümlenin kendi kendine yakınlığının sadece 0.6513625979423523 çıkmasıydı. Oysa bu, en azından, 1’e daha yakın olmalıydı diye düşünüyorum.

İlk 4 cümlede “adem” sözcüğü ortak payda gibi görünüyor. Sonrakilerde kolay görülebilen bir payda yok.

Vektör boyutunu ve veri büyüklüğünü arttırmak, daha kolay anlaşılır sonuçlar elde etmemizi sağlayacaktır. Eğer elinizdeki olanaklar uygunsa, siz de bu tür denemeler yapabilirsiniz. (Ben vektör boyunu 100 olarak aldım.)

Doc2vec yöntemiyle ilgili bilgi ve örnekler oldukça kısıtlı.
Eğer bu tür bilgilere erişebilirseniz, lütfen, linklerini benimle paylaşmanızı rica ediyorum.

Yeni çalışmalarımı yine buradan duyuracağım.
Beni izleyin!

Ahmet Aksoy

Linkler:

http://gurmezin.com/gensim-vektorel-dokuman-egitimi/

  2 Yanıt - “Gensim Vektörel Doküman Eğitimi”

  1. Merhabalar daha detaylı bir eğitim serisi yapmanız mümkün mü acaba? Zira ingilizce kaynaklar da yetersiz bu konuda

    • Şu sıralar çok yoğunum. Uygun bir fırsat yakaladığımda daha ayrıntılı bir doküman hazırlamaya çalışırım. Ama eğitim serisi bu koşullarda biraz zor.

 Bir yanıt bırakın

Bu HTML tagleri ve özellikleri kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(gerekli)

(gerekli)

This site uses Akismet to reduce spam. Learn how your comment data is processed.