Bu makale, Lei Feng'in altyazı grubu tarafından derlenen teknik bir blogdur.Orijinal başlık, Emmanuel Ameisen tarafından NLP problemlerinin% 90'ı nasıl çözülür: adım adım kılavuzdur.
Çeviri | Düzenleyen Yu Zeping | Düzenleyen Fan Jiang | Wu Xuan
W ve H ile başlayan bu beş kelime metin verilerine nasıl uygulanır?
Benzer içerikler hakkında daha fazla bilgi edinmek için Insight ve Emmanuel'i Twitter'da takip edin.
Metin verileri her yerde
İster yerleşik bir şirket olun, ister yeni hizmetler sunmaya adanmış olun, ürünlerinizin performansını ve işlevselliğini doğrulamak, iyileştirmek ve genişletmek için metin verilerini kullanabilirsiniz. Metin verilerinden anlam öğrenme ve çıkarma bilimi, doğal dil işlemede (NLP) aktif bir araştırma konusudur.
NLP çok geniş bir alan ve her gün yeni ve heyecan verici sonuçlar üretiliyor. Bununla birlikte, Insight ekibi yüzlerce şirketle işbirliği yaptıktan sonra, pratikte diğer uygulamalardan çok daha sık kullanılan birkaç önemli pratik uygulamayı keşfettiler.
Farklı kullanıcı / müşteri gruplarını tanımlayın (ör. Müşteri kaybını, yaşam döngüsünü, ürün tercihlerini tahmin edin)
Farklı türde geri bildirimleri doğru bir şekilde tespit edin ve ayıklayın (olumlu veya olumsuz yorumlar / görüşler, kıyafet bedeni / uyumu gibi belirli özelliklere sahip yorumlar)
Metni amaca göre sınıflandırın (örneğin temel yardım isteyin, acil sorular)
İnternette birçok NLP makalesi ve öğreticisi olmasına rağmen, bu sorunlarla nasıl verimli bir şekilde başa çıkılacağını sıfırdan öğrenmekte zorlanıyoruz.
Bu makale nasıl yardımcı olabilir
Her yıl yüzlerce projeye liderlik ediyoruz Amerika Birleşik Devletleri'ndeki en iyi ekiplerden tavsiye aldıktan sonra, yukarıdaki sorunları çözmek için makine öğrenimi çözümlerinin nasıl oluşturulacağını açıklamak için bu makaleyi yazıyoruz. En basit yöntemle başlayıp ardından özellik mühendisliği, kelime vektörleri ve derin öğrenme gibi daha ayrıntılı çözümlere geçeceğiz.
Bu makaleyi okuduktan sonra aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
Verileri toplayın, hazırlayın ve inceleyin
Basit modeller oluşturun ve gerektiğinde bunları derin öğrenmeye dönüştürün
Modelinizi açıklayın ve anlayın, bilgi aldığınızdan ve gürültü yapmadığınızdan emin olun
Bu makaleyi adım adım kılavuz olarak yazdık ve aynı zamanda verimli standart yöntemlere üst düzey bir genel bakış işlevi görebilir.
Bu makale, tüm bu teknolojileri göstermek ve uygulamak için etkileşimli bir not defteri içerir.
Kodu çalıştırıp adım adım takip etmekten çekinmeyin!
1. Adım: Verilerinizi toplayın
Örnek veri kaynağı
Her makine öğrenimi problemi, e-postalar, gönderiler veya tweet'ler gibi verilerle başlar. Yaygın metinsel bilgi kaynakları şunları içerir:
Ürün incelemeleri (Amazon, Yelp ve çeşitli uygulama mağazalarından)
Kullanıcı tarafından oluşturulan içerik (Tweet ve Facebook gönderileri, StackOverflow soruları)
Sorun giderme (müşterinin isteği, hizmet günlüğü, sohbet günlüğü)
"Sosyal Medyada Afet" veri kümesi
Bu yazıda CrowdFlower tarafından sağlanan "sosyal medyada felaket" adı verilen veri setini kullanacağız.
Katkıda bulunanlar 10.000'den fazla tweet görüntüledi, "yangın", "karantina" ve "kaos" gibi çeşitli aramalar yaptı ve ardından bu tweetlerin bir felaket olayına (şaka veya film incelemesi değil) karşılık gelip gelmediğini işaretledi. Yıkıcı olmayan ifadeleri bekleyin)
Görevimiz, filmler gibi alakasız konulardan ziyade hangi tweetlerin felaket olayları hakkında olduğunu tespit etmektir. Bunu neden yapmak istiyorsun? Olası bir uygulama, son zamanlarda çıkan Adam Sandler filmindeki yorumları görmezden gelerek, acil durumlarla ilgili tweetleri yalnızca kolluk kuvvetlerine bildirmektir. Bu görevin özel bir zorluğu, her iki tweet türünün de aynı arama anahtar kelimelerini içermesidir, bu nedenle onları ayırt etmek için daha ayrıntılı farklılıklar kullanmamız gerekir.
Bu makalenin geri kalanında, afetlerle ilgili tweet'lere "felaketler" ve diğer tweetlere "alakasız" olarak atıfta bulunacağız.
etiket
Verileri etiketledik, böylece hangi tweetlerin hangi kategoriye ait olduğunu biliyoruz. Richard Socher'in aşağıda özetlediği gibi: Karmaşık denetimsiz yöntemleri optimize etmeye çalışmakla karşılaştırıldığında, modeli eğitmek için yeterli veriyi bulmak ve etiketlemek genellikle daha hızlı, daha basit ve daha ucuzdur.
2. Adım: Verileri temizleyin
İzlediğimiz ilk kural şudur: modelinizin kalitesi verilerinize bağlıdır.
Bir veri bilimcinin temel becerilerinden biri, bir sonraki adımın modeli iyileştirmeye veya verileri işlemeye odaklanmak olup olmadığını bilmektir. İyi bir pratik kural, önce verilere bakmak ve sonra temizlemektir. Temiz bir veri seti, modelin alakasız gürültüye aşırı uydurmak yerine anlamlı özellikleri öğrenmesine izin verecektir.
Verilerinizi temizlemek için bir liste (daha fazla ayrıntı için koda bakın):
Harf ve rakam olmayan karakterler gibi tüm ilgisiz karakterleri silin
Metni etiketlemek için ayrı kelimelere kesin
Twitter veya URL'deki "@" gibi alakasız kelimeleri kaldırın
"Merhaba", "Merhaba" ve "MERHABA" nın aynı şekilde ele alınması için tüm harfleri küçük harfe dönüştürün
Yanlış yazılmış veya birden çok yazım yöntemi olan kelimeleri temsil etmek için aynı yöntemi kullanmayı düşünün (ör. "Havalı" / "kewl" / "cooool")
Sözcüklendirmeyi düşünün (örneğin, "am", "are" ve "eşittir" olmak "gibi kelimeleri kısaltın)
Bu listeye göre adım adım kontrol ettikten sonra, modeli eğitmeye başlamak için temizlenmiş, önceden işaretlenmiş verileri kullanmaya başlayabiliriz!
3. Adım: Verileri temsil etmenin iyi bir yolunu bulun
Makine öğrenimi modeli, girdi olarak sayısal değerleri alır. Örneğin, görüntü işleme için kullanılan bir model, her bir renk kanalındaki her pikselin yoğunluk matrisini girdi olarak alır.
Gülümseyen bir yüze benzeyen bir sayılar matrisi
Veri setimiz bir cümle listesidir Algoritmamızın verilerden özellikleri çıkarması için öncelikle algoritmamızı anlaşılır kılan, yani bir sayılar listesi ile temsil edilen bir ifade yöntemi bulmamız gerekir.
tek sıcak kodlama (kelime torbası)
Bilgisayarın anlayabilmesi için, metin ifadesinin doğal bir yolu, her bir karakteri ayrı bir sayıya (ASCII kodu gibi) kodlamaktır. Bu ifadeyi sınıflandırıcıya beslersek, baştan başlamalı ve kelimelerin yapısını yalnızca bizim verilerimizden öğrenmesi gerekir ki bu çoğu veri kümesi için imkansızdır. Daha gelişmiş yöntemler kullanmamız gerekiyor.
Örneğin, veri setimize dayalı olarak tüm kelimelerin bir sözlüğünü oluşturabilir ve kelime haznesindeki her kelimeye bağlanmak için benzersiz bir dizin kullanabiliriz. Kelime haznesindeki kelime sayısı kadar her cümle bir liste olarak temsil edilir. Bu listedeki her dizinde, karşılık gelen kelimenin cümle içinde kaç kez göründüğünü işaretleriz. Bu yönteme kelime torbası modeli adı verilir çünkü bu temsil yöntemi cümledeki kelimelerin sırasını tamamen yok sayar. Aşağıdaki gibi.
Cümleleri temsil etmek için kelime torbası kullanın. Cümle solda ve cümle temsil vektörü sağda. Vektördeki her indeks belirli bir kelimeyi temsil eder.
Vektör görselleştirme
"Sosyal Medya Felaketi" örneğinde, sözlüğümüzde yaklaşık 20.000 kelime var, bu da her cümlenin 20.000 uzunluğunda bir vektör olarak temsil edildiği anlamına geliyor. Bu vektörün çoğu 0 içerir, çünkü her cümle, kelime haznesindeki kelimelerin yalnızca küçük bir alt kümesini içerir.
Temsil vektörümüzün sorunumuzla ilgili bilgileri yakalayıp yakalamadığını anlamak için (yani, tweet'lerin afetlerle ilgili olup olmadığı), bu sınıfların iyi bir şekilde ayrılıp ayrılmadığını görmek için onları görselleştirmek için iyi bir yoldur. Kelime haznesi genellikle çok büyük olduğu için 20.000 boyutlu veriyi görselleştirmek imkansızdır.PCA gibi teknikler veriyi 2 boyuta indirmemize yardımcı olabilir. Aşağıda gösterildiği gibi.
Kelime çantası vektör görselleştirme
İki kategori birbirinden iyi ayrılmış gibi görünmüyor, bu vektörün özelliği olabilir veya sadece boyutsal azalmadan kaynaklanıyor olabilir. Kelime torbası özelliğinin kullanışlı olup olmadığını görmek için, onlara göre bir sınıflandırıcı yetiştirebiliriz.
Adım 4: Sınıflandırma
İlk kez bir sorunla karşılaştığınızda, sorunu çözmek için genellikle en basit araçla başlamak en iyisidir. Bir sınıflandırma problemi ile karşılaşıldığında, genellikle herkesin kullanmayı sevdiği bir yöntem lojistik regresyondur, çünkü birçok işlevi vardır ve açıklanabilir. Eğitim çok basittir ve sonuçlar yorumlanabilir çünkü modeldeki en önemli katsayıları kolayca çıkarabilirsiniz.
Verileri eğitim seti ve test seti olarak ayırıyoruz. Eğitim seti modelimizi eğitmek için kullanılır ve test seti, modelin görünmeyen veriler üzerinde nasıl performans gösterdiğini görmek için kullanılır. Eğitimden sonra% 75,4 doğruluk elde ettik, çok da kötü değil! En sık tahmin edilen kategori (ilgisiz) yalnızca% 57'lik bir doğruluğa ulaşacaktır. Ancak ihtiyaçlarımız için% 75 doğruluk yeterli olsa bile bu modeli anlamaya çalışmadan kullanmamalıyız.
5. Adım: Kontrol edin
Karışıklık matrisi
İlk adım, modeldeki hata türlerini ve hangi hataların bizim için kabul edilemez olduğunu anlamaktır. Örneğimizde, yanlış pozitifler alakasız tweetleri felaketler olarak sınıflandırır ve yanlış pozitifler felaket tweetlerini alakasız olarak sınıflandırır. Her olası felakete öncelik vermek istiyorsak, yanlış alarmların oranını düşürmek isteyebiliriz. Kaynaklarla sınırlıysa, yanlış alarmları azaltmak için düşük bir yanlış alarm oranını tercih edebiliriz. Bu bilgiyi görselleştirmenin iyi bir yolu, modelimiz tarafından tahmin edilen etiketleri gerçek etiketlerle karşılaştırmak için bir karışıklık matrisi kullanmaktır. İdeal olarak, bu matris sol üst köşeden sağ alt köşeye olan köşegendir (tahminimiz doğru etiketi mükemmel bir şekilde tahmin ettiğinde).
Karışıklık matrisi (yüksek oranda yeşil, düşük oranda mavi)
Sınıflandırıcımız, yanlış pozitiflerden (orantılı) daha fazla yanlış pozitif üretir. Diğer bir deyişle, modelimizin en yaygın hatası, afetleri alakasız olarak işaretlemektir. Yanlış pozitiflerin uygulama maliyeti yüksekse, bu bizim sınıflandırıcımız için iyi bir önyargı olabilir.
Modelimizi açıklayın
Modelimizi doğrulamak ve tahminlerini açıklamak için, modelin tahminlerde bulunmak için hangi kelimeleri kullandığını görmek önemlidir. Verilerimiz önyargılıysa, sınıflandırıcımız eğitim setinde doğru tahminlerde bulunacaktır, ancak gerçek dünyada pek genelleştirilemeyebilir. Burada, iki afet ve ilgisizlik kategorisindeki en önemli kelimelerin bir çizelgesini oluşturuyoruz. Kelime torbası modelini ve lojistik regresyonu kullanırken, kelimelerin öneminin grafiğini çizmek kolaydır, çünkü sadece model tarafından tahmin için kullanılan katsayıları çıkarmamız ve sıralamamız gerekir.
Kelime torbasının önemi
Sınıflandırıcımız bazı kelimeleri (Hiroşima, kasaplık gibi) doğru bir şekilde çıkardı, ancak bazı anlamsız kelimelere (heyoo, x1392 gibi) fazlasıyla uyuyordu. Şimdi, kelime torbası modelimiz farklı kelimelerin kelime dağarcığını işler ve tüm kelimelere eşit muamele eder. Bununla birlikte, bu kelimelerin bazıları sık sık karşımıza çıkar ve tahminlerimizde sadece gürültülü bir rol oynarlar. Daha sonra, kelimelerin sıklığını göz önünde bulundurarak cümleleri ifade etmenin bir yolunu deneyeceğiz ve verilerimizden daha fazla anlam çıkarabilir miyiz göreceğiz.
6. Adım: Kelime yapısını düşünün
TF-IDF
Modelimizin daha anlamlı kelimelere odaklanmasına izin vermek için, kelime torbası modeline dayalı TF-IDF skorunu (terim frekans-ters belge frekansı) kullanabiliriz. TF-IDF, kelimelerin ağırlığını veri kümesinde ne kadar nadir göründüğüne bağlı olarak belirler ve çok sık görünen kelimelerin ağırlığını azaltır çünkü bunlar yalnızca gürültü getirebilir. PCA kullanılarak elde edilen yeni vektör burada.
TF-IDF vektör görselleştirme
Yukarıdaki resimden de görebileceğimiz gibi iki renk arasında daha net bir fark var. Bu, sınıflandırıcımızın iki kategoriyi daha kolay ayırmasını sağlar. Bakalım daha iyi performans getirecek mi? Yeni vektörümüzü eğitmek için başka bir lojistik regresyon modeli kullanarak% 76,2 doğruluk elde ettik.
Sadece biraz gelişti. Modelimiz daha önemli kelimeleri edinmeye mi başlıyor? Modelin "hile yapmasını" önlerken daha iyi bir sonuç alırsak, bu modeli yükseltmeyi düşünebiliriz.
TF-IDF: Kelime önemi
Aldığı kelimeler daha alakalı görünüyor! Test setindeki değerlendirme göstergelerimiz çok az artmış olsa da, modelimizde kullanılan kelimelere daha fazla güveniyoruz, bu nedenle onu müşterilerle etkileşimli sisteme yerleştirirken daha rahat hissedeceğiz.
7. Adım: Anlambilim kullanın
Word2Vec
Modelimiz şimdi kelimelerin anlamını almaya çalışıyor. Ancak, bu modeli kullanırsak, eğitim setinde görülmemiş kelimelerle karşılaşmamız muhtemeldir. Eğitim sırasında birçok benzer kelimeyle karşılaşılsa bile, önceki model bu tweetleri doğru bir şekilde sınıflandıramıyor.
Bu sorunu çözmek için kelimelerin anlamlarını yakalamamız gerekiyor, yani "iyi" ile "olumlu" arasındaki mesafenin "kayısı" ile "anakara" arasındaki mesafeden daha yakın olduğunu anlamamız gerekiyor. Anlamsallığı yakalamamıza yardımcı olması için kullandığımız araca Word2Vec denir.
Önceden eğitilmiş kelimeler kullanın
Word2Vec, sözcükler için sürekli vektörler bulmak için bir araçtır. Büyük miktarda metin okuyarak ve hangi kelimelerin benzer bağlamlarda görünme eğiliminde olduğunu hatırlayarak öğrenir. Yeterli veriyle eğitim aldıktan sonra, kelime haznesindeki her kelime için 300 boyutlu bir vektör oluşturur ve anlamsal olarak benzer kelime vektörleri arasındaki mesafe daha yakındır.
Bu makalenin yazarı, büyük bir külliyatla önceden eğitilmiş bir modeli açık kaynaklı hale getirdi ve onu anlamsal bilgiyi modelimize dahil etmek için kullanabiliriz. Önceden eğitilmiş kelime vektörleri bu blogun ilgili deposunda bulunabilir.
Cümle düzeyinde vektör gösterimi
Sınıflandırıcımız için cümle vektörlerini hızlı bir şekilde elde etmenin yolu, cümledeki tüm kelimeler için ortalama kelime vektör puanını kullanmaktır. Bu, kelime torbası yöntemini kullanmakla aynıdır, ancak bu sefer sadece cümlenin gramer bilgisini kaybettik ve bazı anlamsal bilgileri sakladık.
Word2Vec cümle vektör
Bu, önceki teknikle elde edilen yeni vektörün görselleştirilmesidir:
Word2Vec vektör görselleştirme
Bu iki rengi ayırmak daha kolay görünüyor ve yeni vektörümüz sınıflandırıcımızın iki kategoriyi ayırmasına yardımcı olmalı. Aynı modelle (lojistik regresyon) üçüncü kez eğitim aldıktan sonra,% 77,7'lik bir doğruluk elde ettik, bu şimdiye kadarki en iyi sonucumuz! Modelimizi kontrol etme zamanı.
Şaşkınlık / açıklanabilir takas
Vektörümüz, her bir kelimeyi önceki model gibi tek boyutlu bir vektör olarak temsil etmediğinden, hangi kelimelerin sınıflandırmayla en alakalı olduğunu görmek daha zordur. Lojistik regresyon katsayılarını hala kullanabilsek de, bunlar kelimenin indeksine değil vektörümüzün 300 boyutuna karşılık gelir.
Bu kadar düşük bir doğruluk oranı iyileştirmesi için, tüm yorumlanabilirliği kaybetmek kötü bir değiş tokuş gibi görünüyor. Bununla birlikte, daha karmaşık modeller için, sınıflandırıcının çalışma prensibini açıklamak için LIME gibi kara kutu yorumlayıcıları kullanabiliriz.
MİSKET LİMONU
LIME, Github'daki açık kaynak paketi aracılığıyla elde edilebilir. Bir kara kutu yorumlayıcısı, kullanıcının girdiyi bozmasına (bizim durumumuzda cümledeki sözcükleri kaldırmasına) ve tahminin nasıl değiştiğini görmesine izin verir.Bu yöntem, özel bir durumda sınıflandırıcının kararını yorumlar.
Veri setimizdeki birkaç cümlenin yorumuna bir göz atalım.
Doğru afet sözlüğü "alakalı" olarak sınıflandırılır.
Burada kelimelerin sınıflandırmaya katkısı açık görünmemektedir.
Ancak veri kümesindeki binlerce örneğe bakacak vaktimiz yok. Yapabileceğimiz şey, test setindeki temsili numunelerde LIME çalıştırmak ve hangi kelimelerin çok fazla katkı sağlamaya devam ettiğini görmek. Bu yöntemi kullanarak, önceki modelle aynı kelime önem puanını alabilir ve modelin tahmin sonuçlarını doğrulayabiliriz.
Word2Vec: kelime önemi
Görünüşe göre model, anlaşılır kararlar verdiğini ima ederek oldukça alakalı kelimeleri yakalayabilir. Bunlar, önceki tüm modellerde en alakalı kelime dağarcığı gibi görünüyor ve ürünlerimize uyguladığımızda daha rahat hissediyoruz.
8. Adım: Sözdiziminden yararlanmak için uçtan uca yaklaşımı kullanın
Cümle vektörleri elde etmek için hızlı ve verimli bir yöntem geliştirdik. Bununla birlikte, kelimelerin sırasını atlayarak, cümlenin tüm gramer bilgisinden vazgeçmiş oluruz. Bu yöntemler yeterince iyi sonuçlar sağlayamazsa, bir ara temsil vektörü oluşturmaya gerek kalmadan tüm cümleyi girdi olarak almak ve modeli tahmin etmek için daha karmaşık modeller kullanabilirsiniz. Yaygın bir yöntem, cümleleri Word2Vec veya en son GloVe ve CoVe yöntemleriyle elde edilebilen bir dizi kelime vektörü olarak kullanmaktır. Bundan sonra yapacağımız şey bu.
Komik bir uçtan uca yapı (kaynak)
Cümle sınıflandırması için evrişimli sinir ağının eğitilmesi çok hızlıdır ve giriş düzeyinde bir derin öğrenme yapısı olarak iyi performans gösterir. Evrişimli sinir ağları (CNN) esas olarak görüntü işlemedeki performansları ile bilinmesine rağmen, metinle ilgili karakterlerde de iyi sonuçlar elde etmişlerdir ve genellikle LSTM ve kodlayıcı gibi çoğu karmaşık NLP yöntemlerinden daha iyidirler. Dekoder yapısı) çok daha hızlıdır. Bu model, kelimelerin sırasını korur ve hangi kelime dizilerinin hedef kategorinin değerli bilgilerini tahmin edebileceğini öğrenir. Önceki modelin aksine, "Alex bitkileri yer" ile "bitkiler Alex'i yer" arasında ayrım yapabilir.
Bu modeli eğitmek, önceki yöntemden daha fazla çalışma gerektirmez (ayrıntılar için koda bakın) ve öncekinden daha iyi bir model elde etmemizi sağlayarak% 79,5 doğruluğa ulaşmamızı sağlar! Yukarıdaki modelde olduğu gibi, bir sonraki adımda, tahmini gerçekten de kullanıcılara dağıtmak için en iyi model olduğunu doğrulamak için tahmini araştırmak ve açıklamak için bahsettiğimiz yöntemleri kullanmalıyız. Şimdi, bu sorunu kendiniz halledebilmelisiniz.
Son notlar
Aşağıda, başarıyla kullandığımız yöntemlerin hızlı bir incelemesi bulunmaktadır.
Basit ve hızlı bir modelle başlayın
Tahminini açıklayın
Ne tür bir hata yaptığını anlayın
Verileri bir sonraki işlemde mi işleyeceğinize yoksa daha karmaşık bir model mi kullanacağınıza karar vermek için bu bilgiyi kullanın
Bu yöntemleri, tweet gibi kısa metinleri anlamak ve kullanmak için modeller kullanarak özel bir durumda uyguluyoruz. Ancak bu fikirler birçok soruna uygulanabilir. Umarım bu size yardımcı olur, yorumlarınızı ve sorularınızı duymak isteriz! Aşağıda yorum yazarak veya Twitter @EmmanuelAmeisen üzerinden bizimle iletişime geçebilirsiniz!
Orijinal blog sitesi
https://blog.insightdatascience.com/how-to-solve-90-of-nlp-problems-a-step-by-step-guide-fda605278e4e
Daha fazla makale için Leifeng.com'u takip edin
Leifeng Subtitle Group'un (leiphonefansub) WeChat hesabını arkadaş olarak ekle
Yapay Zeka Gönüllüsü Olmak İçin "Katılmak istiyorum" açıklaması
Lei Feng Ağı Lei Feng Ağı