Biểu diễn tương đồng: Shingling và MinHash

Với hoán vị chọn đều, hai tập trùng MinHash với xác suất bằng Jaccard; chữ ký ngắn nhờ đó ước lượng được Jaccard.

Giải thuật nền tảng của Khoa học dữ liệu

Học kỳ 1 · Năm học 2026–2027

Trường Đại học Công nghệ · Đại học Quốc gia Hà Nội

Tiên quyết và quy ước

Nhắc lại: xét mọi cặp cần \(\binom C2=C(C-1)/2\) phép so; \(C=10^6\) cho \(499\,999\,500\,000\) cặp (Bài 01).

Nhắc lại: Jaccard \(J(S,T)=|S\cap T|/|S\cup T|\) (Bài 01); ở đây viết \(\mathrm{SIM}(S,T)\).

Nhắc lại: \(\mathbb E\bigl[\sum_i X_i\bigr]=\sum_i\mathbb E[X_i]\), không cần độc lập (Bài 01).

Nhắc lại: biến chỉ báo có kỳ vọng \(p=\Pr[X=1]\), phương sai \(p(1-p)\).

Ký hiệu: \(C\) tài liệu (Bài 01 viết \(N\)) với các tập \(S_1,\ldots,S_C\).

Quy ước: vị trí, mã hàng đếm từ 0; dấu phẩy thập phân.

Mục tiêu học tập

  1. Tạo tập shingle của một chuỗi và tính Jaccard của hai tập.
  2. Chứng minh hai tập trùng MinHash với xác suất bằng Jaccard.
  3. Ước lượng Jaccard từ chữ ký; tính kỳ vọng và phương sai của ước lượng.
  4. Chạy phép quét hàng, nêu bất biến, đếm thời gian và bộ nhớ.
  5. Tách chi phí thành số cặp nhân chi phí một cặp; chỉ ra thừa số chữ ký giảm được.

Nội dung

  1. Tài liệu gần trùng và độ tương đồng Jaccard
  2. Shingling văn bản
  3. MinHash theo hoán vị
  4. Chữ ký MinHash
  1. Tính chữ ký bằng hàm băm
  2. Tổng kết và tự kiểm tra
  3. Bài tập vận dụng

Đọc trước: Leskovec, Rajaraman, Ullman, Mining of Massive Datasets (MMDS), ấn bản 3, Chương 3, §§3.1–3.3, tr. 73–91.

Vấn đề trung tâm

Nhu cầu: ước lượng Jaccard mọi cặp trong \(10^6\) tài liệu, vừa bộ nhớ.

  • Tập mã shingle gấp khoảng bốn lần tài liệu.
  • Hoán vị đều: MinHash trùng với xác suất bằng Jaccard.
  • Nhiều hoán vị: tỷ lệ trùng ước lượng Jaccard, không chệch.
  • Hàm băm thay hoán vị; quét hàng một lượt.
  • Bộ nhớ giảm; số cặp vẫn bậc hai.

Bài toán tài liệu gần trùng

Nhu cầu: nhận ra bản tin đăng lại có chèn thêm câu.

Bản tin gốc có hai câu; bản đăng lại giữ nguyên hai câu ấy và chèn thêm một câu ở giữa.

Đầu vào: kho văn bản lớn, như trang Web hoặc bản tin.

Đầu ra: các cặp tài liệu có nhiều văn bản chung.

Kết luận: so từng ký tự chỉ nhận ra hai tài liệu trùng hoàn toàn.

Ví dụ: kho một triệu tài liệu

Kho \(C=10^6\) tài liệu; giả định so một cặp mất 1 micro giây.

Tính số cặp và thời gian khi xét mọi cặp.

\[\binom C2=\frac{C(C-1)}2\]

Đại lượngGiá trị với \(C=10^6\)
Số cặp\(499\,999\,500\,000\approx5\cdot10^{11}\)
Thời gian\(\approx5\cdot10^{5}\) giây \(\approx5{,}8\) ngày

Kết luận: tổng công việc là số cặp nhân chi phí một cặp; biểu diễn ngắn giảm thừa số sau.

Độ tương đồng Jaccard

Biểu diễn mỗi tài liệu bằng một tập phần tử; phần văn bản chung ứng với giao của hai tập.

Hai phần tử chỉ thuộc S, ba phần tử thuộc cả hai tập, ba phần tử chỉ thuộc T.

\[\begin{aligned}|S\cap T|&=3\\|S\cup T|&=2+3+3=8\end{aligned}\]

Định nghĩa. Độ tương đồng Jaccard của hai tập hữu hạn \(S,T\) với \(S\cup T\ne\varnothing\) là

\[\mathrm{SIM}(S,T)=\frac{|S\cap T|}{|S\cup T|}=\frac38\]

Ý nghĩa: \(0\le\mathrm{SIM}(S,T)\le1\); bằng 0 khi hai tập rời nhau, bằng 1 khi \(S=T\).

Ứng dụng của độ tương đồng Jaccard

Mỗi đối tượng là một tập; ứng dụng quyết định phần tử của tập.

Ứng dụngPhần tử của tậpMức Jaccard có ý nghĩa
Văn bảnđoạn văn bảntrang phản chiếu: trên 90%
Khách hàngmặt hàng đã mua20% đã gợi ý sở thích gần nhau

Kết luận: ý nghĩa của một giá trị Jaccard phụ thuộc cách chọn phần tử và ứng dụng.

Câu hỏi về độ tương đồng Jaccard

Hình có ba phần tử thuộc giao và tám phần tử thuộc hợp.

Câu hỏi:

  1. Thêm vào \(T\) hai phần tử mới, không thuộc \(S\). Tính lại \(\mathrm{SIM}(S,T)\).
  2. Một lời giải lấy mẫu số \(5+6\) và cho \(3/11\). Chỉ ra đại lượng bị đếm sai.
  3. Hai văn bản cùng dài 1000 ký tự. Giải thích vì sao dữ kiện này chưa xác định Jaccard.

2.Shingling văn bản

Muốn đo Jaccard giữa hai văn bản, phải biến mỗi văn bản thành tập các đoạn ký tự liên tiếp.

Tập shingle · Thuật toán tạo tập · Độ dài shingle · Khoảng trắng · Băm shingle

Biểu diễn văn bản bằng tập shingle

Một \(k\)-shingle là đoạn \(k\) ký tự liên tiếp, nằm trong một cửa sổ dài \(k\).

Cửa sổ bắt đầu tại012345
abcdabdabbccddaabbd
abcxabdabbccxxaabbd

Quy ước: \(k=2\); ô viền đậm là cửa sổ chứa vị trí 3.

Kết luận: đổi một ký tự chỉ đổi nhiều nhất \(k\) cửa sổ.

Ví dụ: tập 2-shingle của abcdabd

\[D=\texttt{abcdabd},\qquad k=2\]

Liệt kê các cửa sổ và tập các shingle phân biệt.

Sáu cửa sổ ab, bc, cd, da, ab, bd tạo năm shingle phân biệt.

\[S_2(D)=\{\texttt{ab},\texttt{bc},\texttt{cd},\texttt{da},\texttt{bd}\}\]

Kết luận: sáu cửa sổ cho năm phần tử vì ab lặp lại.

Định nghĩa tập shingle

Định nghĩa. Với chuỗi \(D\) dài \(\ell\) và số nguyên \(k\ge1\), tập \(k\)-shingle của \(D\) là

\[S_k(D)=\{D[i:i+k]:0\le i\le\ell-k\}\]

\(D[i:i+k]\) chứa các vị trí \(i,\ldots,i+k-1\); chỉ số bắt đầu từ \(0\).

Với \(D=\texttt{abcdabd}\): \(\ell=7\), \(k=2\), \(i=0,\ldots,5\); \(D[3:5]=\texttt{da}\).

Trường hợp biên: nếu \(\ell<k\), không có cửa sổ hợp lệ và \(S_k(D)=\varnothing\).

Thuật toán: tạo tập shingle

Đầu vào: chuỗi \(D\) dài \(\ell\); số nguyên \(k\ge1\).

Đầu ra: \(S_k(D)\).

S ← ∅
for i = 0, …, ℓ − k:
    chèn D[i:i+k] vào S
return S

Bất biến: sau \(t\) lần lặp,

\[S=\{D[j:j+k]:0\le j<t\}\]

Điều kiện dừng: sau \(w=\max(0,\ell-k+1)\) lần lặp.

Mỗi cửa sổ: tạo và chèn vào tập băm khóa dài \(k\) tốn \(O(k)\) kỳ vọng; tổng \(O(1+wk)\) kỳ vọng.

Chọn độ dài shingle

Với \(k=1\), hầu hết trang Web chứa hầu hết ký tự thông dụng, nên gần như mọi cặp có Jaccard cao.

26 chữ cái và dấu cách cho \(27^5=14\,348\,907\) chuỗi dài 5, nhiều hơn một thư điện tử.

Tài liệu\(k\) theo nguồn
Thư điện tử\(k=5\)
Tài liệu dài\(k=9\)

Kết luận: chọn \(k\) để shingle ít gặp trong một tài liệu; 5, 9 là quy tắc kinh nghiệm.

Xử lý khoảng trắng

Hai câu khác nội dung: …ready for touch down, …scored a touchdown.

Quy ước: \(k=9\); mỗi dãy ký tự trắng thành một dấu cách, và dấu cách là một ký tự.

ChuỗiĐộ dàiCác cửa sổ
touch down10touch dow, ouch down
touchdown9touchdown

Kết luận: nếu xóa hết khoảng trắng, hai câu khác nội dung chung shingle touchdown.

Băm shingle

Băm mỗi 9-shingle vào \(2^{32}\) thùng; số thùng 4 byte thay chuỗi.

Phần tửDung lượngSố giá trị khả dĩ
4-shingle4 byte\(\approx20^4=160\,000\) (20 ký tự thông dụng)
Mã của 9-shingle4 bytegần \(2^{32}\)

Lưu ý: va chạm (collision) là hai shingle khác nhau cùng mã; Jaccard có thể đổi.

Kết luận: cùng 4 byte, mã 9-shingle phân biệt tài liệu tốt hơn 4-shingle.

Câu hỏi về shingling

Câu hỏi:

  1. Với abcdabd và \(k=3\), liệt kê các cửa sổ và tập \(S_3(D)\).
  2. Chuỗi abcdabc chỉ khác abcdabd ở ký tự cuối. Với \(k=2\), tính Jaccard của hai tập shingle.
  3. Tài liệu 50.000 ký tự, \(k=9\), mã 4 byte, không cửa sổ nào trùng mã: tính số mã và số byte.

3.MinHash theo hoán vị

Muốn thay mỗi tập bằng một đại lượng ngắn, phải tìm giá trị mà xác suất trùng bằng Jaccard.

Ma trận đặc trưng · Hoán vị hàng · Ba loại hàng · Xác suất trùng

Kích thước tập shingle

Nhu cầu: thay mỗi tập bằng chữ ký dài cố định, vẫn ước lượng được Jaccard.

\[|S_k(D)|\le w=\max(0,\ell-k+1)\]

Băm làm mỗi phần tử còn 4 byte; số phần tử vẫn gần bằng số ký tự.

Biểu diễn trong ví dụ nguồnDung lượng
Tài liệu50.000 byte
Tập mã shingle, mỗi mã 4 byteKhoảng 200.000 byte

Ma trận đặc trưng của bốn tập

Phần tử / \(r\)\(S_1\)\(S_2\)\(S_3\)\(S_4\)
a / 01001
b / 10010
c / 20101
d / 31011
e / 40010

\(U=\{a,b,c,d,e\}\); \(R=5\) hàng, \(C=4\) cột.

Định nghĩa. Ma trận đặc trưng (characteristic matrix) là \(M\) với \(M(r,c)=1\) khi phần tử hàng \(r\) thuộc \(S_c\), \(0\) nếu không.

Lưu ý: dữ liệu thực rất thưa; chỉ lưu vị trí các ô 1.

Kết luận: hàng là phần tử, cột là tập; cột \(S_1\) có 1 ở hàng \(a\), \(d\).

Ý tưởng của MinHash

Nhu cầu: đại diện mỗi tập bằng một phần tử, chọn theo cùng quy tắc cho mọi tập.

S1 và S4 dùng cùng thứ tự b,e,a,d,c và cùng chọn a.
  • Xếp \(U\) theo một thứ tự chung cho mọi tập.
  • Mỗi tập không rỗng giữ phần tử đứng đầu của nó.

Kết luận: hai tập chọn cùng phần tử khi và chỉ khi phần tử đầu của hợp thuộc giao.

Ví dụ: bốn tập đặc trưng, một hoán vị

Thứ tự hàng \((b,e,a,d,c)\); xác định ô 1 đầu tiên của mỗi cột.

Thứ tự hàng\(S_1\)\(S_2\)\(S_3\)\(S_4\)
b0010
e0010
a1001
d1011
c0101
Đại lượng\(S_1\)\(S_2\)\(S_3\)\(S_4\)
Định danhacba
Vị trí (từ 1)3513

Kết luận: \(S_1\), \(S_4\) cùng chọn \(a\); giá trị MinHash là định danh, không là vị trí.

Định nghĩa MinHash

Giả thiết: \(U\) hữu hạn, \(S\subseteq U\), \(S\ne\varnothing\); \(\pi\) là một hoán vị của \(U\).

Định nghĩa. \(\operatorname{rank}_\pi(u)\) là vị trí, đếm từ 1, của \(u\) trong \(\pi\); MinHash của \(S\) là

\[h_\pi(S)=\arg\min_{u\in S}\operatorname{rank}_\pi(u)\]

Với \(\pi=(b,e,a,d,c)\): \(h_\pi(S_1)=a\), còn \(\operatorname{rank}_\pi(a)=3\).

Lưu ý: cùng \(\pi\) cho mọi tập; các hạng khác nhau nên phần tử đạt hạng nhỏ nhất là duy nhất.

Ba loại hàng của một cặp cột

Với cặp S1,S4: a,d thuộc giao; c thuộc riêng; b,e ngoài hợp.
Loại hàngHai cột
\(X\)\((1,1)\)
\(Y\)\((1,0)\) hoặc \((0,1)\)
\(Z\)\((0,0)\)

\(x\), \(y\) là số hàng loại \(X\), \(Y\): \(x=|S\cap T|\), \(x+y=|S\cup T|\).

Ví dụ. Cặp \(S_1,S_4\): \(x=2\), \(y=1\).

Định lý xác suất trùng MinHash

Định lý. \(S,T\subseteq U\) không rỗng; cùng \(\pi\) chọn đều trong \(R!\) hoán vị. Khi đó

\[\Pr[h_\pi(S)=h_\pi(T)]=\mathrm{SIM}(S,T)\]

Chứng minh. Phần tử đầu \(u\) của \(S\cup T\) theo \(\pi\) phân bố đều trên \(S\cup T\).

Hai MinHash trùng khi và chỉ khi \(u\in S\cap T\), nên

\[\Pr[h_\pi(S)=h_\pi(T)]=\Pr[u\in S\cap T]=\frac{x}{x+y}\]

Câu hỏi về MinHash

