Elasticsearch ve Udemy Kullanım Pratikleri

Preview:

Citation preview

1

İbrahim TAŞYURT

Elasticsearch ve Udemy

Kullanım Pratikleri

Ajanda

2

Udemy

Elasticsearch ve Temel Arama Kavramları

Udemy’de Elasticsearch kullanımı:

İndeksleme

Temel arama işlevleri

Metin Analizi

Çoklu dil desteği

TF ve IDF değerlerinin çıkarımı

Udemy

3

Video tabanlı Online Eğitim Platformu ve Pazaryeri

+12 Milyon Aktif Kullanıcı

50 Bin Ders

Web, Mobil ve AppleTV uygulamaları

San Francisco, Ankara ve Dublin ofisleri

Toplam 254 çalışan, 85+ Mühendis

Udemy Türkiye Ofisi:

25+ Mühendis

Udemy (Discovery)

4

Amaç: Doğru kullanıcıyı doğru dersle buluşturmak

Alt Takımlar

Arama (Search)

Öneri (Recommendation)

Kanallar(Channel)

Veri Bilimi (Data Science) destekli çalışmalar

Kullanılan araçlardan bazıları:

Elasticsearch

Elasticsearch

5

Arama Motoru ve İlişkisel Olmayan Veritabanı

Java ile geliştirilmiş

Açık Kaynaklı

Apache Lucene tabanlı

Dağıtık

Hata dayanıklı(Fault tolerant)

Ölçeklendirilebilir

REST/JSON arayüzü

Apache Solr ile karşılaştırma

6

Ölçeklendirebilme avantajı

İdame Kolaylığı

Daha kullanışlı API

Temel Elasticsearch (ES) Kavramları

7

Node: Her bir çalıştırılabilir ES sunucusu

Cluster(Küme): Verinin dağıtık ve tutarlı şekilde tutulduğu Node grubu

Index: Benzer karakterdeki verilerin(doküman) saklandığı yapı

Document(Doküman): İndekslenebilen temel veri yapısı

JSON

Field(Alan): Dokümanın üstündeki alanlar

Shard: Her bir indeksin içinde dokümanların bir kısmını tutan bölüm

Farklı node’lar üzerinde durabilirler.

Örnek Cluster Yapısı

8

Örnek:

4 Node

2 Shard

1 Replica

Herhangi bir Node

devredışı kaldığında,

cluster çalışmaya

devam eder.

Shard ve Replicalar

9

Shard:

Her shard bir Lucene indeksidir.

Sorgular her shard üzerinde çalıştıktan sonra, koordinatör

node üzerinde birleştirilir (scatter/gather).

Shard sayısı performans/ölçeklendirme üzerinde etkilidir.

Replica:

Hata dayanıklılığı

Sorgu performansında iyileşme

Temel Arama Kavramları

10

Relevance(İlgi): Bir aramanın, dokümanla örtüşmesi/benzerliği.

Terim Frekansı(Term Frequency, TF):

Bir terimin metinde geçme sıklığı

Ters Doküman Frekansı(Inverse Document Frequency, IDF)

Bir terimin ne kadar az dokümanda geçtiğinin ölçüsü

Ayırdedicilik

Score(Skor): İlginin numerik ifadesi

Basit olarak TF ve IDF’in çarpımıyla orantılıdır

Terim Frekansı(Örnek)

11

“Java Programlama ve Temel Programlama Mantığı”

“Java Programlama ve Veri Madenciliği”

“Programlama” aramasında, ilk doküman daha yüksek skora sahip olacaktır.

Terim Java Programlama ve Temel Mantığı

TF 1 2 1 1 1

Terim Java Programlama ve Veri Madenciliği

TF 1 1 1 1 1

Ters Doküman Frekansı (Örnek)

12

Senaryo:

Veri setimiz 100 dokümandan oluşsun.

Bunların 10’unda “Java”, 3’ünde “Elasticsearch” terimleri geçiyor

