Grafik veri yapılarının karmaşık etkileşimleri temsil etme yeteneği, ortak etkileşimleri tarafından tanımlanan varlıkları analiz etmek ve sınıflandırmak için yeni yollara yol açtı. Bu analizler topluluklar içinde farklı yapıları bulmada güçlü olsa da, geleneksel makine öğrenimi algoritmalarına girdi sağlamak için grafiğin yönlerini kodlama becerisinden yoksundurlar. DeepWalk'un önerisiyle, grafikler içindeki [1] ortak etkileşimler yakalanabilir ve basit sinir ağları tarafından yukarıda bahsedilen ML algoritmaları tarafından tüketilebilen yerleştirmelerde kodlanabilir. Yine de, DeepWalk algoritmasına basit girişler sunan makaleler varken, çok azı sağlanan kodu bulabildi ve bu sistemler hakkında uygulama ayrıntılarını tartıştı. Model parametrelendirme, dağıtım konuları ve görünmeyen verilerin işlenmesi gibi ayrıntılar.
Bu kısa makalede, grafik ağları, Word2Vec / Skip-Gram ve DeepWalk sürecine üst düzey bir genel bakış sunacağım. Buna yardımcı olmak için, algoritmayı incelemek için çok sınıflı bir sınıflandırma örneği sunacağım. Bundan sonra, farklı parametre konfigürasyonlarını ele alacağım ve bunların algoritmanın performansı üzerindeki etkisini göstereceğim. Son olarak, sistem içinde görülmeyen verilerin dağıtılması ve işlenmesi için bazı hususları özetleyeceğim.
Grafikler, bir ekosistemdeki iki veya daha fazla nesne arasındaki etkileşimleri verimli bir şekilde temsil eden veri yapılarıdır. Yapı, sistem içindeki varlıkları tanımlayan bir düğüm veya tepe noktası olmak üzere iki nesne tarafından tanımlanır . Bu makale için, grafikteki düğümlerin satılmakta olan ürünler olduğu bir e-ticaret web sitesinde bir satın alma ağı örneği kullanacağım.
Grafiklerin diğer yönü, onları birbirine bağlayan şeydir: iki düğümü birbirine bağlayan etkileşimi tanımlayan bir kenar . Bir uç noktaya yönlendirilebilir, bu bir ilişkiyi gösterir - A kişisinin B kişisine bir e-posta gönderdiğini hayal edin. Bir kenarın da etkileşimini tanımlayan bir ağırlığı olabilir . Bizim durumumuzda, e-ticaret sitemizdeki her iki ürünü de satın alan tüketicilerin oranını temsil eden bir kenar ağırlığı tanımlayabiliriz .
DeepWalk bir tür grafik sinir ağıdır [1] - doğrudan hedef grafik yapısı üzerinde çalışan bir tür sinir ağı. Ağlar içindeki yerelleştirilmiş yapılara içgörü sağlamak için rastgele bir yol geçiş tekniği kullanır. Bunu, daha sonra Skip-Gram Dil Modelini eğitmek için kullanılan bu rastgele yolları diziler olarak kullanarak yapar. Bu makalede basitlik açısından Skip-Gram modelimizi eğitmek için Gensim paketi Word2Vec'i kullanacağız.
DeepWalk algoritmasının bu basit uygulaması büyük ölçüde Word2Vec dil modeline [2] dayanır. Google tarafından 2013 yılında sunulan Word2Vec, benzer kelimelerin yerel olarak birbirine yakın yerleştirilmesiyle kelimelerin n boyutlu alana gömülmesine izin verdi. Bu, benzer durumlarda sıklıkla birlikte kullanılan / kullanılan kelimelerin kosinüs mesafelerinin daha küçük olacağı anlamına gelir.
Word2Vec bunu , hedef kelimeleri bağlamıyla karşılaştırmak için Skip-Gram algoritmasını kullanarak yapar . Yüksek düzeyde, Skip-Gram, ortada hedef kelime verilen çevreleyen kelimeleri tahmin etmeye çalıştığı kayan bir pencere tekniği kullanarak çalışır. Grafikteki benzer düğümleri n boyutlu uzayda birbirine yakın olacak şekilde kodlamaya çalışma durumumuz için bu , ağımız içindeki hedef düğümün etrafındaki komşuları etkin bir şekilde tahmin etmeye çalıştığımız anlamına gelir .
DeepWalk, ağdaki gizli kalıpları ortaya çıkarmak için grafikler aracılığıyla rastgele yol oluşturmayı kullanır, bu modeller daha sonra öğrenilir ve son gömülmelerimizi sağlamak için sinir ağları tarafından kodlanır. Bu rastgele yollar son derece basit bir şekilde oluşturulur: Hedef kökten başlayarak, rastgele bir şekilde bu düğümün bir komşusunu seçin ve onu yola ekleyin, daha sonra rastgele bir şekilde bu düğümün bir komşusunu seçin ve istediğiniz sayıya kadar yürümeye devam edin adım atıldı. E-ticaret örneğini kullanarak, ağ yollarının bu tekrarlanan örneklemesi, bir ürün kimlikleri listesi verir. Bu kimlikler daha sonra bir cümledeki simgelermiş gibi ele alınır ve durum uzayı bir Word2Vec modeli kullanılarak onlardan öğrenilir. Daha kısaca, DeepWalk işlemi aşağıdaki adımları izler:
Kimlikleri tarafından verilen bir dizi ürünü tanımlayan çekirdek networkx veri yapısıyla başlıyoruz. İki ürün arasındaki tepe noktaları, e-ticaret ekosistemi içinde birlikte satın alınan ürünlerdir. İlk olarak, get_random_walk (Graph, Node_Id) işlevini tanımlayacağız :
# Instantiate a undirected Networkx graph G = nx.Graph() G.add_edges_from(list_of_product_copurchase_edges) def get_random_walk(graph:nx.Graph, node:int, n_steps:int = 4)->List[str]: """ Given a graph and a node, return a random walk starting from the node """ local_path = [str(node),] target_node = node for _ in range(n_steps): neighbors = list(nx.all_neighbors(graph, target_node)) target_node = random.choice(neighbors) local_path.append(str(target_node)) return local_path walk_paths = [] for node in G.nodes(): for _ in range(10): walk_paths.append(get_random_walk(G, node)) walk_paths[0] >>> [‘10001’, ‘10205’, ‘11845’, ‘10205’, ‘10059’]
# Instantiate word2vec model embedder = Word2Vec( window=4, sg=1, hs=0, negative=10, alpha=0.03, min_alpha=0.0001, seed=42 ) # Build Vocabulary embedder.build_vocab(walk_paths, progress_per=2) # Train embedder.train( walk_paths, total_examples=embedder.corpus_count, epochs=20, report_delay=1 )
Artık DeepWalk'ımızın temel yapısına sahip olduğumuza göre, Word2Vec modelimizdeki genel model parametrelerinin dışında parametrelendirilebilen birçok özellik var . Bunlar şunları içerebilir:
Yukarıda, y ekseninde artan sayıda rastgele yürüyüş kullanarak ve x ekseninde artan rastgele yürüyüş derinliği kullanarak Word2Vec modelimizdeki düğüm vektörleri üzerinde eğitilen sınıflandırıcının sınıflandırma performansı (doğruluk açısından) gösterilmektedir. Gördüğümüz şey, her iki parametre arttıkça doğruluğun arttığı, ancak her ikisi de yukarı doğru arttıkça azalan bir getiri oranı gösterdiği . Unutulmaması gereken bir nokta, yürüyüş sayısı arttıkça eğitim süresinin doğrusal olarak artmasıdır, bu nedenle yürüyüş sayısı arttıkça eğitim süreleri patlayabilir. Örneğin, sol üst köşeden antrenman süresindeki fark sadece 15 saniye sürerken, sağ alt köşe bir saatten fazla sürdü.
Şimdi nasıl davrandığını bildiğimize göre, onu nasıl pratik hale getirebiliriz? Çoğu grafik sisteminde temel sorun, tüm modeli tek seferde yeniden eğitmek zorunda kalmadan sistemleri güncellemek ve sürdürmektir. Neyse ki, DeepWalks'ın NLP ile olan ilişkisi nedeniyle, benzer güncelleme prosedürlerine güvenebiliriz. Gensim'i kullanırken, güncelleme algoritması daha da basittir ve süreci takip eder:
# Add new nodes to graph from their edges with current nodes G.add_edges_from([new_edges]) # From a list of the new nodes' product_ids (unknown_nodes) get rw's sequences = [get_random_walks(G, node) for node in unknown_nodes] model.build_vocab(new_nodes, update=True) model.train(sequences,total_examples=model.corpus_count, epochs=model.epochs)
# Add new nodes to the graph from their edges with current nodes G.add_edges_from([new_edges]) sequences = [get_random_walk(G, node) for node in unknown_nodes] for walk in sequences: nodes_in_corpus = [ node for node in walk if node in word2vec ] node_embedding = [ # here we take the average of known embeddings np.mean(embedder[nodes_in_corpus]) ]
[1] Perozzi ve Al. DeepWalk: Sosyal Temsillerin Çevrimiçi Öğrenimihttps://arxiv.org/pdf/1403.6652.pdf
[2] Mikolov ve diğerleri. Vektör Uzayında Kelime Temsillerinin Etkin Tahmini https://arxiv.org/pdf/1301.3781.pdf
[3] S. Doshi. Skip-Gram: NLP bağlam sözcükleri tahmin algoritması:https://towardsdatascience.com/skip-gram-nlp-context-words-prediction-algorithm-5bbf34f84e0c?gi=8ff2aeada829
[4] Levy ve ark. Kelime Gömülerinden Öğrenilen Derslerle Dağıtım Benzerliğini İyileştirme https://www.aclweb.org/anthology/Q15-1016/
Bu, birçok makaleden yalnızca ilkidir. Dürüst olmak gerekirse, bundan sonra her Pazar günü yayınlamayı umduğum makalelerin orada kaç tane olacağını bilmiyorum.
Motivasyon konuşmacısı Jim Rohn'un ünlü bir sözü vardır, “En çok zaman geçirdiğiniz beş kişinin ortalamasısınız.” İşte bir başkası: “Bana arkadaşlarını göster, ben de sana geleceğini göstereyim.
MIT Seçim Laboratuvarı'nda yüksek lisans araştırmacısı ve doktora derecesi olan Jesse Clark tarafından yazılmıştır.
Oakland, CA'da halka açık verileri kullanarak hava kalitesini tahmin etmek Google ve EDF, Oakland'daki hava kirliliğini haritalama çalışmalarını yayınladığında, bu çalışmanın sonuçları büyük ilgi gördü. Yayınladıkları veriler, hava kalitesinin Doğu ve Batı Oakland'daki şehir bloklarına göre nasıl değiştiğini gösteren ilk veri kümelerinden biriydi.
Daniel Fleck ve David Lubert ile yazılmıştır Dizimizin ilk blogu, bir veri bilimi projesini uygun şekilde değerlendirmek için Net Şimdiki Değer (NPV), İç Getiri Oranı (IRR) ve Karlılık Endeksi'ni (PI) kullanmaya odaklanacaktır. Ayrıca, bir veri bilimi metodolojisinin kullanılmasının, bu aynı ekonomik ölçütlerin girdilerini daha yüksek kaliteli değerlendirmeler geliştirmek için nasıl daha da iyileştirebileceğini tartışacağız.
Öz bileşimi ve SVD için yararlı olan doğrusal cebir temel kavramını anlayın Bu makalede, öz ayrıştırma veya tekil değer ayrıştırma (SVD) gibi matris çarpanlara ayırma yöntemlerini anlamanın ilginç bir yolu olan temel kavramını öğreneceksiniz. Tanımlar Temel, vektör uzaylarını (vektör setleri) tanımlamak için kullanılan bir koordinat sistemidir.