Phân cụm văn bản tiếng việt bằng phương pháp k means

40 1.1K 6
Phân cụm văn bản tiếng việt bằng phương pháp k means

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Phân cụm văn bản tiếng việt bằng phương pháp k means

TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN MÔN: MÁY HỌC Đề tài: PHÂN CỤM VĂN BẢN TIẾNG VIỆT BẰNG PHƯƠNG PHÁP K-MEANS Giáo viên hướng dẫn: Nguyễn Thị Thu Hà Nhóm LỜI MỞ ĐẦU Internet phát triển nhanh chóng sinh khối lượng khổng lồ liệu dạng siêu văn (dữliệu Web), trở thành kênh quan trọng thơng tin đời sống Chính vậy, lĩnh vực khai phá Web có tốc độ phát triển vượt bậc, nhận nhiều quan tâm nhà khoa học nhóm nghiên cứu Một toán quan trọng lĩnh vực khai phá Web phân cụm Web Số lượng trang Web Page lớn luôn thay đổi, tài liệu không liên quan đến khía cạnh mà cịn đề cập đến nhiều khía cạnh khác dẫn đến trùng lặp thơng tin tài liệu Xuất phát từ đặc điểm mà phân cụm Web nên thực tài liệu Web truy vấn trả từ máy tìm kiếm Sau kết tổ chức lại cho người dùng theo cụm PHẦN TỔNG QUAN VỀ PHÂN CỤM DỮ LIỆU Phân cụm liệu 1.1 Định nghĩa phân cụm liệu Page Phân cụm liệu trình nhóm tập đối tượng tương tự tập liệu vào cụm cho đối tượng thuộc cụm tương đồng đối tượng thuộc cụm khác không tương đồng Phân cụm liệu ví dụ phương pháp học khơng có thầy Khơng giống phân lớp liệu, phân cụm liệu khơng địi hỏi phải định nghĩa trước mẫu liệu huấn luyện Vì thế, coi phân cụm liệu cách học quan sát, phân lớp liệu học ví dụ… Ngồi phân cụm liệu cịn sử dụng bước tiền xử lí cho thuật tốn khai phá liệu khác phân loại mô tả đặc điểm, có tác dụng việc phát cụm 1.2 Một số ví dụ phân cụm liệu 1.2.1 Phân cụm liệu phục vụ cho biểu diễn liệu gene Phân cụm phân tích sử dụng thường xuyên biểu diễn liệu gene (Yeung et al, 2003; Eisen at al, 1998) Dữ liệu biểu diễn gene tập hợp phép đo lấy từ DNA microarray (còn gọi DNA chip hay gene chip) thủy tinh nhựa có gắn đoạn DNA thành hàng siêu nhỏ Các nhà nghiên cứu sử dụng chip để sàng lọc mẫu sinh học nhằm kiểm tra có mặt hàng loạt trình tự lúc Các đoạn DNA gắn chip gọi probe (mẫu dò) 1.2.2 Phân cụm liệu phục sức khỏe tâm lý Phân cụm liệu áp dụng nhiều lĩnh vực sức khỏe tâm lý, bao gồm việc thúc đẩy trì sức khỏe, cải thiện cho hệ thống chăm sóc Page sức khỏe cơng tác phòng chống bệnh tật người khuyết tật Trong phát triển hệ thống chăm sóc sức khỏe, phân cụm liệu sử dụng để xác định nhóm người dân mà hưởng lợi từ dịch vụ cụ thể (Hodges Wotring, 2000) Trong thúc đẩy y tế, nhóm phân tích sử dụng để lựa chọn nhắm mục tiêu vào nhóm có khả đem lại lợi ích cho sức khỏe cụ thể từ chiến dịch quảng bá tạo điều kiện thuận lợi cho phát triển quảng cáo Ngoài ra, phân cụm liệu sử dụng để xác định nhóm dân cư bị rủi ro phát triển y tế điều kiện người có nguy nghèo 1.2.3 Phân cụm liệu hoạt động nghiên cứu thị trường Trong nghiên cứu thị trường, phân cụm liệu sử dụng để phân đoạn thị trường xác định mục tiêu thị truowngd (Chrisopper, 1969; Saunders, 1980; Frank and Green, 1968) Trong phân đoạn thị trường, phân cụm liệu thường dùng để phân chia thị trường thành cụm mang ý nghĩa, chẳng hạn chia đối tượng nam giới từ 21-30 tuổi nam giới 51 tuổi, đối tượng nam giới 51 tuổi thường k có khuynh hướng mua sản phẩm 1.2.4 Phân cụm liệu hoạt động phân đoạn ảnh Phân đoạn ảnh việc phân tích mức xám hay mầu ảnh thành lát đồng (Comaniciu and Meer, 2002) Trong phân đoạn ảnh, phân cụm liệu thường sử dụng để phát biên đối tượng ảnh Phân cụm liệu công cụ thiết yếu khai phá liệu trình khám phá phân tích khối lượng lớn liệu để lấy thơng tin hữu ích (Berry and Linoff, 2000) Phân cụm liệu vấn đề nhận dạng mẫu (pattern recognition) Page Nhìn chung, thơng tin hữu dụng khám phá từ khối lượng lớn liệu thông qua phương tiện tự động hay bán tự động (Berry and Linoff, 2000) Trong khai phá liệu gián tiếp, khơng có biến chọn biến đích, mục tiêu để khám phá vài mối quan hệ tất biến Trong khai phá liệu gián tiếp vài biến lại chọn biến đích Phân cụm liệu khai phá liệu gián tiếp, khai phá liệu, ta khơng đảm bảo chắn xác cụm liệu mà tìm kiếm, đóng vai trị việc hình thành cụm liệu đó, làm Vấn đề phân cụm liệu quan tâm cách rộng rãi, chưa có định nghĩa đồng phân cụm liệu khơng đến thống (Estivill-Castro, 2002; Dubes, 1987; Fraley anh Raftery,1998) Nói cách đại khái là: Phâm cụm liệu, có nghĩa ta cho tập liệu phương pháp tương tự, nhóm liệu lại chẳng hạn điểm liệu nhóm giống điểm liệu nhóm khác khơng đồng dạng Rõ ràng vấn đề bắt gặp nhiều ứng dụng, chẳng hạn khai phá văn bản, biểu diễn gen, phân loại khách hàng, xử lý ảnh… Một số kiểu liệu Thuật toán phân cụm liệu có nhiều liên kết với loại liệu Vì vậy, hiểu biết quy mơ, bình thường hóa, gần quan trọng việc giải thích kết thuật tốn phân cụm liệu Kiểu liệu nói đến mữ độ lượng tử hóa liệu (Jain Dubes, 1988; Anderberg, 1973) – thuộc tính gõ nhị phân, rời rạc, liên tục Thuộc tính nhị phân có xác hai giá trị, sai Thuộc tính rời rạc có số hữu hạn giá trị có thể, loại nhị phân trường hợp đặc biệt loại rời rạc Page Dữ liệu quy mô, mà tầm quan trọng tương đối số, vấn đề quan trọng phân cụm liệu Vậy liệu chia thành quy mơ quy định lượng quy mơ định tính Quy mơ định lượng bao gồm quy mô danh nghĩa quy mô giới hạn Quy mơ định tính bao gồm quy mơ khoảng quy mô khoảng tỷ lệ Các kiểu liệu xem xét phần 2.1 Dữ liệu Categorical Thuộc tính Categorical gọi thuộc tính danh nghĩa, thuộc tính đơn giản sử dụng tên, chẳng hạn thương hiệu xe tên chi nhánh ngân hàng Chúng ta xem xét liệu tập hợp với số hữu hạn điểm liệu, thuộc tính danh nghĩa điểm liệu, thuộc tính danh nghĩa điểm liệu tập liệu có số hữu hạn giá trị; vậy, loại danh nghĩa trường hợp đặc biệt kiểu rời rạc Page Hình: Biểu đồ quy mơ liệu Page Page Page Phép biến đổi chuẩn hóa liệu Trong nhiều ứng dụng phân cụm liệu, liệu thô, đo đạc thực tế, không sử dụng trực tiếp, trừ mọt mô hình xác suất cho hệ khn mẫu có sẵn (Jain Dubes, 1988) Việc chuẩn bị cho việc phân cụm liệu yêu cầu só loại chuyển đổi, chẳng hạn biến đổi chuẩn hóa liệu Page 10 kết phân cụm k-means thấp, nghĩa cụm liệu khám phá lệch so với cụm thực tế Trên thực tế chưa có giải pháp tối ưu để chọn tham số đầu vào, giải pháp thường sử dụng thử nghiệm với giá trị đầu vào k khác sau chọn giải pháp tốt Page 26 PHẦN 4: CHƯƠNG TRÌNH KIỂM THỬ Code chương trình using using using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms; System.Windows.Forms.DataVisualization.Charting; System.Collections; System.IO; namespace Project_MH { public partial class Programs : Form { public Programs() { InitializeComponent(); } public static System.Array ResizeArray(System.Array oldArray, int newSize) { int oldSize = oldArray.Length; System.Type elementType = oldArray.GetType().GetElementType(); System.Array newArray = System.Array.CreateInstance(elementType, newSize); Page 27 int preserveLength = System.Math.Min(oldSize, newSize); if (preserveLength > 0) System.Array.Copy(oldArray, newArray, preserveLength); return newArray; } #region "Type variable" public string[] i1, i2; public int[] i3; class TextVector { public int group = -1; public string fileName = string.Empty; public double[] freq = null; public int spt = 0; } #endregion #region "K-Means Algorithm" static TextVector[] ConvertTextDbToVectorDb(string[] path, out int maxFreq) { Hashtable ht = new Hashtable(); string[] fileList = path; TextVector[] tvList = new TextVector[fileList.Length]; int i = 0, j = 0; maxFreq = 0; //MessageBox.Show(fileList.Length.ToString()); for (i = 0; i < fileList.Length; i++) { string fileName = fileList[i]; if (fileName == null) break; TextVector tv = new TextVector(); tv.fileName = fileName; Page 28 tv.group = -1; tvList[i] = tv; string data = File.ReadAllText(fileName); string[] wordList = data.Split(' '); foreach (string word in wordList) { if (word.Length == 0) continue; int[] freq = (int[])ht[word]; if (freq != null) { (freq[i])++; } else { freq = new int[fileList.Length]; for (j = 0; j < freq.Length; j++) { freq[j] = 0; } freq[i] = 1; ht.Add(word, freq); } } } for (i = 0; i < fileList.Length; i++) { TextVector tv = tvList[i]; double[] freq2 = new double[ht.Count]; j = 0; Page 29 foreach (DictionaryEntry de in ht) { int[] freq = (int[])de.Value; int num = freq[i]; freq2[j++] = (double)num; if (num > maxFreq) { maxFreq = num; } } tv.freq = freq2; } return tvList; } static void AvgVector(double[] vector, int dem) { for (int i = 0; i < vector.Length; i++) { vector[i] /= dem; } } static void AddVector(double[] vector1, double[] vector2) { for (int i = 0; i < vector1.Length; i++) { vector1[i] += vector2[i]; } } static void ResetVector(double[] vector) { for (int i = 0; i < vector.Length; i++) { vector[i] = 0; } } Page 30 static int FindSuitableGroup(double[] vector, double[][] arCenter) { int group = -1; double dMin = -1; for (int i = 0; i < arCenter.Length; i++) { double d = Euclid(vector, arCenter[i]); if (dMin < || d < dMin) { dMin = d; group = i; } } return group; } static double Euclid(double[] vector1, double[] vector2) { double result = 0.0; for (int i = 0; i < vector1.Length; i++) { result += (Math.Pow((vector1[i] vector2[i]), 2)); //MessageBox.Show(vector1[i].ToString() + " / "+vector2[i].ToString()); } return Math.Sqrt(result); } public void Kmeans() { int k = 1; richTextBox1.Clear(); if (textBox1.Text.ToString() != "") { k = int.Parse(textBox1.Text.ToString()); Page 31 } int maxFreq = 0; TextVector[] vectorList = ConvertTextDbToVectorDb(i1, out maxFreq); TextVector[] vectorListtemp = ConvertTextDbToVectorDb(i1, out maxFreq); TextVector[] tvList; TextVector[] tvListtemp; tvList = vectorList; tvListtemp = vectorListtemp; if (tvList.Length < k || k < 1) return; int vectorSize = tvList[0].freq.Length; double[][] arCenter = new double[k][]; Random random = new Random(); int i = 0, j = 0; // Random center for (i = 0; i < k; i++) { arCenter[i] = new double[vectorSize]; for (j = 0; j < vectorSize; j++) { arCenter[i][j] = tvList[i].freq[j]; } } bool bGroupChanged = false; { // Grouping bGroupChanged = false; for (i = 0; i < tvList.Length; i++) Page 32 { TextVector tv = tvList[i]; int oldGroup = tv.group; int newGroup = FindSuitableGroup(tv.freq, arCenter); // tv.group = newGroup; tvList[i].group = newGroup; } for (i = 0; i < tvList.Length; i++) { if (tvListtemp[i].group == tvList[i].group) { bGroupChanged = true; } else { for (i = 0; i < tvList.Length; i+ +) { tvListtemp[i].group = tvList[i].group; } break; } } // bGroupChanged |= (oldGroup != newGroup); if (bGroupChanged) break; // Renew all centers for (i = 0; i < k; i++) { //ResetVector(arCenter[i]); int dem = 0; ResetVector(arCenter[i]); for (j = 0; j < tvList.Length; j++) Page 33 { TextVector tv = tvList[j]; if (tv.group == i) { AddVector(arCenter[i], tv.freq); dem += 1; } } AvgVector(arCenter[i], dem); } } while (true); for (i = 0; i < k; i++) { TextVector tv = tvList[i]; FileInfo fi = new FileInfo(tv.fileName); // richTextBox1.Text += String.Format(" [ CLUSTER {0} ] -{1}", i, System.Environment.NewLine); ; richTextBox1.Text = richTextBox1.Text + "\n - Cluster" + (i + 1).ToString() + " \n"; for (int g = 0; g < tvList.Length; g++) { tvList[g] = tvList[g]; if (tvList[g].group == i) { i3[g] = tvList[g].group; richTextBox1.Text += i2[g] + " ( Url: " + i1[g] + " )" + "\n"; } } Page 34 } } #endregion #region "Function" public void selectFileToolStripMenuItem_Click(object sender, EventArgs e) { string url, name; openFileDialog1.Filter = "Text Files(*.txt)| *.TXT;*.TXT"; openFileDialog1.Multiselect = true; if (openFileDialog1.ShowDialog() == DialogResult.OK) { url = openFileDialog1.FileName; StreamReader sr = new StreamReader(url); if (listBox1.Items.Count != 0) { listBox1.Items.AddRange(openFileDialog1.FileNames); int count = listBox1.Items.Count; for (int i = i1.Count(); i < count; i+ +) { i1 = (string[])ResizeArray(i1, count); i2 = (string[])ResizeArray(i2, count); i3 = (int[])ResizeArray(i3, count); i1[i] = listBox1.Items[i].ToString(); name = Path.GetFileName(i1[i]); i2[i] = name; // MessageBox.Show(i2[i]); Page 35 } } else { listBox1.Items.AddRange(openFileDialog1.FileNames); int count = listBox1.Items.Count; i1 = new string[count]; i2 = new string[count]; i3 = new int[count]; for (int i = 0; i < count; i++) { i1[i] = listBox1.Items[i].ToString(); name = Path.GetFileName(i1[i]); i2[i] = name; // MessageBox.Show(i2[i]); } } listBox1.Items.Clear(); for (int j = 0; j < i2.Count(); j++) { // MessageBox.Show(i2[j].ToString()); string addlist; addlist = (j+1).ToString()+" "+ i2[j].ToString() + " -|- " + i1[j].ToString(); listBox1.Items.Add((string)addlist); } } } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { try { Page 36 //Font font = new Font("Tahoma", 8, FontStyle.Bold); //Font font1 = new Font("Tahoma", 8, FontStyle.Regular); //richTextBox1.Font = font; string textold = richTextBox1.Text; richTextBox1.Clear(); richTextBox1.Text += "File Name: " + i2[listBox1.SelectedIndices[0]] + " ( Url: " + i1[listBox1.SelectedIndices[0]] + " )"; richTextBox1.Text = richTextBox1.Text + "\n \n"; richTextBox1.Text = richTextBox1.Text + System.IO.File.ReadAllText(i1[listBox1.SelectedIndices[0]] ); richTextBox1.Text = richTextBox1.Text + "\n \n"; richTextBox1.Text += textold; } catch { } } public void button1_Click(object sender, EventArgs e) { if (chart1.Visible == true) { chart(); } else { Kmeans(); } } public void chartToolStripMenuItem_Click(object sender, EventArgs e) Page 37 { chart(); } private void listboxToolStripMenuItem_Click(object sender, EventArgs e) { richTextBox1.Visible = true; chart1.Visible = false; } #endregion #region "Chart" public void chart() { try { Kmeans(); int k = 1; string[] seriesArray; chart1.Visible = true; seriesArray = new string[100]; float[] pointsArray; pointsArray = new float[100]; richTextBox1.Visible = false; Array.Clear(seriesArray, 0, seriesArray.Length); Array.Clear(pointsArray, 0, pointsArray.Length); chart1.Series.Clear(); chart1.Titles.Clear(); if (textBox1.Text.ToString() != "") { k = int.Parse(textBox1.Text.ToString()); } for (int i = 0; i < k; i++) { seriesArray[i] = "Cluster " + i.ToString(); Page 38 pointsArray[i] = 0; for (int g = 0; g < i3.Count(); g++) { if (i3[g] == i) { pointsArray[i] += 1; } } pointsArray[i] /= i3.Length; pointsArray[i] *= 100; } chart1.Palette = ChartColorPalette.SeaGreen; chart1.Titles.Add("Chart Text Clustering"); for (int i = 0; i < k; i++) { // Add series Series series = chart1.Series.Add(seriesArray[i]); // Add point series.Points.Add(pointsArray[i]); } } catch { }; } #endregion private void radioButton1_CheckedChanged(object sender, EventArgs e) { chart(); } Page 39 private void radioButton2_CheckedChanged(object sender, EventArgs e) { richTextBox1.Visible = true; chart1.Visible = false; } } } 2.Giao diện chương trình Page 40 ... cứu phân cụm tiếng Việt Cho đến có nhiều cơng trình nghiên cứu phân cụm tiếng Việt đạt k? ??t khả quan Dưới đây, Page 17 ba nghiên cứu phân cụm tiếng Việt phân cụm từ tiếng Việt phương pháp học... thống gom cụm văn biểu diễn đồ thị có độ xác cao so với gom cụm văn biểu diễn vector Trên số nghiên cứu phân cụm văn tiếng Việt Các nghiên cứu cho k? ??t khả quan PHẦN Page 21 PHÂN CỤM VĂN BẢN BẰNG THUẬT... cụm cho đối tượng thuộc cụm tương đồng đối tượng thuộc cụm khác không tương đồng Phân cụm liệu ví dụ phương pháp học khơng có thầy Khơng giống phân lớp liệu, phân cụm liệu khơng địi hỏi phải định

Ngày đăng: 13/03/2016, 11:21

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan