Veri Sktrma Algoritmalar Ders 1 Giri Olaslk Tabanl
Veri Sıkıştırma Algoritmaları Ders 1: Giriş & Olasılık Tabanlı Teknikler Yrd. Doç. Dr. Altan MESUT
Veri Sıkıştırmanın Amacı n Veri sıkıştırma yöntemleri sayesinde; veriler saklama ortamlarında daha az yer işgal eder n veriler bir iletişim ağı üzerinden daha hızlı transfer edilebilirler n n Son yıllarda disk kapasitelerinin büyümesi, genel amaçlı sıkıştırma uygulamalarının (Winzip, Winrar, …) kullanımını azalttıysa da, aslında ses, görüntü ve video verilerinin tamamına yakını çeşitli 24. 11. 2020 Bölüm 1 - Giriş 2
Veri Sıkıştırma Yöntemleri n Sıkıştırma biçimlerine göre: Kayıpsız veri sıkıştırma yöntemleri n Kayıplı veri sıkıştırma yöntemleri n n Uygulama alanlarına göre: Metin ve ikili tabanlı veri sıkıştırma yöntemleri n Ses sıkıştırma yöntemleri n Görüntü sıkıştırma yöntemleri n Hareketli görüntü (video) sıkıştırma yöntemleri n 24. 11. 2020 Bölüm 1 - Giriş 3
Kayıpsız Veri Sıkıştırma Yöntemleri n Olasılık Tabanlı Yöntemler Huffman Kodlaması n Aritmetik Kodlama n n Sözlük Tabanlı Yöntemler Digram Kodlaması (statik sözlük tabanlı) n LZ 77, LZ 78, LZW (dinamik sözlük tabanlı) n n Sözlük + Olasılık Tabanlı Yöntemler n DEFLATE (LZ 77 + Huffman) 24. 11. 2020 Bölüm 1 - Giriş 4
Olasılık Tabanlı Yöntemler n Sıkıştırılması istenen mesajın (semboller kümesinin) tek tüm sembollerinin veya birkaç sembolün bir araya getirilmesi ile oluşturulan alt sembol kümelerinin mesaj içindeki olasılıklarının bulunması, ve bu olasılıklar temel alınarak değişken uzunluklu kodlama ile mesajın tekrar kodlanmasına dayalı yöntemlere olasılık tabanlı yöntemler adı verilir. 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 5
Değişken Uzunluklu Kodlama n Sabit Uzunluklu Kodlama (Fixed Length Coding) n n n Her sembol eşit uzunlukta kod ile kodlanır. Örneğin ASCII kodlamasında her sembol için 8 -bit büyüklüğünde bir kod kullanılır. Değişken Uzunluklu Kodlama (Variable Length Coding - VLC) n n Farklı sembollerin, farklı sayıda bit ile ifade edilmesi tekniğidir. Eğer mesajda daha sık kullanılan semboller daha az bit ile ifade edilirse, mesajın tamamı için sembol başına kullanılan bit sayılarının ortalaması (ortalama uzunluk) azaltılmış olunur. Örneğin a ve e gibi sık kullanılan sesli harfler 1 -2 bit ile, j gibi seyrek kullanılan harfler ise daha fazla bit ile ifade edilir. 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 6
Değişken Uzunluklu Kodlama n n Değişken uzunluklu kodlama yapılırken karşılabilecek en büyük sorun, kodlama (encoding) sırasında uzunlukları değiştirilen semboller arkaya eklenerek sıkıştırılmış mesaj oluşturulduğu için, kod çözme (decoding) yapılırken hangi bit’in hangi sembolün bir parçası olduğunun bilinememesidir. Bu belirsizlik durumundan kaçınmak için: n n İki ardışık sembolü birbirinden ayıran belirli bir sembol kullanılabilir. Her sembolden önce o sembolün uzunluğunu bildiren bir ekstra sembol yer alabilir. Yukarıdaki çözümler fazladan veri eklenmesi gerekliliği sebebiyle kullanışlı değildirler. Bu yöntemler yerine, her bit serisi için tek bir çıktı üreten yalnız bir şekilde çözülebilir (uniquely decodable kodlar tasarlamak daha 7 Bölüm 2 - Olasılık Tabanlı)Teknikler 24. 11. 2020 n
Örnek “karapara” kelimesi için karakter olasılıkları: P(a) = 0, 5 = 1/21 P(r) = 0, 25 = 1/22 P(k) = 0, 125 = 1/23 P(p) = 0, 125 = 1/23 k = ar p = ra önek kodu Yalnız bir şekilde çözülebilir değil 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler önek değil Yalnız bir şekilde çözülebilir kod 8
Kodların ikili ağaç ile gösterimi 1. Kod a 0 2. Kod r k p 01 10 1 3. Kod a 0 r 10 k p 110 111 r 01 k 011 p 0111 Tüm semboller yapraklarda. Önek kodu olduğunun ispatı. 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 9
Entropi Olasılıklar: P(a) = 1/21 P(r) = 1/22 P(k) = 1/23 P(p) = 1/23 Entropi (Claude Elwood Shannon) Entropi, her sembolün veya semboller kümesinin öz bilgisinin ağırlıklı ortalamasıdır. Ortalama sembol uzunluğu entropiye eşit ise, bulunabilecek en iyi kodu bulunmuş demektir. 2. Kod’un uzunluğu entropiye eşittir. 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 10
Huffman Kodlaması 1952 yılında David Huffman tarafından geliştirilmiştir. n Verilen bir model (olasılık kümesi) için en uygun önek kodunu oluşturur. n Sıkıştırma algoritmalarında en yaygın olarak kullanılan yöntemlerden biridir. n GZIP, JPEG, MPEG gibi yaygın olarak kullanılan sıkıştırma yöntemlerinde son işlem olarak kullanılır. n 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 11
2. Kod’un oluşturulması Olasılıklar: P(a) = 0, 5 P(r) = 0, 25 P(k) = 0, 125 P(p) = 0, 125 Olasılıklar: P(a) = 0, 5 P(r) = 0, 25 P(k) + P(p) = 0, 25 Olasılıklar: P(a) + P(r) + P(k) + P(p) = 1 P(r) + P(k) + P(p) = 0, 5 a 0 P(k) + P(p) = 0, 25 r 10 k p 110 111 P(a) = 0, 5 P(r) + P(k) + P(p) = 0, 5 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 12
Uyarlamalı Huffman Kodlaması n Huffman kodlaması, kodlanacak kaynağın olasılık bilgisine ihtiyaç duyar. Eğer bu bilgi yoksa, Huffman kodlaması iki geçişli bir prosedür haline gelir: n n n ilk geçişte olasılık bilgileri elde edilir. ikinci geçişte kaynak kodlanır. Uyarlanır (Dinamik) Huffman Kodlaması olarak bilinen yaklaşım ile, kodlama yapılırken daha önce karşılan sembollerin istatistiği temel alınarak Huffman kodlaması tek geçişli hale getirilir. 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 13
Huffman Kodlamasının Etkinliği n Alfabenin küçük olduğu ve karakterlerin belirme olasılığında büyük farklar olduğu durumlarda, Huffman Kodlamasının etkinliği azalır. P(a 1) = 0. 95 P(a 2) = 0. 02 P(a 3) = 0. 03 H = 0. 335 bit/semb 1. 05 bit/semb a 1 = 0 a 2 = 11 a 3 = 10 Ortalama oran entropiden %213 daha fazla 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 14
Huffman Kodlamasının Etkinliği n Birkaç sembolü bir araya getirerek entropi ile ortalama uzunluk arasındaki farkı azaltabiliriz. P(a 1 a 1) = 0. 9025 P(a 1 a 2) = 0. 0190 P(a 1 a 3) = 0. 0285 P(a 2 a 1) = 0. 0190 P(a 2 a 2) = 0. 0004 P(a 2 a 3) = 0. 0006 P(a 3 a 1) = 0. 0285 P(a 3 a 2) = 0. 0006 P(a 3 a 3) = 0. 0009 24. 11. 2020 Genişletilmiş alfabe için ortalama oran = 1. 222 bit/sembol (Orjinal alfabe cinsinden = 0. 611 bit/sembol) Entropi (H) = 0. 335 bit/sembol Halen entropiden %82 fazla Bölüm 2 - Olasılık Tabanlı Teknikler 15
Huffman Kodlamasının Etkinliği n Sembolleri birleştirmeye devam ederek 8 sembollük bloklar oluşturulursa, daha kabul edilebilir değerlere ulaşılabilir. Fakat bu durumda alfabe büyüklüğü 6561 (38) olacaktır ki, bu büyüklük saklama kapasitesini arttırıp, işlem süresini de yavaşlatacağı için elverişli değildir. 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 16
Aritmetik Kodlama Alfabenin küçük olduğu ve karakterlerin belirme olasılığında büyük farklar olduğu durumlarda, belirli sıralamaya sahip sembollere kod atayarak, aynı uzunluktaki tüm olası sıralamalara kod oluşturma zorunluluğu getirmeyen bir yönteme ihtiyaç vardır. Aritmetik kodlama bu ihtiyacı karşılamıştır. n Aritmetik kodlamada, belirli bir sembol serisini diğer sembol serilerinden ayırmak için, her serinin tekil bir belirleyici ile etiketlenmesi gerekir. Bu etiket (tag), genellikle 0 ile 1 arasında bir sayı Bölüm 2 - Olasılık Tabanlı Teknikler 17 24. 11. 2020 şeklinde belirlenir. n
a 1, a 2, a 3 serisi için etiketin bulunması. P(a 1) = 0. 7, P(a 2) = 0. 1, P(a 3) = 0. 2 Örnek 0. 0 a 1 0. 00 0. 490 a 1 0. 5460 a 1 0. 5530 0. 7 0. 8 0. 49 a 2 a 3 1. 0 24. 11. 2020 0. 56 0. 539 a 2 0. 546 0. 5558 a 2 a 3 0. 70 0. 560 Bölüm 2 - Olasılık Tabanlı Teknikler 0. 5572 a 3 0. 5600 18
Öne Alma (Move-To-Front - MTF) Kodlaması n Temel mantık, karşılan karakterin alfabedeki sırasının kodlanması ve o karakterin alfabenin ilk karakteri yapılmasıdır. Küçülen değerler daha sonra Huffman ya da Aritmetik kodlama ile sıkıştırılır. n Örneğin [a, b, c, d, . . . ] alfabesi için c karakterinin kodlanması istenirse, c’nin alfabedeki sırası olan 3 kodlanır ve yeni alfabe c’nin başa taşınması ile [c, a, b, d, . . . ] şeklinde olur. Bu işlem sıkıştırılacak mesajının sonuna kadar tekrar edilir. Eğer aynı karakterler mesaj içinde birbirlerine yakın yerleşmişlerse, kodlanacak tamsayı değerleri küçük olacak ve daha iyi sıkıştırma Bölüm 2 - Olasılık Tabanlı Teknikler 24. 11. 2020 gerçekleşecektir. n 19
Artık Değer (Residual) Kodlaması n Fark kodlaması olarak ta bilinen artık değer kodlamasında kodlayıcı, daha önce kodlanmış değerleri temel alarak bir sonraki mesajın (karakterin, pikselin, ses örneğinin, …) değerini tahmin etmeye çalışır ve tahmin edilen değer ile gerçek değerin farkını (artık değeri) kodlar. Bu fark mesajın değerinden daha düşük ise (öyle olması muhtemeldir), sıkıştırma oranı artacaktır. n 106, 108, 110, 109, 107, 105 yerine 106, 108, 0, -3, 1, 0 Bu teknik, artık değerin sadece belirli aralıklarla Bölüm 2 - Olasılık Tabanlı Teknikler 20 24. 11. 2020 kullanılması ile kayıplı sıkıştırmada da n
PPM (Prediction by Partial Matching) n n n Cleary ve Witten tarafından geliştirilmiş ve 1984 yılında yayınlanmıştır. PPM (Kısmi eşleme yoluyla öngörü), bir karakterin ne olabileceğini o karakterden önceki birkaç karakteri (konteksti) kullanarak tahmin eder. Tahmin yapılırken sıkıştırılmakta olan girdinin daha önceki kısımlarından elde edilen, karakterlerin birbirlerini takip etme olasılıklarının saklandığı çizelge kullanılır. Bu çizelgedeki olasılık dağılımları Huffman veya aritmetik kodlayıcı ile sıkıştırılır. 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 21
PPM Örnek: abracadabra Esc’nin olasılığını belirlemek: • PPMA: tüm kaçış karakterlerinin tekrar sayısını 1 olarak kabul eder • PPMC (örnekte kullanılan): ilgili karakter grubunu takip eden farklı karakter sayısını kullanır (Örneğin, 1. derecede a karakterini b, c ve d olmak üzere 3 farklı karakter takip ettiği için, a karakterinden sonraki kaçış karakterinin tekrar sayısı 3 olarak kabul edilmiştir). • PPMD: kontekstteki farklı karakter sayısını toplam karakter sayısının iki katına bölerek bulur (Bu yönteme göre a → Esc’nin olasılığı 3/8 olur. Olasılık dağılımının düzgün olması için diğer karakterlerin tekrar sayıları da 2 katının 1 eksiği ile güncellenir. Bu durumda a → b’nin tekrar sayısı 3, olasılığı da 3/8 olacak, a → c ve a → d ise 1/8 Bölüm 2 - Olasılık Tabanlı Teknikler 24. 11. 2020 olasılığına sahip olacaktır). tekrar sayısı olasılı k kontekst kaçış karakteri 22
abracadabra + a ? n abracadabra’dan sonra bir a karakteri gelirse: Daha önce ra’yı sadece c takip etmiştir. 2. derecede bulunamadığı için Esc olasılığı olan 1/2 kodlanır ve 1. dereceye inilir. n a karakterini takip eden a aranır. Burada da bulunamayınca kaçış karakterinin olasılığı olan 3/7 kodlanır ve 0. dereceye inilir. n a karakterinin kendisi aranır. Burada a karakteri vardır ve olasılığı 5/16’dır. Bölüm 2 - Olasılık Tabanlı Teknikler 23 24. 11. 2020 n Kodlanan seri: 1/2, 3/7, 5/16 n
PPM’de Çıkarma (exclusion) İşlemi 2. derecede ra’dan sonra c’ye rastlanmadığı için kaçış karakteri kullanıldığına göre, 1. derecede de a’dan sonra c gelemez. n a’dan sonra c gelmesi olasılığı göz ardı edilerek tekrar sayısı 0 yapılırsa, Esc’nin olasılığı da 3/7 yerine 3/6 olarak kodlanabilir. n Benzer şekilde kodlanacak karakter b, c veya d’den birisi olmadığı için 0. dereceye inildiğine göre, bu derecedeki b, c ve d’nin tekrar sayıları sıfırlanabilir. O halde 0. derecede a’nın olasılığı 5/12 olarak kabul edilebilir. Bu işleme çıkarma (exclusion) denir. n PPMC çıkarma işlemini kullanarak sıkıştırma oranını arttırır. Bu durumda kodlanacak seri (1/2, 3/6, 5/12) Bölüm 2 - Olasılık Tabanlı Teknikler 24 24. 11. 2020 n
abracadabra + e ? n n Eğer 0. derecede yer alan karakterler haricinde bir karakter, örneğin e karakteri kodlanmak istenseydi, Esc’nin olasılığı olan 5/12 kodlanıp -1. dereceye inilmesi gerecekti. Bu karakter 0. derecedeki 5 karakterden biri olmadığı için ASCII Tablosundaki diğer 251 karakterden biridir ve doğal olarak olasılığı da 1/251’dir. Bu durumda abracadabra’dan sonra gelen e için kodlama masrafı; 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 25
PPM: En iyi sıkıştırma oranına sahip n Kontekst büyüklüğü (k) 4 veya 5 iken sıkıştırma oranı yüksektir. Eğer 5’ten büyük olursa: n n kaçış karakterlerinin olasılıkları için yapılan masraf nedeniyle sıkıştırmada artış meydana gelmeyecek, hatta sıkıştırma süresi artacağı için elverişsiz bir durum ortaya çıkacaktır. PPM tabanlı yöntemler yavaş oldukları ve çok bellek kullandıkları için, çoğunlukla sadece saklama kapasitesini azaltmak amacıyla kullanılmaktadırlar. PPM, ağ transferlerini hızlandırma amacıyla kullanılmak istenirse, yavaşlığı nedeniyle bazı Bölüm 2 - Olasılık Tabanlı Teknikler 24. 11. 2020 n 26
BWCA (Burrows-Wheeler Compression Algorithm) Burrows ve Wheeler tarafından geliştirilmiş ve 1994 yılında yayınlanmıştır. n Sıkıştırılması istenen veri bloklara ayrılarak, her blok için benzer içeriklere sahip olan sembolleri bir araya getirip gruplayan Burrows-Wheeler Dönüşümü (BWT) uygulanır. n BWT’den sonra MTF kodlaması gerçekleştirilir. BWT ve MTF sıkıştırma yapmaz sadece sonradan yapılacak olan sıkıştırma işleminin daha başarılı olması için veriyi uygun biçime getirir. n Bu iki aşamayı asıl sıkıştırma işleminin gerçekleştiği Huffman veya aritmetik kodlama takip eder. Bölüm 2 - Olasılık Tabanlı Teknikler 27 24. 11. 2020 n
BWCA (Burrows-Wheeler Compression Algorithm) Sonradan geliştirilen başka BWT-tabanlı algoritmalar, MTF yerine sıkıştırma oranını arttıran daha farklı dönüşümler kullanmışlardır. Bu algoritmaların çoğu, Huffman veya aritmetik kodlama öncesinde RLE kodlamasını da kullanmışlardır. 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 28
BWT Dönüşümü: abracadabra n İlk işlem, abracadabra kelimesini bir matrisin ilk satırı gibi düşünüp, bu kelimeye dairesel sola kaydırma uygulayarak (en soldaki karakteri en sağa taşıyarak), oluşan yeni kelimeyi matrisin bir alt satırına yazma ve bu işlemi en sondaki karakter en başa gelene kadar devam ettirme işlemidir. 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 29
BWT Dönüşümü: abracadabra İkinci işlem, ilk matrisin satırlarını oluşturan kelimeleri, tersten okunuşlarına göre alfabetik sıralayarak yeni bir matris oluşturmaktır. n BWT’nin çıktısı: Sıkıştırılan kelimenin yeni matrisin hangi satırında yer aldığı (5) ve ilk sütunu oluşturan karakterler (Bu bdbcarraaaa ) çıktı MTF kodlaması ile daha da sıkıştırılabilir biçime n getirilir. 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 30
Ters-BWT Dönüşümü 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 31
Bzip 2 n n n Sıkıştırılması istenen veri bloklara ayrılarak, her blok için ayrı BWT dönüşümü uygulanır. Pratikte blok boyu örneğimizde olduğu gibi 11 byte değil, 100 KB gibi çok daha büyük değerlere sahiptir. Ücretsiz bir sıkıştırma aracı olan Bzip 2, BWT ve Huffman kodlamasını kullanarak dosyaları sıkıştırır. n Sıkıştırma oranı geleneksel LZ tabanlı sıkıştırma araçlarından çok daha iyidir. PPM ailesi istatistiksel sıkıştırıcıların performansına oldukça yakındır. 24. 11. 2020 Bölüm 2 - Olasılık Tabanlı Teknikler 32
- Slides: 32