\[S_1=\{a,d\},\qquad S_4=\{a,c,d\},\qquad U=\{a,b,c,d,e\}\]

Câu hỏi:

  1. Nêu một thứ tự của \(U\) làm \(h_\pi(S_1)\ne h_\pi(S_4)\); chỉ ra phần tử đứng đầu hợp.
  2. Đặt \(S_1'=S_1\cup\{e\}\). Tính \(\Pr[h_\pi(S_1')=h_\pi(S_4)]\) khi \(\pi\) chọn đều.
  3. Giải thích vì sao vị trí của \(c\) không ảnh hưởng tới biến cố \(h_\pi(S_1)=h_\pi(S_3)\), với \(S_3=\{b,d,e\}\).

4.Chữ ký MinHash

Muốn ước lượng Jaccard đủ chính xác, phải lặp MinHash với nhiều hoán vị và đếm tỷ lệ trùng.

Ma trận chữ ký · Tỷ lệ trùng · Kỳ vọng · Phương sai · Chi phí so sánh

Ví dụ: bốn tập đặc trưng, hai thứ tự

Nhu cầu: một MinHash chỉ cho kết quả trùng hoặc không trùng.

\(S_1=\{a,d\}\), \(S_2=\{c\}\), \(S_3=\{b,d,e\}\), \(S_4=\{a,c,d\}\); xác định MinHash theo hai thứ tự.

Thứ tự\(S_1\)\(S_2\)\(S_3\)\(S_4\)
\(\pi_1=(e,a,b,c,d)\)acea
\(\pi_2=(d,a,c,e,b)\)dcdd

Kết luận: \(S_1\), \(S_4\) trùng ở cả hai thứ tự, trong khi \(\mathrm{SIM}(S_1,S_4)=2/3\).

Định nghĩa chữ ký MinHash

Định nghĩa. Với \(\pi_1,\ldots,\pi_n\) dùng chung cho mọi tập, chữ ký MinHash (MinHash signature) của \(S\) là

\[\sigma(S)=\bigl(h_{\pi_1}(S),\ldots,h_{\pi_n}(S)\bigr)^{\mathsf T}\]

Ma trậnHàngCột
Đặc trưng\(R\) phần tử\(C\) tập
Chữ ký\(n\) phép thử\(C\) tập

Giả thiết: mỗi hoán vị được chọn đều; cùng bộ hoán vị cho mọi tập.

Ước lượng Jaccard từ chữ ký

Định nghĩa. Ước lượng Jaccard là tỷ lệ tọa độ trùng:

\[\widehat{\mathrm{SIM}}(S,T)=\frac1n\sum_{i=1}^n\mathbf1\{h_{\pi_i}(S)=h_{\pi_i}(T)\}\]

\(\mathbf1\{E\}\) là 1 khi \(E\) đúng, là 0 khi sai; so cùng chỉ số \(i\).

\(S_2=\{c\}\), \(S_4=\{a,c,d\}\)

\(\pi_1=(e,a,b,c,d)\)

\(\pi_2=(d,a,c,e,b)\)

Tọa độ\(\sigma(S_2)\)\(\sigma(S_4)\)Chỉ báo
1ca\(c\ne a\Rightarrow0\)
2cd\(c\ne d\Rightarrow0\)

\[\widehat{\mathrm{SIM}}(S_2,S_4)=\frac{0+0}{2}=0\ne\frac13=\mathrm{SIM}(S_2,S_4)\]

Kỳ vọng của ước lượng

Đặt \(s=\mathrm{SIM}(S,T)\) và \(X_i=\mathbf1\{h_{\pi_i}(S)=h_{\pi_i}(T)\}\).

Mệnh đề. Khi mỗi \(\pi_i\) được chọn đều, định lý MinHash cho:

\[\mathbb E[X_i]=\Pr[X_i=1]=s\]

Số tọa độ trùng

\[\mathbb E\!\left[\sum_{i=1}^nX_i\right]=ns\]

Tỷ lệ tọa độ trùng

\[\mathbb E[\widehat{\mathrm{SIM}}]=s\]

Kết luận: ước lượng không chệch; tính tuyến tính của kỳ vọng không cần các hoán vị độc lập.

Phương sai của ước lượng

Mệnh đề. Thêm giả thiết các hoán vị độc lập. Khi đó \(\operatorname{Var}(\widehat{\mathrm{SIM}})=s(1-s)/n\).

Chứng minh. Các \(X_i\) là biến Bernoulli độc lập, \(\operatorname{Var}(X_i)=s(1-s)\):

\[\begin{aligned}\operatorname{Var}(\widehat{\mathrm{SIM}})&=\frac1{n^2}\operatorname{Var}\!\left(\sum_{i=1}^nX_i\right)\\&=\frac1{n^2}\sum_{i=1}^n\operatorname{Var}(X_i)=\frac{s(1-s)}n.\end{aligned}\]

Ý nghĩa: độ lệch chuẩn \(\sqrt{s(1-s)/n}\); giảm một nửa cần \(n\) gấp bốn.

Chi phí: so sánh chữ ký

Mô hình: mỗi thành phần vừa một từ máy; một phép so bằng tốn \(O(1)\).