olsun.

“Elasticsearch” daha yüksek IDF değerine sahip(daha ayırt edici).

Sonuç:

“Java Elasticsearch” aramasında, “Elasticsearch” içeren

dokümanlar daha yüksek skora sahip olur(arama sonuçlarında

yukarıda görünür).

Udemy’de Elasticsearch Kullanımı

13

Udemy’de Elasticsearch

14

Versiyon 1.5.2

Canlı, Test ve Geliştirme Kümeleri

7 Node

Çoklu shard ve replica’lar

REST API ile erişim

İstemci Kütüphaneleri:

elasticdsl (Python)

Spring Data (Java)

Kullanılan Araçlar

15

HQ Plugin’i

Cluster’ın izlenmesi ve basit yönetimi

Datadog/New Relic

Performansın ve kaynak kullanımının görüntülenmesi

Sense

Google Chrome Plugin’i

Cluster’a REST istekleri gönderimi

Elasticdump

Komut satırı aracı

İndekslenen Dokümanlar

16

Dersler(Course)

Kullanıcılar(User)

Arama Kayıtları(Search Log)

Kullanıcı Mesajları(Message Thread)

Ders Tartışmaları (Course Discussion)

İndeksleme

17

Dokümanlar veritabanından alınarak Elasticsearch’e indekslenir

Gerçek Zamanlı İndeksleme:

Verilerdeki değişiklikler uygulama üzerinden fark edilerek değişen dokümanlar gerçek

zamanlı olarak indekslenir

Periyodik İndeksleme:

Bütün dokümanlar periyodik olarak Elasticsearch üzerinde güncellenirler

Toplu(Bulk) olarak yapıldığı için gerçek zamanlı indekslemeye göre daha performanslıdır

İndekslenen alanlar (Ders)

18

Ders sahibi(instructor) kaynaklı alanlar:

Başlık, Altbaşlık, Ders Tanımı, Ders Veren(instructor) adı….

Dersin kalitesi/performansı ile alakalı alanlar:

Öğrenci sayısı, Puan, Yorumlar, Kazanç, İzlenme miktarı….

Dersin ait olduğu kategori/alt başlık/koleksiyon bilgileri

Dersin ücretine ilişkin bilgiler

Ders ile alakalı etiketler(Tag)

Manuel ve Algoritmik

Temel Arama İşlevleri

19

Amaç:

Aramaya uygun dokümanları(dersleri) bulmak

Aramaya daha çok uyan dokümanların arama sonuçlarında yukarıda

görünmesi

Udemy Arama Sonuçları

Uyarlanmış (Custom) bir fonksiyonla sıralanır

Bileşenler:

Kullanıcı kaynaklı alanlar

Kullanıcı kaynaklı alanlar

20

Başlık, Altbaşlık, Ders verenin adı vs.

Genel olarak TF-IDF hesaplamasına dayalı, uyarlanmış(custom) bir skor

fonksiyonu kullanılır.

Her alan farklı şekilde ağırlıklandırılır(boosting).

Arama yapan kullanıcının dilindeki dersler daha yüksek skorlandırılır.

Kalite/Performans kaynaklı alanlar

21

Dersin aldığı kullanıcı puanları,yorumlar, kazanç, izlenme vs.

Her alan, uyarlanmış birer fonksiyon üzerinden, skora etki eder.

Alanların ağırlıkları ve fonksiyonların parametreleri, geçmiş veriye bağlı

olarak Makine Öğrenmesi yöntemleriyle belirlenir

Filtreleme ve Gruplama

22

Kullanıcının arama sonuçlarını daraltmasını ve aradığı dersi daha kolay

bulmasını sağlar

Elasticsearch’ün filtre ve gruplama(aggregation) özellikleri kullanılır

Filtre Alanları:

Dil

Seviye

Ücret(Ücretli/Ücretsiz)

Özellikler(Altyazı, Quiz, Kodlama Egzersizi)

