Kelime çantası modeli

**Kelime çantası modeli** doğal dil işleme ve enformasyon getiriminde kullanılan basitleştirici bir temsildir. Bu modelde bir metin (cümle ya da belge gibi bir metin) kelimelerinin çantası (çoklukümesi) halinde temsil edilir, çoksallık tutulurken gramer ve hatta kelime sırası göz ardı edilir. Kelime çantası modeli bilgisayarla görmede de kullanılmıştır.

Kelime çantası modeli belge sınıflandırma yöntemlerinde yaygınca kullanılır: her kelimenin oluşu (sıklığı) bir sınıflandırıcının eğitilmesinde özellik olarak kullanılır.

Kelime çantasına dilbilimsel bağlamda erken bir atıf Zellig Harris'in *Dağıtımsal Yapı* üzerine 1954 makalesinde bulunabilir.

## Örnek

Burada bir metin belgesini kelime çantası kullanarak modelliyoruz.

İşte iki tane basit metin belgesi:


```text
(1) Can film seyretmeyi sever. Meryem de filmleri sever.
```



```text
(2) Can futbol maçı seyretmeyi de sever.
```


Bu iki metin belgesine dayanarak şöyle bir liste oluşturulur:

```javascript
[
    "Can",
    "film",
    "futbol",
    "maçı",
    "seyretmeyi",
    "sever",
    "Meryem",
    "de",
    "filmleri"
]
```


## Uygulama
Pratik kullanımda kelime çantası modeli çoğu zaman özellik üretme aracı olur.

Metni "kelime çantasın" dönüştürdükten sonra, metnin karakterini verecek çeşitli nicelikler hesaplayabiliriz. Kelime çantası modelinden hesaplanan en yaygın karakteristik tipi ya da özellik, terim sıklığıdır, yani o terimin metinde kaç kez geçtiğidir. Yukarıdaki örnekte her bir ayrı kelimenin terim sıklıklarını şu iki listeyi oluşturarak kaydedebiliriz.

```javascript
(1) [1, 1, 0, 0, 1, 2, 1, 1, 1]
(2) [1, 0, 1, 1, 1, 1, 0, 1, 0]
```


Listelerdeki her bir girdi listedeki mütekabil girdinin sayısını belirtir (buna histogram temsili de denir). Örneğin, birinci (belge 1'i temsil eden) listede, ilk iki girdi "1,2"dir. İlk girdi "Can" kelimesine tekabül eder, o da listedeki ilk kelimedir ve değeri "1"dir çünkü "Can" birinci belgede 1 kere geçer. Bunun gibi, ikinci girdi "film" kelimesine tekabül eder, o da listedeki ikinci kelmedir ve değeri "1"dir çünkü "film" ilk belgede 1 kere geçer. Bu liste (ya da vektör) temsili kelimelerin kaynak cümlelerdeki sırasını muhafaza etmez, bu da kelime çantası modelinin temel özelliğidir. Bu tür temsillerin birçok başarılı uygulaması vardır, örneğin e-posta filtreleme.
 
Fakat terim sıklıkları illaki en iyi metin temsili değildir. "O", "bir", "ve" gibi yaygın kelimeler neredeyse hep metindeki en yüksek terim sıklığına sahiptir, demek ki çok sayıda olmak tekabül eden kelimenin daha önemli olduğunu göstermez. Bu problemi ele alarak terim sıklıklarını "normalleştirmenin" en sevilen yollarından birisi, terimleri belge sıklığının tersiyle ağırlıklandırmaktır, buna da tf-idf denir. Buna ek olarak, sınıflandırma amacına yönelik belgenin sınıf etiketini dikkate alan süpervizeli alternatifler geliştirilmiştir. Son olarak, bazı problemlerde sıklıklar yerine ikili (varlık/yokluk ya da 1/0) ağırlıklar kullanılır. (Mesela WEKA makine öğrenmesi yazılım sisteminde bu seçenek konmuştur.)

## N-gram modeli
Kelime çantası modeli sırasız bir belge temsilidir—kelimelerin sadece sayısına bakılır. Mesela yukarıdaki örnekte "Can film seyretmeyi sever. Meryem de filmleri sever", kelime çantası modeli bu metinde her cümlenin "sever" yüklemiyle bittiğini ortaya çıkarmayacaktır. Alternatif olarak, metindeki bu uzamsal enformasyonu saklamakta n-gram modeli kullanılabilir. Yukarıdaki aynı örneğe uygulanarak, **bigram** modeli metni şu birimlere çözdürecek ve her birimdeki terim sıklıklarını önceki gibi saklayacaktır.


```javascript
[
    "Can film",
    "film seyretmeyi",
    "seyretmeyi sever",
    "Meryem de",
    "de filmleri",
    "filmleri sever"
]
```


Kavram olarak kelime çantası modelini n-gram modelin n=1 için özel durumu gibi görebiliriz. Daha detaylı tartışma dil modelinde okunabilir.

## Karım dolabı [Hashing trick]

Sözlük kullanımının yaygın bir alternatifi karım dolabıdır: kelimeler doğrudan bir karım işleviyle [hashing function] endekslere eşlenir.  Kelimelerin endekslere bir karım işleviyle doğrudan eşlenmesiyle, sözlük saklayacak belleğe hiç gerek kalmaz. Karım çakışmaları olduğunda çoğu zaman boşaltılmış bellek kullanılarak karım kovalarının sayısı çoğaltılır. Pratikte, karım, kelime çantası modellerinin kodlanmasını müthiş basitleştirir ve ölçeklenebilirliğini geliştirir.

## Örnek kullanım: spam süzgeci
Bayesci spam süzgecinde, e-posta mesajı iki olasılık dağılımının birinden seçilen kelimelerin sırasız derlemesi gibi modellenir: biri spamleri, öbürü meşru e-postaları ("ham") temsil eder. Kelimelerle dolu iki tane çanta hayal edin. Çantaların biri spam mesajlarda bulunan kelimelerle doludur, diğer çanta meşru e-postalarda bulunan kelimelerle doludur. Verilen herhangi bir kelimenin iki çantada da bulunması muhtemel olsa da, "spam" çantası "borsa", "Viagra", "satın al" gibi spamvari kelimeleri çok daha sıklıkla içerecektir, "ham" çantası ise kullanıcının arkadaşları ve işyeriyle ilgili kelimeleri daha çok içerecektir.

E-posta mesajını sınıflandırmak için, Bayesci spam süzgeci bu mesajın iki çantanın birinden rastgele dökülmüş bir kelimeler yığını olduğunu varsayar ve Bayesci olasılıkları kullanarak hangi çantanın daha muhtemel olduğunu belirler.

## Kaynakça