BướcSố lầnChi phí mỗi lầnĐóng góp
So một cặp chữ ký\(1\)\(n\) phép so\(\Theta(n)\)
So mọi cặp trong kho\(C(C-1)/2\)\(n\) phép so\(nC(C-1)/2\) phép so

Kết luận: chữ ký giảm chi phí mỗi cặp; số cặp vẫn tăng bậc hai.

Câu hỏi về chữ ký MinHash

Cặp \(S_1,S_4\) có \(s=2/3\). Các hoán vị chọn đều và độc lập.

Câu hỏi:

  1. Với \(n=100\), tính kỳ vọng số tọa độ trùng.
  2. Với \(n=100\), tính độ lệch chuẩn của \(\widehat{\mathrm{SIM}}(S_1,S_4)\).
  3. Xác định \(n\) nhỏ nhất để độ lệch chuẩn không vượt \(0{,}02\); nêu số phép so bằng cho cặp này.

5.Tính chữ ký bằng hàm băm

Muốn tính chữ ký khi có hàng triệu hàng, phải thay hoán vị bằng hàm băm và quét mỗi hàng một lần.

Hàm băm hàng · Quét hàng · Tính đúng · Chi phí và bộ nhớ · Điều kiện hàm băm

Mô phỏng hoán vị bằng hàm băm

Nhu cầu: sắp lại hàng triệu hàng theo \(n\) hoán vị tốn nhiều thời gian.

Tương tự MinHash theo hoán vị, nhưng thứ tự là thứ tự tăng của hàm băm \(f_i(r)\) trên mã hàng.

Bảng f1 của năm hàng a đến e cho 1, 2, 3, 4, 0; sắp theo f1 tăng được thứ tự e, a, b, c, d. Trong S1 = {a, d}, a đứng đầu và có giá trị băm nhỏ nhất 1.

Kết luận: khi \(f_i\) không va chạm, phần tử đầu là hàng có \(f_i(r)\) nhỏ nhất; không cần sắp xếp.

Đặc tả bài toán tính chữ ký

Đầu vào: \(M\in\{0,1\}^{R\times C}\), hàng \(r=0,\ldots,R-1\), cột \(c=1,\ldots,C\).

Các hàm \(f_i:\{0,\ldots,R-1\}\to V\), \(i=1,\ldots,n\), dùng chung cho mọi cột; \(V\) hữu hạn, có thứ tự toàn phần.

Đầu ra: ma trận chữ ký (signature matrix) \(\mathrm{SIG}\) cỡ \(n\times C\) với

\[\mathrm{SIG}(i,c)=\min\bigl(\{f_i(r):M(r,c)=1\}\cup\{+\infty\}\bigr)\]

Quy ước: \(+\infty\) lớn hơn mọi giá trị của \(V\); cột rỗng nhận \(+\infty\).

Ví dụ: bốn tập đặc trưng, hai hàm băm hàng

\(f_1(r)=(r+1)\bmod5\); \(f_2(r)=(3r+1)\bmod5\). Tính hai giá trị băm của mỗi hàng.

Phần tử / \(r\)Các cột có 1\(f_1(r)\)\(f_2(r)\)
a / 01, 411
b / 1324
c / 22, 432
d / 31, 3, 440
e / 4303

Kết luận: sắp tăng, \(f_1\) cho \((e,a,b,c,d)\), \(f_2\) cho \((d,a,c,e,b)\), đúng \(\pi_1\), \(\pi_2\).

Ví dụ: bốn tập đặc trưng, khởi tạo và hàng 0

Khởi tạo

Thành phần\(S_1\)\(S_2\)\(S_3\)\(S_4\)
\(f_1\)\(+\infty\)\(+\infty\)\(+\infty\)\(+\infty\)
\(f_2\)\(+\infty\)\(+\infty\)\(+\infty\)\(+\infty\)

Sau hàng \(r=0\)

Thành phần\(S_1\)\(S_2\)\(S_3\)\(S_4\)
\(f_1\)1\(+\infty\)\(+\infty\)1
\(f_2\)1\(+\infty\)\(+\infty\)1

Hàng \(0\): \(f_1(0)=f_2(0)=1\); các cột có \(1\) là \(1,4\).

\[\min(+\infty,1)=1\]

Kết luận: chỉ cột 1 và 4 chứa \(a\) nên được cập nhật; ô viền đậm là giá trị vừa giảm.

Ví dụ: bốn tập đặc trưng, hàng 1 và 2

\(r=1\): cột \(3\), giá trị băm \((2,4)\); \(r=2\): cột \(2,4\), giá trị băm \((3,2)\).

Trạng thái\(S_1\)\(S_2\)\(S_3\)\(S_4\)
Sau \(r=0\)\((1,1)\)\((\infty,\infty)\)\((\infty,\infty)\)\((1,1)\)
Sau \(r=1\)\((1,1)\)\((\infty,\infty)\)\((\underline2,\underline4)\)\((1,1)\)
Sau \(r=2\)\((1,1)\)\((\underline3,\underline2)\)\((2,4)\)\((1,1)\)

Quy ước: mỗi ô ghi hai thành phần; gạch dưới là giá trị vừa giảm; \(\infty\) viết gọn \(+\infty\).

