Metin özetleme veya metin tercümesi gibi NLP problemlerini çözebilmek için uygulamaya koyacağımız algoritmalar kelimeler üzerinden değil sayılar üzerinden çalışmak zorundadırlar. Algoritmamızı uygulayabilmemiz için bir model oluşturmamız gerekir. Oluşturacağımız model metni temsil eder ve bu model üzerinde işlem yapmamız gerekir. Farklı yöntemler kullanarak model oluşturabiliriz. Bunlardan Bag of words, TD-IDF ve N-Gram dil modellemeleri nasıl geliştirilir ona değineceğim.
Image Source: https://www.technologyreview.com/2021/01/12/1016031/jumbled-up-sentences-ai-doesnt-understand-language-nlp-bert-fix/
Bag of Words Model
Bag of words modeli metin verisinin gösterim yollarından birisidir. Model üzerinden machine learning algoritmalarını kullanarak amacımız doğrultusunda işlemler yapabiliriz. Örneğin verilen üç cümle üzerinden bir bag of words model tasarlamaya çalıştığımızı düşünelim. Cümlelerimiz aşağıdaki gibi olsun.
- “I am going to school today.”
- “I have to study math after school.”
- “Math is going to be hard for me. ”
Cümlede geçen kelimelerin büyük harf küçük harf duyarlılığını ortadan kaldırmak için tümüyle küçük harflere çevrilmesi gerekiyor. Cümleleri incelersek bazı kelimelerin birden fazla kez geçtiğini bazılarının sadece bir kez kullanıldığını görüyoruz. Cümlelerde geçen kelimelerin cümlede geçme sıklığını tabloda gösterirsek.

