LePhuocPhat
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # Script thuyết trình (18.04.2025) **Đề tài: NLP-Based Movie and Entertainment Reviews Aggregator** :::info A **movie and entertainment review scrapper** that collects reviews from **IMDb**, **Rotten Tomatoes**, **Metacritic**, performing **aspect-based sentiment analysis**. ::: --- # Nội dung thuyết trình ## I. Giới thiệu chung ==(HOÀN THÀNH)== ### 1. Bối cảnh các vấn đề cần giải quyết Ngày nay, khi ngành giải trí màn ảnh rộng ngày càng phát triển với những bước tiến vượt trội không chỉ về mặt hình ảnh, âm thanh, hay các kỹ xảo tiên tiến gây ấn tượng mạnh mẽ, sâu sắc với người xem mà còn về mặt nội dung sâu lắng, nhân văn làm nao nức, gây thương nhớ khán giả, họ ngày càng có nhiều sự lựa chọn đa dạng về các tác phẩm màn ảnh rộng nhờ số lượng phim khổng lồ, mới mẻ, ra mắt liên tục và trải dài trên nhiều nền tảng kỹ thuật số như Netflix, Amazon Prime, Disney+, VieOn, ... điều mà làm cho các khán giả tiếp cận hình thức giải trí này một cách dễ dàng chưa từng thấy. Cùng với đó, từ bước tiến trên, số lượng đánh giá, bình luận của khán giả và các nhà phê bình phim không chỉ về mặt cốt truyện phim mà còn về các yếu tố ngoại lai khác như hình ảnh nhân vật, bối cảnh, kỹ xảo ngày càng được gia tăng với số lượng chóng mặt, lan toả trên đa kênh (IMDb, Rotten Tomatoes, Metacritic, blog cá nhân, mạng xã hội…). Vấn đề đặt ra là làm thế nào để khán giả có thể lựa chọn phim ảnh một cách chính xác không chỉ phù hợp với từng nhu cầu giải trí cá nhân mà còn phải phù hợp về mặt độ tuổi, đạo đức, lối sống ? Hiện nay, rất nhiều khán giả thường chỉ dựa vào số sao (rating) để đánh giá xem phim tốt hay xấu về mọi phương diện, đáng xem hay phù hợp với nhu cầu bản thân hay không, hoặc nếu khán giả đó có nhiều thời gian rảnh hơn thì họ lại cố gắng tìm kiếm các bình luận phim từ những người dùng khác để phân tích cũng như đưa ra quyết định rằng nên thưởng thức bộ phim đó hay không. Một vấn đề mới lại được nảy sinh rằng việc chỉ dựa vào số sao (rating) để đánh giá toàn bộ bộ phim trên mọi phương diện có hợp lý hay không (1) ? Bởi lẽ, mỗi bộ phim đều có ưu điểm và khuyết điểm riêng dựa trên từng phương diện của bộ phim. Đối với những nhà phê bình phim cũng như nhà sản xuất, vấn đề trên cũng được nhìn nhận một cách khách quan. Họ cũng phải bỏ nhiều công sức để thu thập, rút trích từng khía cạnh ngữ nghĩa, đánh giá, và báo cáo tổng kết từ các bình luận của người dùng để đưa ra những nhận định chính xác nhất về từng khía cạnh của bộ phim. Từ đó, họ có cơ sở, tiền đề để cải thiện phim của họ ngày càng tốt hơn về mặt hiệu suất thương mại, về mặt giá trị nhân đạo, cũng như giúp các nhà hoạch định ngành giải trí điện ảnh xác định được thị hiếu giải trí của nhiều người dùng thường quan tâm đến khía cạnh nào của phim. Tuy nhiên, việc tổng hợp thủ công ấy lại tốn quá nhiều công sức, tiền bạc, và thời gian để thu thập dữ liệu trên một số lượng người dùng từ đa nền tảng kỹ thuật số rồi từ đó rút trích toàn bộ khía cạnh, từ đó cuối cùng mới cho ra kết quả đánh giá. Đồng thời, về mặt hiệu suất chính xác của nó cũng khá mập mờ và phụ thuộc nhiều về mặt cảm xúc trực quan của con người (2). Đó chính là những vấn đề nhức nhối và khó có một lời giải thỏa đáng để khắc phục những điều trên. ### 2. Lý do chọn đề tài Thông qua những vấn đề trên, chúng ta sẽ đưa ra hướng giải quyết cụ thể thông qua đề tài này như sau: * Đề xuất mô hình phân tích cảm xúc dựa trên khía cạnh (ABSA) giúp người dùng và các nhà sản xuất nắm được ưu điểm cũng như khuyết điểm của phim trên từng mặt riêng biệt (giải quyết vấn đề (1)). Mô hình này sẽ giúp tự động hóa trích xuất thông tin aspect cũng như tự động đánh giá dựa theo 3 tiêu chí như sau: tích cực (positive), tiêu cực (negative), và bình thường (neutral). * Tổng hợp tự động các reviews từ nhiều nền tảng đa phương tiện (vd: IMDb, Rotten Tomatoes, Metacritic, blog cá nhân, mạng xã hội, ...) về từng bộ phim cụ thể $\to$ tiết kiệm thời gian, nguồn lực, chi phí một cách hiệu quả trong việc xem xét các reviews + cung cấp nhiều góc nhìn khác nhau $\to$ cải thiện tính toàn diện trong đánh giá sản phẩm của người dùng về bộ phim đó (giải quyết vấn đề (2)). Đó cũng là những động lực giúp nhóm chúng em thực hiện đồ án này nhằm cung cấp một giải pháp hiệu quả cho những vấn đề cấp thiết trên. ### 3. Mô tả đề tài :::info A **movie and entertainment review scrapper** that collects reviews from **IMDb**, **Rotten Tomatoes**, **Metacritic**, performing **aspect-based sentiment analysis**. ::: * ==Tên ứng dụng:== **Movie Reviews based on ABSA** * ==Platform:== Website * ==Chức năng cốt lõi:== 1. Thu thập tự động các đánh giá từ **IMDb, Rotten Tomatoes, Metacritic**. 2. Tiền xử lý dữ liệu (làm sạch, loại bỏ trùng lặp...). 3. Phân tích khía cạnh (Aspect-Based Sentiment Analysis): - Xác định khía cạnh trong review (kịch bản, diễn viên, nhạc phim...). - Xác định thái độ tích cực/tiêu cực/ trung tính cho mỗi khía cạnh. 4. Tổng hợp và hiển thị kết quả phân tích khía cạnh dưới dạng thống kê cơ bản. ### 4. Đánh giá nguồn lực #### a. Tài nguyên sẵn có Trong đồ án này, nhóm chúng em đã có các nguồn tài nguyên sẵn có như sau: * Dữ liệu công khai và API có sẵn để tự động thu thập dữ liệu từ các web **IMDb**, **Rotten Tomatoes**, và **Metacritic**. * Tools và Framework phát triển để có thể tự động thu thập và xử lý dữ liệu. * Thư viện web scrapping: BeautifulSoup, Selenium, Scrapy * Sử dụng các framework có sẵn: Hugging-Face Transformers, PyABSA, InstructABSA, ... * Có sẵn các mô hình pre-trained như mô hình T5, BERT, ... #### b. Khó khăn và thử thách * Dữ liệu và cấu trúc không đồng nhất giữa các nền tảng. * Khó khăn đánh giá dữ liệu do trong các bình luận chứa nhiều ngôn ngữ địa phương, từ lóng, viết tắt, sai chính tả $\to$ gây khó trong việc xử lý và chuẩn hóa dữ liệu đầu vào. * Theo như khảo sát về các bộ dữ liệu có sẵn áp dụng cho mô hình ABSA, hiện nay, có các bộ dữ liệu có sẵn như sau: * **SemEval-2014 Task 4:** dữ liệu về các đánh giá, bình luận nhà hàng được đánh nhãn theo các khía cạnh sẵn, mỗi khía cạnh được phân tích cảm xúc tương ứng như tiêu cực, tích cực, hoặc trung lập. * **SemEval-2015 Task 12:** dữ liệu này đánh giá trên nhiều lĩnh vực khác nhau. Nó cũng được cung cấp nhãn cho từng khía cạnh của sản phẩm/dịch vụ kèm theo phân loại cảm xúc tương ứng. * **SemEval-2016 Task 5:** tập dữ liệu này lại khá tập trung rất nhiều lĩnh vực chuyên môn về dịch vụ nhà hàng theo mức độ chi tiết khá cao về từng khía cạnh và cảm xúc. * **MAMS (Multi-Aspect Multi-Sentiment):** dữ liệu đa khía cạnh về nhiều bối cảnh khác nhau. * Bộ dữ liệu **Laptop14**, **Restaurant14**, **Restaurant15**, **Restaurant16**, ... $\Longrightarrow$ Điểm chung là những bộ dữ liệu này đều không phải là bộ dữ liệu chuyên biệt có sẵn cho bài toán ABSA dành cho phân tích đánh giá, bình luận phim. Từ vấn đề trên, để huấn luyện mô hình ABSA chính xác, thì chúng ta cần thu thập nhiều dữ liệu có nhãn về các khía cạnh và cảm xúc. Tuy nhiên, dữ liệu chất lượng với ghi nhãn chi tiết có thể không có sẵn $\to$ tăng công sức đánh nhãn. Đồng thời, hiện nay chưa có tools nào để có thể đánh nhãn tự động một cách hiệu quả cả, thường làm bằng thủ công hoặc nhờ framework AI nhưng độ chính xác trong dữ liệu vẫn là một vấn đề nan giải. * Các bộ dữ liệu từ trang web **IMDb**, **Rotten Tomatoes**, và **Metacritic** toàn bằng tiếng Anh. Các bộ dữ liệu hiện nay cũng thường hạn chế về đa ngôn ngữ. * Hạn chế về các tài nguyên GPU $\to$ thường huấn luyện trên Kaggle, Google Colab hoặc thuê GPU. * Hiện tại, có rất nhiều ứng dụng để scrapper dữ liệu tự động các trang web khác nhau, nhưng chưa có ứng dụng nào có thể thực hiện bài toán ABSA một cách hiệu quả trên bài toán phân tích đánh giá, bình luận phim. ## II. Tổng quan hệ thống ứng dụng ### 1. Chức năng Trong ứng dụng này, nhóm chúng em chỉ thực hiện các chức năng cho vai trò người dùng cuối, còn về các vai trò admin hay các chức năng quản lý ứng dụng thì đó sẽ là một hướng đi tiếp theo trong tương lai của nhóm với mục tiêu nhằm hoàn thiện ứng dụng tốt nhất có thể. #### a. Chức năng cơ bản Người dùng sẽ thực hiện các chức năng như sau: * Lựa chọn các trang web như **IMDb, Rotten Tomatoes, Metacritic** để xem reviews của các người xem khác * Lựa chọn các bộ phim có trong từng trang web trên * Nếu người dùng không tìm được các bộ phim mà mình thích trên ứng dụng, họ có thể tự do nhập một đường link có sẵn trên các web **IMDb**, **Rotten Tomatoes**, hay **Metacritic** tương ứng với từng web trên ứng dụng ban đầu. Sau đó, hệ thống sẽ tự động thu thập dữ liệu về các bình luận của bộ phim đó sẵn có trên các trang web trên. * Ngoài ra, người dùng có thể tự động nhập bình luận của mình trên trang web **Movie Reviews ABSA Scrapper** để ứng dụng có thể phân tích cảm xúc trên từng khía cạnh dựa trên bộ phim mà người dùng đã chọn. * Người dùng sẽ có thể xem các dữ liệu bình luận của các người dùng khác trong từng bộ phim và kết quả phân tích cảm xúc theo từng khía cạnh của từng câu bình luận. * Người dùng cũng có thể xem các báo cáo tổng kết, các biểu đồ thống kể của từng bộ phim về từng khía cạnh như thế nào, ... * Người dùng cũng có thể xuất file tổng kết, in ấn bảng kết quả, ... (một hướng cải tiến trong tương lai) #### b. Chức năng kết hợp AI Hệ thống sẽ thực hiện các chức năng kết hợp các mô hình AI như sau: * Phân tích các khía cạnh cảm xúc của từng câu bình luận trong từng bộ phim trên từng web được thu thập dữ liệu. * Báo cáo tổng kết, thống kê tự động từng khía cạnh của từng bộ phim trên từng web site. * Hỗ trợ đa ngôn ngữ thông qua các mô hình dịch thuật có sẵn, ... ### 2. Sơ đồ hệ thống ![z6512608905751_5a126f315780fbadeee222e4d49e5d33](https://hackmd.io/_uploads/H1FCEm1klx.jpg) ## III. Tổng quan dữ liệu ==(HOÀN THÀNH)== ### 1. Giới thiệu * Khảo sát các web dữ liệu có sẵn * **Rotten Tomatoes**: Tập trung vào Tomatometer & Audience Score (điểm số tổng thể). * **Metacritic**: Tổng hợp đánh giá từ giới phê bình, cho ra “Metascore.” * **IMDb**: Có user review, forum thảo luận nhưng cũng chủ yếu dựa vào điểm và review text chung chung. * **Điểm hạn chế chung:** Đa số chưa triển khai “aspect-based” (chi tiết từng khía cạnh) và chưa tích hợp dữ liệu từ nhiều nguồn vào một nơi. * Sơ đồ xử lý và quản lý dữ liệu ![Screenshot 2025-04-16 180756](https://hackmd.io/_uploads/ryOtq8pAyg.png) ### 2. Chuẩn bị dữ liệu (Data Preparation) #### a. Data Ingestion (Thu thập dữ liệu) Tập dữ liệu tổng hợp các reviews từ các trang web như IMDB, Metacritic hay Rotten Tomatoes đã có sẵn. Nhưng mà các tập dữ liệu có sẵn đó không dùng cho mục đích ABSA mà nó dùng để huấn luyện cho tác vụ đơn giản hơn đó là đánh giá tổng quan cả 1 review đó là positive, negative hay là neutral. Do vậy mà nhãn dữ liệu của từng reivew chỉ là positive, negative hoặc neutral. Nhưng với yêu cầu bài toán của ta thì thứ ta cần phân tích là aspect sentiment analysis, vì vậy mà ta cần phải gán nhãn thủ công cho các dữ liệu trong tập dataset này. Phương án ban đầu đưa ra: sẽ defind sẵn những khía cạnh mà người dùng thường sẽ đánh vào để phân tích, và dựa trên những khía cạnh ta đã define trước thì ta sẽ gán nhãn cho những reivew có trong tập dữ liệu (Ở đây thì để tiết kiệm thời gian, nhóm đã dùng chatGPT + grok3 để thực hiện công việc này và sau đó thì nhóm chỉ cần đi kiểm tra lại và sửa những lỗi sai cần thiết). #### b. Data Splitting (Chia bộ dữ liệu) Sau khi đã có dữ liệu và đã gán nhãn dữ liệu xong, thì sẽ tiến thành chia tập dữ liệu thành 80% cho việc huấn luyện mô hình ABSA, và 20% dữ liệu còn lại sẽ dành cho việc đánh giá mô hình sau khi đã huấn luyện. ### 3. Data Prepocessing #### a. Data Cleaning ##### Missing Values Vì dữ liệu đã được kiểm tra và gán nhãn thủ công nên có thể đảm bảo được việc là không có missing values ở trong tập dữ liệu. ##### Feature Engineering * **Chuyển đổi toàn bộ văn bản về dạng chữ thường** Việc chuẩn hóa văn bản về dạng chữ thường giúp giảm sự khác biệt giữa các từ viết hoa và viết thường, ví dụ: "Apple" và "apple" sẽ được coi là cùng một từ. Điều này đảm bảo tính nhất quán trong dữ liệu và tránh việc mô hình xử lý chúng như hai từ khác nhau. * **Loại bỏ các thẻ HTML (HTML tags) khỏi văn bản.** Văn bản thu thập từ website thường chứa các thẻ HTML như p, div, b, v.v. Các thẻ này không mang ý nghĩa ngữ nghĩa đối với nội dung văn bản và có thể làm nhiễu dữ liệu khi phân tích. * **Loại bỏ ký hiệu "RT" (Retweet) ở đầu văn bản, thường xuất hiện trong dữ liệu từ Twitter.** Trong dữ liệu thu thập từ các website thì "RT" thường được thêm vào đầu bài đăng khi người dùng retweet (chia sẻ lại) một bài viết. Ký hiệu này không mang ý nghĩa ngữ nghĩa đối với nội dung chính của bài đăng và có thể gây nhiễu khi phân tích. * **Loại bỏ thẻ HTML br (dấu xuống dòng) khỏi văn bản.** Thẻ br thường được sử dụng trong HTML để xuống dòng. Tuy nhiên, trong quá trình phân tích văn bản, thẻ này không cần thiết và có thể gây nhiễu dữ liệu. * **Loại bỏ ký tự dấu nháy đơn (') khỏi văn bản** Dấu nháy đơn có thể xuất hiện trong văn bản (ví dụ: trong từ viết tắt như "don't" hoặc trong các đoạn mã HTML không được xử lý hoàn toàn). Việc loại bỏ dấu nháy đơn giúp chuẩn hóa văn bản và tránh các vấn đề khi xử lý (ví dụ: lỗi cú pháp nếu văn bản được đưa vào một hàm hoặc mô hình yêu cầu định dạng cụ thể). * **Tại sao các mô hình như DeBERTa RoBERTa thường không sử dụng word stemming** * **Sử dụng Subword Tokenization (WordPiece):** * *Xử lý từ mới hoặc hiếm:* Ngay cả khi từ chưa từng xuất hiện trong dữ liệu huấn luyện, mô hình vẫn có thể biểu diễn nó thông qua các subword. * *Bảo toàn ngữ nghĩa:* Các subword vẫn giữ được thông tin ngữ nghĩa, nên việc stemming (rút gọn từ) không cần thiết. * **Contextual Embeddings** * VD: có một động từ trong tiếng anh có thể được chia theo từng ngữ cảnh khác nhau: run/runs/running Thì nhờ cơ chế này, các từ này sẽ có các vector embeddings để biểu diễn cho mỗi từ là khác nhau. Giúp cho mô hình có thể hiểu được đúng ngữ nghĩa trong từng ngữ cảnh. #### b. Data Transformations ##### Encoding Tokenizer của mô hình transformer mã hóa văn bản thành token số (ID) với độ dài tối đa 128. Nhãn cảm xúc được mã hóa thành số (Positive: 2, Negative: 0, Neutral: 1) và có thể ánh xạ ngược để diễn giải. ##### Extraction Trích xuất khía cạnh từ review bằng SpaCy và từ điển ASPECT_LEXICON (predefine các aspect), chuẩn hóa khía cạnh (ví dụ: "Movie" thành "Overall") và trả về tập hợp các khía cạnh được đề cập. #### c. Tokenizers Tokenization được thực hiện ở hai mức: TextPreprocessor sử dụng word_tokenize (NLTK) để phân tách từ, sau đó ghép lại thành chuỗi; ABSAProcessor sử dụng tokenizer của mô hình transformer để mã hóa văn bản thành token số, đảm bảo độ dài tối đa 128 cho mô hình ABSA. ## IV. Tổng quan mô hình nghiên cứu ### 1. Model Survey (Nghiên cứu mô hình) #### a. Giai đoạn Rule-Based và Lexicon (Trước 2014) Vào những năm đầu của nghiên cứu về sentiment analysis, phương pháp này chủ yếu dựa vào các từ điển cảm xúc (sentiment lexicons) và các quy tắc được xây dựng thủ công nhằm trích xuất từ chỉ khía cạnh (ATE) và phân loại cảm xúc cho từng khía cạnh (ASC). Hệ thống từ điển chứa các từ được gán nhãn cảm xúc $\to$ xác định cảm xúc tổng quát của văn bản. Các quy tắc rule-based systems được xây dựng dựa trên ngữ cảnh đơn giản và cấu trúc câu * **Ưu điểm:** đơn giản, dễ cài đặt * **Nhược điểm:** * Gặp nhiều khó khăn trong việc xử lý các ngữ cảnh phức tạp và sự đa dạng của ngôn ngữ tự nhiên. * Chưa giải quyết được bài toán phân tích cảm xúc trên từng khía cạnh mà chỉ giúp phân tích cảm xúc tổng quan dựa trên câu từ có sẵn. #### b. Giai đoạn tiếp cận Machine Learning (2014-2016) Các thuật toán ML truyền thống như Logistic Regression, Support Vector Machine (SVM), Decision Tree / RandomForest Classifier, Naive Bayes, hay Conditional Random Fields (CRF) được sử dụng cho các tác vụ ATE (Aspect Sentiment Classification), ASC (Aspect Sentiment Classification), và ACSA (Category-based Sentiment Analysis). Tập trung trích xuất đặc trưng khía cạnh thủ công từ văn bản thông qua N-grams, POS-tags, đặc trưng ngữ cảnh, ....nhằm huấn luyện mô hình. * **Ưu điểm:** Cho kết quả khả quan tối ưu hơn so với các cách tiếp cận rule-based. * **Nhược điểm:** * Phụ thuộc rất nhiều vào chất lượng các đặc trưng đầu vào được xây dựng một cách thủ công. * Khả năng mở rộng đặc trưng hạn chế khi dữ liệu quá lớn hay quá phức tạp để mô hình có thể học một cách tự động hóa. #### c. Giai đoạn tiếp cận Deep Learning Khi các phương pháp deep learning phát triển ngày một lớn mạnh trong NLP, nhờ các mô hình RNN, LSTM, hay BiLSTM áp dụng để thực hiện các tác vụ như ATE (trích xuất thuật ngữ chỉ khía cạnh), ATSC (gán nhãn cảm xúc cho từng khía cạnh) nhằm giúp mô hình có khả năng tự học các đặc trưng tự động từ dữ liệu đầu vào mà không cần phải tự rút trích đặc trưng thủ công. * **Ưu điểm:** Các mô hình này có khả năng tự động học được nhiều đặc trưng từ dữ liệu mà không cần phải rút trích thủ công, cũng như giúp nắm bắt thông tin một cách tuần tự trong câu. * **Nhược điểm:** RNN có hạn chế về khả năng xử lý các mối quan hệ dài hạn trong văn bản và tính song song trong quá trình huấn luyện. #### d. Giai đoạn tiếp cận dựa trên Transformers và các Pre-trained Models (2018 - 2020) Nhiều mô hình pre-trained như BERT, RoBERTa, DeBERTa được làm mô hình cơ sở để fine-tune lại trên các bộ dữ liệu benchmarks cho bài toán ABSA. * **Ưu điểm:** * Mô hình có khả năng nắm bắt thông tin ngữ cảnh toàn cục của văn bản, giúp cải thiện đáng kể việc trích xuất các khía cạnh và dán nhãn cảm xúc.Nhược điểm: * **Nhược điểm:** * Kiến trúc pipeline -> rắc rối, tốn thời gian * Khó quản lý khía cạnh và cảm xúc có tính tương đồng nhau -> dễ bị biased #### e. Giai đoạn Joint Learning & Graph-based Approaches (2020 - 2022) * Thay vì người ta tách từng tác vụ của mô hình ABSA theo một pipeline tuần tự, chúng ta hợp nhất các tác vụ trong một mô hình duy nhất kết hợp đa nhiệm (multi-task learning) thông qua kỹ thuật joint learning, kỹ thuật huấn luyện mô hình đa tác vụ. * Các mô hình tiêu biểu như: RACL-BERT, Dual‑MRC Framework, SPAN‑based Joint Models, ... * Dùng các phương pháp tích hợp kiến trúc đồ thị tri thức, bởi lẽ các nghiên cứu nhận thấy rằng cây phụ thuộc cú pháp (dependency parse tree) chứa thông tin quan trọng về mối liên hệ ngữ pháp giữa từ và khía cạnh, giúp mô hình tập trung vào những từ có liên quan gần nhất đến khía cạnh và giảm thiểu các từ không quan trọng. * Các mô hình tiêu biểu: Graph Attention Network with Memory Fusion, Syntactic Graph Attention Network (Syntactic‑GAT), Relational Graph Convolutional Networks (R‑GCN), ... * Tích hợp cả multi-task learning và graph neural networks $\to$ mô hình học cùng lúc ATE, ASC, và tận dụng cấu trúc phụ thuộc. * Các mô hình tiêu biểu: Interactive Multi‑Task GAT, Alternating Training Schema, ... * **Ưu điểm:** giảm hiện tượng lỗi do phân tách riêng lẻ các tác vụ + tăng cường sự liên kết giữa trích xuất các khía cạnh cảm xúc * **Nhược điểm:** Mô hình chưa thể trích xuất đặc trưng đầu vào một cách đúng đẵn, và tốn nhiều chi phí thời gian để huấn luyện để tìm đặc trưng khía cạnh. #### f. Giai đoạn tiếp cận Prompt-based (2022 - now) * ==**Instruction Tuning**== (2022 - 2023) * Phương pháp đưa trực tiếp các prompts có cấu trúc vào đầu vào của mô hình. * Một prompt bao gồm: định nghĩa nhiệm vụ (task description) và các ví dụ mẫu (demonstrations) (thường gồm 2-3 câu input-output minh họa cho từng nhãn). * Dùng các mô hình pre-trained (Flan-T5), fine-tune lại giúp mô hình học lại cách đọc prompt và sinh ra đầu vào theo đúng định dạng yêu cầu cho bài toán ABSA. * Các mô hình tiêu biểu hiện tại: FLAN-T5-based ABSA (2022), InstructABSA (2023), ... * ==**Retrieval-based Prompt Tuning**== * Phương pháp cải tiến instruction tuning bằng cách chọn lọc động các ví dụ mẫu (demonstrations) phù hợp với mỗi input thông qua một thành phần retriever thay vì dùng một tập ví dụ cố định cho mọi trường hợp. * Phương pháp này gồm hai giai đoạn luân phiên nhau: * **Phase 1: Fine‑tune LM với prompt động** * Input: Với mỗi sample review x, retriever (bi-encoder: Query Encoder (mã hóa nội dung review) và Passage Encoder (mã hóa các candidate examples) thành vector embeddings -> tính độ tương đồng dựa trên cosine similarity hoặc dot product) sẽ xếp hạng toàn bộ tập ví dụ huấn luyện và chọn ra top‑k ví dụ demo phù hợp nhất (d₁, d₂, …, d_k). * Prompt: Gồm task description + d₁, …, d_k + x. * Tính Generative Loss: LM (Flan‑T5) được fine‑tune để sinh ra chuỗi đầu ra y (các khía cạnh + nhãn cảm xúc) đúng như mong đợi. * **Phase 2: Huấn luyện Retriever với Contrastive Learning** * Dùng LM đã fine‑tune để tính log‑likelihood s(x, d) của mỗi demo candidate d khi ghép vào prompt với input x. Demo có likelihood cao tức “phù hợp” với ngữ cảnh. * Lấy một cặp positive demo (đã chọn) và negative demo (không liên quan hoặc ít liên quan), tối ưu retriever sao cho loss constrastive nhỏ nhất. * Sau mỗi epoch, hoàn thành Phase 2 xong thì ta lại lấy cái retriever được cập nhật lại và lặp cho đến khi cả hai hội tụ. * ==**Multi-View Prompt Tuning**== * Multi‑view prompting là một kỹ thuật trong prompt engineering, cho phép khai thác nhiều “view” (cách biểu đạt) khác nhau cho cùng một tác vụ, sau đó tổng hợp kết quả từ các view này để nâng cao độ chính xác và khả năng khái quát chung. * Mỗi view gồm: * **Format đầu ra:** sử dụng các “element order prompts” khác nhau để thay đổi thứ tự xuất hiện của aspect, opinion, sentiment trong một lời nhắc. * **Task Definition:** Có thể viết “Extract aspect–opinion–sentiment tuples” hoặc “Identify (aspect, sentiment, opinion) from the sentence” để tập trung vào khía cạnh khác nhau của ABSA * **Bộ ví dụ mẫu:** Mỗi view có thể kèm theo một bộ few‑shot examples khác nhau, ví dụ tiếng Anh vs. tiếng Việt, hoặc các ví dụ từ domain khác nhau * Mỗi tuple được mô hình sinh ra sẽ được xem là một “phiếu” từ một view. MvP tổng hợp các phiếu này và chọn ra các tuple được nhiều view nhất ủng hộ, nhờ đó giảm thiểu tác động tiêu cực của view yếu kém và nâng cao độ chính xác chung. * **Ưu điểm:** * Giúp mô hình hiểu rõ nhiệm vụ ban đầu thông qua các prompts cụ thể. * Các mô hình nhỏ (khoảng 200 triệu tham số) có thể đạt được hiệu năng tương đương hoặc vượt trội so với các mô hình lớn hơn (ví dụ 1.5 tỷ tham số). * Tùy biến dễ linh hoạt * **Nhược điểm:** * Độ phức tạp cao trong cài đặt cũng như dữ liệu đầu vào * Chi phí tính toán, tài nguyên lớn. ### 2. Model Selection (Lựa chọn mô hình) Trong đồ án này, nhóm chúng em sẽ chọn mô hình **IT-RER-ABSA** được công bố lần đầu vào tháng 5 năm 2024 trong bài báo **"Instruction Tuning with Retrieval-based Examples Ranking for Aspect-based Sentiment Analysis"** của các tác giả Guangmin Zheng, Jin Wang, Liang-Chih Yu, và Xuejie Zhang [1]. #### a. Lý do chọn mô hình * Muốn mô hình hiểu rõ nhiệm vụ từ ban đầu trích xuất khía cạnh và gán nhãn cảm xúc thông qua định nghĩa prompt và các ví dụ mẫu. * Cải thiện hiệu năng khi dữ liệu huấn luyện còn hạn chế (few-shot learning) vì trong các thử nghiệm, chỉ cần ~20-50% data so với fine-tune truyền thống vẫn đạt được hiệu năng tương đương nhờ prompt tự động. * Mô hình này giải quyết mọi subtasks của ABSA bằng câu prompt, loại bỏ việc xây dựng pipeline phức tạp với nhiều bước phức tạp riêng biệt. * Cho phép mô hình thể hiện hiệu quả tương đương hoặc vượt trội so với các mô hình lớn hơn, điển hình là mô hình Flan-T5 (~220 M tham số) đạt hiệu suất bằng hoặc hơn các mô hình hơn 1B tham số. * Chỉ cần fine‑tune retriever với data review phim để chọn demo phù hợp, prompt tự động thích nghi với ngữ cảnh giải trí. #### b. Kiến trúc IT-RER-ABSA ![Figure_1](https://hackmd.io/_uploads/HJDYfFCR1e.jpg) (1) Retriever (Sentence-T5) là mô hình bi-encoder, sử dụng kiến trúc của T5 để sinh ra embeddings cho câu, trong đó: * *Query encoder* mã hóa review (input) -> vector embeddings cho câu review ban đầu. * *Passage encoder* mã hóa candidate demo -> vector embeddings tương ứng. => Tác dụng: tìm ra các examples phù hợp nhất để làm ví dụ mẫu hình thành nên cấu trúc instruction. (2) LM là mô hình T5 với cấu trúc encoder-decoder và được instruction-tuned => mô hình Flan-T5 (thay vì chỉ fine-tune mô hình T5 trên các cặp input-output truyền thống, mô hình Flan-T5 được huấn luyện thêm các prompt và ví dụ mẫu). => Tác dụng: tính toán điểm số -> đánh giá các examples chọn bởi retriever và generates kết quả cuối cùng. ### 3. Model Training (Huấn luyện mô hình) #### a. Quá trình huấn luyện Quá trình huấn luyện gồm hai giai đoạn: * Phase 01: Example Retrieval * Retriever được dùng để chọn một vài candiates cho sample đầu vào được cho trước. * Sau đó inference LM được dùng để đo xác suất likelihood để xếp hạng target và candidate. * Để huấn luyện retriever, ta sẽ chọn ra top-k candidates gồm positives samples và còn lại thì là negatives samples. * Sau đó ta tính độ loss constrastive learning (Lcl) rồi sau đó backpropagate gradients và cập nhật lại trọng số cho retriever. * Phase 02: Task Inference * Retriever sẽ trả về những ví dụ phù hợp nhất (top-k) và xây dựng instructions đầu vào theo một template được định nghĩa sẵn trước (\*). * Sau đó các negative log-likelihood sẽ được trả về LM để huẩn luyện tiếp mô hình LM. * Đối với mỗi $y_s$, mô hình (LM Flat-T5) được dùng như một công cụ tính toán để ước tính xác suất log-likelihood của đầu ra $\tilde{y}_s$ dựa vào giá trị target đầu vào và một tập candidate ( C ). **(\*) Template of instruction prompts** ![image](https://hackmd.io/_uploads/SJdUucCAJe.png) Đây là instruction prompt template bao gồm * Task Definition: <DEF> có sẵn cho mỗi subtasks khác nhau của bài toán ABSA. * Input text: <$x_s$> * Examples: đối với một input <$x_s$>, có k examples <ID> với input examples là <x_i> và output examples là <y_i>. ![image](https://hackmd.io/_uploads/HkuuqqC0ye.png) Đây là ví dụ cho mỗi tác vụ. ![image](https://hackmd.io/_uploads/rk-XMNkJgg.png) #### b. Training hyperparameter Mô hình LM được dùng ban đầu là flan-t5-base, * Áp dụng AdamW để tối ưu hóa mô hình * Learning rate ban đầu là 5e-5. * Training batch size là 2. * Gradient accumulation steps là 2. * Số lượng epochs cho retriever là 4 và cho LM là 2. * Chiều dài câu tối đa là 128 từ. * Data ratio r cho quá trình huấn luyện retriever là 0.1 #### c. Chiến lược huấn luyện Áp dụng thư viện PEFT được phát triển bởi Hugging Face chứa các phương pháp huấn luyện như LoR/adapter vì phương án này giúp tiết kiệm tài nguyên huấn luyện, khi mô hình và dữ liệu đủ lớn thì nhóm em sẽ nâng cấp lên QLoRA. ### 4. Model Tracking (Theo dõi mô hình) Tech: Git, DVC, MLFlow * Dùng Git để quản lý code * Dùng DVC tích hợp với Git để version dữ liệu, weights, và artifacts lớn ngoài repo (AWS S3, GCS…) thông qua liên kết (dvc add, dvc push). * Dùng MLFlow để theo dõi các experiment về hyperparameters, metrics, artifacts và cũng như có thể register model thành các version khác nhau trong Model Registry, bởi lẽ nó chứa nhiều tính năng, miễn phí, là tools sử dụng rộng rãi nhất và được dùng bởi Microsoft, Facebookm Databricks, ... ### 5. Model Tuning (Tinh chỉnh mô hình) Trong đồ án này, nhóm chúng em sẽ đẩy mạnh thực hiện kết hợp hai phương pháp tuning sau. #### a. Data-Centric Tuning Lọc và làm sạch (Filtering & Cleaning) Cân bằng dữ liệu (Resampling) Tăng cường dữ liệu (Augmentation) #### b. Model - Centric Tuning Áp dụng LoRA (thêm hai ma trận low-rank vào mỗi layer nhằm giảm thiểu số tham số cần huấn luyện) và Adapters (chèn thêm các module "bottleneck" giữa các sub-layer nhằm điều khiển, thêm bớt các tasks mà ko ảnh hưởng đến weights gốc trong các model). ### 6. Model Evaluation (Đánh giá mô hình) #### a. Dữ liệu Theo mô hình gốc, các lần thí nghiệm đều được thực hiện trên Semeval-2014, 2015, và 2016, bao gồm hai domain chính là: latops (Lap14) và nhà hàng (Rest14, Rest15, Rest16) với độ chia tập train/test là 80/20. Tuy nhiên, trong đồ án này nhóm chúng em sẽ dùng bộ dữ liệu riêng của nhóm thu thập và đánh nhãn để huấn luyện cũng như đánh giá mô hình với tỷ lệ như vậy. #### b. Các độ đo metrics sử dụng Tùy theo từng subtasks thì nhóm chúng em sẽ dùng các độ đo khác nhau: * dùng F1 scores cho ATE và ASPE tasks * dùng accuracy cho ASTC tasks. ![image](https://hackmd.io/_uploads/S1ivgjR0kl.png) ![image](https://hackmd.io/_uploads/HJrOejCRkl.png) ![image](https://hackmd.io/_uploads/Syu9lsRR1g.png) ### 7. Model Serving (Lưu trữ mô hình) Vì máy tính với thiết bị GPU RTX 3050 4GB VRAM * Dùng vLLM kết hợp quantization FP16. * Dùng NVIDIA Triton làm inference server để tận dụng auto‑batching và quản lý dễ dàng trong Docker. * Dùng FAISS để lưu index embeddings của các review và example, trả tác vụ retrieval-based ranking trong IT‑RER‑ABSA nhanh hơn (~ms) so với tính toán on‑the‑fly. ## V. Thành công và Thử thách #### a. Dữ liệu * Các điểm đã đạt được: * Đã thu thập được dữ liệu * Đã có phương pháp xử lý, gán nhãn dữ liệu. * Các điểm chưa đạt được: * Chưa thu thập dữ liệu đủ lớn. * Cần có những phương án quản lý dữ liệu tốt hơn. #### b. Mô hình * Các điểm đạt được: * Đã lựa chọn được kiến trúc SOTA cho ABSA là IT-RER_ABSA * Đã lựa chọn được các chiến lược huấn luyện, fine-tune, đánh giá, ... * Đã set up được kiến trúc mô hình * Các điểm chưa đạt được: * Chưa fine-tune huấn luyện mô hình với tập dữ liệu review phim. #### c. Hệ thống * Các điểm đạt được: * Đã xây dựng được pipeline hệ thống * Set up được các module hệ thống * Thiết kế hệ thống về UI/UX, Database, Use-case * Các điểm chưa đạt được: * Chưa liên kết được các phần backend, frontend, model với nhau. ## VII. Tổng Kết ### 1. Kết luận chung Thông qua đồ án này, chúng ta biết được: * Mô hình ABSA được hình thành và xây dựng như nào ? * Quá trình tự động thu thập và xử lý dữ liệu ? * Hiểu được tầm quan trọng và tính cấp thiết của hệ thống trong đời sống. ### 2. Hướng phát triển Nhóm sẽ định phát triển thêm các tính năng về quản lý ứng dụng, thêm các mô hình hỗ trợ đa ngôn ngữ cho ứng dụng, các mô hình tự động báo cáo, tổng kết, .... ## VII. Tài liệu tham khảo [1] Guangmin Zheng, Jin Wang, Liang‑Chih Yu & Xuejie Zhang. *Instruction Tuning with Retrieval-based Examples Ranking for Aspect-based Sentiment Analysis*. arXiv:2405.18035 (2024). [https://arxiv.org/abs/2405.18035](https://arxiv.org/abs/2405.18035)

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully