Analisis sentimen untuk Twitter dengan Python [ditutup]

87

Saya mencari implementasi open source, lebih disukai dengan python, dari Analisis Sentimen Tekstual ( http://en.wikipedia.org/wiki/Sentiment_analysis ). Adakah yang akrab dengan implementasi open source yang dapat saya gunakan?

Saya sedang menulis sebuah aplikasi yang mencari twitter untuk beberapa istilah pencarian, katakanlah "youtube", dan menghitung tweet "bahagia" vs. tweet "sedih". Saya menggunakan mesin Google, jadi menggunakan python. Saya ingin dapat mengklasifikasikan hasil pencarian yang dikembalikan dari twitter dan saya ingin melakukannya dengan python. Sejauh ini saya belum dapat menemukan penganalisis sentimen seperti itu, khususnya di python. Apakah Anda terbiasa dengan implementasi open source yang dapat saya gunakan? Sebaiknya yang ini sudah dalam python, tapi jika belum semoga bisa terjemahkan ke python.

Perhatikan, teks yang saya analisis SANGAT pendek, itu tweet. Idealnya, pengklasifikasi ini dioptimalkan untuk teks pendek semacam itu.

BTW, twitter memang mendukung operator ":)" dan ":(" dalam penelusuran, yang bertujuan untuk melakukan hal ini, tetapi sayangnya, klasifikasi yang diberikan oleh mereka tidak terlalu bagus, jadi saya pikir saya akan mencobanya sendiri .

Terima kasih!

BTW, demo awal ada di sini dan kode yang saya miliki sejauh ini ada di sini dan saya ingin membukanya dengan pengembang yang tertarik.

Ran
sumber

Jawaban:

44

Dengan sebagian besar jenis aplikasi ini, Anda harus menggulung sebagian besar kode Anda sendiri untuk tugas klasifikasi statistik. Seperti yang disarankan Lucka, NLTK adalah alat yang sempurna untuk manipulasi bahasa alami dengan Python, selama tujuan Anda tidak mengganggu sifat non komersial dari lisensinya. Namun, saya akan menyarankan paket perangkat lunak lain untuk pemodelan. Saya belum menemukan banyak model pembelajaran mesin canggih yang tersedia untuk Python, jadi saya akan menyarankan beberapa biner mandiri yang mudah bekerja sama dengannya.

Anda mungkin tertarik dengan The Toolkit for Advanced Discriminative Modeling , yang dapat dengan mudah dihubungkan dengan Python. Ini telah digunakan untuk tugas klasifikasi di berbagai bidang pemrosesan bahasa alami. Anda juga dapat memilih dari sejumlah model yang berbeda. Saya sarankan memulai dengan klasifikasi Entropi Maksimum selama Anda sudah terbiasa dengan penerapan pengklasifikasi Naive Bayes. Jika tidak, Anda mungkin ingin memeriksanya dan membuat kode untuk benar-benar mendapatkan pemahaman yang layak tentang klasifikasi statistik sebagai tugas pembelajaran mesin.

Kelompok linguistik komputasi Universitas Texas di Austin telah mengadakan kelas di mana sebagian besar proyek yang dihasilkan menggunakan alat yang hebat ini. Anda dapat melihat halaman kursus Computational Linguistics II untuk mendapatkan gambaran tentang bagaimana membuatnya bekerja dan aplikasi apa yang telah disajikan sebelumnya.

Alat hebat lainnya yang bekerja dengan nada yang sama adalah Palu . Perbedaan antara Mallet adalah bahwa ada lebih banyak dokumentasi dan beberapa model yang tersedia, seperti pohon keputusan, dan itu di Jawa, yang menurut saya, membuatnya sedikit lebih lambat. Weka adalah keseluruhan rangkaian model pembelajaran mesin yang berbeda dalam satu paket besar yang mencakup beberapa hal grafis, tetapi sebagian besar dimaksudkan untuk tujuan pedagogis, dan sebenarnya bukan sesuatu yang akan saya produksi.

Semoga berhasil dengan tugas Anda. Bagian yang paling sulit mungkin adalah jumlah rekayasa pengetahuan yang diperlukan di muka bagi Anda untuk mengklasifikasikan 'kumpulan benih' yang akan dipelajari model Anda. Ini harus cukup besar, tergantung pada apakah Anda melakukan klasifikasi biner (senang vs sedih) atau berbagai macam emosi (yang akan membutuhkan lebih banyak lagi). Pastikan untuk menyimpan beberapa dari data yang direkayasa ini untuk pengujian, atau jalankan beberapa tes sepuluh kali lipat atau hapus-satu untuk memastikan Anda benar-benar melakukan pekerjaan prediksi dengan baik sebelum Anda meletakkannya di sana. Dan yang terpenting, bersenang-senanglah! Ini adalah bagian terbaik dari NLP dan AI menurut saya.

Robert Elwell
sumber
Terima kasih. Saya hanya melakukan ini di malam hari, jadi ... ini akan memakan waktu, tetapi saya akan memposting pembaruan ketika saya memiliki sesuatu yang siap
Berlari
7
Kode NLTK tersedia di bawah Lisensi Apache 2.0 sesuai nltk.org/faq
amit
1
Mengapa Anda mengatakan Weka untuk tujuan pedagogis? Bukankah itu bagian dari pentaho BI suite? Dan pentaho memang melayani perusahaan.
Swapnil
77

Semoga beruntung dengan itu.

Sentimen sangat kontekstual, dan budaya tweeting memperburuk masalah karena Anda tidak diberi konteks untuk kebanyakan tweet. Inti dari twitter adalah bahwa Anda dapat memanfaatkan sejumlah besar konteks "dunia nyata" yang dibagikan untuk mengemas komunikasi yang bermakna dalam pesan yang sangat singkat.

Jika mereka mengatakan video itu buruk, apakah itu berarti buruk, atau buruk ?

Seorang profesor linguistik sedang mengajar di kelasnya suatu hari. "Dalam bahasa Inggris," katanya, "negatif ganda membentuk positif. Namun, dalam beberapa bahasa, seperti bahasa Rusia, negatif ganda tetap negatif. Namun, tidak ada bahasa di mana positif ganda dapat membentuk negatif."

Sebuah suara dari belakang ruangan terdengar, "Ya ... baiklah."

MarkusQ
sumber
4
Saya senang Anda memiliki jawaban yang berguna, karena jika tidak saya mungkin harus memberi suara positif kepada Anda hanya untuk kutipan itu. :-)
Ben Blank
2
Saya pikir kutipannya adalah "yeah yeah" - dari Sidney Morgenbesser
Scott Weinstein
19

Terima kasih semuanya atas saran Anda, mereka memang sangat berguna! Saya akhirnya menggunakan pengklasifikasi Naive Bayesian, yang saya pinjam dari sini . Saya mulai dengan memasukkannya dengan daftar kata kunci yang baik / buruk dan kemudian menambahkan fitur "belajar" dengan menggunakan umpan balik pengguna. Ternyata bekerja cukup bagus.

Detail lengkap pekerjaan saya seperti di posting blog .

Sekali lagi, bantuan Anda sangat berguna, jadi terima kasih!

Ran
sumber
1
Link postingan blog tidak berfungsi lagi, dapatkah Anda memperbaruinya?
Petrutiu Mihai
Halo @PetrutiuMihai, memang blog itu telah dihapus. Tapi itu hal yang cukup lama, tidak di depan penelitian seperti hari ini, jadi Anda tidak akan kehilangan banyak; (
Ran
14

Saya telah membuat daftar kata yang diberi label sentimen. Anda dapat mengaksesnya dari sini:

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

Anda akan menemukan program Python singkat di blog saya:

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

Posting ini menunjukkan bagaimana menggunakan daftar kata dengan kalimat tunggal serta dengan Twitter.

Pendekatan daftar kata memiliki keterbatasan. Anda akan menemukan investigasi tentang batasan daftar kata saya di artikel "A new ANEW: Evaluation of a word list for sentiment analysis in microblogs". Artikel itu tersedia dari beranda saya.

Harap dicatat a unicode(s, 'utf-8')hilang dari kode (untuk alasan pedagogis).

Finn Årup Nielsen
sumber
"Posterous Spaces tidak lagi tersedia" Bisakah Anda memposting kode python di suatu tempat?
andilabs
1
Terima kasih telah mencatatnya. Sekarang saya telah mengubah link posterous menjadi link Wordpress tempat saya memindahkan blog saya.
Finn Årup Nielsen
Bisakah Anda mengatakan sesuatu tentang eksperimen apa pun dengan kata-kata sentimen Anda? Maksud saya apa presisi, mengingat klasifikasi.
andilabs
1
Saya memiliki tautan ke beberapa evaluasi di sini: neuro.compute.dtu.dk/wiki/AFINN#Evaluation Saya sendiri belum mengevaluasi kinerjanya dalam hal presisi, ingatan, dan klasifikasi. Apa yang saya lakukan adalah korelasi peringkat dengan pelabelan tweet dari Amazon Mechanical Turk Mislove.
Finn Årup Nielsen
10

Banyak makalah penelitian menunjukkan bahwa titik awal yang baik untuk analisis sentimen adalah melihat kata sifat, misalnya, apakah itu kata sifat positif atau kata sifat negatif. Untuk blok teks pendek, ini adalah satu-satunya pilihan Anda ... Ada makalah yang melihat seluruh dokumen, atau analisis tingkat kalimat, tetapi seperti yang Anda katakan tweet cukup pendek ... Tidak ada pendekatan ajaib nyata untuk memahami sentimen kalimat, jadi saya pikir taruhan terbaik Anda akan memburu salah satu makalah penelitian ini dan mencoba mendapatkan kumpulan data kata sifat berorientasi positif / negatif.

Sekarang, seperti yang telah dikatakan, sentimen adalah domain tertentu, dan Anda mungkin merasa sulit untuk mendapatkan akurasi tingkat tinggi dengan kumpulan data tujuan umum.

Semoga berhasil.


sumber
Sial, aku akan mendahului kamu.
Dana the Sane
4

Saya pikir Anda mungkin merasa sulit untuk menemukan apa yang Anda cari. Hal terdekat yang saya ketahui adalah LingPipe , yang memiliki beberapa fungsi analisis sentimen dan tersedia di bawah jenis lisensi sumber terbuka terbatas, tetapi ditulis dalam Java.

Selain itu, sistem analisis sentimen biasanya dikembangkan dengan melatih sistem pada data ulasan produk / film yang secara signifikan berbeda dari tweet rata-rata. Mereka akan dioptimalkan untuk teks dengan beberapa kalimat, semuanya tentang topik yang sama. Saya curiga Anda akan lebih baik membuat sendiri sistem berbasis aturan, mungkin berdasarkan leksikon istilah sentimen seperti yang disediakan Universitas Pittsburgh .

Lihat We Feel Fine untuk implementasi ide serupa dengan antarmuka yang sangat indah (dan twitrratr ).

Stompchicken
sumber
2

Lihatlah alat analisis sentimen Twitter . Ini ditulis dalam python, dan menggunakan pengklasifikasi Naive Bayes dengan pembelajaran mesin semi-supervisi. Sumbernya dapat ditemukan di sini .

cyhex
sumber
1

Mungkin TextBlob (berdasarkan NLTK dan pola) adalah alat analisis sentimen yang tepat untuk Anda.

Sonson123
sumber
1

Saya menemukan Natural Language Toolkit beberapa waktu lalu. Anda mungkin bisa menggunakannya sebagai titik awal. Ini juga memiliki banyak modul dan tambahan, jadi mungkin mereka sudah memiliki sesuatu yang serupa.

Luka Marinko
sumber
0

Pikiran yang agak aneh: Anda dapat mencoba menggunakan API Twitter untuk mengunduh sekumpulan besar tweet, dan kemudian mengklasifikasikan sebagian dari set itu menggunakan emotikon: satu grup positif untuk ":)", ":]", ": D", dll. , dan grup negatif lainnya dengan ":(", dll.

Setelah Anda memiliki klasifikasi kasar itu, Anda dapat mencari lebih banyak petunjuk dengan analisis frekuensi atau ngram atau sesuatu di sepanjang garis itu.

Ini mungkin tampak konyol, tetapi penelitian serius telah dilakukan untuk ini (cari "analisis sentimen" dan emotikon). Layak untuk dilihat.


sumber
0

Bagi mereka yang tertarik dengan pengkodean Analisis Sentimen Twitter dari awal, ada kursus Coursera " Ilmu Data " dengan kode python di GitHub (sebagai bagian dari tugas 1 - tautan ). Sentimen adalah bagian dari AFINN-111 .

Anda dapat menemukan solusi yang berfungsi, misalnya di sini . Selain daftar sentimen AFINN-111, terdapat juga implementasi sederhana untuk membuat daftar istilah dinamis berdasarkan frekuensi istilah di tweet yang memiliki skor pos / neg (lihat di sini ).

philshem
sumber