Tabloda verilen üç cümlede geçen kelimeleri geçme sıklığına göre sıralanmış olarak görebiliyoruz. Bag of words modelini tanımlayabilmek için en fazla kullanılan 6 kelimeyi ve cümlelere göre kullanılma sıklıklarını bir matris üzerinde göstermemiz gerekiyor. Aşağıda görüldüğü gibi cümlelere göre kelimelerin geçme sıklığını gösteren matris oluşturabiliriz.
Words/Sentences | to | i | going | school | study | math |
Sentence 1 | 1 | 1 | 1 | 1 | 0 | 0 |
Sentence 2 | 1 | 1 | 0 | 1 | 1 | 1 |
Sentence 3 | 1 | 0 | 1 | 0 | 0 | 1 |
Oluşturduğumuz matris metnimizi temsil eden bir bag of words modelidir. Matristeki 1 değeri kelimenin cümlede geçtiğini 0 değeri ise geçmediğini gösteriyor. Bu model üzerinden amacımıza göre machine learning algoritmalarını kullanarak metin üzerinde analizler yapabiliriz.
TD-IDF Model
Dil modelleme de kullanılan bir diğer model TD-IDF modelidir.(Robertson 2004).Daha önce incelediğimiz Bag of words modellerde iki farklı problem karşımıza çıkıyor. İlki model üzerindeki kelime değerlerinin saklanmamasıyla ilgili. Yukarıda oluşturduğumuz BOW matrisini incelersek tüm kelimelerin aynı önem değerine sahip olduğunu görüyoruz. Başka bir deyişle cümlelerde geçen kelimeler 1 değeri ile temsil ediliyor. Bu durumda iki farklı kelime arasında ki önem değerini tutamamış oluyoruz. BOW modelini herhangi bir machine learning algoritmasını çalıştırdığımızda model üzerinde ki kelimelerin aynı öneme sahip olduğunu düşünecektir. İkinci problem ise semantic bilginin saklanmıyor olması. BOW modelinde kelimelerin anlamları temsil edilmiyor. TD-IDF modeli bu iki problemin çözümünde yardımcı oluyor. TF-IDF modelin nasıl oluşturulduğunu incelersek.
TF-IDF TF (Term Frequency) IDF (Inverse Document Frequency) olarak iki farklı hesaplamanın çarpımından oluşuyor. Başka bir deyişle TF-IDF = TF * IDF denilebilir. Term frequency bir kelimenin kullanıldığı cümle üzerindeki frekansını yani o cümle için önemini tanımlıyor. Inverse document frequency değeri ise kelimenin tüm corpus üzerindeki değerini tanımlıyor. TF ve IDF değerlerinin çarpımı ise kelimenin TF-IDF değerini temsil ediyor. Term frequency için kullanılan formül aşağıdaki şekilde.
TF = (Number of occurance of a word in a sentence) / (Total number of words in sentence)
Formülü kullanarak daha önce verilen 3 cümlenin term frequency değerlerini hesaplamaya çalışırsak.
Words/Sentences | to | i | going | school | study | math |
Sentence 1 | 0.167 | 0.167 | 0.167 | 0.167 | 0 | 0 |
Sentence 2 | 0.142 | 0.142 | 0 | 0.142 | 0.142 | 0.142 |
Sentence 3 | 0.125 | 0 | 0.125 | 0 | 0 | 0.125 |
Tabloyu cümlelerle beraber incelersek, “to” kelimesi ilk cümlede 1 kez geçiyor ve birinci cümlede ki toplam kelime sayısı 6,TF formülünü değerler için uygularsa TF=1/6 = 0.167 değeri bulunuyor. Benzer şekilde “to” kelimesi ikinci cümlede bir kez geçiyor ve cümlede ki kelime sayısı 7, TF formülünü uygularsak TF=1/7 = 0.142 değerini buluyoruz. Term frequency formülünü tüm kelimeler için uygularsak yukarıda görüldüğü şekilde term frequency matrisini elde ediyoruz. Sonraki adımda Inverse Document Frequency matrisini oluşturmamız gerekiyor. IDF değerini aşağıdaki formülle hesaplıyoruz.
IDF = log ((Number of sentences) / (Word occurance in all sentences))
Words | to | i | going | school | study | math |
IDF | 0 | 0.176 | 0.176 | 0.176 | 0.477 | 0.477 |
“To” kelimesi için idf değerini hesaplamaya çalışırsak, corpusta 3 tane cümle bulunuyor, “to” kelimesi ise 3 cümlede de geçiyor. Değerleri formülde yerine yazarsak IDF = log(3/3) = 0 bulunuyor. Benzer şekilde “i” kelimesi için hesap yaptığımızda IDF = log(3/2) = 0.176 değeri bulunuyor. Tüm kelimeler için formülü kullanarak işlem yaptığımızda IDF matrisini oluşturmuş oluyoruz.
TD-IDF modelini oluşturabilmek için formüle göre TD ve IDF matrislerini birbiriyle çarpmamız gerekiyor.
Words/Sentences | to | i | going | school | study | math |
Sentence 1 | 0 | 0,029 | 0,029 | 0,029 | 0 | 0 |
Sentence 2 | 0 | 0,024 | 0 | 0,024 | 0,067 | 0,067 |
Sentence 3 | 0 | 0 | 0,022 | 0 | 0 | 0,059 |
TD ve IDF değerlerini çarpınca yukarıda ki TD-IDF matrisini elde ediyoruz. Elde edilen matrisi dil modeli olarak düşünebiliriz. Oluşturulan dil modelini incelediğimizde TD-IDF değeri yüksek olan kelimeler için daha önemli kelimelerdir diyebiliriz. Örneğin modele göre verilen cümlelerde geçen en önemli kelimeler “study” ve “math” kelimeleridir. En önemsiz kelime ise “to” kelimesi olarak görülüyor. Böylelikle TD-IDF yönteminin daha büyük corpuslarda çalışırken verilen metni analiz etmemizde yardımcı olabileceğini söyleyebiliriz.
N-Gram Model
Natural language processing uygulamalarında oluşturulan bir başka model ise N-Gram Modeldir. N-Gram model Markov Chain prensibini temel alıyor. Literatürde Markov Chain prensibini açıklamak için genelde yazı tura oynayan kumarbaz örneği veriliyor. Konuyu örnek üzerinden ele alırsak yazı tura oymayan bir kumarbaz olduğunu düşünelim. Kumarbaz her yazı geldiğinde 1 lira kazanıyor, her tura geldiğinde ise 1 lira kaybediyor. Oyunun 10 kez oynadığını kumarbazın ise 10 oyun sonucunda 5 lira parası olduğunu düşünelim. Kumarbaz 11.kez oyunu oynamak istediğinde prensibe göre o anki mevcut parasını bilmemiz yeterlidir. Markov Chain prensibine göre o ana kadar oynadığı bölümlerde ne kadar kazandığının veya kaybettiğinin bir önemi yoktur.11. oyun sonunda kumarbazın parası ya 4 liraya düşecektir ya da 6 liraya çıkacaktır. Bu durumda önce ki durumların sonra ki durumu kestirmek için herhangi bir fark yaratmıyor diyebiliriz.
N-Gram modelde yazı tura oyunundaki olasılık durumları kelimeler, cümleler ve karakterler üzerinden tanımlanıyor. Cümlede geçen karakterler Markov Chain’ine dahil olan maddeler olarak düşünebiliriz. Başka bir deyişle karakter veya cümle dizisinde önceki durumlarda oluşturulan karakterlerin bir sonra oluşturulacak olan kelimeye veya karaktere etkisi yoktur diyebiliriz. Örnek olarak aşağıdaki cümleyi ele alırsak.
“I am going to school today.”
N = 2 olması durumunda model aşağıda ki gibi olacaktır.
“I ”,” a”,”am”,”m ”,” g”,”go”,”oi”,”in”,”ng”,”” etc
N=3 olması durumunda model aşağıda ki gibi olacaktır.
“I a”,” am”,”am ”,”m g”,” go”,”goi”,”oin”,”ing” etc
Benzer şekilde karakterlerde olduğu gibi kelimelerde de aynı yöntemi uygulayabiliriz. N = 3 olarak belirlersek modelimiz aşağıdaki gibi görülecektir.
“I am going”,”am going to”,”going to school”,”to school today”
N-Gram tabanlı dil modellemesine kullanım alanlarına örnek olarak Google aramasındaki kelime tamamla uygulaması verilebilir.
Bu makalemde bir metni analiz etmek üzere dil modeli nasıl oluşturulur ona değindim. Oluşturduğumuz model üzerinde çözmeye çalıştığımız problemin amacına göre makine öğrenimi ve derin öğrenme teknikleri uygulayacağız. Umarım faydalı olmuştur, sonraki yazılarda görüşmek üzere.
Murat 🙂