Python'da Twitter için duyarlılık analizi [kapalı]


87

Metinsel Duyarlılık Analizi'nin ( http://en.wikipedia.org/wiki/Sentiment_analysis ) tercihen python'da açık kaynaklı bir uygulamasını arıyorum . Kullanabileceğim bu tür açık kaynak uygulamasına aşina olan var mı?

Twitter'da bir arama terimi arayan, "youtube" diyen ve "mutlu" tweetler ile "üzücü" tweetleri sayan bir uygulama yazıyorum. Google'ın uygulama motorunu kullanıyorum, yani python'da. Twitter'dan döndürülen arama sonuçlarını sınıflandırabilmek istiyorum ve bunu python'da yapmak istiyorum. Şimdiye kadar böyle bir duygu analizcisi bulamadım, özellikle de python'da. Kullanabileceğim bu tür açık kaynak uygulamalarına aşina mısınız? Tercihen bu zaten python'da, ancak değilse, umarım onu ​​python'a çevirebilirim.

Unutmayın, analiz ettiğim metinler ÇOK kısa, tweetler. Dolayısıyla ideal olarak, bu sınıflandırıcı bu tür kısa metinler için optimize edilmiştir.

BTW, twitter aramada yalnızca bunu yapmayı amaçlayan ":)" ve ":(" operatörlerini destekliyor, ancak maalesef onlar tarafından sağlanan sınıflandırma o kadar da iyi değil, bu yüzden bunu kendim deneyebileceğimi düşündüm .

Teşekkürler!

BTW, erken bir demo burada ve şu ana kadar sahip olduğum kod burada ve ilgilenen herhangi bir geliştiriciye açık kaynak sağlamak isterim.

Yanıtlar:


44

Bu tür uygulamaların çoğunda, istatistiksel bir sınıflandırma görevi için kendi kodunuzun çoğunu almanız gerekecektir. Lucka'nın önerdiği gibi, NLTK, amacınız lisansının ticari olmayan doğasına müdahale etmediği sürece Python'da doğal dil manipülasyonu için mükemmel bir araçtır. Bununla birlikte, modelleme için başka yazılım paketleri öneririm. Python için pek çok güçlü gelişmiş makine öğrenimi modeli bulamadım, bu yüzden onunla kolayca işbirliği yapan bazı bağımsız ikili dosyalar önereceğim.

Python ile kolayca arayüz oluşturabilen Gelişmiş Ayrımcı Modelleme için Araç Seti ilginizi çekebilir . Bu, doğal dil işlemenin çeşitli alanlarında sınıflandırma görevleri için kullanılmıştır. Ayrıca birkaç farklı model arasından seçim yapabilirsiniz. Naive Bayes sınıflandırıcı uygulamaya aşina olduğunuz sürece, Maksimum Entropi sınıflandırmasıyla başlamanızı öneririm. Değilse, bir makine öğrenimi görevi olarak istatistiksel sınıflandırmanın gerçekten iyi bir şekilde anlaşılmasını sağlamak için buna bakmak ve birini kodlamak isteyebilirsiniz.

Austin'deki Texas Üniversitesi hesaplamalı dilbilim grupları, kendilerinden çıkan projelerin çoğunun bu harika aracı kullandığı sınıflar düzenledi. Nasıl çalıştırılacağı ve önceki hangi uygulamalara hizmet ettiği hakkında bir fikir edinmek için Hesaplamalı Dilbilim II kurs sayfasına bakabilirsiniz .

Aynı damarda çalışan bir diğer harika araç Mallet'tir . Mallet arasındaki fark, biraz daha fazla dokümantasyon ve karar ağaçları gibi daha fazla modelin mevcut olmasıdır ve bu benim görüşüme göre biraz daha yavaş hale getiren Java'da. Weka , bazı grafik öğeleri içeren büyük bir pakette farklı makine öğrenimi modellerinden oluşan bir takımdır, ancak bu gerçekten çoğunlukla pedagojik amaçlar içindir ve gerçekten üretime koyacağım bir şey değildir.

