Logo Zephyrnet

Cách tinh chỉnh Biến áp BERT với spaCy 3

Ngày:

Cách tinh chỉnh Biến áp BERT với spaCy 3

Hướng dẫn từng bước về cách tạo biểu đồ tri thức bằng cách sử dụng NER và Trích xuất quan hệ.


By Walid Amamou, Người sáng lập UBIAI



Photo by Alina Grubnyak on Unsplash

 

Kể từ bài báo chuyên đề “Chú ý là tất cả những gì bạn cần” của Vaswani và cộng sự, cho đến nay, các mô hình Transformer đã trở thành công nghệ tiên tiến nhất trong công nghệ NLP. Với các ứng dụng từ NER, Phân loại văn bản, Trả lời câu hỏi hoặc tạo văn bản, ứng dụng của công nghệ tuyệt vời này là vô hạn.

Cụ thể hơn, BERT — viết tắt của Đại diện bộ mã hóa hai chiều từ Transformers — tận dụng kiến ​​trúc máy biến áp theo một cách mới lạ. Ví dụ: BERT phân tích cả hai mặt của câu bằng một từ được che dấu ngẫu nhiên để đưa ra dự đoán. Ngoài việc dự đoán mã thông báo bị che, BERT còn dự đoán trình tự các câu bằng cách thêm mã thông báo phân loại [CLS] vào đầu câu đầu tiên và cố gắng dự đoán xem câu thứ hai có theo sau câu đầu tiên hay không bằng cách thêm mã thông báo phân tách [SEP] giữa hai câu.



Kiến trúc BERT

 

Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách tinh chỉnh mô hình BERT để dự đoán các thực thể như kỹ năng, bằng tốt nghiệp, bằng tốt nghiệp chuyên ngành và kinh nghiệm trong mô tả công việc phần mềm. Nếu bạn muốn tiến thêm một bước và trích xuất các mối quan hệ giữa các thực thể, vui lòng đọc bài viết  về cách thực hiện các thực thể chung và trích xuất quan hệ bằng cách sử dụng máy biến áp.

Máy biến áp tinh chỉnh yêu cầu GPU mạnh mẽ với khả năng xử lý song song. Để làm điều này, chúng tôi sử dụng Google Colab vì nó cung cấp các máy chủ có GPU miễn phí.

Đối với hướng dẫn này, chúng tôi sẽ sử dụng phiên bản mới được phát hành thư viện spaCy 3 để tinh chỉnh máy biến áp của chúng tôi. Dưới đây là hướng dẫn từng bước về cách tinh chỉnh mô hình BERT trên spaCy 3.

Ghi nhãn dữ liệu:

 
Để tinh chỉnh BERT bằng spaCy 3, chúng tôi cần cung cấp dữ liệu đào tạo và nhà phát triển ở định dạng JSON của spaCy 3 (xem tại đây) sau đó sẽ được chuyển đổi thành tệp nhị phân .spacy. Chúng tôi sẽ cung cấp dữ liệu ở định dạng IOB có trong tệp TSV sau đó chuyển đổi sang định dạng JSON spaCy.

Tôi chỉ dán nhãn 120 bản mô tả công việc với các thực thể như kỹ năngbằng tốt nghiệpchuyên ngành cấp bằng tốt nghiệp, và kinh nghiệm cho tập dữ liệu huấn luyện và khoảng 70 mô tả công việc cho tập dữ liệu nhà phát triển.

Trong hướng dẫn này, tôi đã sử dụng UBIAI công cụ chú thích vì nó đi kèm với các tính năng mở rộng như:

  • Chú thích tự động ML
  • Chú thích tự động dựa trên từ điển, biểu thức chính quy và quy tắc
  • Hợp tác nhóm để chia sẻ nhiệm vụ chú thích
  • Xuất chú thích trực tiếp sang định dạng IOB

Bằng cách sử dụng tính năng biểu thức chính quy trong UBIAI, tôi đã chú thích trước tất cả các đề cập về trải nghiệm theo mẫu “d.*+.*”, chẳng hạn như “5 năm kinh nghiệm trở lên trong C++”. Sau đó, tôi tải lên một từ điển csv chứa tất cả các ngôn ngữ phần mềm và chỉ định các kỹ năng thực thể. Việc chú thích trước giúp tiết kiệm rất nhiều thời gian và sẽ giúp bạn giảm thiểu việc chú thích thủ công.



Giao diện chú thích UBIAI

 

Để biết thêm thông tin về UBIAI công cụ chú thích, vui lòng truy cập tài liệu hướng dẫn trang và bài viết trước của tôi “Giới thiệu UBIAI: Chú thích văn bản dễ sử dụng cho các ứng dụng NLP".

Chú thích được xuất sẽ trông như thế này:

