Sentiment analysis – hay phân tích tâm lý của đối tượng – là một chủ đề thách thức trong Machine Learning. Mọi người thể hiện cảm nhận của mình thông qua ngôn ngữ tự nhiên có bản chất nhập nhằng, mơ hồ đã gây không ít khó khăn cho việc xử lý cho máy tính hiểu. Chưa kể, họ sử dụng các cách chơi chữ, ẩn ý hay các kí hiệu như
:), :(, =)))
để giải bày cảm xúc của họ.
Trong bài viết này, tôi sẽ sử dụng tập dữ liệu Web data: Amazon Fine Foods reviews cho việc áp dụng kĩ thuật Sentiment analysis. Đây là tutorial cơ bản dành cho các bạn mới bắt đầu nghiên cứu vấn đề này. Ở đây, ta sẽ sử dụng hướng tiếp cận Bag of Words để chuyển đổi dữ liệu văn bản thành ma trận vector từ đó có thể đưa vào các mô hình phân lớp để học.
Notebooks: sentiment_analysis_basics.ipynb
Source code: classification_algorithms.py
Dùng thư viện nào để Training thế anh ơi?
ThíchThích
scikit-learn em
ThíchThích
Anh ơi. A có thể cho em các file python được không anh. Em copy về mà không chạy được
ThíchThích
Anh Hồng ơi cái cross_validation để kiểm tra chéo các models này cài đặt thế nào anh? Em newbie đang nghiên cứu cái này. Em cảm ơn
ThíchThích
bạn tham khảo trang này nhé http://scikit-learn.org/stable/modules/cross_validation.html
ThíchThích
Ở đây anh lập trình bằng framework nào thế ạ?
ThíchThích
Nltk, scikit-learn, pandas e 🙂
ThíchThích
Xin lỗi anh, em có làm theo hướng dẫn trên nhưng gặp lỗi này
print_words_frequency()
TypeError: print_words_frequency() takes exactly 1 argument (0 given)
Không rõ để khởi chạy file py này bắt đầu từ hàm main như thế nào?
ThíchThích
print_words_frequency(train_data_features)
hàm này nhận một đối số là vector feature đó em.
# convert data-set to term-document matrix
X_train = vectorizer.fit_transform(train_text).toarray()
y_train = train[“sentiment”]
X_test = vectorizer.fit_transform(test_text).toarray()
y_test = test[“sentiment”]
print_words_frequency(X_train)
ThíchThích
Em đã train được rồi. Cảm ơn anh
ThíchThích
Em chào anh ạ. Em đang bắt đầu nghiên cứu về sentiment analysis và ví dụ anh demo. Em đang sử dụng từng hàm phân lớp Gaussian Process để train và đánh giá
Em đang có một chút vấn đề là :
Em muốn nhập vào một câu review rồi đưa ra score của câu đấy thì làm thế nào ạ.
Em cảm ơn anh.
ThíchThích
Sau khi train bằng hàm fit(), em có thể dùng hàm predict_proba() để lấy score cho một câu bất kỳ.
http://scikit-learn.org/stable/modules/generated/sklearn.gaussian_process.GaussianProcessClassifier.html#sklearn.gaussian_process.GaussianProcessClassifier.predict_proba
ThíchThích
Anh cho em hỏi một chút ạ, tại sao X_train trước và sau khi tính X_test lại khác nhau ạ:
# convert data-set to term-document matrix
X_train = vectorizer.fit_transform(train_text).toarray()
y_train = train[“sentiment”]
print_words_frequency(X_train)
X_test = vectorizer.fit_transform(test_text).toarray()
y_test = test[“sentiment”]
print_words_frequency(X_train)
Em sửa lại là tạo ra 1 vectorizer1 thì ok nhưng X_train sẽ có mỗi vector có các phần tử là số lần xuất hiện cho 10 từ khác với mỗi vector trong X_test, vậy sao so sánh được ạ?
ThíchThích
ở đây ta đã chia X_train, X_test theo tỉ lệ 80/20 nên 2 tập này không giao nhau.
train, test = train_test_split(clean_train_reviews, test_size=0.2)
Khi so sánh ta sẽ lấy prediction so sánh với y_test.
clf.fit(X_train, y_train)
score = clf.score(X_test, y_test)
ThíchThích
em làm tới này thì bị MemoryError: https://ibb.co/fyr1R7
shape của phần train và test của em là: (1196984,) (299247,)
Máy em RAM 8gb, có phải là do thiếu Ram không anh?
ThíchThích
còn cách nào khác không anh nhỉ?
ThíchThích
xin chào anh ạ. Cám ơn anh đã chia sẻ bài viết. Em mới đang tìm hiểu về machine learning thôi ạ.
Em đang tìm nguồn từ điển Tiếng Việt đã được gán điểm sentiment ví dụ như
căm thù = -5
đáng ghét= -5
đáng khinh=-5
đau khổ = -5
(em không biết nên gọi chính xác là ntn, đó là cái em hiểu ạ).
Anh có thể cho em lời khuyên là em có thể tìm ở đâu không ạ?
Em cám ơn anh nhiều ạ.
ThíchThích
em có thể tìm hiểu và download data trong project này https://github.com/undertheseanlp/sentiment
ThíchThích