Tải bản đầy đủ (.docx) (16 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (569.57 KB, 16 trang )

Đại học Quốc gia TP Hồ Chí Minh
Trườ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
Lê Hoài Nam – CH1101106
Mục lục
Trang 2
Lê Hoài Nam – CH1101106
I. 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);
- WWW: Phân loại tài liệu (document classification); phân loại người
dùng web (clustering weblog);…
Trang 3
Lê Hoài Nam – CH1101106
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
- 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

Trang 4
Lê Hoài Nam – CH1101106
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
Medicine A 1 1
Medicine B 2 1
Medicine C 4 3
Medicine D 5 4
- 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 5
Lê Hoài Nam – CH1101106
Mỗ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 6
Lê Hoài Nam – CH1101106
Bướ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 7
Lê Hoài Nam – CH1101106

Bướ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
Trang 8
Lê Hoài Nam – CH1101106
Ta thấy G
2
= G
1
(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:
Object Feature 1 (X): weight index Feature 2 (Y): pH Group
Medicine A 1 1 1
Medicine B 2 1 1
Medicine C 4 3 2
Medicine D 5 4 2
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 đó.
Trang 9
Lê Hoài Nam – CH1101106
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.
b. 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 bản cần phần
loại
Dictionary<int, DocVector> _allVector; //danh sách các vector
văn bả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ấy tên tập tin văn bản
DocVector docvector = new DocVector();
docvector.DocID = docID;
StringBuilder sbContent = new
StringBuilder(File.ReadAllText(filename).ToLower());
int i = 0;
//xóa các ký tự đặc biệt, không phải chữ hoặc số
for (i = 1; i < sbContent.Length; i++)
Trang 10
Lê Hoài Nam – CH1101106
if (sbContent[i] != ' ' && !Char.IsLetterOrDigit(sbContent[i]))
{
sbContent.Remove(i, 1);
i ;
}
else if (sbContent[i] == '\n')
sbContent[i] = ' ';
//Lấy danh sách các từ có trong văn bản
List<string> words = sbContent.ToString().Split(' ').ToList<string>();
//tách từ, vector hóa văn bả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;
}
int max = 5;
if (words.Count < 5)
max = words.Count;
for (i = max; i > 0; i )
{
term = "";
for (int j = 0; j < i; j++)
term += words[j] + " ";
term = term.Trim();
if (_terms.Contains(term))
{
words.RemoveRange(0, i);
break;
}
if (i==1)
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)
{
Trang 11
Lê Hoài Nam – CH1101106
//Tạo k cluster ngẫu nhiên
Random rd = new Random();
int i;
for (i = 1; i <= K; i++)
{
DocsCluster cluster = new DocsCluster();
int nextrd = rd.Next(_allVector.Count);
_allVector[nextrd].ClusterID = i;
cluster.Add(_allVector[nextrd]);
cluster.ClusterID = i;
_clustersList.Add(cluster);
}

bool done = false;
while (!done)
{
done = false;
//tìm vector trọng tâm (CentroidVector)
List<DocVector> listCentroid = new List<DocVector>();
foreach (DocsCluster c in _clustersList)
{
listCentroid.Add(c.CentroidVector);
c.Clear();

}
//
int count=0;
foreach (DocVector v in _allVector.Values)
{
int id = getClusterIdNearest(listCentroid, v);

if (v.ClusterID == id)
count++;

v.ClusterID = id;
_clustersList[id].Add(v);
}
//điều kiện dừng là 99% số vector không thay đổi cụm
double maxCount = _allVector.Count * 99 / 100;
if (count > maxCount)
done = true;
}
List<string>[] arrOfClusters = new List<String>[K];
int index = 0;
foreach (DocsCluster cluster in _clustersList)
{
arrOfClusters[index] = new List<string>();
foreach (int docID in cluster.Keys)
arrOfClusters[index].Add(_allFiles[docID]);
index++;
}
return arrOfClusters;
}
Trang 12

Lê Hoài Nam – CH1101106
3. Ứng dụng demo
Tập dữ liệu dùng cho chương trình demo gồm có:
- 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 13
Lê Hoài Nam – CH1101106
- 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 14
Lê Hoài Nam – CH1101106
4. Đá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 15
Lê Hoài Nam – CH1101106
Nghiê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] />[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
Trang 16

×