Hugging Face với slogan của nó là ” On a mission to solve NLP,
one commit at a time” và địa chỉ trang chính của nó là https://huggingface.co. Anh em có thể tham khảo thêm tại trang này nhé.

Phần 1 – Các “dị bản” của BERT

Ngay sau khi BERT ra mắt và tạo nên tiếng vang lớn trong làng NLP, một loạt các phiên bản cải tiến, biến thể, dị bản như RoBERTa, ALBERT, DistilBERT,… được cho ra mắt với các cải tiến khác nhau về: độ sâu, số lớp, số head, các ngôn ngữ khác nhau.

1 6

Chúng ta cũng không cần tìm hiểu hết các phiên bản BERT trên làm gì cho mệt, cần cái nào ta học cái đó thôi. Đa phần với người Việt chúng ta thì sẽ cần 2 món là BERT cho tiếng Anh và BERT cho tiếng Việt (PhoBERT).

Cái nay nhất ở đây chính là nó là pretrain nhé! Nghĩa là họ train rồi, ta chỉ sử dụng thôi (còn nếu thích thì finetune tý ).

Đến đây các bạn sẽ thắc mắc là nhiều phiên bản thế, nhiều món thế thì ăn làm sao? Dùng thế nào? Và rất may là đã có thư viện siêu dễ dùng có tên Transformers của Hugging Face,

Phần 2 – Thử cài đặt và trích xuất đặc trưng văn bản bằng Hugging Face (HF)

2 4

Trong bài này mình chưa nói gì đến các task cụ thể phía sau (Downstream task) như : Sentiment Classificaiton, Q&A… Mình chỉ guide các bạn cách cài đặt, tokenizer, và trích xuất đặc trưng của câu văn bản bằng BERT qua thư viện Hugging Face.

Cài đặt thư viện

Để sử dụng được Hugging Face các bạn cài đặt bằng 2 lệnh:

3 4

Khai báo các thư viện

4 3

Load các pretrain model

5 5

Trong hai dòng bên trên:

  • Dòng đầu tiên ta load model từ BERT pretrain. Cụ thể ở đây là model bert-base (bản nhỏ) và uncased (không care viết hoa, thường)
  • Dòng thứ hai ta load cái Tokenizer. Sử dụng để tokenize các từ trong câu.

Chú ý ở bước này trong lần chạy đầu tiên sẽ rất chậm nhé. Lý do bởi vì hugging face nó sẽ tải các pretrain model từ internet về.

6 3
Tokenizer câu văn bản

Như chúng ta đã biết, máy tính nó chỉ hiểu số number mà thôi, nó không hiểu văn bản, nên chúng ta phải chuyển từ câu văn sang một “mảng” các chữ số, đó chính là tokenizer.

Để làm việc đó, chúng ta dùng đoạn lệnh sau:

7 3

Nếu các bạn để ý thì hình như token đang dài hơn Câu văn (7 item so với độ dài 5 từ của câu văn). Đúng đó, Bert đã tự thêm vào 2 token đặc biệt là [CLS] ở đầu câu và [SEP] ở cuối câu.

Chúng ta thử dịch ngược lại xem có đúng ko nhé.

8 2

Và kết quả chuẩn luôn, đúng là đã bị thêm 2 món kia vào :

9 3
Trích xuất đặc trưng câu văn

Okie, vậy là chúng ta đã token, số hóa được câu văn rồi. Giờ chúng ta sẽ đưa câu văn vào BERT để trích ra đặc trưng nhé:

10 3
11 3

Chỗ này có mấy điểm các bạn cần lưu ý:

  • Thứ nhất, trong pytorch ra dùng lệnh .size() để in ra kích thước tensor.
  • Thứ hai, attention mask là gì? Đó là một ma trận/vector có kích thước bằng với vector token và có giá trị là 0/1 để chỉ ra các token nào Bert cần quan tâm và token nào không cần quan tâm. Trong trường hợp này, chúng ta quan tâm all các token nên để là 1 hết. Khi chúng ta xử lý nhiều câu văn bản có độ dài khác nhau, ta sẽ padding thêm các giá trị đặc biệt, và khi đó ta bảo model là : hãy đừng quan tâm đến các cái tao padding thêm vào bằng cách set các giá trị tương ứng trong attetion mask = 0 
  • Thứ ba, output embedding mà chúng ta mong muốn sẽ có size là (1,7,768) . Điều này có nghĩa là có tất cả 7 embedding vector cho 7 từ trong câu (bao gồm cả 2 cái từ đặc biệt [CLS] và [SEP] đó) và mỗi vector có độ dài 768.

Rồi, bây giờ chúng ta đã trích được đặc trưng cho câu văn bản bằng BERT. Trong các bài tiếp theo, chúng ta sẽ dùng toàn bộ output embedding hoặc chỉ dùng vector embedding tại vị trí token [CLS] (vị trí 0) để xử lý tiếp.

Nguồn: https://www.miai.vn/2020/12/22/bert-series-chuong-2-nghich-mot-chut-voi-hugging-face/