Görevinizde iyi şanslar. Asıl zor olan kısım, muhtemelen modelinizin öğreneceği 'tohum kümesini' sınıflandırmanız için önceden gerekli olan bilgi mühendisliği miktarı olacaktır. İkili sınıflandırma (mutlu ve üzgün) veya bir dizi duygu (daha da fazlasını gerektirecek) yapmanıza bağlı olarak oldukça büyük olması gerekir. Bu mühendislik verilerinin bir kısmını test için tuttuğunuzdan emin olun veya oraya koymadan önce gerçekten iyi bir tahmin işi yaptığınızdan emin olmak için on kat veya bir defalık testler çalıştırın. Ve en önemlisi, iyi eğlenceler! Bence bu, NLP ve AI'nın en iyi kısmı.


Teşekkürler. Sadece bu ... bu biraz zaman alacağım, geceleri yapıyorum ama hazır şeyler olduğunda ben bir güncelleme yayınlayacağız
Ran

7
NLTK kodu uyarınca Apache Lisansı 2.0 altındadır nltk.org/faq
amit

1
Neden Weka'nın pedagojik amaçlar için olduğunu söylüyorsunuz? Pentaho BI paketinin bir parçası değil mi? Pentaho işletmelere hizmet ediyor.
Swapnil

77

Bunda iyi şanslar

Duygu son derece bağlamsaldır ve tweet kültürü sorunu daha da kötüleştirir çünkü çoğu tweet için bağlam size verilmemiştir . Twitter'ın tüm amacı, anlamlı iletişimi çok kısa bir mesajda paketlemek için büyük miktarda paylaşılan "gerçek dünya" bağlamından yararlanabilmenizdir.

Videonun kötü olduğunu söylerlerse, bu kötü mü yoksa kötü mü anlamına gelir ?

Bir gün bir dilbilim profesörü sınıfına ders veriyordu. "İngilizcede, bir çifte olumsuz bir pozitif oluşturuyor. Rusça gibi bazı dillerde, yine de çift olumsuz, yine de olumsuzdur. Bununla birlikte, çift olumlu bir olumsuz oluşturabilecek bir dil yoktur."

Odanın arkasından bir ses yükseldi, "Evet, doğru."


4
Yararlı bir cevabın olduğuna sevindim, aksi takdirde sırf bu alıntı için sana oy vermek zorunda kalabilirdim. :-)
Ben Blank

2
Sanırım alıntı "evet evet" idi - Sidney Morgenbesser'den
Scott Weinstein

19

Önerileriniz için herkese teşekkürler, gerçekten çok faydalı oldular! Buradan ödünç aldığım Naif Bayes sınıflandırıcısını kullandım . İyi / kötü anahtar kelimelerin bir listesiyle besleyerek başladım ve ardından kullanıcı geri bildirimini kullanarak bir "öğren" özelliği ekledim. Oldukça iyi çalıştığı ortaya çıktı.

Bir blog yazısında olduğu gibi çalışmamın tüm detayları .

Yine, yardımın çok faydalı oldu, bu yüzden teşekkür ederim!


1
blog gönderisi bağlantısı artık çalışmıyor, güncelleyebilir misiniz?
Petrutiu Mihai

Merhaba @PetrutiuMihai gerçekten o blog kaldırıldı. Ama bu oldukça eski şeyler, bugün itibariyle araştırmanın önünde değil, bu yüzden fazla bir şey
koştu

14

Duygu ile etiketlenmiş bir kelime listesi oluşturdum. Buradan erişebilirsiniz:

http://www2.compute.dtu.dk/pubdb/views/edoc_download.php/6010/zip/imm6010.zip

Blogumda kısa bir Python programı bulacaksınız:

http://finnaarupnielsen.wordpress.com/2011/06/20/simplest-sentiment-analysis-in-python-with-af/

Bu gönderi, kelime listesinin tek cümlelerde ve Twitter'da nasıl kullanılacağını gösterir.

Kelime listesi yaklaşımlarının kendi sınırlamaları vardır. "Yeni bir ANEW: Mikrobloglarda duygu analizi için bir kelime listesinin değerlendirilmesi" adlı makalede, kelime listemin sınırlamalarının bir araştırmasını bulacaksınız. Bu makale ana sayfamdan edinilebilir.

Lütfen unicode(s, 'utf-8')kodda a eksik olduğunu unutmayın (paedagojik nedenlerden dolayı).


"Posterous Spaces artık mevcut değil" Python kodunu bir yere gönderebilir misiniz?
andilabs

1
Bunu not ettiğiniz için teşekkürler. Şimdi, blogumu taşıdığım bir Wordpress bağlantısına giden posterli bağlantıyı değiştirdim.
Finn Årup Nielsen