Kết luận: ở hàng 2, cột 4 vẫn thực hiện hai phép min dù không ô nào đổi.

Ví dụ: bốn tập đặc trưng, hàng 3 và 4

\(r=3\): \((f_1(3),f_2(3))=(4,0)\), cột \(1,3,4\); \(r=4\): \((f_1(4),f_2(4))=(0,3)\), chỉ cột \(3\).

Trạng thái\(S_1\)\(S_2\)\(S_3\)\(S_4\)
Sau \(r=2\)\((1,1)\)\((3,2)\)\((2,4)\)\((1,1)\)
Sau \(r=3\)\((1,\underline0)\)\((3,2)\)\((2,\underline0)\)\((1,\underline0)\)
Sau \(r=4\)\((1,0)\)\((3,2)\)\((\underline0,0)\)\((1,0)\)

Quy ước: gạch dưới là thành phần vừa giảm; các thành phần khác giữ nguyên.

Kết luận: chữ ký của \(S_1\) và \(S_4\) là \((1,0)^{\mathsf T}\), ứng với chữ ký định danh \((a,d)^{\mathsf T}\).

Thuật toán: quét hàng

Đầu vào: ma trận \(M\) cỡ \(R\times C\); các hàm \(f_1,\ldots,f_n\) trên mã hàng.

Đầu ra: \(\mathrm{SIG}\) cỡ \(n\times C\) theo đặc tả.

SIG(i, c) ← +∞ với mọi i, c
for r = 0, …, R − 1:
    vᵢ ← fᵢ(r) với i = 1, …, n
    for mỗi c có M(r, c) = 1:
        for i = 1, …, n:
            SIG(i, c) ← min(SIG(i, c), vᵢ)
return SIG

Mỗi ô 1 \(M(r,c)\) cập nhật \(\mathrm{SIG}(i,c)\) bằng một phép min với \(f_i(r)\).

Điều kiện dừng: sau \(R\) hàng; mỗi \(f_i(r)\) được tính một lần.

Tính đúng: quét hàng

Bất biến: với \(A\) là tập hàng đã quét, mọi \(i,c\) thỏa

\[\mathrm{SIG}(i,c)=\min\bigl(\{f_i(r):r\in A,\ M(r,c)=1\}\cup\{+\infty\}\bigr)\]

  1. Khởi tạo: \(A=\varnothing\), chỉ có ứng viên \(+\infty\).
  2. Duy trì: nếu \(M(r,c)=0\), tập ứng viên không đổi; nếu \(M(r,c)=1\), cực tiểu mới bằng \(\min(\mathrm{SIG}(i,c),f_i(r))\).
  3. Kết thúc: \(A\) chứa đủ \(R\) hàng, thu được đặc tả đầu ra.

Chi phí: tính chữ ký

Mô hình: ghi ô, tính hàm, kiểm ô, lấy min tốn một đơn vị mỗi lần; \(L\) là số ô 1.

BướcSố lầnChi phí mỗi lầnĐóng góp
Khởi tạo\(nC\)\(1\)\(nC\)
Tính băm\(nR\)\(1\)\(nR\)
Kiểm ô (ma trận đặc)\(RC\)\(1\)\(RC\)
Lấy min\(nL\)\(1\)\(nL\)

Ma trận đặc: \(\Theta(nC+nR+RC+nL)\); danh sách cột có 1 (đã có sẵn): \(\Theta(nC+nR+nL)\).

Chi phí: tính chữ ký, bốn tập đặc trưng

Mô hình: chỉ đếm bốn loại thao tác của bảng đếm, mỗi lần một đơn vị; \(R=5\), \(C=4\), \(n=2\), \(L=9\).

BướcSố lầnChi phí mỗi lầnĐóng góp
Khởi tạo\(nC=2\cdot4\)\(1\)\(8\)
Tính băm\(nR=2\cdot5\)\(1\)\(10\)
Kiểm ô (ma trận đặc)\(RC=5\cdot4\)\(1\)\(20\)
Lấy min\(nL=2\cdot9\)\(1\)\(18\)

Kết luận: ma trận đặc cần 56 thao tác; danh sách cột có 1 cần 36 thao tác.

Chi phí: bộ nhớ của chữ ký

Mô hình: mỗi giá trị chữ ký là một từ máy 4 byte; chưa gồm dữ liệu đầu vào.

Phần lưu trữSố từ máy
Chữ ký của \(C\) tập\(\Theta(nC)\)
Các giá trị \(v_1,\ldots,v_n\) của một hàng\(\Theta(n)\)

Ví dụ. Tài liệu 50.000 byte, tập mã khoảng 200.000 byte; chữ ký \(n=250\) thành phần:

\[200.000\text{ byte}\ \longrightarrow\ 250\cdot4=1.000\text{ byte}\]

Kết luận: theo MMDS, chữ ký 1.000 byte thường cho ước lượng lệch không quá vài phần trăm.

Điều kiện đối với hàm băm hàng

  • Va chạm có thể làm hai hàng khác nhau có cùng giá trị.
  • Với hệ số nguyên \(a,b\), hàm \((ar+b)\bmod R\) là hoán vị khi và chỉ khi \(\gcd(a,R)=1\).
  • Đẳng thức xác suất đã chứng minh dùng phân phối chọn đều hoán vị.