MS B-DIPLOMA
in O
electrical B-DIPLOMA_MAJOR
engineering I-DIPLOMA_MAJOR
or O
computer B-DIPLOMA_MAJOR
engineering I-DIPLOMA_MAJOR
. O
5+ B-EXPERIENCE
years I-EXPERIENCE
of I-EXPERIENCE
industry I-EXPERIENCE
experience I-EXPERIENCE
. I-EXPERIENCE
Familiar O
with O
storage B-SKILLS
server I-SKILLS
architectures I-SKILLS
with O
HDD B-SKILLS


Để chuyển đổi từ IOB sang JSON (xem tài liệu tại đây), chúng ta sử dụng lệnh spaCy 3:

!python -m spacy convert drive/MyDrive/train_set_bert.tsv ./ -t json -n 1 -c iob
!python -m spacy convert drive/MyDrive/dev_set_bert.tsv ./ -t json -n 1 -c iob


Sau khi chuyển đổi sang spaCy 3 JSON, chúng ta cần chuyển đổi cả tệp JSON đào tạo và tệp dev thành tệp nhị phân .spacy bằng lệnh này (cập nhật đường dẫn tệp bằng đường dẫn của riêng bạn):

!python -m spacy convert drive/MyDrive/train_set_bert.json ./ -t spacy!python -m spacy convert drive/MyDrive/dev_set_bert.json ./ -t spacy


Đào tạo người mẫu:

  • Mở dự án Google Colab mới và đảm bảo chọn GPU làm bộ tăng tốc phần cứng trong cài đặt sổ ghi chép.
  • Để đẩy nhanh quá trình đào tạo, chúng tôi cần chạy xử lý song song trên GPU của mình. Để đạt được mục đích này, chúng tôi cài đặt thư viện cuda NVIDIA 9.2:
!wget https://developer.nvidia.com/compute/cuda/9.2/Prod/local_installers/cuda-repo-ubuntu1604-9-2-local_9.2.88-1_amd64 -O cuda-repo-ubuntu1604–9–2-local_9.2.88–1_amd64.deb!dpkg -i cuda-repo-ubuntu1604–9–2-local_9.2.88–1_amd64.deb!apt-key add /var/cuda-repo-9–2-local/7fa2af80.pub!apt-get update!apt-get install cuda-9.2


Để kiểm tra xem trình biên dịch cuda đã được cài đặt đúng chưa, hãy chạy: !nvcc –version

  • Cài đặt thư viện spacy và đường ống biến áp spacy:
pip install -U spacy
!python -m spacy download en_core_web_trf


  • Tiếp theo, chúng tôi cài đặt thư viện máy học pytorch được định cấu hình cho cuda 9.2:
pip install torch==1.7.1+cu92 torchvision==0.8.2+cu92 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html


  • Sau khi cài đặt pytorch, chúng ta cần cài đặt các máy biến áp không gian được điều chỉnh cho cuda 9.2 và thay đổi CUDA_PATH và LD_LIBRARY_PATH như bên dưới. Cuối cùng, cài đặt thư viện cupy tương đương với thư viện numpy nhưng dành cho GPU:
!pip install -U spacy[cuda92,transformers]
!export CUDA_PATH=”/usr/local/cuda-9.2"
!export LD_LIBRARY_PATH=$CUDA_PATH/lib64:$LD_LIBRARY_PATH
!pip install cupy


  • SpaCy 3 sử dụng tệp cấu hình config.cfg chứa tất cả các thành phần đào tạo mô hình để huấn luyện mô hình. TRONG trang đào tạo spaCy, bạn có thể chọn ngôn ngữ của model (tiếng Anh trong hướng dẫn này), thành phần (NER) và phần cứng (GPU) để sử dụng và tải xuống mẫu tệp cấu hình.



Tệp cấu hình Spacy 3 để đào tạo. nguồn

 

Điều duy nhất chúng ta cần làm là điền đường dẫn cho các tệp train và dev .spacy. Sau khi hoàn tất, chúng tôi tải tệp lên Google Colab.

  • Bây giờ chúng ta cần tự động điền vào tệp cấu hình các tham số còn lại mà mô hình BERT sẽ cần; tất cả những gì bạn phải làm là chạy lệnh này:
!python -m spacy init fill-config drive/MyDrive/config.cfg drive/MyDrive/config_spacy.cfg


Tôi đề nghị gỡ lỗi tệp cấu hình của bạn trong trường hợp có lỗi:

!python -m spacy debug data drive/MyDrive/config.cfg


  • Cuối cùng chúng ta đã sẵn sàng huấn luyện mô hình BERT! Chỉ cần chạy lệnh này và quá trình đào tạo sẽ bắt đầu:
!python -m spacy train -g 0 drive/MyDrive/config.cfg — output ./


