Chuyển tới nội dung chính

Bài tập TTNT: ứng dụng

Luyện về xử lý ngôn ngữ, thị giác máy tính và hệ khuyến nghị (Phần IV).

Bài 1: vector bag-of-words

Cho từ điển ["mua", "ban", "hang"]. Hãy lập vector bag-of-words (đếm số lần xuất hiện) cho câu "mua hang mua hang ban".

Gợi ý

Đếm từng từ theo đúng thứ tự từ điển: "mua" xuất hiện 2 lần, "ban" 1 lần, "hang" 2 lần, nên vector là [2, 1, 2]. Xem lại bài Xử lý ngôn ngữ tự nhiên.

Bài 2: độ tương tự hai câu

Hai câu cho ra vector [1, 0, 1][1, 1, 0]. Hãy cho biết chúng giống nhau nhiều hay ít, dựa trên số thành phần cùng khác không.

Gợi ý

Tích vô hướng 1*1 + 0*1 + 1*0 = 1: chỉ một từ chung. Độ tương tự cosine sẽ ở mức trung bình, không cao. Càng nhiều từ chung, cosine càng gần 1. Xem lại bài Xử lý ngôn ngữ tự nhiênHệ khuyến nghị.

Bài 3: một bước tích chập

Áp bộ lọc dò cạnh [-1, 1] lên dãy điểm ảnh [10, 10, 50, 50] (trượt từng cặp kề nhau). Kết quả ở đâu lớn nhất, và điều đó nói lên gì?

Gợi ý

Tính cho từng cặp: (-1*10 + 1*10) = 0, (-1*10 + 1*50) = 40, (-1*50 + 1*50) = 0. Giá trị lớn nhất 40 nằm ở chỗ độ sáng nhảy vọt, tức bộ lọc đã dò ra cạnh. Xem lại bài Thị giác máy tính.

Bài 4: cosine giữa hai người dùng

Hai người dùng có vector đánh giá [5, 0, 3][5, 0, 0]. Họ có gu giống nhau không?

Gợi ý

Tích vô hướng 5*5 + 0 + 0 = 25, độ dài lần lượt là sqrt(34)5. Cosine bằng 25 / (sqrt(34)*5) xấp xỉ 0.86, khá gần 1 nên hai người có gu tương đồng. Xem lại bài Hệ khuyến nghị.

Bài 5: gợi ý bằng lọc cộng tác

An và Bình có gu rất giống nhau. An đã thích phim X mà Bình chưa xem. Hệ khuyến nghị nên làm gì, theo nguyên tắc lọc cộng tác?

Gợi ý

Lọc cộng tác giả định: người có gu giống nhau sẽ thích những thứ giống nhau. Vì An (giống Bình) thích X, hệ nên gợi ý X cho Bình. Đây là lọc cộng tác theo người dùng. Xem lại bài Hệ khuyến nghị.

Bài 6: một bước max pooling

Áp max pooling cửa sổ 2 (hai cửa sổ không chồng lên nhau) lên dãy đặc trưng [1, 3, 2, 5]. Kết quả là gì, và phép này có tác dụng gì?

Gợi ý

Lấy giá trị lớn nhất trong từng cửa sổ: [1, 3] cho 3, [2, 5] cho 5, nên kết quả là [3, 5]. Max pooling giảm kích thước bản đồ đặc trưng nhưng vẫn giữ lại tín hiệu mạnh nhất, giúp mô hình bớt nhạy với dịch chuyển nhỏ. Xem lại bài Thị giác máy tính.

Bài 7: cơ chế chú ý nối từ nào với từ nào

Trong câu "con mèo ngồi trên thảm vì nó ấm", từ "nó" nên chú ý mạnh nhất tới từ nào để hiểu đúng nghĩa? Cơ chế nào trong transformer làm được việc đó?

Gợi ý

"Nó" ở đây chỉ cái thảm ấm, nên trọng số chú ý của "nó" với "thảm" cần lớn. Đây là việc của cơ chế tự chú ý (self-attention): mỗi từ tính trọng số liên hệ với mọi từ khác, nắm được quan hệ ở xa mà không cần xử lý tuần tự. Xem lại bài Transformer và mô hình ngôn ngữ lớn.

Bài 8: mô hình ngôn ngữ lớn học để làm gì

Một mô hình ngôn ngữ lớn về cơ bản được huấn luyện để làm gì với chuỗi văn bản? Vì sao điều đó khiến nó đôi khi "chế" ra thông tin sai nhưng nghe rất hợp lý?

Gợi ý

Mô hình học dự đoán token (mảnh từ) kế tiếp dựa trên các token đứng trước, lặp lại việc này để sinh ra văn bản. Nó tối ưu cho câu chữ trôi chảy chứ không tra cứu một kho sự thật, nên có thể sinh nội dung nghe hợp lý nhưng sai. Xem lại bài Mô hình ngôn ngữ lớn.

Bài 9: tích chập hai chiều

Ảnh 3x3 có các giá trị điểm ảnh theo hàng là [[1,2,3],[4,5,6],[7,8,9]]. Áp bộ lọc 2x2 [[1,0],[0,1]] trượt không đệm (mỗi lần dịch một ô). Bản đồ đặc trưng đầu ra là gì?

Gợi ý

Bộ lọc chỉ cộng hai điểm trên đường chéo của mỗi cửa sổ 2x2. Bốn cửa sổ cho: trên trái 1 + 5 = 6, trên phải 2 + 6 = 8, dưới trái 4 + 8 = 12, dưới phải 5 + 9 = 14. Kết quả là ma trận [[6, 8], [12, 14]], kích thước 2x2 nhỏ hơn ảnh gốc vì không đệm biên. Xem lại bài Thị giác máy tính.