Kết luận: song ánh của từng hàm không bảo đảm phân phối chọn đều trên mọi hoán vị.

Câu hỏi về tính chữ ký

Thành phần\(S_1\)\(S_2\)\(S_3\)\(S_4\)
\(f_1\)1301
\(f_2\)0200

\(R=5\), \(C=4\), \(n=2\), \(L=9\).

Câu hỏi:

  1. Từ bảng, tính ước lượng của cặp \(S_3,S_4\) và Jaccard thật của cặp này.
  2. Quét ngược \(r=4,3,\ldots,0\). Ghi trạng thái sau \(r=4\) và \(r=3\); so sánh ma trận cuối.
  3. Thêm một hàm thứ ba (\(n=3\)), dùng danh sách cột có 1. Đếm số lần khởi tạo, tính băm và lấy min.

6.Tổng kết và tự kiểm tra

Muốn dùng chữ ký cho kho một triệu tài liệu, phải biết bộ nhớ đã giảm và số cặp vẫn còn bậc hai.

Giả thiết · Thuật toán và chi phí · Vấn đề trung tâm · Câu hỏi tự kiểm tra · Tài liệu đọc

Kết quả và giả thiết không được bỏ

Kết quảGiả thiết không được bỏCông thức hoặc thuật toán
Jaccardtập hữu hạn, \(S\cup T\ne\varnothing\)\(\mathrm{SIM}(S,T)=|S\cap T|/|S\cup T|\)
Tập mã shinglecùng quy ước khoảng trắng; mã không va chạm\(\mathrm{SIM}\) trên tập mã bằng \(\mathrm{SIM}\) trên tập shingle
Định lý MinHash\(S,T\) không rỗng; cùng \(\pi\), chọn đều\(\Pr[h_\pi(S)=h_\pi(T)]=\mathrm{SIM}(S,T)\)
Kỳ vọng ước lượngmỗi \(\pi_i\) chọn đều\(\mathbb E[\widehat{\mathrm{SIM}}]=s\), với \(s=\mathrm{SIM}(S,T)\)
Phương sai ước lượngthêm: các \(\pi_i\) độc lập\(\operatorname{Var}(\widehat{\mathrm{SIM}})=s(1-s)/n\)
Phép quét hàng\(f_i\) dùng chung mọi cột; ước lượng cần thứ tự của \(f_i\) là hoán vị đều\(\mathrm{SIG}(i,c)=\min\{f_i(r):M(r,c)=1\}\), cột rỗng \(+\infty\)

Thuật toán, bảo đảm và chi phí

Thuật toánĐầu vàoBảo đảmChi phí
Tạo tập shinglechuỗi \(D\) dài \(\ell\); \(k\ge1\)trả đúng \(S_k(D)\); \(|S_k(D)|\le w\)\(O(1+wk)\) kỳ vọng
So hai chữ kýhai chữ ký dài \(n\)ước lượng không chệch khi hoán vị đều\(\Theta(n)\)
Quét hàngdanh sách cột có 1; \(f_1,\ldots,f_n\)\(\mathrm{SIG}\) đúng đặc tả, kể cả cột rỗng\(\Theta(nC+nR+nL)\); bộ nhớ \(\Theta(nC)\)
So mọi cặp chữ ký\(C\) chữ ký dài \(n\)đủ mọi cặp\(nC(C-1)/2\) phép so

Câu trả lời cho vấn đề trung tâm

Kho \(C=10^6\) tài liệu; chữ ký \(n=250\) thành phần, mỗi thành phần 4 byte.

  • Mã shingle 4 byte: tài liệu 50.000 byte cho tập mã khoảng 200.000 byte; va chạm có thể đổi tập.
  • Hoán vị đều, dùng chung, tập không rỗng: xác suất trùng bằng Jaccard, như \(2/3\) của \(S_1,S_4\).
  • Mỗi \(\pi_i\) đều: không chệch; thêm độc lập, \(n=250\): độ lệch chuẩn \(\le0{,}032\).
  • Thứ tự của \(f_i\) là hoán vị đều: một lượt quét danh sách cột có 1, \(\Theta(nC+nR+nL)\).
  • Chữ ký cả kho \(10^6\cdot1.000\) byte \(\approx\) 1 GB; vẫn \(499\,999\,500\,000\) cặp, gần 5,8 ngày.

Câu hỏi tự kiểm tra

Câu hỏi: trả lời và nêu kết quả đã dùng.

  1. Với \(k=2\), tính Jaccard của tập shingle của abab và baba.
  2. Nêu điều kiện để hai tài liệu không chung shingle vẫn có Jaccard dương trên tập mã.
  3. \(|S\cap T|=3\), \(|S\cup T|=12\), \(n=200\) hoán vị đều: tính xác suất trùng và kỳ vọng số tọa độ trùng.

Câu hỏi tự kiểm tra

