Professional Documents
Culture Documents
BÁO CÁO ĐỒ ÁN
Nhóm 3
1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Tập dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
3 Thực nghiệm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3.1 Tạo môi trường . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3.2 Clone git repository . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3.3 Import các thư viện cần thiết . . . . . . . . . . . . . . . . . . . . 3
3.4 Tái tạo kết quả thực nghiệm LUKE trên CoNLL-2003 bằng Hugging
Face Transformers . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.5 Tái tạo kết quả thử nghiệm LUKE trên TACRED bằng cách sử
dụng Hugging Face Transformers . . . . . . . . . . . . . . . . . . 15
3.6 Tái tạo kết quả thử nghiệm LUKE trên Open Entity bằng cách sử
dụng Hugging Face Transformers . . . . . . . . . . . . . . . . . . 21
4 Tổng kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
ii
1 GIỚI THIỆU
Trong báo cáo này, chúng tôi tiếp cận và triển khai mô hình LUKE (Language Under-
standing with Knowledge-based Embeddings) để thực hiện tác vụ phân loại thực thể trên
tập dữ liệu CoNLL-2003, TACRED, và Open Entity. Môi trường thực nghiệm được xây
dựng và thực hiện trên Google Colab với sự hỗ trợ của các thư viện như Transformers,
seqeval, Spacy và PyTorch.
2 TẬP DỮ LIỆU
– Mục tiêu: Tập dữ liệu này được sử dụng để thực hiện nhiệm vụ nhận diện
thực thể đặc biệt (NER) trong văn bản.
– Nhiệm vụ chính: Nhận diện và phân loại các thực thể đặc biệt như "PER-
SON", "ORGANIZATION", "LOCATION", và "MISC".
– Định dạng: Dữ liệu được biểu diễn dưới dạng các câu văn bản với các thực
thể được đánh dấu và phân loại.
– Mục tiêu: Tập dữ liệu này tập trung vào nhiệm vụ phân loại mối quan hệ
giữa các cặp thực thể trong văn bản.
– Định dạng: Các câu văn bản được cung cấp với các cặp thực thể được đánh
dấu và phân loại mối quan hệ.
– Mục tiêu: Tập dữ liệu này được sử dụng cho nhiệm vụ phân loại loại thực
thể của các đối tượng trong văn bản.
1
– Nhiệm vụ chính: Phân loại loại thực thể như "person", "location", "orga-
nization", "time", và "other".
– Định dạng: Dữ liệu bao gồm các câu văn bản với các đối tượng được đánh
dấu và phân loại loại thực thể.
3 THỰC NGHIỆM
Chúng ta sẽ sử dụng Google Colab, một môi trường lập trình trực tuyến cung cấp bởi
Google. Colab cho phép chúng ta sử dụng GPU mà không cần cài đặt hay cấu hình riêng
biệt, giúp tăng tốc độ huấn luyện mô hình và thực hiện thực nghiệm nhanh chóng.
Chúng ta sẽ kết nối với Googe Drive để làm việc trong suốt quá trình tiến hành làm thực
nghiệm.
Trong báo cáo này, chúng ta xem xét và tái tạo kết quả đạt được trên tập dữ liệu
CoNLL-2003 named entity recognition dataset, TACRED relation classification dataset,
Open Entity entity typing dataset sử dụng thư viện Transformers và mô hình được fine-
tuned có sẵn trên Model Hub. Báo cáo gốc được tạo ra bởi tác giả, với mã nguồn được
chia sẻ trên GitHub: https://github.com/huggingface/transformers.git
2
Hình 2: Clone git repository
Do yêu cầu cụ thể của mỗi tập dữ liệu và nhiệm vụ mà mô hình cần thực hiện khác nhau
nên việc import các thư viện cũng sẽ khác nhau đôi chút giữa 3 mô hình.
Mô hình được sử dụng để thực hiện nhiệm vụ nhận diện thực thể (NER), mục tiêu là
xác định ranh giới và loại của các thực thể trong văn bản.
Hình 3: Import thư viện đối với tập dữ liệu CoNLL-2003 named entity recognition
• ’unicodedata’: Thự viện này được sử dụng để xử lý các ký tự Unicode, kiểm tra
loại của ký tự (ví dụ: lầ dấu câu, ký tự chữ,...).
• ’seqeval.metrics’: Thư viện cung cấp các hầm để đánh giá kết quả của mô hình
NER, đặc biệt trong ngữ cảnh của đánh giá chuỗi (sequence labeling).
• ’spacy’: Thư viện xử lý ngôn ngữ tự nhiên, được sử dụng để xử lý và phân tích
văn bản.
3
• ’torch’: Thực viện PyTorch, một thư viện Máy học, được sử dụng để xây dựng và
huấn luyện mô hình.
• ’tqdm’: Thư viện cho thanh tiến trình (progress bar), giúp theo dõi tiến độ của
vòng lặp.
Mô hình thực hiện nhiệm vụ phân loại quan hệ giữa các thực thể trong văn bản.
Hình 4: Import thư viện đối với tập dữ liệu TACRED relation classification
• ’json’: Thư viện xử lý JSON, được sử dụng để đọc và xử lý dữ liệu dạng JSON.
Mô hình được sử dụng để phân loại loại thực thể của từng thực thể độc lập trong văn
bản.
Hình 5: Import thư viện đối với tập dữ liệu Open Entity entity typing
4
• ’LukeTokenizer’ và ’LukeForEntityClassification’: Thư viện và mô hình cụ
thể cho tác vụ phân loại loại thực thể của từng thực thể độc lập với LUKE.
3.4 TÁI TẠO KẾT QUẢ THỰC NGHIỆM LUKE TRÊN CONLL-2003 BẰNG HUG-
GING FACE TRANSFORMERS
Để đảm bảo tính nhất quán và tái tạo kết quả, chúng ta sẽ sử dụng tập dữ liệu kiểm
thử ’eng.testb’ từ bộ dữ liệu CoNLL-2003 về nhận diện thực thể (NER). Tập dữ liệu
này chứa các đoạn văn bản đã được gán nhãn với các thực thể như người, tổ chức và địa
điểm.
Mô hình chúng ta sẽ sử dụng là một biến thể của LUKE, đã được đào tạo trên tập dữ
liệu CoNLL-2003 để thực hiện nhiệm vụ phân loại đoạn thực thể.
Chúng ta tiến hành load tokenizer tương ứng để chuẩn bị dữ liệu đầu vào cho mô
hình.
5
Hình 8: Load tokenizer đã được đào tạo
2 documents = []
3 words = []
4 labels = []
5 sentence_boundaries = []
7 for line in f :
10 if words :
12 words = words ,
13 labels = labels ,
14 sentence_boundaries = sentence_boundaries
15 ))
16 words = []
17 labels = []
18 sentence_boundaries = []
19 continue
20
21 if not line :
s entence_boundaries [ -1]:
6
24 else :
28
29 if words :
31 words = words ,
32 labels = labels ,
33 sentence_boundaries = sentence_boundaries
34 ))
35
36 return documents
37
39
Sau khi tải xong, chúng ta sẽ sử dụng hàm ’load_examples’ để tạo ra các ví dụ
dùng để đánh giá mô hình. Hàm này tạo một đối tượng batch cho mỗi câu trong
mỗi văn bản. Mô hình giải quyết nhiệm vụ bằng cách phân loại tất cả các đoạn
thực thể có thể trong một thành ["NIL","MISC","PER","ORG","LOC"], trong đó
"NIL" đại diện cho đoạn không phải là tên thực thể.
2 examples = []
3 max_token_length = 510
4 max_mention_length = 30
11
7
than the
the sequence
17 context_start = 0
19 else :
length , we add
sequence until it
23 context_start = sentence_start
24 context_end = sentence_end
])
26 while True :
27 if context_start > 0:
<= max_token_length :
1]
30 context_start -= 1
31 else :
32 break
max_token_length :
36 context_end += 1
37 else :
38 break
39
word ) ) :
44 text += word
8
45 text += " "
46
48 s e nt e n ce _ s ub w o rd _ l en g t hs = subword_lengths [ sentence_start :
sentence_end ]
49
50 w o r d _ st a r t _ c h a r _ p os i t i o n s = []
51 w or d_ en d _c ha r_ p os it i on s = []
word ) ) :
56 text += word
59
word ) ) :
63 text += word
66
67 entity_spans = []
68 original_word_spans = []
72 entity_spans . append (
73 ( w o r d _ s t a r t _c h a r _ p o s i t i on s [ word_start ] ,
w or d_ en d _c ha r _p os it i on s [ word_end ])
74 )
75 original_word_spans . append (
76 ( word_start , word_end + 1)
77 )
9
78
80 text = text ,
81 words = sentence_words ,
82 entity_spans = entity_spans ,
83 original_word_spans = original_word_spans ,
84 ))
85
86 return examples
87
89
2 cp = ord ( char )
3 if ( cp >= 33 and cp <= 47) or ( cp >= 58 and cp <= 64) or ( cp >= 91 and
4 return True
7 return True
8 return False
• Phân loại các đoạn thực thể và đánh giá hiệu suất
Để đánh giá hiệu suất của mô hình trên tập dữ liệu kiểm thử, chúng ta sẽ thực hiện
phân loại cho tất cả các đoạn thực thể có hể trong tập kiểm thử. Đầu tiên, chúng
ta sẽ loại bỏ tất cả các đoạn được phân loại vào loại "NIL". Sau đó, chúng ta chọn
10
một đoạn từ các đoạn còn lại dựa trên logit của loại thực thể được dự đoán, sắp
xếp theo thứ tự giảm dần.
1 # Xac dinh kich thuoc batch va danh sach de luu tru logits
2 batch_size = 2
3 all_logits = []
5 # Vong lap qua tung batch trong tap du lieu kiem thu
batch_size ]
9 # Lay cac doan van ban va thong tin vi tri thuc the tu batch
12
13 # Su dung tokenizer de chuyen doi van ban thanh du lieu dau vao cho mo
hinh
17
18 # Tinh toan gits bang cach dua du lieu dau vao vao mo hinh
21
24
5 final_predictions = []
11
8 for example_index , example in enumerate ( test_examples ) :
17 predictions = []
18
22 if index != 0:
25
True ) :
33
35 final_predictions += predicted_sequence
36
12
• Kết quả và nhận xét:
1. Tổng thể:
– Micro Avg: Độ chính xác tổng thể (Micro Avg) đạt khoảng 94.20%, là
một mức độ hiệu suất khá cao trên tập dữ liệu kiểm thử.
– Mô hình có hiệu suất tốt nhất trên loại "PER" với F1-Score là 97.01%,
theo sau là "LOC" với F1-Score là 95.18
– Loại "MISC" có độ chính xác thấp nhất với F1-Score là 86.20%, nhưng
vẫn đạt một mức chấp nhận được.
– Macro Avg: Độ chính xác trung bình trên các loại thực thể (Macro Avg)
là khoảng 93.07%, cho thấy sự ổn định của mô hình trên các loại thực thể
khác nhau.
4. Nhận xét:
– Mô hình có khả năng nhận diện tốt trên nhiều loại thực thể khác nhau,
nhưng còn một số độ chính xác có thể được cải thiện, đặc biệt là trên loại
"MISC".
– Sự chênh lệch giữa Precision và Recall không lớn, cho thấy mô hình đạt
được sự cân bằng giữa việc tránh sai dự đoán (Precision) và bỏ sót (Recall).
13
Áp dụng mô hình trên vào văn bản đầu vào
Cuối cùng, chúng ta sử dụng mô hình đã được đào tạo để nhận diện thực thể tên trong
một đoạn văn bản đầu vào.
2 text = input ()
8 # Tao danh sach luu tru thong tin vi tri thuc the va tu goc trong cau
9 entity_spans = []
10 o ri g i na l _word_spans = []
11
14 # Duyet qua tung token tu vi tri hien tai den het cau
16 # Luu thong tin ve vi tri thuc the ( bat dau va ket thuc )
20
padding = True )
24
28
31
32 # Xac dinh vi tri cua logit lon nhat va gia tri logit tuong ung
14
34
36 predictions = []
37
40 # Neu vi tri du doan khong phai la " NIL " ( khong phai la thuc the )
41 if index != 0:
44
47 for _ , span , label in sorted ( predictions , key = lambda o : o [0] , reverse = True ) :
52
56
3.5 TÁI TẠO KẾT QUẢ THỬ NGHIỆM LUKE TRÊN TACRED BẰNG CÁCH SỬ
DỤNG HUGGING FACE TRANSFORMERS
15
5
7 ! cp / content / drive / MyDrive // luke / data / tacred / test . json test . json
– Duyệt qua từng mâu trong dữ liệu và trích xuất thông tin cần thiết.
– Xây dựng examples với các thông tin như văn bản, vị trí thực thể, và nhãn
quan hệ.
1 import json
8 examples = []
12 token_spans = dict (
15 )
16
18 if token_spans [ " subj " ][0] < token_spans [ " obj " ][0]:
20 else :
22
24 cur = 0
25 char_spans = {}
16
26
27 # Tao van ban voi vi tri thuc the va khoang trang phu hop
31 if text :
41
44 text = text ,
45 entity_spans =[ tuple ( char_spans [ " subj " ]) , tuple ( char_spans [ " obj
" ]) ] ,
47 ))
48
49 return examples
50
53
• Tải mô hình
– Thiết lập mô hình ở chế độ evaluation (’eval’) để đảm bảo không có sự thay
17
đổi trọng số trong quá trình đánh giá.
3 model . eval ()
• Tải Tokenizer:
– Tương tự, sử dụng hàm ’from_pretrained’ để tải tokenizer tương ứng với
mô hình đã được fine-tuned.
– ’batch_size’: Đây là kích thước của mỗi batch được sử dụng trong quá trình
đo lường hiệu suất.
– Sử dụng vòng lặp để duyệt qua từng batch của các ví dụ trong tập test.
18
– Chuẩn bị dữ liệu đầu vào bằng cách sử dụng tokenizer và chuyến về thiết bị
GPU (’cuda’).
– Thực hiện dự đoán với mô hình và trích xuất các nhãn dự đoán.
– Tính toán các chỉ số hiệu suất như số lượng dự đoán, số lượng nhãn thực tế,
và số lượng dự đoán chính xác.
• In ra kết quả:
– Tính toán các chỉ số hiệu suất như precision, recall, và F1 score.
– In ra kết quả đo lường hiệu suất để đánh gái mô hình trên tập dữ liệu ACRED
Relation Classification.
19
– Kết quả đo lường hiệu suất cho thấy mô hình đạt được kết quả tốt trên tập
dữ liệu ACRED Relation Classification.
– Precision và Recall đều đạt giá trị 1.0, điều này chỉ ra rằng mô hình không có
dự đoán sai (false positives) hoặc bỏ sót (false negatives).
– F1 Score là sự kết hợp giữa Precision và Recall và cũng đạt giá trị 1.0, là một
kết quả rất lý tưởng.
– Mô hình hoạt động hiệu quả và chính xác trên tập dữ liệu ACRED Relation
Classification.
– Kết quả này có thể là do tập dữ liệu test được chọn có sự biểu diễn tốt của các
mối quan hệ giữa các cặp thực thể, hoặc có thể là do mô hình đã được huấn
luyện và fine-tuned một cách hiệu quả cho nhiệm vụ nhận dạng mối quan hệ
giữa các cặp thực thể trong tập dữ liệu này.
Phát hiện mối quan hệ giữa cặp thực thể (Detecting a relation between a pair
of entities)
• Ví dụ 1:
– Entity Spans: [(0, 7), (17, 28)] (tương ứng với "Beyoncé" và "Los Angeles")
Hình 13: Ví dụ 1
• Ví dụ 2:
20
– Entity Spans: [(0, 7), (17, 32)] (tương ứng với "TuanAnh" và "UIT Univer-
sity")
Hình 14: Ví dụ 2
3.6 TÁI TẠO KẾT QUẢ THỬ NGHIỆM LUKE TRÊN OPEN ENTITY BẰNG CÁCH
SỬ DỤNG HUGGING FACE TRANSFORMERS
• Tải bộ dữ liệu:
– Gown Command:
1 ! gdown -- id 1 HlWw7Q6 - d F Sm 9 j NS C h 4V a B f1 P l Gq t 9 im
∗ Lệnh trên trích xuất nội dung của tệp nén ’data.tar.gz’.
21
∗ Lệnh trên sao chép tệp ’test.json’ từ thư mục ’data/OpenEntity’ vào
thư mục làm việc hiện tại.
• Load bộ dữ liệu
– Hàm ’load_examples’:
∗ Hàm trên đọc nội dung của tệp ’test.json’, sau đó xử lý và chuyển đổi
dữ liệu thành một danh sách các ví dụ.
• Load mô hình
22
finetuned-open-entity"). Mô hình được được thiết kế để thực hiện nhiệm
vụ phân loại thực thể trtên bộ dữ liệu Open Entity Entity Typing.
1 model . eval ()
∗ Hai dòng trên đặt mô hình vào chế độ đánh giá (’eval()’) và chuyển nó
sang sử dụng GPU (CUDA) để tận dụng tốc độ tính toán của GPU
• Load Tokenizer
• Chuẩn bị dữ liệu
– Bắt đầu với việc chuẩn bị các biến đếm và danh sách để lưu trữ kết quả.
– Sau đó, sử dụng vòng lặp để duyệt qua các ví dụ trong bộ dữ liệu kiểm thử
theo từng batch.
– ’texts’: Danh sách các văn bản của các ví dụ trong batch.
– ’entity_spans’: Danh sách các vị trí của các đơn vị thực thể trong văn bản.
– ’gold_labels’: Danh sách các nhãn vàng tương ứng với mỗi ví dụ.
2 batch_size = 128
3 num_predicted = 0
4 num_gold = 0
23
5 num_correct = 0
6 all_predictions = []
7 all_labels = []
batch_size ]
batch_examples ]
15
• Tokenize và dự đoán
– Sử dụng tokenizer để chuyển đổi văn bản và vị trí thực thể thành đầu vào mô
hình.
– Chuyển đầu vào lên GPU dể tận dụng sức mạnh tính toán của GPU.
– Thực hiện forward pass mà không tính toán gradient, vì chúng ta chỉ đánh giá
hiệu suất.
1 # Tokenize the batch and chuyen sang GPU
– Duyệt qua các kết quả dự đoán của mô hình và so sánh chúng với nhãn vàng
để tính toán các độ đo hiệu suất.
– ’num_gold’: Số lượng thực thể thực tế trong toàn bộ bộ dữ liệu kiểm thử.
24
– ’num_predicted’: Số lượng thực thể được dự đoán bởi mô hình.
5 if logit > 0:
6 num_predicted += 1
8 if predicted_label in labels :
9 num_correct += 1
10
– Tính toán các độ đo hiệu suất (precision, recall, F1) từ các biến đếm đã tính
được.Tính toán các độ đo hiệu suất (precision, recall, F1) từ các biến đếm đã
tính được.
– In kết quả ra màn hình để đánh giá hiệu suất của mô hình trên bộ dữ liệu
kiểm thử.
– Kết quả này sẽ giúp so sánh với các kết quả đã báo cáo trong bài báo gốc.
1 # Tinh toan precision , recall , and F1
6 # In ra ket qua
– Precision: 0.798
∗ Điểm này cho biết mô hình có khả năng nhận dạng thực thể mộ cách
chính xác đáng kể.
25
– Recall: 0.766
∗ Tỉ lệ này cho thấy mô hình có khả năng bao quát khá tốt các thực thể
trong dữ liệu kiểm thử.
– F1-Score: 0.782
∗ Kết hợp giữa Precision và Recall, F1-Score ổn định tại một mức cao, đồng
nghĩa với việc mô hình đạt được sự cân bằng giữa chính xác và bao quát.
– Mô hình có hiệu suất khá tốt trên bộ dữ liệu Open Entity entity typing.
– Precision và Recall khá cân bằng, không có sự chệch lệch lớn giữa chúng, điều
này làm tăng tính tin cậy của mô hình.
• Ví dụ 3:
– Mô hình chính xác dự đoán "person" là loại thực thể cho "Beyoncé."
• Ví dụ 4:
– Kết quả dự đoán: Predicted entity type for Los Angeles: [’location’, ’place’]
– Mô hình dự đoán đa dạng loại thực thể cho "Los Angeles," bao gồm "location"
và "place."
• Ví dụ 5:
26
– Entity Spans: [(0, 3)] (tương ứng với "Tho")
• Ví dụ 6
4 TỔNG KẾT
• LUKE là một mô hình mạnh mẽ cho nhiệm vụ nhận diện thực thể đặc biệt và phân
loại mối quan hệ.
• Đối với nhiệm vụ nhận diện thực thể đặc biệt, LUKE xuất sắc trên tập dữ liệu
CoNLL-2003.
• Trong môi trường phân loại mối quan hệ của TACRED, LUKE hoàn thành nhiệm
vụ với độ chính xác tuyệt đối.
• Trong nhiệm vụ phân loại loại thực thể của Open Entity, LUKE có hiệu suất tốt,
nhưng vẫn có không gian để cải thiện.
27