Seq2seq modeliyle veri ürünlerini nasıl oluşturacağınızı öğretin (kod ekli)

Orijinal Başlık: Sıradan Sıraya Modeller Kullanarak Büyüleyici Veri Ürünleri Oluşturma

Yazar: Hamel Husain

Çeviri: jieqiong

Redaksiyon: Liang Fuqi

Bu makale var 7300 kelime Önerilen Okuma 14 dakika.

Bu makale, Github projelerinde metin özetleme ve özellik çıkarma gerçekleştirmek için Keras ve TensorFlow'u nasıl kullanacağınızı öğretecektir.

Hedef: Github projesini özetlemek için bir model eğitin

Dikdörtgen tahmin edilen sonuçtur

Yukarıdakiler, bir dizi tahmin sonucundan rastgele seçilen öğelerdir, lütfen okumaya devam edin, aşağıdakiler daha fazla örnek içeren bir bağlantı içerir!

Github'ın maskotu Octocat (Octocat)

sebep olmak

Makine öğrenimi tekniklerinin çıktılarını tanımlamak için "sihirli" kelimesini kullanmayı hiç düşünmemiştim. Ama yavaş yavaş görüntü tanıma (https://machinelearningmastery.com/use-pre-trained-vgg-model-classify-objects-photographs/) veya iki ton Lego tuğlasını sınıflandırmak için (https: // jacquesmattheij) kullanılabileceğini öğrendiğimde .com / sorting-two-metric-ton-of-lego), tüm bunlar değişti. Daha da şaşırtıcı olan şey, bu teknolojilerin gücünü ortaya çıkarmak için bir doktora veya yıllarca eğitime ihtiyacınız olmamasıdır. İhtiyacınız olan tek şey: kod yazmayı reddetmeyin, lise matematik seviyesine ulaşın ve yeterli sabrınız olsun (

Bununla birlikte, endüstride derin öğrenme teknolojisini kullanmanın birkaç örneği vardır. Bugün, metinden veri ürünleri (Github Sorunları) oluşturmak için derin öğrenmenin kullanımını göstermek için yeniden kullanılabilir en basit ve uygulanabilir (https://en.wikipedia.org/wiki/Minimum_viable_product) ürünü sizinle paylaşacağım.

Bu eğitim, Github sorunlarıyla ilgili metni özetlemek için Sıralamadan Sıraya Model modelini kullanmaya odaklanacak ve size şunları kanıtlayacaktır:

  • Makul sonuçlar elde etmek için güçlü bilgi işlem gücüne ihtiyacınız yok (GPU kullanacağım).

  • Çok fazla kod yazmanıza gerek yok. Sadece birkaç satır kodun büyülü şeyler üretebilmesi çok şaşırtıcı.

  • Metni özetlemek istemeseniz bile, bu görevi tamamlamak için bir model eğitmek, diğer özellik çıkarma görevlerine yardımcı olacaktır.

Bu makalede tanıtacağım:

  • Derin öğrenmeye hazırlanmak için veri nasıl toplanır ve işlenir.

  • Sıralamadan Sıraya model mimarisi nasıl oluşturulur ve modeli eğitir.

  • Birden çok kullanım durumunun muhakeme, tartışma ve gösterimi için modeller nasıl kullanılır.

Matematiğin ayrıntılarına girmeden kavramsal bir model oluşturabilmeniz için uçtan uca bir örnek vermek için buradayım. Burada size başka bağlantılar da veriyorum, böylece daha derinlemesine çalışabilirsiniz.

veriyi al

Github Sorunlarına (https://guides.github.com/features/issues/) aşina değilseniz, önce onlara göz atmanızı şiddetle tavsiye ederim. Özellikle, iletişim kurmak için kullanacağımız veriler Github Sorunlarının gövdesi ve başlığıdır.

İşte bir örnek:

Bağlantı: https://github.com/scikit-learn/scikit-learn/issues/10458

Özetleme görevini tamamlamak üzere modelimizi eğitmek için birçok soru çiftinin başlığını ve metnini toplayacağız. Buradaki fikir, bir modelin birden çok problem tanımı ve başlığı aracılığıyla yeni problemleri nasıl özetleyeceğini ve genelleştireceğini öğrenebilmesidir.

Bir Github çalışanı değilseniz, Github'da veri elde etmenin en iyi yolu, şu şekilde tanımlanan bu mükemmel açık kaynak projesini (https://www.githubarchive.org/) kullanmaktır: "Github'un halka açık zamanının bir kaydı ve arşivi Eksen ve analitik projelere uygulamayı kolaylaştırın. "

Bu makalenin eki, veri elde etmek için bu projeyi kullanma hakkında bir eğitim sağlar. Akıllı bir okuyucu (David Shinn, https://medium.com/@david.shinn) ekte listelenen tüm adımları tamamladı ve bu alıştırma için gerekli verileri bir csv dosyası olarak sakladı ve Kaggle'a yükledi!

Verileri bu bağlantı aracılığıyla indirebilirsiniz (https://www.kaggle.com/davidshinn/github-issues).

Verileri hazırlayın ve temizleyin

Bazen verileri temizlemek çok zor bir iştir (https://goo.gl/images/e5e6j7)

Keras metni ön işleme

Artık verileri topladığımıza göre, verileri modelleme için işlememiz gerekiyor.

Kodu yazmaya başlamadan önce iki örnekle ısınalım:

Aşağıda, bu orijinal metinleri ön işleme adımlarının genel bir açıklaması bulunmaktadır:

1. Metni temizleyin: Bu adımda, belirli karakterleri silmek veya değiştirmek ve tüm metni küçük harflerle değiştirmek istiyoruz. Verilerin boyutuna ve alanınızın özel gereksinimlerine bağlı olarak bu adım atlanabilir. Bu örnekte, tüm harfleri küçük harfle yazıyorum ve sayıları "* sayı *" ile değiştiriyorum. Gerçek veri işleme sürecinde, daha fazla senaryoya da uyum sağlamamız gerekiyor. (Https://github.com/hamelsmu/ktext/blob/master/ktext/preprocess.py#L46-L57)

2. Tokenizasyon: Her belgeyi kelime listelerine ayırın

3. Bir sözlük oluşturun: Derlemede, her farklı kelimeyi bir tamsayı olarak temsil etmeniz gerekir, bu da bir simge oluşturmanız gerektiği anlamına gelir. > Tamsayıların eşlenmesi. Ek olarak, dolgu için belirli bir eşiğin altında görünen kelimeler için bir tamsayı tutmayı yararlı buldum (bir sonraki adıma bakın). İşareti uyguladıktan sonra- > Tamsayı eşlemesinden sonra verileriniz şöyle görünebilir:

4. Doldurma: Bu işlemden sonra, metniniz farklı uzunluklarda olabilir. Derin öğrenmede ele alınacak birçok strateji vardır, ancak bu eğiticide, işlemi basitleştirmek için belgeleri aynı uzunluğa dönüştürülecek şekilde dolduracağım veya keseceğim. Sırasıyla "pre" (pre) ve "post" (post) dediğim belgeyi başında veya sonunda doldurmak ve kesmek için 0'ı kullanabilirsiniz. Örneğimizi önceden doldurduktan sonra veriler şöyle görünebilir:

Hedef belgenin uzunluğunu belirlemenin makul bir yolu, belge uzunluğunun histogramını oluşturmak ve ondan makul bir sayı seçmektir. (Lütfen yukarıdaki örneğin belgeden önce veri doldurmak olduğunu unutmayın, ancak doldurma verilerini de belgenin sonuna ekleyebiliriz, bir sonraki bölümde ayrıntılı olarak tartışacağız).

Github Sorunları verilerini hazırlayın

Bu bölümde, çalıştırmak için bu öğreticiyi (https://github.com/hamelsmu/Seq2Seq_Tutorial/blob/master/notebooks/Tutorial.ipynb) takip edeceksiniz, kullandığımız veriler aşağıdaki gibi görünür:

Bu not defterinden yayın organları ve başlıkları içeren Pandalar veri çerçevesi.

Bu eğiticiden soru gövdesini ve başlığını içeren Pandalar veri çerçevesi (https://github.com/hamelsmu/Seq2Seq_Tutorial/blob/master/notebooks/Tutorial.ipynb).

Sorunun başlığı ve gövdesi ayrı ayrı ele alınacaktır. URL modelleme için değil, yalnızca referans olarak kullanılacaktır. Bu öğreticiyi herkese uygun hale getirmek için 5 milyon sorudan 2 milyon soru çıkardığımı lütfen unutmayın.

Kişisel olarak, derin öğrenme için metin verilerini ön işleme adımlarının oldukça tekrarlı olduğunu görüyorum. Keras size çok iyi yardımcı olabilir (https://keras.io/preprocessing/text/), ancak bu görevleri hızı artırmak için paralel olarak işlemeyi umuyorum.

Ktext paketi

Önceki bölümde açıklanan ön işleme adımlarını tamamlamanıza yardımcı olabilecek ktext (https://github.com/hamelsmu/ktext) adında bir kitaplık oluşturdum. Bu kitaplık, Keras ve Spacy metin işleme programlarının basitleştirilmiş bir sürümüdür ve hızlandırmak için Python çoklu okumayı (işlem tabanlı iş parçacığı, https://docs.python.org/2/library/multiprocessing.html) kullanır. Tüm ön işleme adımlarını birbirine bağlar ve bir dizi kullanışlı işlev sağlar. Uyarı: Bu paket hala geliştirme aşamasındadır, bu nedenle lütfen eğitimin kapsamadığı alanlarda dikkatli kullanın (destek revizyonlarına açığız! Https://github.com/hamelsmu/ktext). Bu kitaplığın nasıl çalıştığı hakkında daha fazla bilgi edinmek için bu eğiticiye göz atın (https://github.com/hamelsmu/ktext/blob/master/notebooks/Tutorial.ipynb), ancak şimdilik önce bu blogu okumanızı tavsiye ederim. .

Vücut verilerini işlemek için aşağıdaki kodu çalıştıracağız:

Bu öğreticide kodun tamamına bakın (https://github.com/hamelsmu/Seq2Seq_Tutorial/blob/master/notebooks/Tutorial.ipynb).

Yukarıdaki kod temizleme, işaretleme, ön doldurma ve sonradan kesme, her belgeyi 70 kelime uzunluğunda yapar. Ktext tarafından sağlanan belge uzunluğu histogramını inceleyerek dolgu uzunluğunu belirledim. Dahası, kelime dağarcığındaki sadece ilk 8.000 kelimeyi tutuyorum ve kalan kelimeler nadir kelimelere karşılık gelen dizin 1'e ayarlandı (bu rastgele bir seçimdir). 8 çekirdekli ve 60 GB belleğe sahip bir AWS p3.2xlarge bulut sunucusunda çalıştırmak bir saat sürer. Aşağıda ham veriler ve işlenmiş veriler için bir örnek verilmiştir:

Resim bu öğreticiden alınmıştır (https://github.com/hamelsmu/Seq2Seq_Tutorial/blob/master/notebooks/Tutorial.ipynb)

Bu başlıkların işleyişi hemen hemen aynıdır, ancak bazı ince farklılıklar olacaktır:

Bu öğreticide kodun tamamına bakın (https://github.com/hamelsmu/Seq2Seq_Tutorial/blob/master/notebooks/Tutorial.ipynb).

Bu sefer bazı ek parametreler belirledik:

append_indicators = Doğru "_Start_" etiketi ve "_end_" etiketi sırasıyla her belgenin başına ve sonuna eklenecektir.

padding = 'post' Varsayılan başlangıç ('ön') yerine belgenin sonuna 0 dolgu ekleneceği anlamına gelir.

Başlık bu şekilde işlenir, çünkü modelimizin başlığın ilk harfinin ne zaman görüneceğini bilmesini ve cümlenin sonunun nerede olması gerektiğini tahmin etmeyi öğrenmesini istiyoruz. Bir sonraki bölümde model yapısını tartışırken bunun nedenlerini daha iyi anlayacaksınız.

Modelin yapısını tanımlayın

Resim kaynağı: https://goo.gl/images/IrVBHB

Bir sinir ağı yapısı oluşturmak, Lego bloklarını istiflemek gibidir. Yeni başlayanlar için, her katmanı bir API olarak düşünmek yararlı olabilir: API'ye bazı veriler gönderirsiniz ve API bazı veriler döndürür. Bir şeyleri bu şekilde düşünmek sizi bunalmaktan alıkoyacak ve yavaş yavaş bir şeyler hakkında kendi anlayışınızı geliştirebileceksiniz. İki kavramı anlamak önemlidir:

  • Her katmanın beklenen giriş verisi şekli ve katmanın geri döneceği veri şekli. (Birden fazla katmanı bir araya getirdiğinizde, giriş ve çıkış şekilleri tıpkı Lego blokları gibi uyumlu olmalıdır).

  • Kavramsal olarak, katmanın çıktısı neyi temsil ediyor? Yığılmış katman alt kümesinin çıktısı neyi temsil eder?

Yukarıdaki iki kavram, bu öğreticiyi anlamak için gereklidir. Aşağıdaki içeriği okurken anlayamayacağınızı düşünüyorsanız, kendi durumunuza göre bu MOOC platformundan ( kursu öğrenmenizi ve ardından okumaya devam etmenizi şiddetle tavsiye ederim.

Bu eğitimde Sıradan Sıraya Model modelini kullanacağız. Lütfen bu öğreticiyi okumayı bırakın ve Francois Chollet tarafından yazılan "Keras ile Sıradan Diziye Modeli On Dakikada Uygulamayı Öğrenmeyi" dikkatlice okuyun.

Bu makaleyi okuduktan sonra, iki girişli ve bir çıkışlı bir ağı gösteren aşağıdaki diyagramı anlayabilmelisiniz:

Kaynak: https://blog.keras.io/category/tutorials.html

Bu sorunu çözmek için kullandığımız ağ, yukarıdaki eğiticide açıklanan ağa çok benzer ve aşağıdaki kodla tanımlanabilir:

Daha fazla bilgi için lütfen bu eğiticiye bakın (https://github.com/hamelsmu/Seq2Seq_Tutorial/blob/master/notebooks/Tutorial.ipynb).

Yukarıdaki kodu okurken, öğretmen zorlaması kavramına atıfta bulunulduğunu fark edeceksiniz. Öğretmen zorlaması çok önemli bir mekanizmadır, ağ eğitimini daha hızlı hale getirebilir. Bu makale (https://machinelearningmastery.com/teacher-forcing-for-recurrent-neural-networks/) bunu daha ayrıntılı olarak açıklamaktadır.

Kaynak: xkcd

Yukarıdaki yapıyı nerede bulduğumu merak ediyor olabilirsiniz. Halka açık örneklerle başladım ve birçok deney yaptım. Xkcd çizgi romanları çok canlı. Kayıp fonksiyonumun kategorik çaprazentropi yerine seyrek kategorik çaprazentropi olduğunu fark edeceksiniz, bu nedenle tahminler yapmak için tek sıcak kodlama yerine doğrudan tamsayılar kullanabilirim. Belleği daha verimli kullanın.

Eğitim modeli

Resim kaynağı: https://goo.gl/images/MYrQHk

Modelimizi "stokastik en dik iniş yönteminin krankını çevirerek (SGD, https://en.wikipedia.org/wiki/Stochastic_gradient_descent)" eğiteceğiz.

Modeli eğitmek için kod çok açıktır ve tanımlanan model nesnesini çağırmak için uygun yöntemdir. Oturum açma geri arama (https://en.wikipedia.org/wiki/Callback_(computer_programming)), eğitim süreleri (https://stackoverflow.com/questions/4752626/epoch-vs-iteration-when gibi ek parametreleri iletiriz -eğitim-sinir ağları) ve toplu iş boyutu (https://stackoverflow.com/questions/4752626/epoch-vs-iteration-when-training-neural-networks).

Modeli eğitmek için kullandığımız kod aşağıdadır ve ayrıca bu kodu çalıştırmanın sonucunu gösteren bir markdown dosyası da vardır. Daha fazla bilgi için lütfen Jupyter not defterine bakın.

Bu modeli AWS p3.2xlarge bulut sunucusu (https://aws.amazon.com/ec2/instance-types/p3/) üzerinde eğittim ve 7 kez eğitmek yaklaşık 35 dakika sürüyor. Gerçek başvuru sürecinde, modeli daha uzun bir süre eğitebilir ve eğitimi önceden durdurmak veya öğrenme oranını dinamik olarak ayarlamak için ek bir geri arama işlevi (https://keras.io/callbacks/) kullanabilirim. Ancak, yukarıda listelenen eğitim sürecinin en basit uygulanabilir ürün için yeterli olduğunu buldum.

Model eğitimi sonuçları, daha gelişmiş öğrenme oranı ayarlama yöntemleri ve geliştirilmiş model yapısı kullanılarak büyük ölçüde iyileştirilebilir.Bu, bu makalenin sonundaki "Sonraki Adımlar" bölümünde tartışılacaktır.

Modeli akıl yürütme için hazırlayın

Resim kaynağı: https://goo.gl/images/8ifMZA

Modeli çıkarıma hazırlamak için (tahminler yapmak), kod çözücünün aşağıdaki şekilde gösterildiği gibi önceki eğitimdeki doğru tahmin sonuçları yerine en son tahmin sonuçlarını girdi olarak alması için onu yeniden birleştirmeliyiz (eğitimden sonraki ağırlıklar değişmeden kalır). Göstermek:

Keras öğreticisindeki (https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html) dizinin içeriğinden sıralı öğrenme sürecine alınmıştır.

Anlamıyorsanız, lütfen bu eğiticiyi inceleyin (https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html). Kod çözücü, yeniden yapılandırma için aşağıdaki kodu kullanır (koda adım adım başvurmanızı kolaylaştırmak için kodda çok ayrıntılı yorumlar yaptım):

Tahmin için daha fazla yardımcı fonksiyon bu dosyadadır (https://github.com/hamelsmu/Seq2Seq_Tutorial/blob/master/notebooks/seq2seq_utils.py). Spesifik olarak, generate_issue_title yöntemi (https://github.com/hamelsmu/Seq2Seq_Tutorial/blob/master/notebooks/seq2seq_utils.py#L233-L280), sorun başlığını tahmin etme mekanizmasını tanımlar. Bu eğitimde, bir sonraki en iyi kelimeyi belirlemek için açgözlü bir strateji kullandım. Tahminin nasıl yapıldığını tam olarak anlamak için kodu dikkatlice okumanızı öneririm.

Bu modelin rolünü gösterin

Resim kaynağı: https://goo.gl/images/bfPNhR

1. Metni özetleyin ve yenilikçi ve iyi örnekler üretin.

Tipik bir sınıflandırma ve regresyon modelinde, çok fazla görselleştirme ve hikaye anlatımı eşlik etmediği sürece, tahminin kendisi o kadar da ilginç değildir. Bununla birlikte, doğal dilde yazılmış bir metin parçasını özetlemek için bir model eğitebilirseniz, bu durumda tahminin kendisi, izleyicilere doğal dilden anlamlı özellikler çıkarmayı öğrendiğinizi göstermenin iyi bir yoludur - tahmin iyiyse, tahmin edin Kendi içinde harika görünüyor.

Metni özetleme becerisinin kendisi, kullanıcılara başlık taslakları için otomatik olarak öneriler sağlama gibi yararlı bir veri ürünü olabilir. Ancak, bu modelin en kullanışlı kısmı bu olmayabilir. Aşağıdaki bölümlerde bu modelin diğer özellikleri tartışılacaktır.

Bir antoloji için metin özetleme örneği (burada daha fazla örnek bulunabilir: https://github.com/hamelsmu/Seq2Seq_Tutorial/blob/master/notebooks/Tutorial.ipynb):

Tahmin sonucu dikdörtgen bir kutu içindedir. Eğitim, Github'da herkese açık olarak mevcuttur (https://github.com/hamelsmu/Seq2Seq_Tutorial/blob/master/notebooks/Tutorial.ipynb).

2. Çok sayıda görev için yeniden kullanılabilen özellikleri çıkarın.

Sıralamaya göre modelinin iki bileşeni olduğunu hatırlayın: kodlayıcı ve kod çözücü. Kodlayıcı bilgiyi "kodlar" veya metinden özellikleri çıkarır ve bu bilgiyi, bilgiyi alan ve doğal dilde tutarlı bir özet üretmeye çalışan kod çözücüye sağlar.

Bu eğitimde, kodlayıcı her soru için 300 boyutlu bir vektör oluşturacaktır. Bu vektör, aşağıdakiler gibi çeşitli makine öğrenimi görevleri için kullanılabilir:

  • Benzer veya yinelenen sorunları bulmak için bir öneri sistemi oluşturun.

  • Yararsız sorunları tespit edin.

  • Sorunun ne kadar süre açık kalacağını tahmin etmek için regresyon modeline ek özellikler sağlayın.

  • Hangi sorunların kusurları veya güvenlik açıklarını yansıttığını belirlemek için sınıflandırıcıya ek özellikler sağlayın.

Metinden öznitelik çıkarmanın birçok yolu olduğu ve belirli bir şekilde çıkarılan özelliklerin, belirli bir görevde başka bir yöntemle çıkarılan özelliklerden daha iyi olacağının hiçbir garantisi olmadığı belirtilmelidir. Bu yöntemle çıkarılan özellikleri diğer özelliklerle birleştirmenin genellikle yararlı olduğunu düşünüyorum. Ancak, metni özetlemek için modeli eğitirken bu özellikleri de alabileceğinizi vurgulamak istiyorum!

Aşağıda bu özelliklerin bir uygulama örneği verilmiştir. Kodlayıcı her probleme karşılık gelen 300 boyutlu bir vektör sağladığından, vektör uzayında her problemin en yakın komşusunu bulmak çok basittir. Sinoy paketini (https://github.com/spotify/annoy) kullanarak en yakın komşuları gösterebilir ve birkaç soru için başlıklar oluşturabilirim.

Tahmin sonucu dikdörtgen bir kutu içindedir. Bu eğitici, Github'da herkese açık olarak mevcuttur. (https://github.com/hamelsmu/Seq2Seq_Tutorial/blob/master/notebooks/Tutorial.ipynb)

Yukarıdaki iki örnek, kodlayıcı tarafından çıkarılan özelliklerin anlamsal olarak benzer problemleri bulmak için nasıl uygulanabileceğini göstermektedir. Ek olarak, bu özellikleri öneri sistemine veya yukarıda listelenen diğer makine öğrenimi görevlerine de uygulayabilirsiniz.

Daha heyecan verici olan, uygulamasının problemlerle sınırlı olmamasıdır. README dosyası (https://help.github.com/articles/about-readmes/), yorumlar ve kodun açıklama kısmı ( için aynı yöntemi kullanabiliriz. docstrings) başlığı oluşturmak için. Uygulama alanı sınırsızdır. Ekte bir veritabanı tanıtacağım, bu veritabanından veri alabilir ve kendiniz deneyebilirsiniz!

Model değerlendirmesi

Metin özetleme modellerinin performansını değerlendirmenin iyi bir yolu BLEU puanlamadır (https://en.wikipedia.org/wiki/BLEU). Burada (https://github.com/hamelsmu/Seq2Seq_Tutorial/blob/master/notebooks/seq2seq_utils.py#L394-L425) BLEU puanını oluşturmak için kodu bulabilirsiniz. Bu yeni blog (https://blog.floydhub.com/turning-design-mockups-into-code-with-deep-learning/), bu göstergenin iyi bir görselleştirmesini sağlar. Okuyucuların alıştırma yapması için bu BLEU puanlama yöntemini bırakıyorum.

En iyi modelimin BLEU puanını paylaşamasam da, bu yazıda paylaştığım modelin iyileştirilmesi için çok yer olduğunu söyleyebilirim. Aşağıdaki adımlarda bazı ipuçları vereceğim.

Sonraki adım

Bu makalenin amacı, ilginç veri ürünleri oluşturmak için Seq2Seq (Sıraya göre sıralı) modelinin nasıl kullanılacağını göstermektir. Aktif olarak hata ayıkladığım model bu mimari ile aynı değil ama temel fikirler aynı. Bu blogda bahsetmediğim bazı yararlı iyileştirme teknikleri var:

  • Dikkat katmanı ve çift yönlü tekrarlayan sinir ağları (RNN'ler) ekleyin.

  • Kodlayıcı ve kod çözücüde daha fazla tekrarlanan katmanı kaplayın ve farklı katmanların boyutunu ayarlayın.

  • Normalleştirme kullanın (bırakma dahil değil).

  • Tüm soru külliyatını kullanarak kelime düğünlerini önceden eğitin.

  • Daha iyi bir belirteç oluşturucu kullanarak, karışık kod ve metin, diğer sorunlu şablonlar ve diğer Markdown dosyalarını (https://guides.github.com/features/mastering-markdown/) işleyebilir.

  • Eğitmek için daha fazla veri kullanın (bu eğiticide örnek modeli eğitmek için yalnızca 2 milyon soru kullandık, daha fazla veri mevcut).

  • Soru başlığını tahmin etmek için açgözlü bir strateji yerine ışın aramasını (https://en.wikipedia.org/wiki/Beam_search) kullanın.

  • PyTorch'a ( dayalı fastai kitaplığını (https://github.com/fastai/fastai) keşfedin; bu, Keras'tan diğerine geçiş de dahil olmak üzere NLP'ye de uygulanabilen birkaç gelişmiş tekniği açıklar. PyTorch.

Yukarıdaki teknikler daha ileri düzeydedir, ancak öğrenmeleri çok kolay olabilir. Daha fazlasını öğrenmek isteyen okuyucular, lütfen kaynaklar bölümüne bakın.

Üreme ortamı: Nvidia-Docker

Kodumu çalıştırmaya çalışanlara kolaylık sağlamak için tüm bağımlılıkları bir Nvidia-Docker konteynerinde paketledim. Docker'a aşina olmayanlar için belki bu blogum (https://towardsdatascience.com/how-docker-can-help-you-become-a-more-effective-data-scientist-7fc048ef91d5) sizin için olabilir işe yarıyor.

Dockerhub'da bu öğreticinin aynası (https://hub.docker.com/r/hamelsmu/ml-gpu/).

Kaynaklar

Bu makalenin Github sürümü burada (https://github.com/hamelsmu/Seq2Seq_Tutorial) ve Juypter not defteri buradan görüntülenebilir (https://github.com/hamelsmu/Seq2Seq_Tutorial/blob/master/notebooks/Tutorial.ipynb) .

Bu kavramları öğrenme sürecinde, Jeremy Howard'ın fast.ai kursundan en yüksek getiri oranını elde ettim. Bu MOOC kursunun en son sürümünde Jeremy, Keras yerine PyTorch kullanıyor ve yüksek soyutlama için rastgele yeniden başlatmalarla (https://arxiv.org/abs/1506.01186) periyodik öğrenme hızı gibi yararlı özellikler kullanıyor.

Francois Chollet'in blogu (https://blog.keras.io/), Keras kitaplığının dokümantasyonu (https://keras.io/) ve Keras'ın Github'daki sorunlar bölümü (https://github.com/ keras-ekibi / keras / sorunlar).

Kaggle veri seti sayfası (https://www.kaggle.com/davidshinn/github-issues/) bu alıştırma için verilere sahiptir (David Shinn sayesinde (https://medium.com/@david.shinn)). Daha büyük bir veri kümesi elde etmek istiyorsanız, ekte açıklandığı gibi orijinal sorgu parametrelerini genişletebilirsiniz.

Avneesh Saluja (https://medium.com/@asaluja)-Airbnb'nin makine öğrenimi bilimcisi, bu harika konuşmada gösterilmiştir (https://www.youtube.com/watch?v=kX4CiA94bmQfeature=youtu.be) Benzer bir yöntem kullanarak yaptığı şey.

Teşekkürler

Ayrıca bu makaleyi gözden geçiren ve bana değerli bilgiler verenlere teşekkürler: David Shinn, Robert Chang ve Zachary Deane-Maye.

Benimle irtibata geçin

Umarım bu blog gönderisini beğenirsiniz. benimle iletişime geçmenin yolu aşağıdadır:

  • Twitter (https://twitter.com/HamelHusain)

  • Linkedin (https://www.linkedin.com/in/hamelhusain/)

  • Github (https://github.com/hamelsmu)

Uyarı ve sorumluluk reddi

Bu makalede sunulan tüm düşünceler veya görüşler bana aittir. Makalede bahsedilen herhangi bir fikir veya teknoloji, Github'un gelecekte piyasaya süreceği ürünleri önceden bildirmez.

Ek-Github sorun verilerini kendiniz sıfırdan nasıl edinebilirsiniz?

Resim kaynağı: https://goo.gl/images/NfaY7t

Bu verileri almanın en kolay yolu (https://www.githubarchive.org/) BigQuery'yi kullanmaktır. Bir Google Cloud hesabına kaydolduğunuzda, size 300 $ verecekler ki bu, bu alıştırma için gereken verileri sorgulamak için yeterlidir. Akıllı bir okuyucu bu verileri elde etmenin daha kolay bir yolunu bulursa, lütfen yorumlarda açıklayın! Bu ayrıca puan almak için mükemmel bir Kaggle veri seti (https://www.kaggle.com/datasets) oluşturmanıza da olanak tanır.

Bu bağlantıdaki (https://www.githubarchive.org/#bigquery) talimatları kesinlikle uygulayacağız. Kafanızın karıştığını düşünüyorsanız, lütfen bu belgeye bakın. Ancak, aşağıdaki adım adım talimatları sağlayacağım:

Google'da bir proje oluşturmadıysanız:

  • Google Developer Console'a giriş yapın

  • Bir proje oluşturun ve BigQuery API'yi etkinleştirin

  • Oluşturduğunuz projenin faturalandırma hesabınızla ilişkili olduğunu onaylamak için faturalandırma konsolunu (https://console.cloud.google.com/billing/) kontrol edin, böylece yeni bir kullanıcı olarak aldığınız 300 ABD doları indirimden (bu Uygulama sorgusu bana 4 dolara mal oldu).

Yukarıdaki adımları tamamladıktan sonra verileri sorgulamaya devam edebilirsiniz. Sorgu konsolunu görüntülemek için bu bağlantıyı (https://bigquery.cloud.google.com/table/githubarchive:day.20150101) tıklayabilirsiniz. Ekranın sağ üst köşesindeki "Sorgu Tablosu" düğmesini seçmeniz gerekiyor ve ardından şöyle bir ekran göreceksiniz:

Ardından, "Seçenekleri Göster" düğmesine tıklayabilir ve "Eski SQL" onay kutusunun işaretlenmediğini onaylayabilirsiniz (varsayılan olarak işaretlidir).

Ayrıca proje adınızın solda görüntüleneceğini ve proje adımın GithubIssues olduğunu fark edeceksiniz. Adın yanındaki mavi açılır kutuyu tıklayın (aşağıda gösterildiği gibi), "Yeni veri kümesi oluştur" u seçin ve veri kümesine bir ad verin. Gördüğünüz gibi, veri setimin adı github_issues. Bu isim daha sonra faydalı olacak

Artık gerekli verileri almaya hazırız! Aşağıdaki SQL sorgu kodunu kopyalayıp konsola yapıştırın ve kırmızı düğmeye "Sorguyu çalıştır" düğmesini tıklayın. Alternatif olarak, bu bağlantıyı da tıklayabilirsiniz (https://bigquery.cloud.google.com/savedquery/506213277345:60eee3aa040c40e0bda4e07c5e024b5e). Aşağıdaki SQL kodunu istediğiniz zaman inceleyebilirsiniz, biz sadece sorunun başlığını ve gövdesini topluyoruz ve verileri toplarken temizliyoruz.

Sorgu, Github sorunlarından alınan URL'leri, başlıkları ve metinleri içeren yaklaşık 5 milyon veri satırı döndürecektir. Bu dosya burada bulunabilir (https://github.com/hamelsmu/Seq2Seq_Tutorial).

Sorgu tamamlandıktan sonra, onu Amazon S3'e (https://aws.amazon.com/s3/) benzeyen Google Cloud Bucket'e (https://console.cloud.google.com/storage/) kaydetmelisiniz. )depolama. Bunu yapmak için, sorgu sonucunun yukarısındaki "Tablo Olarak Kaydet" düğmesini tıklamanız gerekir, bu da aşağıdaki pencereyi görüntüler:

Hedef veri kümesini (önceki adımda oluşturduğunuz veri kümesi) seçin ve tamam'a tıklayın. Şimdi sol bölmede oluşturduğunuz tabloya geçin, mavi açılır menüyü seçin ve "Tabloyu dışa aktar" ı tıklayın. Şu anda aşağıdaki gibi bir pencere göreceksiniz:

Bir Google Cloud Paketiniz yoksa, bir tane oluşturmak için "Dosyaları Görüntüle" bağlantısını tıklamanız gerekir. Google Cloud Storage'ın URI sözdizimi aşağıdaki gibidir:

g: / / kova_adı / hedef_ dosyaadı.csv

Veri miktarı bir csv dosyasına sığamayacak kadar büyük olduğundan (toplam veri yaklaşık 3 GB'dir), bir joker karakter eklemeniz gerekir. Örneğin, (özel) paketimin adı hamel_githubissues, dolayısıyla dosyayı koyduğum yol:

g: / / hamel_githubissues / * .csv

Bu adımı tamamladığınızda, tablo adının yanında bir mesaj göreceksiniz ("... çıkarılıyor" şeklinde). Bu sadece birkaç dakika sürer. Bundan sonra, paketinize geçebilir ve şu dosyaları görebilirsiniz (aşağıda gösterildiği gibi):

Sorguladığımız verileri içeren birden çok csv dosyası.

Bu verileri indirdikten sonra, bu eğitimin geri kalanını tamamlamak için ihtiyacınız olan her şeye sahipsiniz.

Verileri her bir dosyayı tıklayarak veya Google Bulut Depolama CLI (https://cloud.google.com/storage/docs/gsutil) kullanarak indirebilirsiniz.

Veya, tabloyu sorgulama sürecinin tamamını tamamlamak için pandas kitaplığını ( kullanabilirsiniz.

Dürüst olmak gerekirse, Google Cloud'u nadiren kullandığım için yalnızca kullanıcı arayüzünü kullanmaya karar verdim.

Robert Chang'a teşekkürler. (https://medium.com/@rchang?source=post_page)

Orijinal bağlantı: https://towardsdatascience.com/how-to-create-data-products-that-are-magical-using-sequence-to-sequence-models-703f86a231f8

Çevirmen Profili

Li Jieqiong , Şu anda China South University of Finance and Economics'te MBA okuyan, güncel araştırma yönü: finansal büyük veri. Şu anda py gibi diğer yazılımları, eğilimleri tahmin etmek için paketleri yakalamak gibi finansal pratik işlemlere nasıl uygulayacağımı öğreniyorum (stok / sanal para birimi fiyatlarını tahmin etmemek). Muhtemelen finansta mimari tasarımı (feng shui yönü) en iyi anlayan uzun bacaklı kız. Süslü barmen lokomotif yıkama kumu. Yukarı sahada koştum ve sürdüm ve Zhangye İpek Yolu Mücadelesinde 3 gün boyunca 78 kilometre yürüdüm. Güzel manzara gitmeye hevesli ve rüzgar ve yağmur yürüyor.

Premier Lig'de bir başka klasik dönüş! 15 dakikada 1-3'ten 4-3'e, eski Manchester United forvet 91 dakikalık bir hikaye yaptı
önceki
Hindistan'a mı gidiyorsunuz? Gerçek sandığınızdan çok daha acımasız!
Sonraki
Uluslararası Şampiyonlar Kupası-Edel iki gol attı, Ribery sakatlıktan emekli oldu, Inter 2-0 Bayern
AI yargıcın yerini mi alıyor? Akıllı adaletin inşasını ve uygulamasını biliyor musunuz
Uluslararası Şampiyonlar Kupası-Tenten üç gollü Stirling golü attı, Oscars World Bo Manchester City 4-1 Real Madrid
AI'nın gelişimi: finans endüstrisindeki uygulamalar ve fırsatlar (video PPT ile)
2017 sağlık yönetimi hizmeti risk sermayesi trendinin yorumlanması
2017 yılında, otonom sürüş için temel bileşenlerin maliyeti düştü ve engelleyiciyi bulduk
2-0 iyi bir başlangıç! Real Madrid 3 kahramanı Solari'yi deli ediyor, Zidane 3 hemen değişiyor
Uluslararası Şampiyonlar Kupası-Higuain iki kez Marchisio, Juventus Paris'te 3-2 gol attı.
Uygulamalı öğretim | Derin öğrenme kütüphanesi PyTorch (kodlu)
Derinlik | Bir rüyadan uyanırken LeTV'den kaçış
Marvel'ın babası Stan Lee vefat etti, "süper kahramanlar" yas tuttu
Uluslararası Şampiyonlar Kupası-Neymar gol attı, MSN sadece devre arası oynadı, Barcelona 1-0 Manchester United
To Top