Konu keşfi, belgeleri kümelemek, çevrimiçi içerikleri bilgi erişimi ve öneriler için düzenlemek gibi çeşitli amaçlar için faydalıdır. Birçok içerik sağlayıcı ve haber ajansı, okurlara makale önermek için konu modellerini kullanıyor. Benzer şekilde işe alım firmaları, iş tanımlarını çıkarmak ve bunları adayların beceri kümeleriyle eşleştirmekte konu modellerinden yararlanıyor. Veri bilimci işi, toplanan büyük miktarda veriden ‘bilgi’ çıkarmakla ilgilidir. Genellikle toplanan veriler yapılandırılmamıştır. Büyük miktarda yapılandırılmamış veriyi analiz etmek ve anlamak için güçlü araç ve tekniklere ihtiyacınız var.
Konu modelleme, büyük metin koleksiyonlarını özetlemek için birlikte görülen anahtar kelimeleri belirlemeye yönelik yöntemler sunan bir metin madenciliği tekniğidir. Belgelerdeki gizli konuları keşfetmeye, belgeleri bu konularla etiketlemeye ve büyük miktarda yapılandırılmamış veriyi düzenlemeye yardımcı olur.
Konu Modelleme
Konu Modelleme, verilen belgelerden gizli temaları otomatik olarak keşfeder. Gözetimsiz bir metin analitiği algoritmasıdır ve verilen belgelerden sözcük grupları bulmak için kullanılır. Bu sözcük grupları bir konuyu temsil eder. Tek bir belgenin birden fazla tema ile ilişkili olma olasılığı vardır. Örneğin, 'patient', 'doctor', 'disease', 'cancer' ve 'health' gibi sözcük grubu 'sağlık hizmetleri' konusunu temsil eder. Konu Modelleme, düzenli ifadeler kullanan kural tabanlı metin aramasından farklı bir yaklaşımdır.
Metin Sınıflandırma ile Konu Modelleme Karşılaştırması
Metin sınıflandırma, bir metin belgesinin veya makalenin önceden tanımlanmış bir sınıf kümesine sınıflandırıldığı gözetimli bir makine öğrenimi problemidir. Konu modelleme ise metin belgelerinde birlikte görülen sözcük gruplarının keşfedilmesi sürecidir. Bu birlikte görülen ilişkili sözcük grupları "konuları" oluşturur. Gözetimsiz bir öğrenme türüdür, dolayısıyla olası konu kümesi bilinmez. Konu modelleme, metin sınıflandırma problemini çözmek için de kullanılabilir. Konu modelleme bir belgede yer alan konuları belirlerken, metin sınıflandırma metni tek bir sınıfa atar.
Gizli Anlamsal Analiz
LSA (Latent Semantic Analysis), LSI (Latent Semantic Index) olarak da bilinir. LSA, bir terim-belge matrisi (terimlerin bir belgede görülme sıklığı) ile sonuçlanan çanta kelimeler (BoW) modelini kullanır. Satırlar terimleri, sütunlar belgeleri temsil eder. LSA, Tekil değer ayrışımı kullanarak belge-terim matrisi üzerinde matris ayrıştırması gerçekleştirerek gizli konuları öğrenir. LSA genellikle bir boyut indirgeme veya gürültü azaltma tekniği olarak kullanılır.
Tekil Değer Ayrışımı (SVD)
SVD, bir matrisi iki matrisin çarpımı şeklinde temsil eden bir matris faktörizasyon yöntemidir. Sinyal işleme, psikoloji, sosyoloji, iklim ve atmosfer bilimi, istatistik ve astronomi gibi alanlarda çeşitli faydalı uygulamaları vardır.
M, m×m boyutunda bir matristir
U, m×n boyutunda sol tekil matristir
Σ, negatif olmayan gerçek sayılardan oluşan n×n boyutlu köşegen bir matristir.
V, m×n boyutunda sağ tekil matristir
V*, V'nin transpozu olan n×m boyutlu matristir.
Birim matris: Ana köşegenin tüm elemanlarının bir, diğer tüm elemanların sıfır olduğu kare matristir.
Köşegen Matris: Ana köşegen dışındaki tüm elemanları sıfır olan matristir.
Tekil Matris: Determinantı 0 olan veya tersi alınamayan kare matristir.
En Uygun Konu Sayısını Belirleme
Konu modellemede k (konu sayısı) nasıl en iyi şekilde belirlenir? Verilen bir derlemdeki en uygun konu sayısını belirlemek zorlu bir iştir. En uygun konu sayısını belirlemek için şu seçenekleri kullanabiliriz:
En uygun konu sayısını belirlemenin bir yolu, her konuyu bir küme olarak ele almak ve Silhouette katsayısını kullanarak kümenin etkinliğini ölçmektir.
Konu tutarlılığı (topic coherence) ölçütü, konu sayısını belirlemek için gerçekçi bir ölçüdür.
Konu Tutarlılığı ölçütü, konu modellerini değerlendirmek için yaygın olarak kullanılan bir metriktir. Gizli değişken modellerini kullanır. Her üretilen konunun bir sözcük listesi vardır. Konu tutarlılığı ölçütünde, bir konudaki sözcüklerin ikili sözcük benzerlik puanlarının ortalaması/medyanı hesaplanır. Konu tutarlılığı puanı yüksek olan model iyi bir konu modeli olarak kabul edilir.
Gensim ile LSA Uygulama
Gerekli kitaplığı içe aktarın
#import modulesimport os.path
from gensim import corpora
from gensim.models import LsiModel
from nltk.tokenize import RegexpTokenizer
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
from gensim.models.coherencemodel import CoherenceModel
import matplotlib.pyplot as plt
Altyapı:
Veri Yükleme
Önce articles.csv dosyasını yüklemek için bir veri yükleme işlevi oluşturalım. Veriyi buradan indirebilirsiniz.
defload_data(path,file_name):"""
Input : path and file_name
Purpose: loading text file
Output : list of paragraphs/documents and
title(initial 100 words considred as title of document)
"""
documents_list =[]
titles=[]withopen( os.path.join(path, file_name),"r")as fin:for line in fin.readlines():
text = line.strip()
documents_list.append(text)print("Total Number of Documents:",len(documents_list))
titles.append( text[0:min(len(text),100)])return documents_list,titles
Altyapı:
Veri Ön İşleme
Veri yükleme işlevinden sonra metni ön işlemden geçirmeniz gerekir. Metni ön işlemden geçirmek için şu adımlar izlenir:
Metin makalelerini tokenize edin
Durak (stop) sözcükleri kaldırın
Metin makalesi üzerinde gövdeleme (stemming) uygulayın
defpreprocess_data(doc_set):"""
Input : docuemnt list
Purpose: preprocess text (tokenize, removing stopwords, and stemming)
Output : preprocessed text
"""# initialize regex tokenizer
tokenizer = RegexpTokenizer(r'\w+')# create English stop words list
en_stop =set(stopwords.words('english'))# Create p_stemmer of class PorterStemmer
p_stemmer = PorterStemmer()# list for tokenized documents in loop
texts =[]# loop through document listfor i in doc_set:# clean and tokenize document string
raw = i.lower()
tokens = tokenizer.tokenize(raw)# remove stop words from tokens
stopped_tokens =[i for i in tokens ifnot i in en_stop]# stem tokens
stemmed_tokens =[p_stemmer.stem(i)for i in stopped_tokens]# add tokens to list
texts.append(stemmed_tokens)return texts
Altyapı:
Gövde (Corpus) Hazırlama
Bir sonraki adım gövdeyi hazırlamaktır. Burada bir belge-terim matrisi ve terimler sözlüğü oluşturmanız gerekir.
defprepare_corpus(doc_clean):"""
Input : clean document
Purpose: create term dictionary of our courpus and Converting list of documents (corpus) into Document Term Matrix
Output : term dictionary and Document Term Matrix
"""# Creating the term dictionary of our courpus, where every unique term is assigned an index. dictionary = corpora.Dictionary(doc_clean)
dictionary = corpora.Dictionary(doc_clean)# Converting list of documents (corpus) into Document Term Matrix using dictionary prepared above.
doc_term_matrix =[dictionary.doc2bow(doc)for doc in doc_clean]# generate LDA modelreturn dictionary,doc_term_matrix
Altyapı:
Gensim kullanarak bir LSA modeli oluşturun
Gövdeyi oluşturduktan sonra LSA kullanarak bir model üretebilirsiniz.
defcreate_gensim_lsa_model(doc_clean,number_of_topics,words):"""
Input : clean document, number of topics and number of words associated with each topic
Purpose: create LSA model using gensim
Output : return LSA model
"""
dictionary,doc_term_matrix=prepare_corpus(doc_clean)# generate LSA model
lsamodel = LsiModel(doc_term_matrix, num_topics=number_of_topics, id2word = dictionary)# train modelprint(lsamodel.print_topics(num_topics=number_of_topics, num_words=words))return lsamodel
Altyapı:
Konu sayısını belirleyin
En uygun konu sayısını belirleyerek sonuçları iyileştirmek için ekstra bir adım daha atılması gerekir. Burada, en uygun konu sayısını belirlemek için tutarlılık (coherence) puanları üreteceksiniz.
defcompute_coherence_values(dictionary, doc_term_matrix, doc_clean, stop, start=2, step=3):"""
Input : dictionary : Gensim dictionary
corpus : Gensim corpus
texts : List of input texts
stop : Max num of topics
purpose : Compute c_v coherence for various number of topics
Output : model_list : List of LSA topic models
coherence_values : Coherence values corresponding to the LDA model with respective number of topics
"""
coherence_values =[]
model_list =[]for num_topics inrange(start, stop, step):# generate LSA model
model = LsiModel(doc_term_matrix, num_topics=number_of_topics, id2word = dictionary)# train model
model_list.append(model)
coherencemodel = CoherenceModel(model=model, texts=doc_clean, dictionary=dictionary, coherence='c_v')
coherence_values.append(coherencemodel.get_coherence())return model_list, coherence_valuesAltyapı:
Hadi tutarlılık puanlarını çizdirelim.
defplot_graph(doc_clean,start, stop, step):
dictionary,doc_term_matrix=prepare_corpus(doc_clean)
model_list, coherence_values = compute_coherence_values(dictionary, doc_term_matrix,doc_clean,
stop, start, step)# Show graph
x =range(start, stop, step)
plt.plot(x, coherence_values)
plt.xlabel("Number of Topics")
plt.ylabel("Coherence score")
plt.legend(("coherence_values"), loc='best')
plt.show()
start,stop,step=2,12,1
plot_graph(clean_text,start,stop,step)Altyapı:
Bu grafiği kolayca değerlendirebilirsiniz. Burada, X ekseninde konu sayısı ve Y ekseninde tutarlılık puanı var. Konu sayıları arasında 7, en yüksek tutarlılık puanına sahip; dolayısıyla en uygun konu sayısı 7'dir.
Yukarıdaki tüm işlevleri çalıştırın
# LSA Model
number_of_topics=7
words=10
document_list,titles=load_data("","articles.txt")
clean_text=preprocess_data(document_list)
model=create_gensim_lsa_model(clean_text,number_of_topics,words)Altyapı:
Konu-3: "trump","clinton", "eu","say","would","donald","leav","uk" ,"republican" ,"cameron" (ABD Başkanlık Seçimleri, Brexit)
Konu-4:min","eu","goal","ball","play","said","say","leagu","leav","game" (İngiltere Premier Ligi)
Konu-5: "bank","eu","min","year","leav","cameron","market","rate","vote","say" (Brexit ve Piyasa Koşulları)
Konu-6: "bank","say","peopl","trump","1" ,"min" ,"eu","market" ,"like" (Siyasal durumlar ve piyasa koşulları)
Konu-7: "say","min","vote","govern","poll","tax","statement","bank","budget","one" (ABD Başkanlık Seçimleri ve Finansal Planlama)
Burada, Gizli Anlamsal Analiz kullanılarak 7 konu keşfedildi. Bazıları birbiriyle örtüşüyor. Birden çok anlamı daha yüksek doğrulukla yakalayabilmek için LDA (Latent Dirichlet Allocation) denemek gerekir. Bunu size alıştırma olarak bırakıyorum; Gensim ile deneyin ve görüşlerinizi paylaşın.
LSA'nın Artıları ve Eksileri
LSA algoritması, anlaşılması ve uygulanması en kolay yöntemdir. Ayrıca vektör uzayı modeline kıyasla daha iyi sonuçlar sunar. Yalnızca belge-terim matrisi ayrıştırmasını içerdiği için diğer mevcut algoritmalara göre daha hızlıdır.
Gizli konu boyutu, matrisin rütbesine bağlıdır; bu sınırı genişletemeyiz. LSA ile ayrıştırılmış matris oldukça yoğundur, bu nedenle tek tek boyutları indekslemek zordur. LSA, sözcüklerin birden çok anlamını yakalayamaz. LDA’ya (Latent Dirichlet Allocation) kıyasla uygulanması daha kolay değildir. LDA'dan daha düşük doğruluk sunar.
Konu Modellemenin Kullanım Alanları
Bu tekniğin kullanıldığı basit uygulamalar arasında metin analizinde belge kümeleme, öneri sistemleri ve bilgi erişimi yer alır. Konu modellemenin daha ayrıntılı kullanım alanları şunlardır:
Özgeçmiş Özetleme: İşe alım uzmanlarının özgeçmişleri hızlıca değerlendirmesine yardımcı olabilir. Özgeçmiş yığınlarını filtreleme çabasını azaltabilirler.
Arama Motoru Optimizasyonu: Çevrimiçi makaleler, bloglar ve belgeler; konular ve ilişkili anahtar kelimeler belirlenerek kolayca etiketlenebilir, bu da arama sonuçlarının optimize edilmesini iyileştirebilir.
Öneri Sistemi Optimizasyonu: Öneri sistemleri, kullanıcı profiline ve geçmişine göre bir bilgi filtresi ve danışman olarak çalışır. Geçmiş ziyaretlere dayanarak ziyaret edilmemiş ilgili içerikleri keşfetmemize yardımcı olabilir.
Müşteri Desteğini İyileştirme: Müşteri şikayetleri ve geri bildirimlerinde ilgili konuları ve ilişkili anahtar kelimeleri keşfetmek; örneğin ürün ve hizmet özellikleri, departman ve şube ayrıntıları. Bu tür bilgiler, şikayetin doğrudan ilgili departmana yönlendirilmesine yardımcı olur.
Sağlık sektöründe konu modelleme, yapılandırılmamış tıbbi raporlardan faydalı ve değerli bilgiler çıkarmamıza yardımcı olabilir. Bu bilgiler, hastaların tedavisinde ve tıp bilimi araştırma amaçları için kullanılabilir.
Sonuç
Bu eğitimde, Konu Modellemesi hakkında birçok ayrıntıyı ele aldınız. Konu Modellemenin ne olduğunu, Gizli Anlamsal Analizin ne olduğunu, ilgili modellerin nasıl kurulacağını, LSA kullanılarak konuların nasıl üretildiğini öğrendiniz. Ayrıca Tekil Değer Ayrışımı ve konu tutarlılığı puanı gibi bazı temel kavramları da kapsadınız.
Umarız artık kendi veri kümelerinizi analiz etmek için konu modellemeden yararlanabilirsiniz. Bu eğitimi okuduğunuz için teşekkürler!
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Konu keşfi, belgeleri kümelemek, çevrimiçi içerikleri bilgi erişimi ve öneriler için düzenlemek gibi çeşitli amaçlar için faydalıdır. Birçok içerik sağlayıcı ve haber ajansı, okurlara makale önermek için konu modellerini kullanıyor. Benzer şekilde işe alım firmaları, iş tanımlarını çıkarmak ve bunları adayların beceri kümeleriyle eşleştirmekte konu modellerinden yararlanıyor. Veri bilimci işi, toplanan büyük miktarda veriden ‘bilgi’ çıkarmakla ilgilidir. Genellikle toplanan veriler yapılandırılmamıştır. Büyük miktarda yapılandırılmamış veriyi analiz etmek ve anlamak için güçlü araç ve tekniklere ihtiyacınız var.
Konu modelleme, büyük metin koleksiyonlarını özetlemek için birlikte görülen anahtar kelimeleri belirlemeye yönelik yöntemler sunan bir metin madenciliği tekniğidir. Belgelerdeki gizli konuları keşfetmeye, belgeleri bu konularla etiketlemeye ve büyük miktarda yapılandırılmamış veriyi düzenlemeye yardımcı olur.
Konu Modelleme
Konu Modelleme, verilen belgelerden gizli temaları otomatik olarak keşfeder. Gözetimsiz bir metin analitiği algoritmasıdır ve verilen belgelerden sözcük grupları bulmak için kullanılır. Bu sözcük grupları bir konuyu temsil eder. Tek bir belgenin birden fazla tema ile ilişkili olma olasılığı vardır. Örneğin, 'patient', 'doctor', 'disease', 'cancer' ve 'health' gibi sözcük grubu 'sağlık hizmetleri' konusunu temsil eder. Konu Modelleme, düzenli ifadeler kullanan kural tabanlı metin aramasından farklı bir yaklaşımdır.
Metin Sınıflandırma ile Konu Modelleme Karşılaştırması
Metin sınıflandırma, bir metin belgesinin veya makalenin önceden tanımlanmış bir sınıf kümesine sınıflandırıldığı gözetimli bir makine öğrenimi problemidir. Konu modelleme ise metin belgelerinde birlikte görülen sözcük gruplarının keşfedilmesi sürecidir. Bu birlikte görülen ilişkili sözcük grupları "konuları" oluşturur. Gözetimsiz bir öğrenme türüdür, dolayısıyla olası konu kümesi bilinmez. Konu modelleme, metin sınıflandırma problemini çözmek için de kullanılabilir. Konu modelleme bir belgede yer alan konuları belirlerken, metin sınıflandırma metni tek bir sınıfa atar.
Gizli Anlamsal Analiz
LSA (Latent Semantic Analysis), LSI (Latent Semantic Index) olarak da bilinir. LSA, bir terim-belge matrisi (terimlerin bir belgede görülme sıklığı) ile sonuçlanan çanta kelimeler (BoW) modelini kullanır. Satırlar terimleri, sütunlar belgeleri temsil eder. LSA, Tekil değer ayrışımı kullanarak belge-terim matrisi üzerinde matris ayrıştırması gerçekleştirerek gizli konuları öğrenir. LSA genellikle bir boyut indirgeme veya gürültü azaltma tekniği olarak kullanılır.
Tekil Değer Ayrışımı (SVD)
SVD, bir matrisi iki matrisin çarpımı şeklinde temsil eden bir matris faktörizasyon yöntemidir. Sinyal işleme, psikoloji, sosyoloji, iklim ve atmosfer bilimi, istatistik ve astronomi gibi alanlarda çeşitli faydalı uygulamaları vardır.
Birim matris: Ana köşegenin tüm elemanlarının bir, diğer tüm elemanların sıfır olduğu kare matristir.
Köşegen Matris: Ana köşegen dışındaki tüm elemanları sıfır olan matristir.
Tekil Matris: Determinantı 0 olan veya tersi alınamayan kare matristir.
En Uygun Konu Sayısını Belirleme
Konu modellemede k (konu sayısı) nasıl en iyi şekilde belirlenir? Verilen bir derlemdeki en uygun konu sayısını belirlemek zorlu bir iştir. En uygun konu sayısını belirlemek için şu seçenekleri kullanabiliriz:
Konu Tutarlılığı ölçütü, konu modellerini değerlendirmek için yaygın olarak kullanılan bir metriktir. Gizli değişken modellerini kullanır. Her üretilen konunun bir sözcük listesi vardır. Konu tutarlılığı ölçütünde, bir konudaki sözcüklerin ikili sözcük benzerlik puanlarının ortalaması/medyanı hesaplanır. Konu tutarlılığı puanı yüksek olan model iyi bir konu modeli olarak kabul edilir.
Gensim ile LSA Uygulama
Gerekli kitaplığı içe aktarın
Veri Yükleme
Önce articles.csv dosyasını yüklemek için bir veri yükleme işlevi oluşturalım. Veriyi buradan indirebilirsiniz.
Veri Ön İşleme
Veri yükleme işlevinden sonra metni ön işlemden geçirmeniz gerekir. Metni ön işlemden geçirmek için şu adımlar izlenir:
Gövde (Corpus) Hazırlama
Bir sonraki adım gövdeyi hazırlamaktır. Burada bir belge-terim matrisi ve terimler sözlüğü oluşturmanız gerekir.
Gensim kullanarak bir LSA modeli oluşturun
Gövdeyi oluşturduktan sonra LSA kullanarak bir model üretebilirsiniz.
Konu sayısını belirleyin
En uygun konu sayısını belirleyerek sonuçları iyileştirmek için ekstra bir adım daha atılması gerekir. Burada, en uygun konu sayısını belirlemek için tutarlılık (coherence) puanları üreteceksiniz.
Hadi tutarlılık puanlarını çizdirelim.
Bu grafiği kolayca değerlendirebilirsiniz. Burada, X ekseninde konu sayısı ve Y ekseninde tutarlılık puanı var. Konu sayıları arasında 7, en yüksek tutarlılık puanına sahip; dolayısıyla en uygun konu sayısı 7'dir.
Yukarıdaki tüm işlevleri çalıştırın
Burada, Gizli Anlamsal Analiz kullanılarak 7 konu keşfedildi. Bazıları birbiriyle örtüşüyor. Birden çok anlamı daha yüksek doğrulukla yakalayabilmek için LDA (Latent Dirichlet Allocation) denemek gerekir. Bunu size alıştırma olarak bırakıyorum; Gensim ile deneyin ve görüşlerinizi paylaşın.
LSA'nın Artıları ve Eksileri
LSA algoritması, anlaşılması ve uygulanması en kolay yöntemdir. Ayrıca vektör uzayı modeline kıyasla daha iyi sonuçlar sunar. Yalnızca belge-terim matrisi ayrıştırmasını içerdiği için diğer mevcut algoritmalara göre daha hızlıdır.
Gizli konu boyutu, matrisin rütbesine bağlıdır; bu sınırı genişletemeyiz. LSA ile ayrıştırılmış matris oldukça yoğundur, bu nedenle tek tek boyutları indekslemek zordur. LSA, sözcüklerin birden çok anlamını yakalayamaz. LDA’ya (Latent Dirichlet Allocation) kıyasla uygulanması daha kolay değildir. LDA'dan daha düşük doğruluk sunar.
Konu Modellemenin Kullanım Alanları
Bu tekniğin kullanıldığı basit uygulamalar arasında metin analizinde belge kümeleme, öneri sistemleri ve bilgi erişimi yer alır. Konu modellemenin daha ayrıntılı kullanım alanları şunlardır:
Sonuç
Bu eğitimde, Konu Modellemesi hakkında birçok ayrıntıyı ele aldınız. Konu Modellemenin ne olduğunu, Gizli Anlamsal Analizin ne olduğunu, ilgili modellerin nasıl kurulacağını, LSA kullanılarak konuların nasıl üretildiğini öğrendiniz. Ayrıca Tekil Değer Ayrışımı ve konu tutarlılığı puanı gibi bazı temel kavramları da kapsadınız.
Umarız artık kendi veri kümelerinizi analiz etmek için konu modellemeden yararlanabilirsiniz. Bu eğitimi okuduğunuz için teşekkürler!
Python hakkında daha fazla bilgi edinmek isterseniz, DataCamp'in İstatistiksel Düşünmede Vaka Çalışmaları kursunu alın.