You are on page 1of 10

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ - ĐẠI HỌC QUỐC GIA HÀ NỘI

===================

BÁO CÁO
CHUYÊN ĐỀ CÔNG NGHỆ

Đề tài:
Comment Sentiment Analysis

NHÓM 6
-----------------
Nguyễn Đức Thành
Nguyễn Hoàng Thọ
Lại Đức Thắng
Phạm Đức Trung
1. Giới thiệu

Phim ảnh là một loại hình nghệ thuật tổng hợp, được thể hiện bằng hình
ảnh kết hợp với âm thanh, đôi khi là một số hình thức kích thích giác quan khác;
được lưu trữ trên một số dạng thiết bị ghi hình để phổ biến tới công chúng qua
các phương tiện kỹ thuật khác nhau. Từ lâu, phim nói chung đã trở thành một
ngành công nghiệp giải trí quan trọng, là một công cụ hữu ích, gần gũi để từ đó
gửi đi những ý kiến, thông điệp, tạo ra tác động lớn tới người xem cũng như xã
hội. Có nhiều yếu tố để quyết đinh một bộ phim có thành công hay không. Một
trong số đó là những ý kiến, phản ứng của khán giả. Bài nghiên cứu này đi sâu
vào lĩnh vực phân tích cảm xúc về phim, tận dụng dữ liệu từ các nguồn khác nhau
để có cái nhìn sâu sắc về cảm nhận và cảm xúc của khán giả đối với các bộ phim.

1.1. Động lực


Động lực chính của bài ngiên cứu này bắt nguồn từ vai trò của cảm
xúc khản giả đối với một bộ phim. Bằng việc phân tích cảm xúc được thể
hiện trên các bài đánh giá, bình luận, v.v. của người xem, các nhà làm
phim, nhà phân phối, v.v. có thể rút ra được những thông tin hữu ích, quý
giá, hỗ trợ việc ra các quyết định, từ chiến lược sản xuất cho tới tiếp thị.

1.2. Đặt vấn đề


Mặc dù dữ liệu về cảm xúc của khán giả đối với các bộ phim là rất
phong phú, tuy nhiên đúc rút ra những thông tin hữu ích vẫn gặp nhiều
khó khăn. Việc có nhiều nguồn dữ liệu khác nhau có thể khiến cho những
thông tin rút ra được trở nên không nhất quán, thiếu chính xác. Không
những vậy, các bình luận, đánh giá của người xem về một bộ phim hay
các trailer của bộ phim đó có thể chứa nhiều sự phức tạp, đòi hỏi phải có
các kỹ thuật phát triển mới có thể xử lý được.

1.3. Câu hỏi nghiên cứu


Từ dữ liệu cảm xúc của người xem đối với trailer của các bộ phim,
câu hỏi nghiên cứu chính được đặt ra đó là: Có thể sử dụng các thông tin
rút ra được từ những dữ liệu trên để dự đoán xem một bộ phim có thành
công trong việc thu hút khán giả và đạt doanh thu cao so với các chi phí
đã bỏ ra hay không. Từ câu trả lời cho câu hỏi trên, các bên liên quan của
các bộ phim có thể đưa ra những quyết định, chiến lược đúng đắn, góp
phần tạo nên sự thành công của các bộ phim.
2. Materials and Methods

2.1. Python
Python là một ngôn ngữ lập trình được sử dụng rộng rãi trong các
ứng dụng web, phát triển phần mềm, khoa học dữ liệu và máy học (ML).
Các nhà phát triển sử dụng Python vì nó hiệu quả, dễ học và có thể chạy
trên nhiều nền tảng khác nhau. Phần mềm Python được tải xuống miễn
phí, tích hợp tốt với tất cả các loại hệ thống và tăng tốc độ phát triển.

2.2. NLTK
Tiền xử lí dữ liệu là giai đoạn rất quan trọng, hay nói cách khác đây
là công đoạn làm sạch văn bản. Việc văn bản được làm sạch giúp cách thuật
toán có thể trích xuất được những đặc trưng tốt nhất từ đó nâng cao hiệu
quả, chất lượng của các mô hình, thuật toán.
Thư viện NLTK - Natural Language Toolkit là một trong những thư
viện open-source xử lí ngôn ngữ tự nhiên. Được viết bằng Python và với ưu
điểm là dễ dàng sử dụng nên thư viện này ngày càng trở nên phổ biến và có
được một cộng đồng lớn mạnh. Thư viện cung cấp hơn 50 kho dữ liệu văn
bản khác nhau (corpora) và nhiều chức năng để xử lí dữ liệu văn bản để
phục vụ cho nhiều mục đích khác nhau.
3. Experiments and Results
3.1. Experiment setup
Việc đầu tiên là chuẩn bị Dataset cho phấn tích dữ liệu. Vì chủ đề
phân tích phản hồi của người xem về một bộ phim sắp ra mắt. nguồn dữ
liệu được nhóm lựa chọn là phần bình luận của trailer các video trailer cho
một bộ phim. Từ những phản hồi của người xem về trailer, chúng ta sẽ biết
được nhiều thông tin về cảm nghĩ, mong đợi của viewer.

