Phân tích tình cảm dành cho Twitter bằng Python [đã đóng cửa]


87

Tôi đang tìm cách triển khai mã nguồn mở, tốt nhất là trong python, Phân tích cảm xúc văn bản ( http://en.wikipedia.org/wiki/Sentiment_analysis ). Có ai quen với việc triển khai mã nguồn mở như vậy tôi có thể sử dụng không?

Tôi đang viết một ứng dụng tìm kiếm trên twitter một số cụm từ tìm kiếm, nói "youtube" và đếm số tweet "vui" so với tweet "buồn". Tôi đang sử dụng appengine của Google, vì vậy nó ở dạng python. Tôi muốn có thể phân loại các kết quả tìm kiếm được trả về từ twitter và tôi muốn làm điều đó trong python. Tôi không thể tìm thấy công cụ phân tích tình cảm như vậy cho đến nay, đặc biệt là không phải trong python. Bạn có quen với việc triển khai mã nguồn mở mà tôi có thể sử dụng không? Tốt hơn là cái này đã có trong python, nhưng nếu không, hy vọng tôi có thể dịch nó sang python.

Lưu ý, các văn bản tôi đang phân tích RẤT ngắn, chúng là tweet. Vì vậy, lý tưởng nhất là trình phân loại này được tối ưu hóa cho các văn bản ngắn như vậy.

BTW, twitter không hỗ trợ toán tử ":)" và ":(" trong tìm kiếm, nhằm mục đích chỉ thực hiện điều này, nhưng thật không may, phân loại do họ cung cấp không tuyệt vời như vậy, vì vậy tôi nghĩ tôi có thể tự mình thử .

Cảm ơn!

BTW, một bản demo ban đầu đã có ở đây và mã mà tôi có cho đến nay đã ở đây và tôi muốn mở nguồn nó với bất kỳ nhà phát triển quan tâm nào.

Câu trả lời:


44

Với hầu hết các loại ứng dụng này, bạn sẽ phải cuộn nhiều mã của riêng mình cho nhiệm vụ phân loại thống kê. Như Lucka đã đề xuất, NLTK là công cụ hoàn hảo để thao tác ngôn ngữ tự nhiên trong Python, miễn là mục tiêu của bạn không can thiệp vào bản chất phi thương mại của giấy phép. Tuy nhiên, tôi sẽ đề xuất các gói phần mềm khác để lập mô hình. Tôi không tìm thấy nhiều mô hình học máy nâng cao mạnh mẽ có sẵn cho Python, vì vậy tôi sẽ đề xuất một số mã nhị phân độc lập dễ dàng hợp tác với nó.

Bạn có thể quan tâm Bộ công cụ dành cho mô hình phân biệt đối xử nâng cao , có thể dễ dàng giao tiếp với Python. Điều này đã được sử dụng cho các nhiệm vụ phân loại trong các lĩnh vực xử lý ngôn ngữ tự nhiên khác nhau. Bạn cũng có thể chọn một số mẫu khác nhau. Tôi khuyên bạn nên bắt đầu với phân loại Maximum Entropy miễn là bạn đã quen với việc triển khai bộ phân loại Naive Bayes. Nếu không, bạn có thể muốn xem xét nó và viết mã một để thực sự hiểu rõ về phân loại thống kê như một nhiệm vụ học máy.

Các nhóm ngôn ngữ học tính toán của Đại học Texas tại Austin đã tổ chức các lớp học mà hầu hết các dự án sắp ra mắt đều sử dụng công cụ tuyệt vời này. Bạn có thể xem trang khóa học cho Ngôn ngữ học tính toán II để biết cách làm cho nó hoạt động và những ứng dụng trước đây nó đã phục vụ.

Một công cụ tuyệt vời khác hoạt động theo cùng một hướng là Mallet . Sự khác biệt giữa Mallet là có nhiều tài liệu hơn một chút và một số mô hình khác có sẵn, chẳng hạn như cây quyết định và nó trong Java, theo ý kiến ​​của tôi, làm cho nó chậm hơn một chút. Weka là một tập hợp toàn bộ các mô hình học máy khác nhau trong một gói lớn bao gồm một số nội dung đồ họa, nhưng nó thực sự chủ yếu dành cho mục đích sư phạm và không thực sự là thứ tôi muốn đưa vào sản xuất.

Chúc may mắn với nhiệm vụ của bạn. Phần khó thực sự có thể sẽ là lượng kiến ​​thức kỹ thuật cần thiết để bạn phân loại 'bộ hạt giống' mà mô hình của bạn sẽ học. Nó cần phải khá lớn, tùy thuộc vào việc bạn đang thực hiện phân loại nhị phân (vui và buồn) hay một loạt các cảm xúc (sẽ đòi hỏi nhiều hơn). Đảm bảo giữ lại một số dữ liệu đã được thiết kế này để thử nghiệm hoặc chạy một số thử nghiệm gấp mười lần hoặc loại bỏ một để đảm bảo rằng bạn thực sự đang thực hiện tốt công việc dự đoán trước khi đưa nó ra ngoài đó. Và trên hết, chúc bạn vui vẻ! Theo tôi, đây là phần tốt nhất của NLP và AI.


Cảm ơn. Tôi chỉ làm việc này vào ban đêm, vì vậy ... sẽ mất một chút thời gian, nhưng tôi sẽ đăng thông tin cập nhật khi tôi có thứ gì đó sẵn sàng
Ran

7
Mã NLTK có sẵn theo Giấy phép Apache 2.0 theo nltk.org/faq
amit

1
Tại sao bạn nói Weka là vì mục đích sư phạm? Nó không phải là một phần của pentaho BI suite? Và pentaho không phục vụ các doanh nghiệp.
Swapnil

77

Chúc may mắn với điều đó.

Tình cảm có rất nhiều ngữ cảnh và văn hóa tweet làm cho vấn đề trở nên tồi tệ hơn vì bạn không được cung cấp bối cảnh cho hầu hết các tweet. Toàn bộ điểm của twitter là bạn có thể tận dụng lượng lớn ngữ cảnh được chia sẻ trong "thế giới thực" để đóng gói thông tin liên lạc có ý nghĩa trong một tin nhắn rất ngắn.

Nếu họ nói video đó là xấu, điều đó có nghĩa là xấu, hay tệ ?

Một ngày nọ, một giáo sư ngôn ngữ học đang giảng bài cho lớp của cô. Cô ấy nói: "Trong tiếng Anh, một âm kép tạo thành dương. Tuy nhiên, trong một số ngôn ngữ, chẳng hạn như tiếng Nga, âm kép vẫn là âm. Tuy nhiên, không có ngôn ngữ nào mà âm kép có thể tạo thành âm".

Một giọng nói từ phía sau phòng vang lên, "Ừ... Được rồi."


4
Tôi rất vui vì bạn đã có một câu trả lời hữu ích, vì nếu không, tôi có thể đã phải ủng hộ bạn chỉ vì câu trích dẫn đó. :-)
Ben Blank

