Trường Đại học Công nghệ thông tinChương trình đào tạo thạc sĩ CNTT qua mạng Lớp Cao học khóa 6 Bộ môn: Khai phá dữ liệu Bài tiểu luận: Thuật toán K-Means và ứng dụng gom cụm tài liệu vă
Trang 1Trường Đại học Công nghệ thông tin
Chương trình đào tạo thạc sĩ CNTT qua mạng
Lớp Cao học khóa 6
Bộ môn: Khai phá dữ liệu
Bài tiểu luận:
Thuật toán K-Means và ứng dụng gom cụm
tài liệu văn bản Tiếng Việt.
Giáo viên hướng dẫn: PGS.TS Đỗ Phúc
Học viên: Lê Hoài Nam
MSHV: CH1101106
Tháng 11 / 2012
Trang 2M c l c ục lục ục lục
I Giới thiệu chung 3
1 Bài toán gom cụm 3
2 Thuật toán K-Means 4
3 Ví dụ minh họa thuật toán K-Mean: 5
II Chương trình gom cụm văn bản tiếng Việt 9
1 Đặt bài toán 9
2 Cài đặt chương trình bằng thuật toán K-Means 9
a Từ điển key words và stop words 9
b Vector hóa văn bản 10
c Cài đặt thuật toán K-Means 10
3 Ứng dụng demo 12
4 Đánh giá ứng dụng demo 15
III Kết luận và hướng phát triển 15
1 Kết luận 15
2 Hướng phát triển 15
IV Tài liệu tham khảo 16
Trang 3I Giới thiệu chung
1 Bài toán gom cụm
Phân cụm là kỹ thuật rất quan trọng trong khai phá dữ liệu, nó thuộc lớp
các phương pháp Unsupervised Learning trong Machine Learning Có rất
nhiều định nghĩa khác nhau về kỹ thuật này, nhưng về bản chất ta có thể hiểu phân cụm là các qui trình tìm cách nhóm các đối tượng đã cho vào các cụm (clusters), sao cho các đối tượng trong cùng 1 cụm tương tự (similar) nhau và các đối tượng khác cụm thì không tương tự (Dissimilar) nhau Mục đích của phân cụm là tìm ra bản chất bên trong các nhóm của dữ liệu Các thuật toán phân cụm (Clustering Algorithms) đều sinh ra các cụm (clusters) Tuy nhiên, không có tiêu chí nào là được xem là tốt nhất để đánh hiệu của của phân tích phân cụm, điều này phụ thuộc vào mục đích của phân cụm như: data reduction, “natural clusters”, “useful” clusters, outlier
detection
Kỹ thuật phân cụm có thể áp dụng trong rất nhiều lĩnh vực như:
- Marketing: Xác định các nhóm khách hàng (khách hàng tiềm năng,
khách hàng giá trị, phân loại và dự đoán hành vi khách hàng,…) sử dụng sản phẩm hay dịch vụ của công ty để giúp công ty có chiến lược kinh doanh hiệu quả hơn;
- Biology: Phận nhóm động vật và thực vật dựa vào các thuộc tính của
chúng;
- Libraries: Theo dõi độc giả, sách, dự đoán nhu cầu của độc giả…;
- Insurance, Finance: Phân nhóm các đối tượng sử dụng bảo hiểm và
các dịch vụ tài chính, dự đoán xu hướng (trend) của khách hàng, phát hiện gian lận tài chính (identifying frauds);
Trang 4- WWW: Phân loại tài liệu (document classification); phân loại người
dùng web (clustering weblog);…
2 Thuật toán K-Means
K-Means là thuật toán rất quan trọng và được sử dụng phổ biến trong
kỹ thuật phân cụm Tư tưởng chính của thuật toán K-Means là tìm cách phân nhóm các đối tượng (objects) đã cho vào K cụm (K là số các cụm được xác đinh trước, K nguyên dương) sao cho tổng bình phương khoảng cách giữa các đối tượng đến tâm nhóm (centroid ) là nhỏ nhất
Thuật toán K-Means được mô tả như sau
Thuật toán K-Means thực hiện qua các bước chính sau:
- Bước 1. Chọn ngẫu nhiên K tâm (centroid) cho K cụm (cluster) Mỗi cụm được đại diện bằng các tâm của cụm
- Bước 2. Tính khoảng cách giữa các đối tượng (objects) đến K tâm (thường dùng khoảng cách Euclidean)
- Bước 3. Nhóm các đối tượng vào nhóm gần nhất
Trang 5- Bước 4. Xác định lại tâm mới cho các nhóm
- Bước 5. Thực hiện lại bước 2 cho đến khi không có sự thay đổi nhóm nào của các đối tượng
3 Ví dụ minh họa thuật toán K-Mean:
Giả sử ta có 4 loại thuốc A,B,C,D, mỗi loại thuộc được biểu diễn bởi
2 đặc trưng X và Y như sau Mục đích của ta là nhóm các thuốc đã cho vào
2 nhóm (K=2) dựa vào các đặc trưng của chúng
Object Feature 1 (X): weight index Feature 2 (Y): pH
- Bước 1 Khởi tạo tâm (centroid) cho 2 nhóm Giả sử ta chọn A là tâm
của nhóm thứ nhất (tọa độ tâm nhóm thứ nhất c1(1,1)) và B là tâm của nhóm thứ 2 (tạo độ tâm nhóm thứ hai c2 (2,1))
Bước 2 Tính khoảng cách từ các đối tượng đến tâm của các nhóm
(Khoảng cách Euclidean)
Trang 6Mỗi cột trong ma trận khoảng cách (D) là một đối tượng (cột thứ nhất tương ứng với đối tượng A, cột thứ 2 tương ứng với đối tượng B,…) Hàng thứ nhất trong ma trận khoảng cách biểu diễn khoảng cách giữa các đối tượng đến tâm của nhóm thứ nhất (c1) và hàng thứ 2 trong ma trận khoảng cách biểu diễn khoảng cách của các đối tượng đến tâm của nhóm thứ 2 (c2)
Ví dụ, khoảng cách từ loại thuốc C=(4,3) đến tâm c1(1,1) là 3.61 và đến tâm c2(2,1) là 2.83 được tính như sau:
Bước 3 Nhóm các đối tượng vào nhóm gần nhất
Ta thấy rằng nhóm 1 sau vòng lặp thứ nhất gồm có 1 đối tượng A và nhóm
2 gồm các đối tượng còn lại B,C,D
Bước 4 Tính lại tọa độ các tâm cho các nhóm mới dựa vào tọa độ của các
đối tượng trong nhóm Nhóm 1 chỉ có 1 đối tượng A nên tâm nhóm 1 vẫn không đổi, c1(1,1) Tâm nhóm 2 được tính như sau:
Trang 7Bước 5 Tính lại khoảng cách từ các đối tượng đến tâm mới
Bước 6 Nhóm các đối tượng vào nhóm
Bước 7 Tính lại tâm cho nhóm mới
Trang 8Bước 8 Tính lại khoảng cách từ các đối tượng đến tâm mới
Bước 9 Nhóm các đối tượng vào nhóm
Ta thấy G2 = G1 (Không có sự thay đổi nhóm nào của các đối tượng) nên thuật toán dừng và kết quả phân nhóm như sau:
Trang 9Object Feature 1 (X): weight index Feature 2 (Y): pH Group
II Chương trình gom cụm văn bản tiếng Việt
1 Đặt bài toán
Gom cụm (clustering) là 1 bài toán phổ biến trong lĩnh vực khai phá
dữ liệu (data mining), mục tiêu của gom cụm là phân loại 1 tập dữ liệu thành nhiều nhóm và mỗi nhóm sẽ có 1 đặc trưng khác nhau Tương tự như vậy, văn bản cũng là 1 đối tượng dữ liệu và nhu cầu gom cụm đối tượng này rất phổ biến trong nhiều lĩnh vực như: phân loại tin tức tự động, phân loại email
tự động, phân loại tài liệu trong thư viện v.v
Để góp phần nghiên cứu giải quyết vấn đề trên, bài tiểu luân này sẽ
dự trên thuật toán gom cụm K-means để cài đặt ứng dụng tự động gom cụm tài liệu được viết bằng ngôn ngữ Tiếng Việt, dữ liệu cần xử lý là hàm trăm bài báo, blog được thu thập từ nhiều lĩnh vực như công nghệ, xã hội, văn hóa, giáo dục v.v
2 Cài đặt chương trình bằng thuật toán K-Means
a Từ điển key words và stop words
Key words là tập các danh từ có ý nghĩ trong ngôn ngữ tiếng Việt,
thuật toán sẽ dựa vào tập từ khóa này để biểu diễn 1 tài liệu văn bản dưới dạng 1 vector nhiều chiều, thể hiện những đặc trưng của văn bản đó
Stop words là những từ chức năng, nó không mang nội dung mà chủ
yếu chứa thông tin cú pháp trong câu
Trang 10b Vector hóa văn bản.
Mỗi văn bản tài liệu sẽ được biểu diễn dưới dạng vector n chiều Mỗi
chiều là 1 từ khóa (term) và độ lớn là số lần xuất hiện từ khóa đó trong văn
bản.
Trong lập trình, mỗi văn bản được biểu diễn thành 1 đối tượng gọi là DocVector, có các thuộc tính như sau:
Dictionary < string , int > _vector;
public int DocID { get ; set ; }
public int ClusterID { get ; set ; }
c Cài đặt thuật toán K-Means
Chú ý: Thuật toán K-Means được trình bày bên dưới sử dụng ngôn ngữ C#
Định nghĩa và khởi tạo các biến:
HashSet < string > _stopwords; //danh sách các stopwords
HashSet < string > _terms; //danh sách các từ khóa keywords
List < string > _allFiles; //danh sách tập tin văn ba +n cầ- n phầ- n loại
Dictionary < int , DocVector > _allVector; //danh sách các vector văn ba +n
List < DocsCluster > _clustersList; // danh sách các
clusters
Hàm xây dựng các DocVector từ nội dung của tập tin văn bản
string filename = _allFiles[docID]; //lầ4 y tên tập tin văn ba +n
DocVector docvector = new DocVector ();
docvector.DocID = docID;
StringBuilder sbContent = new
StringBuilder ( File ReadAllText(filename).ToLower());
//xóa các ký tự đặc biệt, không pha +i chữ hoặc sô4
if (sbContent[i] != ' ' && !
{
sbContent.Remove(i, 1);
i ;
Trang 11}
else if (sbContent[i] == '\n' )
//Lầ4 y danh sách các từ có trong văn ba +n
List < string > words = sbContent.ToString().Split( '
//tách từ, vector hóa văn ba +ng dự vào stopwords và term
while (words.Count > 0)
{
string term = "" ;
if (_stopwords.Contains(words[0]))
{
words.RemoveAt(0);
continue ;
}
if (words.Count > 1 && _stopwords.Contains(words[0] + " " + words[1]))
{
words.RemoveRange(0, 2);
continue ;
}
max = words.Count;
{
term = term.Trim();
{
words.RemoveRange(0, i);
}
words.RemoveAt(0);
}
docvector[term]++;
}
return docvector;
Hàm gom cụm sử dụng thuật toán K-Means
public List < string >[] BuiltKCluster( int K)
{
//Tạo k cluster ngầT u nhiên
Random rd = new Random ();
Trang 12{
_allVector[nextrd].ClusterID = i;
cluster.Add(_allVector[nextrd]);
cluster.ClusterID = i;
_clustersList.Add(cluster);
}
{
{
listCentroid.Add(c.CentroidVector);
c.Clear();
}
{
count++;
v.ClusterID = id;
_clustersList[id].Add(v);
}
//điê- u kiện dừng là 99% sô4 vector không thay đô+ i cụm
}
{
arrOfClusters[index].Add(_allFiles[docID]);
index++;
}
}
3 Ứng dụng demo
Tập dữ liệu dùng cho chương trình demo gồm có:
Trang 13- 567 stopword bằng Tiếng Việt
- 28.861 danh từ tiếng Việt phổ biến (terms)
- Bộ văn bản test chia làm 5 nhóm:
o Nhóm 1: 28 tập tin
o Nhóm 2: 313 tập tin
o Nhóm 3: 100 tập tin
o Nhóm 4: 80 tập tin
o Nhóm 5: 500 tập tin
Một vài hình ảnh kết quả sau khi gom cụm
- 500 tập tin và 2 cụm mất thời gian 73.63 giây
Trang 14- 28 tập tin chia thành 6 cụm mất thời gian 0.73 giây
- 100 tập tin chia thành 4 cụm trong thời gian 6.96 giây
Trang 154 Đánh giá ứng dụng demo
Ứng dụng demo đã minh họa thành công thuật toán K-means trong bài toán gom cụm văn bản Tiếng Việt Với số lượng tài liệu dưới 500 và số cluster dưới 10 cho tốt độ thực thi khá tốt
Do giới hạn về tập dữ liệu test, tập keyword và stopword chưa được chuẩn hóa nên chương trình demo chỉ cho kết quả gom cụm ở mức tương đối chấp nhận được
Giao diện đồ họa trực quan, sử dụng công nghệ WPF của Microsoft viết bằng ngôn ngữ C#, giúp người sử dụng nhanh chóng nhận được kết quả gom cụm dưới dạng đồ thị cùng với dữ liệu thông kê bên cạnh
III Kết luận và hướng phát triển
1 Kết luận
Thuật toán K-Means có ưu điểm là đơn giản, dễ hiểu và cài đặt Tuy nhiên, một số hạn chế của K-Means là hiệu quả của thuật toán phụ thuộc vào việc chọn số nhóm K (phải xác định trước) và chi phí cho thực hiện vòng lặp tính toán khoảng cách lớn khi số cụm K và dữ liệu phân cụm lớn
Ứng dụng demo đã thể hiện thành công việc gom cụm tài liệu văn bản tiếng Việt bằng thuật toán K-means dựa trên tập key words và stop word Với tập dữ liệu test dưới 500 tập tin, cho tốt độ thực thi và kết quả chấp nhận được
Tuy nhiên, thuật toán K-Means cho thời gian thực thi khá lâu khi số tài liệu lên tới vài nghìn và kết quả gom cụm cũng chưa thật sự chính xác
2 Hướng phát triển
Cập nhật và chuẩn hóa tập keywords và stopword cho ngôn ngữ tiếng Việt để có kết quả gom cụm chính xác hơn
Trang 16Nghiên cứu phát triển và áp dụng thuật toán trên vào các nhu cầu thực
tế như phân loại Email, phân loại tin tức và phân loại văn bản tài liệu trong thư viện
Nghiên cứu cải tiến và tối ưu thuật toán K-means cho trường hợp phân loại văn bản để có tốc độ nhanh hơn và kết quả tốt hơn
IV Tài liệu tham khảo
[1] http://en.wikipedia.org/wiki/K-means_clustering
[2] Giáo trình Data Mining – Đại học Công nghệ thông tin – Đại học Quốc gia TP Hồ Chi Minh