Tái bút: nếu bạn gặp lỗi cupy_backends.cuda.api.driver.CUDADriverError: CUDA_ERROR_INVALID_PTX: biên dịch PTX JIT không thành công, chỉ cần gỡ cài đặt cupy và cài đặt lại và nó sẽ khắc phục được sự cố.

Nếu mọi thứ đều ổn, bạn sẽ bắt đầu thấy điểm số và tổn thất của mô hình được cập nhật:



Đào tạo BERT trên google colab

 

Khi kết thúc quá trình đào tạo, mô hình sẽ được lưu vào thư mục model-best. Điểm của mô hình nằm trong tệp meta.json bên trong thư mục mô hình tốt nhất:

“performance”:{
“ents_per_type”:{
“DIPLOMA”:{
“p”:0.5584415584,
“r”:0.6417910448,
“f”:0.5972222222
},
“SKILLS”:{
“p”:0.6796805679,
“r”:0.6742957746,
“f”:0.6769774635
},
“DIPLOMA_MAJOR”:{
“p”:0.8666666667,
“r”:0.7844827586,
“f”:0.8235294118
},
“EXPERIENCE”:{
“p”:0.4831460674,
“r”:0.3233082707,
“f”:0.3873873874
}
},
“ents_f”:0.661754386,
“ents_p”:0.6745350501,
“ents_r”:0.6494490358,
“transformer_loss”:1408.9692438675,
“ner_loss”:1269.1254348834
}


Điểm số chắc chắn thấp hơn nhiều so với mức của mô hình sản xuất do tập dữ liệu đào tạo hạn chế, nhưng đáng để kiểm tra hiệu suất của nó trên bản mô tả công việc mẫu.

Khai thác thực thể bằng Transformers

 
Để kiểm tra mô hình trên văn bản mẫu, chúng ta cần tải mô hình và chạy nó trên văn bản của mình:

nlp = spacy.load(“./model-best”) text = [ '''Qualifications
- A thorough understanding of C# and .NET Core
- Knowledge of good database design and usage
- An understanding of NoSQL principles
- Excellent problem solving and critical thinking skills
- Curious about new technologies
- Experience building cloud hosted, scalable web services
- Azure experience is a plus
Requirements
- Bachelor's degree in Computer Science or related field
(Equivalent experience can substitute for earned educational qualifications)
- Minimum 4 years experience with C# and .NET
- Minimum 4 years overall experience in developing commercial software '''
] for doc in nlp.pipe(text, disable=["tagger", "parser"]): print([(ent.text, ent.label_) for ent in doc.ents])


Dưới đây là các thực thể được trích xuất từ ​​mô tả công việc mẫu của chúng tôi:

[
("C", "SKILLS"),
("#", "SKILLS"),
(".NET Core", "SKILLS"),
("database design", "SKILLS"),
("usage", "SKILLS"),
("NoSQL", "SKILLS"),
("problem solving", "SKILLS"),
("critical thinking", "SKILLS"),
("Azure", "SKILLS"),
("Bachelor", "DIPLOMA"),
("'s", "DIPLOMA"),
("Computer Science", "DIPLOMA_MAJOR"),
("4 years experience with C# and .NETn-", "EXPERIENCE"),
("4 years overall experience in developing commercial softwarenn", "EXPERIENCE")
]


Khá ấn tượng khi chỉ sử dụng 120 tài liệu đào tạo! Chúng tôi có thể trích xuất hầu hết các kỹ năng, bằng tốt nghiệp, chuyên ngành và kinh nghiệm một cách chính xác.

Với nhiều dữ liệu huấn luyện hơn, mô hình chắc chắn sẽ cải thiện hơn nữa và mang lại điểm số cao hơn.

Kết luận:

 
Chỉ với vài dòng mã, chúng ta đã huấn luyện thành công mô hình máy biến áp NER chức năng nhờ thư viện spaCy 3 tuyệt vời. Hãy tiếp tục và thử nó trong trường hợp sử dụng của bạn và vui lòng chia sẻ kết quả của bạn. Lưu ý, bạn có thể sử dụng UBIAI công cụ chú thích để gắn nhãn dữ liệu của bạn, chúng tôi cung cấp bản dùng thử miễn phí 14 ngày.

Như thường lệ, nếu bạn có bất kỳ nhận xét nào, vui lòng để lại ghi chú bên dưới hoặc gửi email đến admin@ubiai.tools!

 
Tiểu sử: Walid Amamou là Người sáng lập UBIAI, một công cụ chú thích cho các ứng dụng NLP và có bằng Tiến sĩ Vật lý.

Nguyên. Đăng lại với sự cho phép.

Liên quan:

Coinsmart. Đặt cạnh Bitcoin-Börse ở Europa
Nguồn: https://www.kdnuggets.com/2021/06/fine-tune-bert-transformer-spacy.html

tại chỗ_img

Tin tức mới nhất

tại chỗ_img