Duygu sözcüklerinizle yapılan herhangi bir deney hakkında bir şeyler söyleyebilir misiniz? Yani, kesinlik neydi, sınıflandırmanın hatırlanması.
andilabs

1
Burada birkaç değerlendirmeye bağlantılar var: neuro.compute.dtu.dk/wiki/AFINN#Evaluation Kesinlik, geri çağırma ve sınıflandırma açısından performansını kendim değerlendirmedim. Yaptığım şey Mislove'un Amazon Mechanical Turk tweet etiketlemesiyle rütbe korelasyonuydu.
Finn Årup Nielsen

10

Pek çok araştırma makalesi, duygu analizi için iyi bir başlangıç ​​noktasının sıfatlara bakmak olduğunu gösteriyor, örneğin bunlar olumlu sıfatlar mı yoksa olumsuz sıfatlar mı. Kısa bir metin bloğu için bu hemen hemen tek seçeneğiniz ... Tüm belgelere veya cümle düzeyinde analizlere bakan kağıtlar var, ancak dediğiniz gibi tweetler oldukça kısa ... Bir cümle duygusu, bu yüzden en iyi bahsinizin bu araştırma makalelerinden birini araştırmak ve pozitif / negatif yönelimli sıfatlardan oluşan veri setini elde etmeye çalışmak olduğunu düşünüyorum.

Şimdi, söylendiğine göre, duyarlılık alana özgüdür ve genel amaçlı bir veri kümesiyle yüksek düzeyde doğruluk elde etmeyi zor bulabilirsiniz.

İyi şanslar.


Lanet olsun, seni engelleyecektim.
Dana the Sane

4

Bence peşinde olduğun şeyi bulmakta zorlanabileceğini düşünüyorum. Bildiğim kadarıyla yakın şeydir LingPipe bazılarına sahiptir, duygu analizi işlevselliği ve açık kaynak lisansı sınırlı bir tür altında kullanılabilir, ancak Java ile yazılmış.

Ayrıca, duyarlılık analiz sistemleri genellikle ortalama tweet'ten önemli ölçüde farklı olan ürün / film inceleme verileri üzerine bir sistem eğitilerek geliştirilir. Hepsi aynı konuyla ilgili birkaç cümleden oluşan metinler için optimize edilecekler. Belki de Pittsburgh Üniversitesi'nin sağladığı gibi bir duygu terimleri sözlüğüne dayalı olarak, kural temelli bir sistemi kendiniz bulmanızın daha iyi olacağını düşünüyorum .

Check out Biz hissedin İnce gerçekten güzel arayüzü ile benzer fikrin bir uygulama için (ve twitrratr ).




1

Ben rastladım Doğal Dil Toolkit bir süre önce. Muhtemelen bir başlangıç ​​noktası olarak kullanabilirsiniz. Aynı zamanda çok sayıda modül ve eklentiye sahiptir, bu yüzden belki zaten benzer bir şeyleri vardır.


0

Biraz tuhaf bir düşünce: Twitter API'sını kullanarak büyük bir tweet setini indirmeyi ve ardından ifadeleri kullanarak bu setin bir alt kümesini sınıflandırmayı deneyebilirsiniz: ":)", ":]", ": D", vb. İçin pozitif bir grup. ve ":(" vb. ile başka bir negatif grup

Bu kaba sınıflandırmaya sahip olduğunuzda, frekans veya ngram analizi veya bu satırlar boyunca bir şey ile daha fazla ipucu arayabilirsiniz.

Aptalca görünebilir, ancak bu konuda ciddi araştırmalar yapılmıştır ("duyarlılık analizi" ve ifade için arama). Bakmaya değer.



0

Sıfırdan Twitter Sentiment Analyis'i kodlamakla ilgilenenler için GitHub'da python kodlu bir Coursera kursu " Data Science " vardır (ödev 1 - bağlantı kapsamında ). Duygular AFINN-111'in bir parçasıdır .

Örneğin çalışma çözümleri bulabilirsiniz burada . AFINN-111 duyarlılık listesine ek olarak, pos / neg puanına sahip tweetlerdeki terimlerin sıklığına dayalı dinamik bir terim listesi oluşturmanın basit bir uygulaması vardır ( buraya bakın ).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.