Để sử dụng được CRF++ ta cần phải có 2 file dữ liệu, 1 file dùng cho quá trình huấn luyện, file còn lại dùng cho quá trình kiểm tra. Cả file huấn luyện và kiểm tra cần có 1 định dạng riêng của CRF++ để nó có thể làm việc được. Thông thường file huấn luyện và file kiểm tra chứa đựng rất nhiều từ tố. Mỗi từ tố phải viết trên một dòng, Ngoài từ tố ra còn có các cột chứa các thông tin khác dùng để mô tả từ tố chẳng hạn như là từ loại của từ tố và cột cuối cùng chứa nhãn của từ tố. Để định nghĩa từ tố phụ thuộc vào từng công việc, trong hầu hết các trường hợp điển hình thì chúng là các từ. Mỗi một từ tố ở một dòng, các cột được phân chia bởi các khoảng trắng. Trình tự các từ tố tạo thành một câu. Một dòng trắng để phân biệt giữa các câu.
Dưới đây là một ví dụ về file huấn luyện. Với cột thứ nhất là bản thân từ đó, cột thứ hai là từ loại và cột cuối cùng là nhãn cần gán.
Input: Data He PRP B-NP reckons VBZ B-VP the DT B-NP current JJ I-NP account NN I-NP deficit NN I-NP will MD B-VP
to TO B-PP only RB B-NP # # I-NP 1.8 CD I-NP billion CD I-NP in IN B-PP September NNP B-NP . . O He PRP B-NP reckons VBZ B-VP .. 3.4.3.3. Template type
File này mô tả những đặc trưng sẽ sử dụng khi huấn luyện và kiểm tra. Mỗi một dòng trong trong file template chỉ ra một template, mỗi một template có dạng như sau %x[row,col] dùng để định nghĩa một từ trong dữ liệu đầu vào.
File template được xây dựng tùy vào từng bài toán cụ thể và tùy vào file huấn luyện và file kiểm tra. Ví dụ với dữ liệu đầu vào như sau thì file template sẽ được xây dựng như sau:
Dữ liệu đầu vào
He PRP B-NP reckons VBZ B-VP
the DT B-NP << CURRENT TOKEN current JJ I-NP account NN I-NP Template Từ tố tương ứng %x[0,0] The %x[0,1] DT %x[-1,0] Reckons %x[-2,1] PRP %x[0,0]%x[0,1] The/DT
Với loại này khi đưa 1 template CRF ++ sẽ tự động tạo ra các hàm đặc trưng
func1 = if (output = B-DT and feature="U01:DT") return 1 else return 0 func2 = if (output = I-DT and feature="U01:DT") return 1 else return 0 func3 = if (output = O and feature="U01:DT") return 1 else return 0 ...
Số lượng hàm tạo ra bởi một template là ( L * N) L : số lượng output
N: số lượng chuỗi duy nhất được mở rộng từ template dược chỉ ra.
• Bigram template
Với template này ,sự liên kết giữa từ tố hiện tại (current token) và từ tố trước đó (previous output token) được tự động tạo ra
Với loại này tạo ra (L *L *N) (N là số lượng các đặc trưng riêng biệt được tạo ra) đặc trưng khác nhau do vậy có thể không hiệu quả trong huấn luyện và kiểm tra.
3.4.4. Huấn luyện và kiểm tra
Sau khi chuẩn bị toàn bộ các file train, file test, file template ta tiến hành huấn luyện và test như sau
Huấn luyện (training)
Để huấn luyện các file ta sử dụng lệnh crf_learn với cú pháp sau:
% crf_learn template_file train_file model_file
Ở đó :
Lệnh crf_learn tạo ra mô hình huấn luyện trong file model_file
Kết quả của lệnh crf_learn:
iter: Số lượng lặp được xử lý
terr: Tỷ lệ lỗi đối với các thẻ ( được tính bằng số lượng thẻ lỗi/ tổng số thẻ ) serr: Tỷ lệ lỗi đối với câu ( được tính bằng số câu lỗi /tổng số câu )
obj: Giá trị của đối tượng hiện tại. Khi giá trị này hội tụ tại một điểm cố định. CRF ++ dừng lặp
Bảng 2. Bảng các tham số huấn luyện
Tham số Giá trị mặc định Ý nghĩa
-a CRF-L2 hoặc CRF-L1
CRF-L2 Tham số này dùng để thay đổi thuật toán mặc định của CRF ++ . Thông thường thì L2 thực hiện tốt hơn không đáng kể so với L1, trong khi số lường các đặc tính L1 là nhỏ hơn một cách đáng kể so với L2
-c float: Cùng với tùy chọn này, có thể thay đổi nhiều tham số cho CRFs
-f NUM 1 Chỉ có các thuộc tính có tần suất xuất hiện lớn hơn giá trị này thì mới được tích hợp vào mô hình CRF .
-p NUM Nếu máy tính của bạn có nhiều CPU, giúp cho việc huấn luyện nhanh hơn bằng cách sử dụng đa luồng. NUM là số lượng các luồng
Để kiểm tra dữ liệu sau khi huấn luyện sử dụng lệnhcrf_test với cú pháp như sau:
% crf_test -m model_file test_files ...
Model_file là file do crf_learn tao ra. Trong khi test không cần tạo ra template_file bởi vì model file có thông tin giống như file template .
Test_file là kiểm tra dữ liệu bạn muốn gán thẻ theo trình tự. File này có định dạng giống như file traning được xây dựng ở trên.
Bảng 3. Bảng các tham số của lệnh crf_test
Tham số Giá trị mặc định Ý nghĩa
-v level 0 Tùy chọn này đưa ra một số thông tin chi tiết từ CRF++bằng cách tăng cấp độ của level N best
ouput
Đưa ra N kết quả được sắp xếp theo xắc suất điều kiện của CRF++
3.5. TỔNG KẾT CHƯƠNG
Trong chương này đã nêu ra hai vấn đề cơ bản trong mô hình CRF. Có rất nhiều phương pháp sử dụng để giải quyết hai vấn đề đó. Trong phần này đã nêu ra hai hướng giải quyết cơ bản và hiệu quả nhất. Đó thuật toán Virterbi và hai thuật toán T và thuật toán S. Cả hai thuật toán đều được cải tiến từ thuật toán IIS. Chương này cũng giới thiệu được công cụ CRF++ toolkit, một công cụ có nhiều ứng dụng trong xử lý ngôn ngữ tự nhiên.
Chương 4. ỨNG DỤNG CRF
VÀO BÀI TOÁN TRÍCH CHỌN THÔNG TIN NHÀ ĐẤT
Một hệ thống hữu ích dùng để xử lý tiếng Việt là rất quan trọng. Ví dụ như bài toán nhận biết các loại thực thể là một bài toán cơ bản trong trích chọn thông tin và xử lý ngôn ngữ tự nhiên. Từ việc nhận biết các loại thực thể ta có thể rút trích ra những thông tin cần thiết tùy thuộc vào mục đích riêng. Trong chương này sẽ ứng dụng mô hình CRF đã nói ở trên vào bài toán trích chọn thông tin nhà đất.
4.1. MÔ HÌNH HÓA BÀI TOÁN TRÍCH CHỌN THÔNG TIN NHÀ ĐẤT
Đối với bất kỳ một văn bản nào thì việc hiểu nhanh văn bản và tóm tắt được nội dung chính là rất cần thiết. Cũng như vậy trong bất kỳ một bản tin nhà đất nào kể cả người bán và người mua đều quan tâm đến những vấn đề cơ bản nhất liên quan đến nhà, hoặc đất cần bán hoặc cần mua.
Với tư tưởng vậy với một thông tin nhà đất những yếu tố chúng ta cần quan tâm là: Vị trí của nhà hoặc đất như thế nào, diện tích?, giá bán?, loại nhà nào?, địa chỉ liên hệ với chủ sở hữu?. Với tất cả các thông tin trên có thể hiểu đầy đủ được về thông tin về ngôi nhà cần bán hoặc cần mua. Nhiệm vụ của bài toán trích chọn thông tin nhà đất là làm sao có thể rút trích những thông tin được liệt kê trong bảng 4 như sau:
Tên Chú thích DC Địa chỉ DT Diện tích DD Di động GB Giá bán LN Loại nhà
Vấn đề đặt ra là với một lượng thông tin nhỏ thì ta có thể dễ dàng tìm ra được các thông tin đó. Nhưng với một dữ liệu lớn thì vấn đề rất khó khăn. Chính vì vậy và việc ứng dụng một mô hình có thể “tự học” để có thể tìm ra những thông tin đó là rất cần thiết.
4.1.1. Xử lý dữ liệu đầu vào
Dữ liệu ban đầu đầu được tiền xử lý trong win (được gán nhãn bằng tay trong win). Sau đó, chuyển từ dạng mã hóa UTF-8 sang tiếng Việt không dấu. Có thể mô hình hóa như hình 14 sau:
Hình 14. Mô hình xử lý dữ liệu của bài toán trích chọn nhà đất
Từ bản tin nhà về nhà đất sau khi tải về sẽ được gán nhãn, vì hiện tại CRF++ không hỗ trợ UNICODE nên khóa luận tạm thời chọn giải pháp là chuyển sang tiếng Việt không dấu. Điều này có thể làm giảm chất lượng của hệ thống nhận dạng do thông
Dữ liệu tiếng Việt
Dữ liệu được gán nhãn
Dữ liệu được chuyển thành tiếng Việt không dấu
tin ngữ nghĩa của đoạn văn bị mất đi, tuy nhiên hướng phát triển tương lai tác giả sẽ đề xuất một cách tốt hơn để tránh mất thông tin trong quá trình chuyển đổi
Do không có sẵn các công cụ xử lý cho tiếng Việt, như công cụ gán nhãn từ loại nên trong bài toán trích chọn thông tin nhà đất file huấn luyện và file kiểm tra chỉ sử dụng duy nhất chính từ tố đó, do vậy trong file huấn luyện và file kiểm tra chỉ có hai thông là từ và nhãn do vậy 2 file này chỉ có hai cột, cột thứ nhất chứa từ là chính từ đó và cột thứ hai là nhãn của loại từ. Với các từ tố không liên quan đến các thông tin trích chọn thì được gán nhãn bằng nhãn OTH (other):
Ví dụ một đoạn dữ liệu trong file huấn luyện
Cần OTH bán OTH hai OTH lô OTH đất OTH TT9 B-DC Văn I-DC Phú I-DC mặt OTH đuờng B-DC Lê I-DC Trọng I-DC Tốn I-DC , OTH diện OTH tích OTH 90m2 B-DT , OTH mặt OTH tiền OTH
4.2.1. Phần cứng
MáyCore 2 Duo, chip 512 MHz, Ram 1GB, trong máy có bộ biên dịch gcc phiên bản >3.00. Dùng máy ảo vimware chạy hệ điều hành Linux Redhat Enterprise 5.0
4.2.2. Phần Mềm
CRF ++ toolkit là một CRF Framework cho các bài toán phân đoạn và gán nhãn giá trị tuần tự. Trong phần này, sử dụng một ứng dụng của CRF vào việc trích chọn thông tin nhà đất. Sử dụng phiên bản CRF++toolkit version 0.51 [21].
4.2.3. Dữ liệu thực nghiệm
Dữ liệu thực nghiệm gồm khoảng 300 bản tin lĩnh vực nhà đất. Nội dung về bản tin nhà đất được lấy từ các website sau: http://nhadat.timnhanh.com,
http://www.timnhadat.com/, http://nhadat24h.net/, các website này có các định dạng và cách trình bày khác nhau, do vậy cần phải qua bước xử lý như đã trình bày ở trên.
Trong đó file huấn luyện khoảng 300 câu, và file kiểm tra khoảng 200 câu.
4.2.3.1. Lần thử nghiệm thứ nhất
Trong bài toán của mình, tôi đã xây dựng file mẫu với kiểu định dạng Unigram trọn như file template sau
U00:%x[-2,0]: (xét từ trước hai vị trí và nhãn hiện tại) U01:%x[-1,0]: (xét từ trước một vị trí hiện tại )
U02:%x[0,0]: (từ hiện tại)
U03:%x[1,0]: (từ sau vị trí hiện tại) U04:%x[2,0]: (từ sau 2 vị trí)
U05:%x[-1,0] / %x[0,0]: (Từ trước và từ hiện tại) U06:%x[0,0]/%x[1,0]: (Từ sau và từ hiện tại)
Với các khuôn mẫu này sẽ tạo ra các hàm đặc trưng để cho mô hình có thể “tự học” Ví dụ như
func1= if(output= B-DC ) return 1 else return 0; func2=if(output=I-DC ) return 1 else return 0;
Trong lần thử nghiệm đầu tiên, toàn bộ hệ thống làm việc đều do mô hình tự học. Như chúng ta đã biết những thông tin cần rút trích trong bài toán trích chọn thông tin nhà đất là địa chỉ, diện tích, loại nhà, di động, giá bán.
Với các thông tin trích chọn này ta có thể mô tả như sau: Đối với thông tin về số di động sẽ bao gồm một chuỗi toàn những số từ 0 đến 9 ví dụ 01678558976, đối với địa chỉ, vị trí của nhà hoặc đất cần bán hoặc cần mua thì là một danh từ chỉ địa điểm và thường viết hoa ký tự đầu tiên ví dụ như Mỹ Đình- Hà Nội. Đối với thông tin giá bán thường thì giá bán sẽ là một chuỗi có cả số và có dấu chấm hoặc dấu phảy ví dụ như 1.2 tỷ hoặc 1,2 tỷ.
Từ những mô tả trên trong lần thử nghiệm thứ hai này, tôi sẽ thêm những tính năng mới mô tả cho những thông tin cần rút trích trên, giúp cho quá trình tự học của mô hình rút trích được tốt nhất.
Xét từ trước hai vị trí và nhãn hiện tại Xét từ trước một vị trí hiện tại
Từ sau vị trí hiện tại Từ sau 2 vị trí
Từ trước và từ hiện tại Từ sau và từ hiện tại
Từ hiện tại có toàn số hay không?
Từ hiện tại có chữ đầu tiên là chữ hoa hay không? Từ hiện tại có toàn chữ thường hay không?
Từ hiện tại có gồm các ký tự như “.” hoặc “,”.
Với những đặc trưng của dữ liệu bài toán như vậy mình có thể xây dựng thêm các feature fk trong công thức (2.16) mô tả cho dữ liệu của bài toán trích chọn thông tin nhà đất như sau:
Hàm thứ nhất function InitCap() mô tả cho thông tin địa chỉ: Như đã biết địa chỉ thường viết hoa chữ cái đầu tiên, hàm này có chức năng nếu chữ cái đầu tiên của một từ
tố là chữ hoa thì sẽ trả về một giá trị nào đó còn nếu không trả về một giá trị khác. Có thể mô tả như sau:
1 Nếu chữ cái đầu tiên của từ quan sát được là chữ hoa
fk= InitCap() =
0 nếu ngược lại
Tương tự như vậy ta xây dựng các hàm ContainAllDigit(): Nếu chuỗi quan sát được là một chuỗi số thì có khả năng đây là số điện thoại.
1 Nếu dữ liệu quan sát là toàn số
fk= ContainAllDigit() =
0 nếu ngược lại
Hàm thứ ba DigitandComma() hàm này xây dựng để mô tả đặc trưng của thông tin liên quan đến giá bán, ở đây giá bán thường được biểu diễn bằng một số trong đó có thể chứa các dấu phân cách ví dụ: 2,3 hoặc 1.55. Nếu dữ liệu quan sát là con số có dấu phân cách là dấu phảy hoặc dấu chấm thì rất có thể đó là giá bán của ngôi nhà hoặc mảnh đất.
1 nếu dữ liệu quan sát là số hoặc số dấu chấm hoặc phảy
fk= DigitandComma() =
0 nếu ngược lại
Ngoài ra xây dựng dựng hàm AllLow() để kiểm tra xem dữ liệu quan sát được có hoàn toàn là chữ viết thường hay không. Hàm này được xây dựng như ba hàm trên nó sẽ mô tả cho những dữ liệu khác ví dụ như ngoài những thông tin liên quan đến bài toán rút trích như địa chỉ, diện tích, số điện thoại, giá bán thì các dữ liệu khác sẽ được mô tả trong hàm này.
1 nếu từ hiện tại là hoàn toàn chữ thường
fk= AllLow() =
Để kiểm nghiệm công cụ đã sử dụng khoảng 500 câu trong file huấn luyện và 200 câu test.
Để đánh giá kết quả ta đánh giá thông qua độ chính xác (precision), độ hồi tưởng (recall), và F1 được xác định như sau:
Bảng kết quả thu được với sử dụng các mẫu đặc trưng thứ nhất:
Bảng 4. Bảng kết quả lần test thứ nhất Nhãn Độ chính xác Độ hồi tưởng F1 DD 72.36% 83,18% 77.39% GB 51.72% 72.82% 60.48% DT 60.21% 69.70% 64.61% DC 27.87% 57.63% 37.57% LN 41.54% 69.23% 51.92%
Bảng kết quả thu được với mẫu đặt trưng thứ hai:
# số lượng nhãn chính xác
Độ chính xác =
# tổng số nhãn cần gán
# số lượng nhãn chính xác
Độ hồi tưởng =
# tổng số nhãn được gán trong tập test
2*độ chính xác* độ hồi tưởng
F1 =
Đồ thị sau sẽ diễn ta đầy đủ cho mức chính xác của công cụ. Chứng tỏ đây là một công cụ hữu ích cho việc trích chọn thông tin
0.00% 10.00% 20.00% 30.00% 40.00% 50.00% 60.00% 70.00% 80.00% DC GB DD DT LN Thông tin trích chọn Đ ộ c h ín h x á c lần thử nghiệm thứ hai lần thử nghiệm thứ nhất
Hình 15. Biểu đồ thể hiện sự tương quan giữa hai lần kiểm tra
4.3. HẠN CHẾ VÀ HƯỚNG ĐI CHO TƯƠNG LAI
Do là bài toán trích chọn thông tin trong tiếng Việt, nhưng với môi trường Linux, CRF++ toolkit thì không hỗ trợ UNICODE. Do vậy việc chuyển tiếng Việt về tiếng Việt không dấu đã phần nào làm mất đi phần ngữ nghĩa của văn bản. Do vậy sẽ ảnh
Nhãn Độ chính xác Độ hồi tưởng F1 DD 72.36% 91.75% 80.91% GB 54.48% 71.17% 61.72% DT 73.30% 76.50% 74.87% DC 31.15% 66.09% 42.34% LN 32.31% 67.74% 43.75%
hưởng đến độ chính xác của bài toán. Ngoài ra do dữ liệu thực nghiệm vẫn còn ít, nên cũng ảnh hưởng đến kết quả thử nghiệm.
Đối với các bài toán trích chọn như trên thì việc viết các đặc tính (feature) giúp hệ thống có thể tự học tốt nhất thì sẽ mang lại hiệu quả cao. Với cách đó có thể thêm các thông tin mô tả các từ tố trong file huấn luyện. Ví dụ nếu có thêm công cụ gán nhãn từ