• Mỗi vector cột pi phải là một vector riêng của A ứng với trị riêng dii... • Các là căn bậc hai của các trị riêng của AAT, còn gọi là singular values của A.• Mỗi cột của U là 1 vector r
Trang 1BÀI TẬP LỚN ĐẠI SỐ TUYẾN TÍNH
GVHD: Th.S Nguyễn Xuân Mỹ LỚP: L09 - NHÓM: 9
Trang 2ỨNG DỤNG CỦA PHÂN TÍCH SVD VÀO HỆ THỐNG GỢI Ý TRONG
MACHINE LEARNING
NHÓM: 9
Trang 3DANH SÁCH THÀNH VIÊN
STT Họ và tên MSSV
L09 - NHÓM: 9
Trang 4Ứng dụng trong machine learning
Phương pháp phân tích SVD
NỘI DUNG
Trang 5MỞ ĐẦU
Trang 7CƠ SỞ LÝ THUYẾT
Trang 8Ma trận chuyển vị
Chuyển vị của là ma trận cỡ n x m thu được từ A bằng cách chuyển hàng thành cột A aij mn AT aij nm
239 3
0 1
4 2
9 0
4
3 1 2
Trang 9c C
Trang 10Phép nhân hai ma trận
a A(BC) = (AB)C; b A(B + C) = AB + AC;
e k (AB) = (kA)B = A(kB).
Trang 13Ma trận đường chéo
Vết của ma trận vuông là tổng tất cả các phần tử trên đường
chéo chính của nó, ký hiệu trace(A)
Chỉ có các thành phần trên đường chéo chính khác 0.
Trang 15Định thức
Chỉ ma trận vuông mới có định thức Kí hiệu: det(A) hoặc det A.
Giả sử ta có một ma trận vuông A bậc n.
- Với n = 1, det(A) chính là phần tử duy nhất của ma trận đó.
- Với n > 1, ta có cách tính định thức dựa trên khai triển hàng thứ i của ma trận:
Trang 19Cơ sở của một không gian véc tơ
Một hệ các véc tơ {ܽ◌1, ܽ◌2, …, ܽ◌݊◌} trong không gian véc tơ m chiều V = Rm
được gọi là một cơ sở nếu nó thỏa mãn hai điều kiện sau:
1 ܸ◌≡ ݊ ܽݏ (ܽ◌1, ܽ◌2, …, ܽ◌݊◌)
2 {ܽ◌1, ܽ◌2, …, ܽ◌݊◌} là một hệ độc lập tuyến tính
Khi đó, mọi véc tơ b ∈ V đều biểu diễn duy nhất qua cơ sở
Chú ý: số véc tơ trong cơ sở phải bằng số chiều của không gian
Trang 202 rank (A) = rank (AT)
3 Với A ∈ R݉◌×݊◌, thì rank(A) ≤ min (m, n)
4 rank (AB) ≤ min (rank (A), rank (B))
5 rank (A + B) ≤ rank (A) + rank (B)
Trang 21Hệ trực chuẩn, ma trận trực giao
Một hệ cơ sở {ܽ◌1, ܽ◌2, …, ܽ◌݊◌} ∈ R݉◌ được gọi là trực giao (orthogonal) nếu
mỗi véc tơ khác 0 và tích của hai véc tơ khác nhau bất kì bằng 0
ܽ◌݅◌≠ 0; ܽ◌݅◌ܶ◌ܽ◌݆◌= 0, ∀ 1 ≤ ݅◌≠ ݆◌≤ ݉◌
Một hệ cơ sở {ܽ◌1, ܽ◌2, …, ܽ◌݊◌} ∈ R݉◌ được gọi là trực chuẩn (orthonomal)
nếu nó là hệ trực giao và độ dài Euclid của mỗi véc tơ bằng 1
ܽ◌݅◌ܶ◌ܽ◌݆◌= 1, ݅◌= ݆◌ 0, ݅◌≠ ݆◌ (*)
Trang 23Trị riêng và véc tơ riêng
Cho một ma trận vuông A ∈ Rn×n, một véc tơ x ∈ Rn (x ≠ 0) và một số vô hướng (có thể thực hoặc phức) λ.
Nếu Ax=λx thì ta nói λ và x là một cặp giá trị riêng, véc tơ riêng
(eigenvalue, eigenvector) của ma trận A.
Trang 24Trị riêng và véc tơ riêng
Cũng có ܣ − ߣ ܫ ݔ = 0, tức là x nằm trong không gian Null của ܣ − ߣ ܫ
Vì x ≠ 0, nên ܣ − ߣ ܫ là ma trận không khả nghịch.
Vậy det ܣ − ߣ ܫ = 0, hay λ là nghiệm của phương trình det ܣ − ߣ ܫ = 0
Định thức này là một đa thức bậc n của t, gọi là đa thức đặc trưng
(characteristic polynomial) của A, ký hiệu là pA(t).
Tập hợp tất cả các giá trị riêng của một ma trận còn gọi là phổ (spectrum)
của ma trận đó.
Trang 25ܣ = ܺܲܺ◌ ܺ◌−1 ∗Các véc tơ riêng x, thường được chọn sao cho ݔ݅◌ܶ◌ݔ݅◌= 1.
Cách biểu diễn một ma trận như (*) được gọi là eigendecomposition vì nó
Trang 26Ma trận xác định dương
Một ma trận đối xứng ܣ ∈ ܴ◌݊◌×݊◌ được gọi là xác định dương (positive
definite) nếu
ݔܶ◌ܣ > 0, ∀ݔ ∈ ܴ◌݊◌,ݔ ≠ 0Một ma trận đối xứng ∈ ܴ◌݊◌×݊◌ được gọi là nửa xác định dương
(positive semidefinite) nếu
ݔܶ◌ ≥ 0, ∀ݔ ∈ ܴ◌݊◌,ݔ ≠ 0
Ma trận xác định âm và nửa xác định âm cũng được định nghĩa tương tự
Ví dụ, ta có ܣ = 1 − 1−1 1 là nửa xác định dương vì với mọi véc tơ ݔ = ݒݑ
Ta có: ݔܶ◌ܣ = 1 − 1 ݑ 2 +ݒ2 − 2ݒƒƒݑ = ݑ −ݒ 2 ≥ 0, ∀ݑ,ݒ ∈ ܴ◌
Trang 27Ma trận xác định dương
TÍNH CHẤT:
1 Mọi trị riêng của ma trận xác định dương đều là số thực dương
2 Mọi ma trận xác định dương là khả nghịch, định thức của nó là một số dương
Trang 28Chuẩn của véc tơ và ma trận
Định nghĩa: Một hàm số ݂◌: ܴ◌݊◌→ ܴ◌ được gọi là một norm (chuẩn) nếu nó
thỏa mãn các điều kiện sau đây:
1 ݂◌ݔ ≥ 0 ∀ݔ, dấu bằng xảy ra khi x = 0
2 ݂◌ ߙݔ = ߙ݂◌ݔ , ∀ݔ ߳ ܴ◌
3 ݂◌ݔ1 = ݂◌ݔ2 ≥ ݂◌ݔ1 + ݂◌ݔ2 , ∀ݔ1,ݔ2 ߳ ܴ◌
Một số chuẩn thông thường:
- Chuẩn Euclide hay l2 norm:
Trang 29Dùng máy tính
Khám phá tri thức từ dữ liệu
Machine Learning
Sự học của máy tính Trí tuệ nhân tạo
xây dựng và phát triển chương trình máy tính
có thể học từ
dữ liệu đưa vào
Trang 30Machine Learning
Phân tích
dữ liệu bán lẻ của siêu thị
Ví dụ 1 Ví dụ 2 Ví dụ 3
Đối sánh vân tay
Tìm đường ngắn nhất cho robot
Trang 31Chương trình máy tính
thích nghi môi trường thay đổi
Tại sao cần nghiên cứu Machine Learning
nhiệm vụ chưa định rõ
Trang 32PHƯƠNG PHÁP PHÂN TÍCH MA TRẬN
SVD
Trang 33Mộ t ma trậ n vuô ng ܣ đ ược g ọ i là ch éo h ó a được n ếu tồ n tại ma trậ n đường
ܣ ݅◌ = ܺܲ◌݀◌ ݅◌ = ݀◌ ݅݅◌ ݅◌ (***)
Tr ong đ ó ݀◌ ݅݅◌ là phầ n tử th ứ ݅◌c ủa ݀◌ ݅◌
D ấu bằ ng thứ h ai x ả y ra v ì ܦ là ma trậ n đường c h éo , tức ݀◌ ݅◌ c h ỉ c ó th ành phầ n d k há c khô n g Biể u th ức ( *** ) c hỉ r a rằ ng mỗ i ph ần tử ݀◌ ݅݅◌ p hải là mộ t t rị riên g c ủa ܣ và m ỗi ve cto r cộ t ݅◌ ph ải là m ột ve ctor ri ên g c ủ a ܣ v à mỗ i
ve c tor cộ t ݅◌ ph ải là m ột vec tor ri êng c ủa ܣ ứ ng v ới t rị ri ên g ݀◌ ݅݅◌.
Mộ t ma trậ n vuô ng ܣ đ ược g ọ i là ch éo h ó a được n ếu tồ n tại ma trậ n đường
ܣ ݅◌ = ܺܲ◌݀◌ ݅◌ = ݀◌ ݅݅◌ ݅◌ (***)
Tr ong đ ó ݀◌ ݅݅◌ là phầ n tử th ứ ݅◌c ủa ݀◌ ݅◌
D ấu bằ ng thứ h ai x ả y ra v ì ܦ là ma trậ n đường c h éo , tức ݀◌ ݅◌ c h ỉ c ó th ành phầ n d k há c khô n g Biể u th ức ( *** ) c hỉ r a rằ ng mỗ i ph ần tử ݀◌ ݅݅◌ p hải là mộ t t rị riên g c ủa ܣ và m ỗi ve cto r cộ t ݅◌ ph ải là m ột ve ctor ri ên g c ủ a ܣ v à mỗ i
ve c tor cộ t ݅◌ ph ải là m ột vec tor ri êng c ủa ܣ ứ ng v ới t rị ri ên g ݀◌ ݅݅◌.
Một ma trận vuông ܣ được gọi là ch éo hóa được nếu tồn tại ma trận đường chéo ܦ và ma trận khả nghịch ܺܲ◌ sao cho:
ܣ ݅◌ = ܺܲ◌݀◌ ݅◌ = ݀◌ ݅݅◌ ݅◌ (***)
Trong đó ݀◌ ݅݅◌ là phần tử thứ ݅◌của ݀◌ ݅◌ Dấu bằng thứ ha i xảy ra vì ܦ là ma trận đường ch éo, tức ݀◌ ݅◌ chỉ có thành phần d khác không Biểu th ức (***) chỉ ra rằng mỗi phần tử ݀◌ ݅݅◌ phải là một trị
Trang 34ܣ ݅◌ = ܺܲ◌݀◌ ݅◌ = ݀◌ ݅݅◌ ݅◌ (***)
Trong đó ݀◌ ݅݅◌ là phần tử thứ ݅◌của ݀◌ ݅◌
D ấu bằng thứ hai xảy ra vì ܦ là ma trận đường chéo, tức ݀◌ ݅◌ chỉ có th ành phần d khác không Biểu th ức (***) chỉ ra rằng mỗi phần tử ݀◌ ݅݅◌ phải là một trị riêng của ܣ và m ỗi vector cột ݅◌ phải là m ột vector riêng của ܣ và mỗi vector cột ݅◌ phải là m ột vector riêng của ܣ ứ ng với trị riêng ݀◌ ݅݅◌
Dấu “=” thứ hai xảy ra vì D là ma trận đường chéo, tức di chỉ có thành phần d khác không
Biểu thức (***) :
• Mỗi di phải là 1 trị riêng của A
• Mỗi vector cột pi phải là một vector riêng của A ứng với trị riêng dii
Trang 35Cách phân tích 1 ma trận vuông thành nhân tử như (*) còn gọi là phân tích giá trị riêng. Một ma trận vuông ܣ được gọi là chéo hóa được nếu tồn tại ma trận đường
chéo ܦ và ma trận khả nghịch ܺܲ◌ sao cho:
tr ái bằn g vế phải nên ta có:
Phân tích giá trị riêng:
=> không tồn tại ma trận khả nghịch P
một số thực bất kì
Trang 39• Các là căn bậc hai của các trị riêng của AAT, còn gọi là singular values của A.
• Mỗi cột của U là 1 vector riêng của A => mỗi cột là left-singular vectors của A
Trang 401 LÀM MỎNG SVD:
• Trong hầu hết trường hợp, m >> n.
• Tính Umm => tính n cột đầu tiên là Umn
• Số chiều của ma trận đường chéo mn giảm => nn
A được biểu diễn dưới dạng:
• Số lượng các trị riêng cần tìm chỉ còn n và số lượng vector riêng chỉ còn 2n (n cột của ma trận Umn và n cột của ma trận
V ).
Số quan sát thường lớn gấp rất nhiều lần so với số chiều hay ݉◌ ≫ ݊◌ trong hầu hết các TH
Thay vì tính toàn bộ ma trận ܷ◌݉݉◌ => chỉ tính n cột đầu tiên là ܷ◌݊݉◌
Số chiều của ma trận đường chéo Σ݊݉◌ cũng giảm xuống thành Σ݊݊◌ Khi đó ma trận ܣ được biểu diễn dưới dạng: ܣ = ܷ◌݊݉◌ Σ݊݊◌ ܸ◌ ݊݊◌
Số lượng các trị riêng cần tìm chỉ còn ݊◌và số lượng vector riêng chỉ còn 2݊◌(݊◌cột của ma trận ܷ◌ ݊݉◌ và ݊◌cột của ma trận ܸ◌݊݊◌ ).
download by : skknchat@gmail.com
Trang 411 LÀM MỎNG SVD:
≈
Trang 422 COMPACT SVD:
ܣ ݉◌×݊◌ =ܷ◌ ݉◌×݉◌ Σ ݉◌×݊◌ ܷ◌ ݊◌×݊◌ ܶ◌
Viết lại biểu thức dưới dạng tổng của các ma trận rank 1:
Mỗi , là một ma trận có rank bằng 1
A chỉ phụ thuộc vào r cột đầu tiên của U, V và r giá trị khác 0 trên đường chéo
Ta có cách phân tích gọn hơn: compact SVD:
Biểu diễn ma trận ܣ dưới dạng tổng của các tích vector cột ݑ ݅◌ của ܷ◌ ݉݉◌ và vector dòng ݒ ݅◌ của ܸ◌ ݊݊◌ như sau: ܣ = σ ݅◌ ݊◌ =1 ݑ ݅◌ ߪ ݅◌ ݒ ݅◌
Các vector ݑ ݅◌ và ݒ ݅◌ là các hệ cơ sở độc lập tuyến tính.
Thông thườ ng trong ma trận đường chéo Σ ݊݊◌ chỉ một lượng lớn các trị riêng
có lớn hơn 0 Các trị riêng còn lại đều xấp xỉ 0.
Do đó chỉ tạiݎ vị trí dòng và cột tương ứng với các trị riêng đủ lớn ta mới thực hiện tính toán SVD Biểu diễn ma trận ܣ ݊݉◌ dưới dạng compact SVD:
Trang 432 COMPACT SVD:
Biểu diễn ma trận ܣ dưới dạng tổng của các tích vector cột ݑ ݅◌ của ܷ◌ ݉݉◌ và vector dòngݒ ݅◌ của ܸ◌ ݊݊◌ như sau:ܣ = σ ݅◌݊◌=1 ݑ݅◌ߪ݅◌ ݒ݅◌
Các vector ݑ ݅◌ và ݒ ݅◌ là các hệ cơ sở độc lập tuyến tính.
Thông thườ ng trong ma trận đường chéo Σ ݊݊◌ chỉ một lượng lớn các trị riêng
có lớn hơn 0 Các trị riêng còn lại đều xấp xỉ 0.
Do đó chỉ tại ݎ vị trí dòng và cột tươ ng ứng với các trị riêng đủ lớn ta mới thực hiện tính toán SVD Biểu diễn ma trận ܣ ݊݉◌ dướ i dạng compact SVD:
• Ur, Vr lần lượt là ma trận được tạo bởi r cột đầu tiên của U và V.
• r là ma trận con được tạo bởi r hàng đầu tiên và r cột đầu tiên của
• Nếu A có rank nhỏ hơn rất nhiều so với số hàng và số cột r << m, n
=> được lợi nhiều về lưu trữ.
Trang 442 COMPACT SVD:
Ví dụ minh hoạ với m = 4, n = 6, r = 2.
Hình: Biểu diễn SVD thu gọn và biểu diễn ma trận dạng tổng các ma trận có rank = 1.
Trang 45Thu được ma trận xấp xỉ của A:
Hoặc ta có thể biểu diễn dưới dạng tổng của tích vô hướng các vector cột và dòng của U,VT như sau:
ܣ=
ݐ
ݑߪݒ
Trang 463 TRUNCATE SVD:
Khi đó ta còn tính được khoảng cách norm Frobenius giữa A^ và A chính bằng tổng bình phương của các trị riêng còn lại từ ߪݐ+1 đến ߪ݊◌ (với giả định ܣ có ݊◌ trị riêng) như sau:
phương các trị riêng còn lại
Tính được khoảng cách norm Frobenius giữa  và A: bằng tổng bình phương các trị riêng còn lại từ đến (với giả định A có n trị riêng) như sau:
Trang 48Định lý: Với ma trận ܣ݉◌×݊◌bất kỳ thì A+ được gọi là ma trận nghịch đảo suy rộng của A nếu ma trận A thỏa mãn:
1 AA+A = A
2 A+AA+ = A+
3 (A.A+)T = A.A+
4 (A+.A)T = A+.A
Trang 49Với mọi ma trận A có phân tích SVD là ܣ = ܷ◌σ ܸ◌ ܶ◌thì ma trận ܸ◌∑+ ܷ◌ ܶ◌là ma trận nghịch đảo suy rộng của ma trận A Với ∑+là ma trận nghịch đảo của ∑ và
Trang 50ỨNG DỤNG CỦA SVD TRONG HỌC MÁY
Trang 51● Trong nén ảnh
● Trong hệ gợi ý
● Xây dựng và tối ưu hàm mất mát
Trang 52đoán
Trang 53Hệ gợi ý dựa trên nội dung
Mục đích của hệ gợi ý:
Dự đoán mức độ quan tâm của một user tới một item nào
Trang 54Hệ gợi ý dựa trên nội dung
Trang 55• Mỗi user sẽ có mức độ quan tâm tới từng item khác nhau
• Mức độ quan tâm này, nếu đã biết, được gán cho một giá trị
ứng với mỗi cặp user-item
• Giả sử mức độ quan tâm được đo bằng giá trị user rate cho
item, tạm gọi giá trị này là rating
• Tập hợp tất cả các ratings, bao gồm cả những giá trị chưa biết
Trang 56VD: Hệ thống gợi ý bài hát 6 user: A tới F
từ đó đưa ra gợi ý cho người dùng.
Trang 57VD: Hệ thống gợi ý bài hát
Bolero
Nhạc trẻ
Bolero Nhạc trẻ
Trang 58• Nhiều ô được điền => độ chính xác của hệ thống càng cao.
• Tuy nhiên, có rất nhiều users và items, và mỗi user chỉ đánh giá với số lượng rất nhỏ.
=> Lượng ô màu xám của utility matrix trong các bài toán đó thường rất lớn, và lượng các ô đã được điền là một số rất nhỏ.
• Ưu điểm: Một trong những thuật toán dễ hiểu nhất nhưng lại
mang lại hiểu quả cao nhờ vào tính logic của nó
• Nhược điểm: Cần quá nhiều dữ liệu đánh giá của người dùng.
Trang 59• Không có Utility matrix, gần như không thể gợi ý được sản phẩm tới
người dùng, ngoài cách luôn luôn gợi ý các sản phẩm phổ biến nhất.
• Có hai hướng tiếp cận phổ biến để xác định giá trị rating cho mỗi cặp
user-item trong Utility Matrix:
1 Nhờ user đánh giá item.
2 Dựa trên hành vi của user.
Trang 60Content-Based Recommendations
• Xây dựng 1 bộ hồ sơ cho mỗi item => biểu diễn dưới dạng toán học là
feature vector
• TH đơn giản, feature vector được trích xuất từ item.
• VD: các features của 1 bài hát:
- Nhạc sĩ sáng tác: Cùng là nhạc trẻ, có người thích của Phan Mạnh
Quỳnh, người khác lại thích Sơn Tùng MTP.
- Năm sáng tác: Có người sẽ thích những bài nhạc cũ hơn nhạc hiện đại.
- Thể loại nhạc: Có người thích nhạc rock, có người lại thích nhạc điện tử.
Trang 61Content-Based Recommendations
Xây dựng một feature vector hai chiều cho mỗi bài hát: chiều thứ nhất là mức
độ Bolero, chiều thứ hai là mức độ Thiếu nhi của bài đó
Đặt các feature vector cho mỗi bài hát là x1, x2, x3, x4, x5
Trang 63Content-Based Recommendations
Xây dựng mô hình cho user không phụ
thuộc vào user khác, phụ thuộc vào hồ
sơ của item
• Tiết kiệm bộ nhớ, thời gian tính toán
• Tận dụng thông tin đặc trưng của
item
• Xây dựng feature vector bao gồm kỹ
thuật Xử lí ngôn ngữ tự nhiên
• Không tận dụng thông tin hữu ích từ các user khác
• Không phải luôn có bản mô tả cho mỗi item
• Các thuật toán NLP cũng phức tạp hơn ở việc phải xử lý các từ gần nghĩa, viết tắt, sai chính tả, hoặc được viết ở các ngôn ngữ khác nhau
Trang 64Neighborhood-based Collaborative Filtering
Xác định mức độ
quan tâm của một
user tới một item
dựa trên các users
khác gần giống với
user này.
Việc gần giống nhau giữa các users xác định thông qua mức độ quan tâm của users này tới các items khác hệ thống đã
biết.
A, B thích phim Cảnh sát hình sự, tức rate phim này
5 sao Biết A cũng thích Người phán
xử, nhiều khả năng
B cũng thích bộ phim này.
Trang 65• Xác định sự giống nhau giữa 2 user.
• Dữ liệu duy nhất chúng ta có là Utility matrix Y, vậy nên sự giống nhau này phải được xác định dựa trên các cột tương ứng với hai users trong ma trận này.
Trang 66ݑ0, ݑ1 thích ݅◌0, ݅◌1, ݅◌2 và không thích ݅◌3, ݅◌4
Điều ngược lại xảy ra ở các users còn lại
Một similiarity function tốt cần đảm bảo:
݉ ݅ݏ(ݑ0,ݑ1) > ݉ ݅ݏ(ݑ0,ݑ݅◌), ∀݅◌>1
Để xác định mức độ quan tâm của u0 lên i2 nên dựa trên hành vi của u1 lên sản
phẩm này
Vì u1 đã thích i2 nên hệ thống cần gợi ý i2 cho u0
Đặt mức độ giống nhau của hai users ݑ݅◌ , ݑ݆◌ là: sim(ݑ݅◌ ,ݑ݆◌)
Trang 67• Để đo similarity giữa 2 users, xây dựng feature vector cho mỗi user rồi áp dụng một hàm có khả năng đo similarity giữa hai vectors đó
• Các vectors này được xây dựng trực tiếp dựa trên Utility matrix chứ không dùng dữ liệu ngoài như item profiles
• Với mỗi user, thông tin duy nhất chúng ta biết là các ratings mà user đó đã thực hiện, tức cột tương ứng với user đó trong Utility matrix
• Các cột này thường có rất nhiều mising ratings vì mỗi user thường chỉ rated một số lượng rất nhỏ các items
• Khắc phục: giúp hệ thống điền các giá trị này sao cho việc điền không làm ảnh
hưởng nhiều tới sự giống nhau giữa hai vector
• Việc điền này chỉ phục vụ cho việc tính similarity chứ không phải là suy luận ra giá
Trang 69Tính toán sự tương đồng giữa các items rồi gợi ý những items gần giống
với item yêu thích của một user.
• Số items < số users
=> Similarity matrix nhỏ hơn, thuận lợi cho việc lưu trữ và tính toán
• Số lượng phần tử đã biết trong Utility matrix là như nhau nhưng số hàng (items) ít hơn số cột (users)
=> Mỗi hàng của ma trận có nhiều phần tử đã biết hơn số phần tử đã biết mỗi cột
=> Giá trị trung bình của mỗi hàng ít bị thay đổi hơn khi có thêm một vài ratings
ƯU ĐIỂM
Trang 70MATLAB
Trang 72Câu lệnh Cú pháp Ý nghĩa
Cho i chạy từ 1 tới n cho trước Thực thi lần lượt các phát biểu ứng với các giá trị
của i.
Các hàm được sử dụng
Trang 73• Cảm ơn thầy cô và các bạn đã theo dõi bài thuyết trình của nhóm 9.
• Chúc cô và các bạn luôn có thật nhiều sức khỏe.