Dùng Python, nhóm đã quét và thu thập được 860 bình luận từ phần
bình luận của video trailer cho phim “Nimona” trên Youtube.
(https://www.youtube.com/watch?v=f_fuHRyQbOc).
3.2. Cleaning and Analysing

A, Xử lý dữ liệu nâng cao

Xử lý dữ liệu bao gồm những công việc như loại bỏ từ dừng, loại bỏ
những ký tự đặc biệt hay đường link để có thể phân tích chính xác hơn. Sau
đó văn bản được chuyển về dạng viết thường, Tokenization, Stemming và
Lemmatization để phân tích dữ liệu rõ hơn

Khai báo package Python


import re
import numpy as np
import pandas as pd
import nltk

Đọc file và tạo cột dữ liệu detail để xử lý


df = pd.read_csv('FLAT.csv', encoding_errors = 'ignore')
df['detail'] = df['comment']
df.head()

df['detail'] = df['detail'].str.lower()
df.tail()

Tạo set chứa từ dừng trong tiếng Anh


clean_word = ['a', 'about', 'above', 'after', 'again', 'ain', 'all', 'am', 'an',
'and','any','are', 'as', 'at', 'be', 'because', 'been', 'before',
'being', 'below', 'between','both', 'by', 'can', 'd', 'did', 'do',
'does', 'doing', 'down', 'during', 'each','few', 'for', 'from',
'further', 'had', 'has', 'have', 'having', 'he', 'her', 'here',
'hers', 'herself', 'him', 'himself', 'his', 'how', 'i', 'if', 'in',
'into','is', 'it', 'its', 'itself', 'just', 'll', 'm', 'ma',
'me', 'more', 'most','my', 'myself', 'now', 'o', 'of', 'on', 'once',
'only', 'or', 'other', 'our', 'ours','ourselves', 'out', 'own',
're','s', 'same', 'she', "shes", 'should', "shouldve",'so', 'some', 'such',
't', 'than', 'that', "thatll", 'the', 'their', 'theirs', 'them',
'themselves', 'then', 'there', 'these', 'they', 'this', 'those',
'through', 'to', 'too','under', 'until', 'up', 've', 'very', 'was',
'we', 'were', 'what', 'when', 'where','which','while', 'who', 'whom',
'why', 'will', 'with', 'won', 'y', 'you', "youd","youll", "youre",
"youve", 'your', 'yours', 'yourself', 'yourselves']
cleaner = set(clean_word)

Loại bỏ từ dừng
def cleaning(text):
return " ".join([word for word in str(text).split() if word not in cleaner])
df['detail'] = df['detail'].apply(lambda text: cleaning(text))
df.head()

Loại bỏ dấu câu


import string
english_punctuations = string.punctuation
punctuations_list = english_punctuations
def cleaning_punctuations(text):
translator = str.maketrans('', '', punctuations_list)
return text.translate(translator)
df['detail']= df['detail'].apply(lambda x: cleaning_punctuations(x))
df.tail()

Loai bỏ từ lặp
def cleaning_repeating_char(text):
return re.sub(r'(.)1+', r'1', text)
df['detail'] = df['detail'].apply(lambda x: cleaning_repeating_char(x))
df.tail()

Loại bỏ đường link


def cleaning_URLs(data):
return re.sub('((www.[^s]+)|(https?://[^s]+))',' ',data)
df['detail'] = df['detail'].apply(lambda x: cleaning_URLs(x))
df.tail()

Loại bỏ số
def cleaning_numbers(data):
return re.sub('[0-9]+', '', data)
df['detail'] = df['detail'].apply(lambda x: cleaning_numbers(x))
df.tail()

Tokenize
from nltk.tokenize import word_tokenize
df['detail'] = df['detail'].apply(lambda x: word_tokenize(x))
df.head()

Stemming
Đưa tử về dạng gốc trước khi được chia
st = nltk.PorterStemmer()
def stemming_on_text(data):
text = [st.stem(word) for word in data]
return data
df['detail'] = df['detail'].apply(lambda x: stemming_on_text(x))
df.head()
Lemmatization
Đưa từ về gốc từ của nó
lm = nltk.WordNetLemmatizer()
def lemmatizer_on_text(data):
text = [lm.lemmatize(word) for word in data]
return data
df['detail'] = df['detail'].apply(lambda x: lemmatizer_on_text(x))
df.head()

B, Đánh giá quan cảm của bình luận

Việc khai thác dữ liệu ý kiến (Opinion Mining) là kỹ thuật được sử dụng
để xác định quan cảm, cảm xúc trong một dữ liệu văn bản. Bình luận trên
Youtube là nơi người xem thể hiện đánh giá của mình với nội dung video
đó.
Khai báo package Python

Trong đó:
- nltk.sentiment.vader là package công cụ phân tích quan cảm
import numpy as np
import pandas as pd
from nltk.sentiment.vader import SentimentIntensityAnalyzer
import matplotlib.pyplot as plt

Tạo object SentimentIntensityAnalyzer


sia = SentimentIntensityAnalyzer()

Đọc file dữ liệu


df = pd.read_csv('FLAT.csv', encoding_errors = 'ignore')

Thêm dữ liệu điểm đánh giá


Tạo các cột dữ liệu liên quan đến điểm tổng thể, điểm tích cực, điểm
tiêu cực
df['scores'] = df['comment'].apply(lambda body: sia.polarity_scores(str(body)))
df.head()
df['compound'] = df['scores'].apply(lambda score_dict:score_dict['compound'])
df.head()
df['pos'] = df['scores'].apply(lambda pos_dict:pos_dict['pos'])
df.head()
df['neg'] = df['scores'].apply(lambda neg_dict:neg_dict['neg'])
df.head()
Phân loại tính chất bình luận
Tạo cột dữ liệu tên “type”, dùng để phân loại tính chất của binh luận:
- POS: Tích cực
- NEG: Tiêu cực
- NEUTRAL: Trung tính
df['type']=''
df.loc[df.compound>0,'type']='POS'
df.loc[df.compound==0,'type']='NEUTRAL'
df.loc[df.compound<0,'type']='NEG'
df.head()

Đếm số lượng bình luận theo tính chất


len=df.shape
(rows,cols)=len
pos=0
neg=0
neutral=0
for i in range(0,rows):
if df.loc[i][5]=="POS":
pos=pos+1
if df.loc[i][5]=="NEG":
neg=neg+1
if df.loc[i][5]=="NEUTRAL":
neutral=neutral+1
print("Positive :"+str(pos) + " Negative :" + str(neg) + " Neutral :"+
str(neutral))

Tạo biểu đồ
plt.hist(df['compound'])
plt.title("Histogram")
plt.show()

print("Average Positive: ", df['pos'].mean(), "\n")


print("Average Negative: ", df['neg'].mean(), "\n")
print("Average Compound: ", df['compound'].mean(), "\n")
3.3. Results
Sau khi đã làm sạch dữ liệu và tiến hành phân tích, chúng ta thu được
bảng kết quả và biểu đồ sau:
4. Discussion
Chúng ta sẽ đánh giá sentiment của một bình luận bằng giá trị của bình
luận sau khi phân tích. Giá trị này bắt đầu từ -1 đến 1, trong đó giá trị -1 đại
diện cho vô cùng tiêu cực, 0 cho trung tính và 1 cho vô cùng tích cực. Biểu
đồ kết quả trên cho ta một cái nhìn tổng quan và rõ ràng về số lượng bình
luận từ giá trị -1 đến 1. Từ biểu đồ ta hoàn toàn có thể tạo một công cụ đánh
giá phản hồi của người xem theo hệ thống star rating (từ 1 đến 5 sao).

Nhìn vào kết quả của phân tích dữ liệu, ta thấy rằng 64% các bình luận
là tích cực, 21% trung tính và 15% tiêu cực. Sau khi tính giá trị trung bình
của toàn bộ 860 bình luận, ta thu được giá trị cho toàn bộ phần comment
trailer của bộ phim (0.354-Tích cực). Từ đó ta đánh giá rằng bộ phim nhận
được nhiều phản hồi tốt từ người xem, dự đoán được rằng bộ phim sẽ thành
công và nhận được sự yêu thích khi ra mắt. Ngược lại, những bộ phim có
phản hồi tiêu cực nhiều thể hiện rằng bộ phim không có chất lượng tốt,
không nhận được sự ủng hộ nhiều từ người xem khiến bộ phim thất bại và
sẽ không đạt đủ doanh thu. Ngoài ra, những bộ phim có đa số bình luận
trung tính không chỉ báo động sự không thành công mà còn cho ta thấy
rằng bộ phim không có ấn tượng gì với khán giả và sẽ dễ bị lãng quên trong
làn giải trí.

You might also like