Bài 10: TF-IDF của một từ

Trong một tài liệu 100 từ, từ "mèo" xuất hiện 3 lần. Kho có 1000 tài liệu, "mèo" xuất hiện trong 100 tài liệu. Tính TF-IDF của "mèo" (dùng log cơ số 10). So với từ "và" có mặt ở cả 1000 tài liệu thì sao?

Gợi ý

Tần suất từ TF = 3/100 = 0.03. Độ hiếm IDF = log10(1000/100) = log10(10) = 1. Vậy TF-IDF = 0.03 * 1 = 0.03. Với từ "và" có mặt khắp nơi, IDF = log10(1000/1000) = log10(1) = 0, nên TF-IDF = 0. TF-IDF hạ thấp các từ quá phổ biến và làm nổi từ mang tính phân biệt. Xem lại bài Xử lý ngôn ngữ tự nhiên.

Bài 11: cosine giữa hai vector

Hai vector đặc trưng là [3, 4][4, 3]. Tính độ tương tự cosine và nhận xét chúng giống nhau nhiều hay ít.

Gợi ý

Tích vô hướng 3*4 + 4*3 = 12 + 12 = 24. Độ dài mỗi vector sqrt(3^2 + 4^2) = sqrt(25) = 5. Cosine = 24 / (5*5) = 24/25 = 0.96, rất gần 1 nên hai vector chỉ chệch hướng nhẹ, coi như rất giống nhau. Xem lại bài Hệ khuyến nghị.

Bài 12: cộng tác hay theo nội dung

Một bộ phim vừa ra mắt, chưa có ai đánh giá, nhưng cùng thể loại và cùng đạo diễn với những phim mà người dùng từng thích. Muốn gợi ý phim này ngay, nên dùng lọc cộng tác hay lọc theo nội dung? Vì sao?

Gợi ý

Lọc cộng tác dựa vào đánh giá của những người dùng khác, mà phim mới chưa có đánh giá nào nên nó bó tay, đây là bài toán khởi đầu lạnh. Lọc theo nội dung so khớp đặc trưng phim (thể loại, đạo diễn) với sở thích đã biết của người dùng, nên gợi ý được ngay dù chưa ai chấm điểm. Xem lại bài Hệ khuyến nghị.

Bài 13: trọng số chú ý cao có phải là hiểu

Trong một transformer, từ "nó" có trọng số chú ý rất cao với từ "thảm". Có thể kết luận mô hình đã thực sự hiểu rằng "nó" chỉ cái thảm không? Vì sao?

Gợi ý

Không thể kết luận như vậy. Trọng số chú ý chỉ cho biết mô hình dồn bao nhiêu trọng số khi trộn thông tin giữa các vị trí, nó là một hệ số định tuyến trong tính toán, không phải bằng chứng của việc nắm nghĩa. Mô hình có thể đặt trọng số cao vì tương quan thống kê trong dữ liệu chứ không phải vì suy luận đại từ. Muốn biết mô hình có hiểu hay không phải kiểm bằng hành vi đầu ra trên các phép thử được thiết kế, không phải nhìn trọng số. Xem lại bài Transformer và mô hình ngôn ngữ lớn.

Bài 14: người dùng vừa đăng ký, gợi ý bằng cách nào

Một trang phim vừa có người dùng mới đăng ký. Người này chưa đánh giá phim nào. Hệ đang chạy lọc cộng tác theo người dùng. Hãy giải thích vì sao hệ không gợi ý được gì cho người này, và nêu hai cách xử lý.

Gợi ý

Lọc cộng tác theo người dùng hoạt động bằng cách tìm những người có gu tương đồng rồi gợi ý thứ họ đã thích. Muốn đo tương đồng thì phải tính cosine giữa vector đánh giá của hai người, mà cosine chỉ tính được trên những phim cả hai cùng đánh giá. Người mới có vector rỗng nên không có phim chung với bất kỳ ai, mọi độ tương đồng đều không xác định, hệ không chọn được người láng giềng nào để dựa vào. Đây là bài toán khởi đầu lạnh, và nó là hệ quả trực tiếp của cơ chế chứ không phải lỗi cài đặt.

Hai cách xử lý: một là chuyển sang lọc theo nội dung, tức so khớp đặc trưng phim (thể loại, đạo diễn, diễn viên) với một ít sở thích khai báo lúc đăng ký, cách này không cần dữ liệu của người khác nên chịu được người dùng mới. Hai là hỏi thẳng để lấy dấu vết đầu tiên, ví dụ mời chọn vài phim yêu thích hoặc chấm nhanh vài phim phổ biến, đủ để vector hết rỗng rồi mới bật lọc cộng tác. Nhiều hệ thật dùng cả hai, chạy nội dung trước rồi chuyển dần sang cộng tác khi người dùng để lại đủ dấu vết. Xem lại bài Hệ khuyến nghị.

Câu hỏi tự kiểm

Kiểm tra nhanh0/4 đúngchưa trả lời
  1. 1Bag-of-words biểu diễn một văn bản bằng cách nào?
  2. 2Bộ lọc dò cạnh cho giá trị lớn ở vị trí nào trên ảnh?
  3. 3Lọc cộng tác theo người dùng gợi ý dựa trên điều gì?
  4. 4Mô hình ngôn ngữ lớn về cơ bản được huấn luyện để làm gì?