Qua những thống kê thực nghiệm của chương trình phân loại văn bản. Một hướng giải quyết mới giúp nâng cao khả năng gán nhãn sẽ là việc thay đổi các tham số điều khiển (khởi tạo λ, lựa chọn đặc trưng và giá trị hội tụ của Δλ). Bằng việc thay đổi đĩ sẽ giúp tìm ra được mơ hình hồn thiện nhất ứng với những tập dữ liệu huấn luyện khác nhau.
Do thời gian cĩ hạn nên trong khuơn khổ luận văn mới chỉ phát triển được những tính năng cở bản của chương trình chặn nội dung web nhằm ứng dụng bài tốn phân loại văn bản. Chương trình vẫn cịn nhiều hạn chế như: chương trình mới chỉ làm việc trên trình duyệt Internet Explorer và cơ chế chặn truy cập hoạt động chưa được tốt.
Tài liệu tham khảo
Tài liệu tiếng Anh
[1] Adam Berger; The Improved Iterative Scaling Algorithm: A Gentle Introduction; 1997
[2] Adam L. Berger & Stephen A. Della Pietra & Vincent J. Della Pietra; A Maximum Entropy Approach to Natural Language Processing; 1996
[3] Adwait Ratnaparkhi; A Simple Introduction to Maximum Entropy Models for Natural Language Processing; 1997
[4] Adwait Ratnaparkhi; Maximum Entropy Models for Natural Language Ambiguity Resolution; 1998
[5] Blue Coat; Blue Coat WebFilterTMTechnology.
[6] Christopher D. Manning & Hinrich Schutze; Foundations of Statistical Natural Language Processing; 1999; 612 - 645
[7] Jeffrey C. Reynar & Adwait Ratnaparkhi;A Maximum Entropy Approach to identifying sentence boundaries; 1997.
[8] Jun’ichi Kazama & Jun’ichi Tsujii; Evaluation and Extension of Maximum Entropy Models with Inequality Constraints; 2003
[9] Kamal Nigam & John Lafferty & Andrew McCallum; Using Maximum Entropy for Text Classification
[10] Radu Ioan Bot & Sorin Mihai Grad & Gert Wanka; Maximum Entropy Optimization for Textclassification problems;1999
[11] RobertMalouf; A comparison of algorithms for maximum entropy parameter estimation
[12] Ronald Rosenfeld; A Maximum Entropy Approach to Adaptive Statistical Language Modeling
[13] Stanley F. Chen & Ranald Rosendfeld; A Gausan Prior for smoothing Maximum Entropy Models; 1999
[14] Thorsten Joachims; A probabilistic analysis of the Rocchio algorithm with TFIDF for text categorization; 1997
Tài liệu tiếng Việt
[1] Hồ Quốc Bảo, Đơng Thị Bích Thủy; Ứng dụng xử lý ngơn ngữ tự nhiên trong tìm kiếm thơng tin trên văn bản tiếng việt;
[2] Nguyễn Lính Gian, Nguyễn Mạnh Hiển; Phân loại văn bản tiếng việt với bộ phân loại vector hỗ trợ SVM; 2005
[3] Nguyễn Thị Ngọc Hợp; Phân loại văn bản sử dụng hạt nhân của chuỗi;
[4] Vũ Thanh Nguyên, Trang Nhật Quang; Ứng dụng thuật tốn phân lớp rút trích thơng tin văn bản FSVM trên Internet; 2008
[5] Đỗ Phúc, Mai Xuân Hùng, Nguyễn Thị Kim Phụng; Gom cụm đồ thị và ứng dụng vào việc rút trích nội dung chính của khối thơng điệp trên diễn đàn thảo luận; 2008
[6] Phạm Thị Thơm; Ứng dụng phương pháp phân loại văn bản Naive Bayes vào việc xây dựng chương trình mail client với khả năng lọc thư rác tự động; 2006
Phụ lục
Chức năng của các các lớp sử dụng trong chương trình phân loại văn bản:
Tên lớp Mơ tả
EmpiricalDistribution Lớp bao gồm các hàm: get_distribution_xy, get_distribution_x. Được dùng để tính xác suất thực nghiệm và xác suất ngữ cảnh Feature Lớp bao gồm các hàm: set_feature, get_c. Dùng để gán giá trị {0,1} cho các đặc trưng và tính giá trị C (giá trị tổng các đặc trưng của từng nhãn lớn nhất)
IIS Lớp bao gồm các hàm: get_z, get_p_yx,
get_empirical_expectation, get_model_expectation,
delta_lamda, lamda, write_lamda, write_all. Dùng để cài đặt thuật tốn IIS cho việc tính tốn trọng số cho từng đặc trưng InputFile Lớp bao gồm các hàm: read_input, write_input, set_lamda,
set_model_distribution. Dùng để tính trọng số của từng đặc trưng cho file cần gán nhãn và đưa ra tên nhãn được gán LamdaFile Lớp bao gồm các hàm: cut_tag_name, read_lamda_file,
read_all. Dùng để đọc nội dung của các file đã được huấn luyện gồm các từ và trọng số vào các mảng
NonsensicalWord Lớp bao gồm các hàm: read_nonsensical_word,
nonsensical_word. Dùng để đọc vào nội dung file chứa các từ stop-word và kiểm tra một từ nào đĩ cĩ phải là stop-wrod hay khơng
Test Lớp bao gồm các hàm: cut_tag_name, test_event, set_tag. Dùng để kiểm thử dữ liệu đã được huấn luyện và gán nhãn cho văn bản bất kỳ
Training Dùng cho chức năng huấn luyện
TrainingFile Lớp bao gồm các hàm: cut_tag_name, read_training, read_all, set_frequency, set_frequency_all_data, feature_selection,
write_train, write_all, update_training. Dùng để đọc nội dung các file trong dữ liệu huấn luyện, gán tần số xuất hiện cho từng từ và lọc những từ cĩ tần số nhỏ hơn mức tối thiểu (mặc định là 10)
Main Lớp là giao diện đồ họa của chương trình, xử lý các sự kiện ứng với từng chức năng của chương trình
Chức năng các hàm cụ thể được sử dụng trong chương trình phân loại văn bản:
Tên hàm Mơ tả
double get_distribution_xy(int context_arg, int tag_arg)
Tính xác suất thực nghiệm của cặp ngữ cảnh (context_arg, tag_arg) và kết quả trả lại kiểu double
double get_distribution_x(int context_arg, int tag_arg)
Tính xác suất ngữ cảnh của ngữ cảnh contex_arg
void set_feature() Hàm gán giá trị cho mảng đặc trưng. Cĩ giá trị 1 nếu đặc trưng xuất hiện trong dữ liệu huấn luyện, 0 nếu ngược lại
double get_c() Trả lại giá trị tổng các đặc trưng của từng nhãn lớn nhất
double get_z() Trả lại giá trị Z trong cơng thức tính các giá trị tham số của thuật tốn IIS
double get_p_yx(int tag) Trả lại giá trị xác suất p(y|x) double
get_empirical_expectation(int tag, int context)
Trả lại giá trị kỳ vọng thực nghiệm ứng của cặp đặc trưng với nhãn tag và ngữ cảnh context
tag, int context) với nhãn tag và ngữ cảnh context double delta_lamda(int tag, int
context)
Trả lại giá trị Δλ của cặp đặc trưng (tag, context)
void lamda(double
delta_lamda_init, int loop)
Tính trọng số λ cho các cặp đặc trưng với giá trị hội tụ là delta_lamda_init và số lần lặp tối đa là loop
void write_lamda(String
path_lamda, ArrayList <String> variable, ArrayList <Double> lamda_arg)
Ghi 2 mảng variable (các từ) và mảng trọng số lamda_arg thành file với đường dẫn là path_lamda
write_all(String path_lamda) Ghi tồn bộ các giá trị trọng số ứng với từng cặp đặc trưng thành file với đường dẫn path_lamda boolean read_input(String
path_test_file, boolean tieng_viet)
Đọc file đầu vào cần gán nhãn. Trong đĩ path_test_file là đường dẫn của file đầu vào và tieng_viet là biến điều khiển dữ liệu đầu vào là tiếng việt (nếu true) hay tiếng anh. Trả lại là true nếu tồn tại file và false nếu ngược lại
void set_lamda(LamdaFile lamda_arg)
Gán giá trị trọng số λ cho từng đặc trưng tương ứng của văn bản cần gán nhãn
void
set_model_distribution(LamdaFile lamda_arg)
Tính xác suất mà file đầu vào cần gán nhãn thuộc vào các các nhãn tương ứng. Và đưa ra nhãn cĩ xác suất là lớn nhất. Nghĩa là nhãn được gán cho văn bản đĩ
void cut_tag_name(String path) Từ đường dẫn path (chỉ ra các file đã được huấn luyện), hàm sẽ gán tên các nhãn cĩ thể được gán cho văn bản cần phân loại vào một mảng
boolean read_lamda_file(String path_lamda_file, int tag_arg)
Đọc file đã được huấn luyện với đường dẫn path_lamda_file và cĩ nhãn là tag_arg rồi lưu vào
mảng
void read_all() Đọc tất cả các file đã được huấn luyện với đường dẫn tới các file huấn luyện đã được chỉ ra
boolean
read_nonsensical_word(String fileName)
Đọc file stop-word với đường dẫn file stop-word là fileName
boolean nonsensical_word(String word)
Kiểm tra xem từ word cĩ phải là stop-word khơng. Nếu đúng kết quả trả lại là true và false nếu ngược lại
void test_event() Thực hiện chức năng kiểm thử void set_tag() Thực hiện chức năng gán nhãn boolean read_training(String path,
ArrayList <String> variable, boolean tieng_viet)
Đọc file cĩ trong dữ liệu huấn luyện với đường dẫn path vào mảng variable
void read_all(String path, boolean tieng_viet)
Đọc tồn bộ các file cĩ trong dữ liệu huấn luyện với đường dẫn path. Biến tieng_viet để thơng báo dữ liệu huấn luyện là tiếng việt (true) hay tiếng Anh (false)
void set_frequency(ArrayList <String> tag_arg, ArrayList <Double> frequency_arg)
Gán giá trị tần số cho từng từ trong dữ liệu huấn luyện
void set_frequency_all_data() Gán giá trị tần số cho tồn bộ các nhãn trong tập dữ liệu huấn luyện
void feature_selection(double feature_selection)
Lọc bỏ những đặc trưng cĩ tần số xuất hiện nhỏ hơn feature_selection
void write_all(String path_frequency)