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 hoà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 toá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
[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 toá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;
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 toán IIS cho việc tính toá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
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 toá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
double get_model_expectation(int tag, int context)
Trả lại giá trị kỳ vọng mô hình của cặp đặc trưng 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 toà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
path_lamda_file, int tag_arg) 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 toà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 toà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)