Câu hỏi: trả lời và nêu kết quả đã dùng.

  1. Dữ kiện câu 3, các hoán vị độc lập: tính độ lệch chuẩn của ước lượng.
  2. \(f(r)=(4r+1)\bmod6\), tập hàng \(\{0,3\}\): tính thành phần chữ ký; xác định \(f\) có là hoán vị không.
  3. \(C=10^4\), \(n=200\): đếm phép so bằng khi so mọi cặp; xác định thừa số chữ ký không giảm được.

Nguồn và tài liệu đọc

Nguồn: Leskovec, Rajaraman, Ullman (2020), Mining of Massive Datasets, ấn bản 3, Chương 3, §§3.1–3.3, tr. 73–91; Ví dụ 3.10.

Sách và trang chiếu của các tác giả: http://www.mmds.org.

Nguồn: Stanford CS246 (2026), Leskovec, bài giảng LSH, phần shingling và MinHash.

Ghi chú bài giảng

Bài 06 chọn cặp ứng viên từ chữ ký bằng băm nhạy cảm theo tính cục bộ (locality-sensitive hashing, LSH).

7.Bài tập vận dụng

Muốn kiểm các định nghĩa và định lý của bài, phải giải lại năm bài của giáo trình.

Bài 3.1.1 · Bài 3.2.3 · Bài 3.3.1 · Bài 3.3.2 · Bài 3.3.3

Bài tập: Jaccard của ba tập

\[S_A=\{1,2,3,4\},\quad S_B=\{2,3,5,7\},\quad S_C=\{2,4,6\}\]

Câu hỏi: tính độ tương đồng Jaccard của từng cặp tập.

Lập bảng ba cặp gồm giao, hợp và tỷ số.

Nguồn: MMDS, Bài 3.1.1, tr. 78.

Bài tập: số shingle lớn nhất

Tài liệu dài \(\ell\) byte; bảng chữ cái đủ lớn để có ít nhất \(\ell\) chuỗi độ dài \(k\).

Câu hỏi: xác định số \(k\)-shingle lớn nhất tài liệu có thể có.

Quy ước: mỗi ký tự chiếm một byte.

Nêu công thức theo \(\ell\), \(k\) và lập luận theo vị trí cửa sổ.

Nguồn: MMDS, Bài 3.2.3, tr. 81.

Bài tập: ma trận đặc trưng (a)

Phần tử / \(r\)\(S_1\)\(S_2\)\(S_3\)\(S_4\)
a / 01001
b / 10010
c / 20101
d / 31011
e / 40010

Câu hỏi: tính Jaccard của mọi cặp cột.

Lập bảng sáu cặp 12, 13, 14, 23, 24, 34 với kích thước giao, hợp và Jaccard.

Nguồn: MMDS, Bài 3.3.1(a), tr. 90; Hình 3.2.

Bài tập: ma trận đặc trưng (b)

Phần tử / \(r\)\(S_1\)\(S_2\)\(S_3\)\(S_4\)
a / 01001
b / 10010
c / 20101
d / 31011
e / 40010

Câu hỏi: với mỗi cặp cột, tính tỷ lệ hoán vị làm hai MinHash bằng nhau.

Xét đủ 120 hoán vị của năm hàng.

Lập bảng số hoán vị trùng và tỷ lệ của sáu cặp; đối chiếu ý (a).

Nguồn: MMDS, Bài 3.3.1(b), tr. 90.

Bài tập: hai hàng chữ ký bổ sung

Phần tử / \(r\)\(S_1\)\(S_2\)\(S_3\)\(S_4\)
a / 01001
b / 10010
c / 20101
d / 31011
e / 40010

\[\begin{aligned}f_3(r)&=(2r+4)\bmod5\\f_4(r)&=(3r-1)\bmod5\end{aligned}\]

Câu hỏi: tính thêm hai hàng chữ ký cho bốn tập đặc trưng.

Lập bảng giá trị hai hàm và hai hàng chữ ký.

Nguồn: MMDS, Bài 3.3.2(a, b), tr. 90; Hình 3.4.

Bài tập: chữ ký với ba hàm modulo 6 (a, b)

\(r\)\(S_1\)\(S_2\)\(S_3\)\(S_4\)
00101
10100
21001
30010
40011
51000

\[\begin{aligned}f_1(r)&=(2r+1)\bmod6\\f_2(r)&=(3r+2)\bmod6\\f_3(r)&=(5r+2)\bmod6\end{aligned}\]

Câu hỏi: tính chữ ký mỗi cột; xác định hàm nào là hoán vị.

Lập bảng giá trị, ma trận chữ ký và kết luận về hoán vị.

Nguồn: MMDS, Bài 3.3.3(a, b), tr. 90–91; Hình 3.6.

Bài tập: chữ ký với ba hàm modulo 6 (c)

\(r\)\(S_1\)\(S_2\)\(S_3\)\(S_4\)
00101
10100
21001
30010
40011
51000

Câu hỏi: dùng chữ ký đã tính ở ý (a).

So sánh Jaccard ước lượng với giá trị đúng của sáu cặp 12, 13, 14, 23, 24, 34.

Lập bảng gồm cặp, ước lượng, Jaccard thật và sai lệch tuyệt đối.

Nguồn: MMDS, Bài 3.3.3(c), tr. 90–91.