Phân tích tình cảm tốt hơn với BERT

Hãy tưởng tượng bạn có một bot trả lời khách hàng của bạn, và bạn muốn làm cho nó nghe có vẻ tự nhiên hơn, nhân bản hơn một chút.

Ảnh của Hybrid trên Bapt

Để đạt được điều đó, bạn phải làm cho câu trả lời được cá nhân hóa hơn. Một cách để tìm hiểu thêm về các khách hàng mà bạn nói chuyện là phân tích tính phân cực của câu trả lời của họ. Theo phân cực ở đây tôi có nghĩa là phát hiện nếu câu (hoặc nhóm câu) được viết với mục đích được coi là một tuyên bố tích cực hay tiêu cực. Điều này có nghĩa là chúng ta đang phải đối mặt với một vấn đề phân loại nhị phân. Rất nhiều phương pháp tồn tại để giải quyết nhiệm vụ NLP này. Tôi đã thử nghiệm một số và một trong đó thực sự vượt trội so với những người khác là BERT.

Tổng quan về BERT

BERT (Đại diện bộ mã hóa hai chiều cho máy biến áp) là một phương pháp mới của biểu diễn ngôn ngữ tiền đào tạo do Google phát triển và phát hành vào cuối năm 2018 (bạn có thể đọc thêm về nó tại đây). Vì nó được đào tạo trước về các bộ dữ liệu chung (từ Wikipedia và BooksCorpus), nó có thể được sử dụng để giải quyết các nhiệm vụ NLP khác nhau. Điều này bao gồm phân loại cấp độ câu (như chúng tôi làm ở đây), trả lời câu hỏi hoặc phân loại cấp độ mã thông báo (ví dụ: một phần của gắn thẻ bài phát biểu) và BERT có thể đạt được các màn trình diễn hiện đại trong nhiều nhiệm vụ này.

Kiến trúc BERT so với hai mô hình hiện đại khác (nguồn: Devlin et al.)

Trong thực tế, BERT cung cấp các mô hình ngôn ngữ được đào tạo trước cho tiếng Anh và 103 ngôn ngữ khác mà bạn có thể tinh chỉnh để phù hợp với nhu cầu của mình. Ở đây, chúng tôi sẽ xem cách tinh chỉnh mô hình tiếng Anh để phân tích tình cảm.

Tinh chỉnh với BERT

BERT gần đây đã cung cấp một sổ ghi chép hướng dẫn bằng Python để minh họa cách phát hiện tình cảm trong các bài đánh giá phim. Sổ tay hướng dẫn được làm tốt và rõ ràng, vì vậy tôi đã thắng chi tiết về nó - đây chỉ là một vài suy nghĩ về nó. Đầu tiên, máy tính xách tay sử dụng bộ dữ liệu IMDb, có thể được tải xuống trực tiếp từ Keras. Bộ dữ liệu này chứa 50000 đánh giá phim được chia thành hai phần bằng nhau, một phần để đào tạo và một phần để thử nghiệm. Mỗi tập dữ liệu được cân bằng, với 12500 đánh giá tích cực và 12500 đánh giá tiêu cực.

Ví dụ về các đánh giá từ bộ dữ liệu IMDb. Phân cực về 0 có nghĩa là câu thể hiện cảm xúc tiêu cực, trong khi một nghĩa là nó tích cực.

Để tinh chỉnh, họ áp dụng một lớp mới và softmax trên mô hình được đào tạo trước nhưng bạn có thể tùy chỉnh nó. Nó sử dụng cấu trúc công cụ ước tính Tensorflow để huấn luyện và dự đoán kết quả và chúng yêu cầu một số chức năng như run_config hoặc model_fn, được mã hóa trong sổ ghi chép hoặc được nhập từ tệp run_groupifier.py có trong GitHub, vì vậy bạn không phải lo lắng về chúng .

Đánh giá mô hình

Để xem BERT hoạt động tốt như thế nào, tôi đã so sánh nó với hai mô hình khác. Đầu tiên là hồi quy logistic với vector hóa TF-IDF. Cái thứ hai được lấy cảm hứng từ Rezaeinia et al. (git). Nó sử dụng các nhúng nhúng Word2Vec, cùng với việc gắn thẻ Phần của bài phát biểu và chuyển kết nối cả hai vào mạng tích chập 1D.

Mặc dù hồi quy logistic hoạt động tốt đáng ngạc nhiên, vượt trội so với mô hình dựa trên thần kinh, BERT mang lại điểm số thậm chí tốt hơn. Hơn nữa, kết quả BERT cải thiện đáng kể khi mô hình được đào tạo trên một tập dữ liệu lớn hơn. Điều có thể là một nhược điểm là phải mất khá nhiều thời gian để đào tạo, ngay cả với GPU. Hồi quy logistic hoàn thành đào tạo trong vòng vài giây, khi BERT cần khoảng 20 phút để làm điều đó (với GPU và 25000 đánh giá đào tạo).

Kết quả của các mô hình khác nhau

Phục vụ với Docker và Tensorflow

Khi bạn đã lưu mô hình của mình dưới dạng save_model.pb (ví dụ: với phương thức export_sattedmodel), bạn có thể thiết lập một máy chủ sẽ chạy mô hình và đưa ra dự đoán. Đầu tiên, chúng tôi tạo một bộ chứa Docker từ phục vụ dòng chảy (bạn sẽ phải cài đặt Docker trước) và chúng tôi thêm mô hình của chúng tôi vào đó. Model_en phải là một thư mục chứa thư mục có tên 1 (cần thiết cho tenorflow) mà chính nó chứa mô hình mà bạn đã xuất. Điều này đạt được bằng các dòng lệnh dưới đây.

Sau đó, chúng tôi viết một ứng dụng khách đơn giản, sẽ lấy một câu làm đầu vào, chuyển đổi nó thành các tính năng đầu vào BERT (giống như trong sổ tay hướng dẫn) và gọi bộ chứa Docker đang chạy sẽ đưa ra dự đoán. Bạn có thể biến ứng dụng khách thành một API đơn giản bằng Flask. Mã python dưới đây cho thấy các bước khác nhau.

Sau đó, bạn có thể thực hiện dự đoán bằng cách gửi yêu cầu chuỗi, sử dụng Postman chẳng hạn.

Võngà! Bây giờ, bạn đã sẵn sàng thực hiện một số phân tích tình cảm tốt với BERT và sử dụng nó trong một ứng dụng trong thế giới thực.