2
Tôi nghĩ câu trích dẫn là "yeah yeah" - từ Sidney Morgenbesser
Scott Weinstein

19

Cảm ơn mọi người đã góp ý, chúng thực sự rất hữu ích! Tôi đã sử dụng một bộ phân loại Naive Bayesian, mà tôi đã mượn từ đây . Tôi bắt đầu bằng cách cung cấp cho nó một danh sách các từ khóa tốt / xấu và sau đó thêm tính năng "tìm hiểu" bằng cách sử dụng phản hồi của người dùng. Nó hoạt động khá tốt.

Các chi tiết đầy đủ về công việc của tôi như trong một bài đăng trên blog .

Một lần nữa, sự giúp đỡ của bạn rất hữu ích, vì vậy cảm ơn bạn!


1
liên kết bài đăng blog không hoạt động nữa, bạn có thể cập nhật nó không?
Petrutiu Mihai

Xin chào @PetrutiuMihai thực sự blog đó đã bị gỡ xuống. Nhưng đó là những thứ khá cũ, không có mặt trước nghiên cứu cho đến ngày nay, vì vậy bạn sẽ không bị thiếu nhiều; (
Ran

14

Tôi đã xây dựng một danh sách từ được gắn nhãn tình cảm. Bạn có thể truy cập nó từ đây:

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

Bạn sẽ tìm thấy một chương trình Python ngắn trên blog của tôi:

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

Bài đăng này hiển thị cách sử dụng danh sách từ với các câu đơn cũng như với Twitter.

Các phương pháp tiếp cận danh sách từ có những hạn chế của chúng. Bạn sẽ tìm thấy một cuộc điều tra về những hạn chế của danh sách từ của tôi trong bài viết "ANEW mới: Đánh giá danh sách từ để phân tích tình cảm trong blog nhỏ". Bài báo đó có sẵn từ trang chủ của tôi.

Xin lưu ý rằng a unicode(s, 'utf-8')bị thiếu trong mã (vì lý do sư phạm).


"Không gian nguy hiểm không còn nữa" Bạn có thể đăng mã python ở đâu đó không?
andilabs

1
Cảm ơn đã ghi nhận nó. Bây giờ tôi đã thay đổi liên kết nguy hiểm thành liên kết Wordpress nơi tôi đã chuyển blog của mình.
Finn Årup Nielsen

Bạn có thể nói điều gì đó về bất kỳ thử nghiệm nào với cảm xúc của bạn không? Ý tôi là những gì đã được phân loại trước, nhớ lại sự phân loại.
andilabs

1
Tôi có liên kết đến một số đánh giá ở đây: neuro.compute.dtu.dk/wiki/AFINN#Evaluation Bản thân tôi chưa đánh giá hiệu suất của nó về độ chính xác, thu hồi và phân loại. Những gì tôi đã làm là tương quan thứ hạng với việc gắn nhãn các tweet trên Amazon Mechanical Turk của Mislove.
Finn Årup Nielsen

10

Nhiều tài liệu nghiên cứu chỉ ra rằng điểm khởi đầu tốt để phân tích tình cảm là xem xét các tính từ, ví dụ, chúng là tính từ tích cực hay tính từ phủ định. Đối với một khối văn bản ngắn, đây là lựa chọn duy nhất của bạn ... Có những bài báo xem xét toàn bộ tài liệu hoặc phân tích mức độ câu, nhưng như bạn nói các tweet khá ngắn ... Không có cách tiếp cận kỳ diệu thực sự để hiểu cảm xúc của một câu, vì vậy tôi nghĩ cách tốt nhất của bạn là săn lùng một trong những bài nghiên cứu này và cố gắng lấy tập dữ liệu của chúng về các tính từ tích cực / tiêu cực.

Bây giờ, điều này đã được nói, tình cảm là miền cụ thể và bạn có thể thấy khó đạt được mức độ chính xác cao với một tập dữ liệu mục đích chung.

Chúc may mắn.


Em yêu, anh định đánh trước em.
Dana the Sane 21/02/09

4

Tôi nghĩ rằng bạn có thể cảm thấy khó khăn để tìm thấy những gì bạn đang theo đuổi. Điều gần nhất mà tôi biết là LingPipe , có một số chức năng phân tích cảm xúc và có sẵn theo một loại giấy phép nguồn mở hạn chế, nhưng được viết bằng Java.

Ngoài ra, hệ thống phân tích tình cảm thường được phát triển bằng cách đào tạo một hệ thống về dữ liệu đánh giá sản phẩm / phim khác biệt đáng kể so với tweet trung bình. Chúng sẽ được tối ưu hóa cho văn bản có nhiều câu, tất cả đều về cùng một chủ đề. Tôi nghi ngờ rằng bạn sẽ làm tốt hơn khi tự mình đưa ra một hệ thống dựa trên quy tắc, có lẽ dựa trên một từ vựng của các thuật ngữ cảm tính như hệ thống mà Đại học Pittsburgh cung cấp .

Hãy xem We Feel Fine để biết cách triển khai ý tưởng tương tự với giao diện thực sự đẹp (và twitrratr ).



1

Có lẽ TextBlob (dựa trên NLTK và mẫu) là công cụ phân tích tâm lý phù hợp với bạn.


1

Tôi đã xem qua Bộ công cụ ngôn ngữ tự nhiên một thời gian trước. Bạn có thể sử dụng nó như một điểm khởi đầu. Nó cũng có rất nhiều mô-đun và phần bổ trợ, vì vậy có thể chúng đã có thứ gì đó tương tự.


0

Suy nghĩ hơi kỳ cục: bạn có thể thử sử dụng API Twitter để tải xuống một tập hợp lớn các tweet, sau đó phân loại một tập hợp con của tập hợp đó bằng biểu tượng cảm xúc: một nhóm tích cực cho ":)", ":]", ": D", v.v. và một nhóm phủ định khác với ":(", v.v.

Khi bạn có phân loại thô đó, bạn có thể tìm kiếm thêm manh mối với phân tích tần suất hoặc ngram hoặc một cái gì đó dọc theo những dòng đó.

Nó có vẻ ngớ ngẩn, nhưng nghiên cứu nghiêm túc đã được thực hiện về điều này (tìm kiếm "phân tích tình cảm" và biểu tượng cảm xúc). Đáng xem.



0

Đối với những người quan tâm đến việc viết mã Twitter Sentiment Analyis từ đầu, có một khóa học Coursera " Khoa học dữ liệu " với mã python trên GitHub (như một phần của bài tập 1 - liên kết ). Các tình cảm là một phần của AFINN-111 .

Bạn có thể tìm thấy các giải pháp làm việc, ví dụ ở đây . Ngoài danh sách ý kiến ​​AFINN-111, có một cách triển khai đơn giản là tạo danh sách cụm từ động dựa trên tần suất các cụm từ trong tweet có điểm pos / neg (xem tại đây ).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.