Filtreleme ve Gruplama (2)

23

Sıralama

24

Kullanıcı arama sonuçlarını belli kriterlere göre sıralayabilir

Kriterler:

İlgi(varsayılan)

Fiyat

Puan

Eklenme Tarihi

Elasticsearch’ün sıralama(sort) işlevi ile yapılır

İlgi dışındaki alanlar, TF-IDF kaynaklı skorlamaları devredışı bırakır.

Otomatik Tamamlama

25

Arama kutusunda, kullanıcının aramasını otomatik olarak tamamlamaya

yardım eder.

Kullanılan bilgiler:

Ders başlığı

Ders veren kullanıcı isimleri

Önceki popüler arama kayıtları

Burada, Elasticsearch’ün metin eşleştirme (text match) işlevleri kullanılır

Prefix eşleşmesi

Öneri (Bunu mu demek istediniz?)

26

Arama sonucuna uygun bir sonuç bulunamadığında alternatif öneriler için

kullanılır.

Elasticsearch’ün öneri(‘suggest’) işlevinden faydalanılır.

Dokümanlarda yer alan daha sık görülen benzer sözcükler öneri olarak

sunulur.

Metin Analizi ve Temizlenmesi

27

Metinler çoğunlukla analiz ve temizleme işlemine ihtiyaç duyarlar:

Dokümanlardaki alanlar

Arama terimleri

Bu amaçla Elasticsearch Analyzer’ları kullanılır.

Her alan için ayrı bir Analyzer tanımlanabilir

Analyzer işlevleri:

Ayrıştırma(Tokenization): Metni parçalara(token) ayırma

Filtreleme: Parçaların manipüle edilmesi(ekleme/silme/değiştirme)

Udemy’de Metin Analizi

28

Desteklenen diller:

İngilizce

Japonca

Kullanılan Analyzer’lar

Elasticsearch üzerinde gelen standard Analyzer’lar

Udemy tarafından geliştirilen ‘Udemy Analyzer’

Plugin

Japonca ayrıştırmasını yapan ‘RBL Analyzer’

Metin Analizi İşlemleri

29

Etkisiz sözcük ayrıştırılması

‘A Java Course for Beginners’ -> ‘Java’, ‘Course’ ,’Beginners’

Özel karakterler içeren sözcükler

‘C++’, ‘PL/SQL’

ASCII olmayan karakterlerin dönüşümleri

‘ÇAĞDAŞ’->’CAGDAS’,’ÇAĞDAŞ’

Eşanlamlı sözcüklerin işlenmesi

‘js’,’java script’, ‘javascript’-> ‘javascript’

Köklere ayırma

Çoklu dil desteği (Japonca)

30

Japonca olan doküman metinler, Japonca Analyzer’ı (RBL) kullanılarak ayrı

alanlarda indekslenir.

Japonca arama terimleri, bu alanlar üzerinden sorgulanır.

Arama teriminin dilini saptamak için, Rosette’nın ilgili API’ı kullanılır.

TF-IDF Değerlerinin Çıkarımı

31

Gereksinim:

Arama algoritmasının kişiselleştirilebilmesi amacıyla, arama sonuçlarına ait TF ve IDF

değerlerinin alınması

Problem:

Elasticsearch bu değerleri sadece açıklama (explain) modu açıkken veriyor.

Performanslı değil

Çözüm:

Elasticsearch Agent

Bytecode instrumentation ile Elasticsearch davranışı çalışma anında değiştirilerek

Gelecek Planları

32

Elasticsearch versiyonunu 1.5.2’den 2.x.y’ye yükseltme

Filtre yapısının değiştirilmesi

Elasticsearch Agent’ın 2.x.y’e uygun olarak, ya da Plugin olarak yeniden yazılması

Cluster optimizasyonları

Metin analizinde iyileştirmeler

Skor fonksiyonunda iyileştirmeler

33

Teşekkürler