CHƯƠNG 3: THỰC NGHIỆM VÀ KẾT QUẢ

Một phần của tài liệu Đồ án tốt nghiệp XÂY DỰNG ỨNG DỤNG TRÍCH rút THỜI GIAN, địa điểm từ dữ LIỆU TIN NHẮN (Trang 38 - 42)

- Viết hoa chữ cái đầu tiên của tên riêng, tên người, địa danh.

3.CHƯƠNG 3: THỰC NGHIỆM VÀ KẾT QUẢ

Chương này trình bày cụ thể về quá trình xây dựng, thu thập dữ liệu huấn luyện, các bước thực nghiệm và kết quả thu được. Từ đó đưa ra phân tích, nhận xét về kết quả đó.

3.1. Thu thập dữ liệu

3.1.1.Dữ liệu tin nhắn

Dữ liệu được thu thập từ 2 nguồn chính: sử dụng code trực tiếp từ tin nhắn điện thoại và tự tạo dữ liệu thủ công. Tin nhắn điện thoại được thu thập thông qua một chương trình lập trình nhỏ, có sử dụng API để lấy dữ liệu trên hệ điều hành Android. Đồng thời, một lượng lớn dữ liệu khác được tạo thủ công bởi 5 người bạn của em nhằm đảm bảo một phần tính phong phú và khách quan.

Để tạo thuận lợi và đảm bảo hiệu quả cao, ta đặt ra một vài quy ước về dữ liệu đầu vào như sau:

• Dữ liệu đầu vào được biểu diễn dưới dạng văn bản text thuần túy, sử dụng ngôn ngữ Tiếng Việt, viết đúng chính tả và không sử dụng các từ viết tắt gây hiểu nhầm.

• Biểu diễn tin nhắn đơn: Mỗi tin nhắn sẽ được biểu diễn dưới dạng 1 văn bản ngắn, từ 1-2 câu. Bên trong có chứa từ miêu tả các đối tượng thời gian, địa điểm (có thể chỉ chứa một trong 2 đối tượng nói trên). Không chấp nhận các tin nhắn chỉ chứa ký tự trắng.

• Biểu diễn hội thoại: Một hội thoại được cấu tạo bởi một hoặc nhiều tin nhắn, bao gồm cả tin nhắn của người gửi và người nhận. Mỗi tin nhắn nằm trên một dòng tách biệt nhau (phân cách nhau bởi một ký tự xuống dòng \n đánh dấu sự kết thúc của một tin nhắn).

3.1.2.Danh sách địa danh, địa điểm

Trong đồ án này, em có sử dụng cấu trúc dữ liệu cây tiền tố (chương 2) để lưu trữ và tìm kiếm thông tin về địa danh, địa điểm. Danh sách được xây dựng nhằm hỗ trợ một phần tìm kiếm và phát hiện thực thể địa điểm trên tập dữ liệu thử nghiệm. Trên thực tế, số lượng địa danh, địa điểm là rất lớn, danh sách không thể bao quát đc tất cả các trường hợp, do đó, đã được tập trung chủ yếu vào các địa điểm tại phạm vi Hà Nội. Tập dữ liệu được xây dựng chứa thông tin của hơn 18800 địa điểm bao gồm:

• Danh sách các tỉnh, thành phố, quận, huyện, các đơn vị hành chính ở Việt Nam • Danh sách đường phố, địa danh trên địa bàn Hà Nội.

• Danh sách các nhà hàng, quán ăn.

• Danh sách khách sạn nổi tiếng trên địa bàn Hà Nội.

• Các địa điểm khác...

Tập dữ liệu được xây dựng bằng việc tìm kiếm danh sách trên internet, kết hợp bổ sung bằng tay với một vài trường hợp cụ thể. Quá trình thu thập dữ liệu có sử dụng thư viện Jsoup của Java để tìm kiếm và lấy dữ liệu tự động từ các nguồn

http://www.trivago.vn/, http://www.foody.vn/, https://vi.wiktionary.org/,.. 3.2. Công cụ huấn luyện và kiểm thử

3.2.1.Công cụ CRF++

CRF++2 là một công cụ nguồn mở, đơn giản, có tình tùy biến cao, được sử dụng trong CRF, dùng để phân đoạn hay gán nhãn cho các dữ liệu liên tục. CRF++ được thiết kế với mục đích phục vụ cho các thao tác trong xử lý ngôn ngữ, chẳng hạn như nhận dạng thực thể có tên, trích rút thông tin, chunking...

Hệ thống được hoạt động theo phương pháp học nửa giám sát được thực hiện gồm các bước sau:

Bước 1: Tạo bộ dữ liệu huấn luyện bé. Bước này được thực hiện bằng tay. Bước 2: Sử dụng mô hình CRFs để huấn luyện trên tập dữ liệu này.

Bước 3: Tạo tập test và sử dụng CRFs để gán nhãn.

Bước 4: Dữ liệu mới được sinh ra bằng cách bổ sung các nhãn cho tập dữ liệu test.

CRF++ được chia làm 2 module chính như sau:

Hình 3.1. Mô hình hoạt động của CRF++

Định dạng file huấn luyện và kiểm nghiệm:

Cả file huấn luyện và kiểm nghiệm đều phải có một định dạng thống nhất để CRF++ có thể hoạt động. Mỗi file chứa nhiều token, mỗi token bao gồm một số lượng cố định các cột. Định nghĩa của “token” phụ thuộc vào tùy từng công việc, Tuy nhiên, trong hầu hết các trường hợp, chúng đơn giản đóng vài trò là các từ (words). Mỗi token được thể hiện bởi một dòng gồm nhiều cột, mỗi cột cách nhau bởi một khoảng trắng (ký tự trắng hoặc ký tự tab). Một chuỗi các token tạo thành một câu. Mỗi câu được phân tách nhau bởi một dòng trống.

Ta có thể sử dụng bao nhiêu cột tùy ý, tuy nhiên số cột của mỗi token phải bằng nhau. Mỗi cột có thể có mối quan hệ với nhau, không nhất thiết phải độc lập. Cột cuối cùng đại diện cho nhãn kết quả mà CRF dùng để huấn luyện.

Dưới đây là ví dụ về một file huấn luyện: 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 narrow VB I-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 ..

Trong ví dụ này, mỗi token có chứa 3 để mô tả: cột 1 có giá trị là chính từ đó, cột 2 là POS tag, cột 3 chứa nhãn cần huấn luyện, được viết theo định dạng IOB2.

Xây dựng các template đặc trưng:

Tập tin Template là một tập tin được xây dựng một cách thủ công, dùng để mô tả mối quan hệ giữa các đặc trưng được sử dụng trong huấn luyện và kiểm nghiệm. (adsbygoogle = window.adsbygoogle || []).push({});

Mẫu template cơ bản và macro:

Mỗi dòng trong file này thể hiện một template. Trong mỗi template, mỗi macro

%x[row,col] được dùng để đại diện cho giá trị của một đặc trưng trong file dữ liệu huấn luyện. [row,col] chỉ ra vị trí tương đối của một đặc trưng so với từ đang được xét. row là chỉ số của hàng, col là chỉ số của cột.

Ví dụ:

Sáng_mai N false H B-RT

8h M false T B-CLK

ra R false T O

PTIT Np true H B-LOC << Từ đang xét

gặp V false T O

nhau N false T O

nhé I false T O

? ? false T O

Template Đặc trưng được mô tả

%x[0,0] PTIT

%x[0,1] Np

%x[-1,0] ra

%x[-2,1] M

%x[0,0]/%x[0,1] PTIT/Np

Giả sử, ta coi từ (token) đang được xét là gốc tọa độ [0,0]. Ta sẽ thu được một ma trận 2 chiều. Theo đó, vị trí của mỗi đặc trưng mà template thể hiện được tính theo tọa độ này.

Có 2 loại mô hình template, mỗi loại được ký hiệu bởi ký tự đầu tiên trong tên của chúng:

• Unigram, ký hiệu “U”

Dưới đây là một template mô tả các đặc trưng của mô hình unigram. Khi ta viết một template “U01: %x[0,1]”, CRF++ sẽ tự động sinh ra một bộ các hàm đặc trưng (func1...fncN) như sau:

func2 = if (output = I-NP and feature="U01:DT") return 1 else return 0 func3 = if (output = O and feature="U01:DT") return 1 else return 0 ....

funcXX = if (output = B-NP and feature="U01:NN") return 1 else return 0 funcXY = if (output = O and feature="U01:NN") return 1 else return 0 ...

Số lượng các hàm đặc trưng được sinh ra là L*N, trong đó L là số các output class (nhãn kết quả cần huấn luyện) và N là số lượng chuỗi riêng nhất được mở rộng ra từ một template.

• Bigram, ký hiệu “B”

Với template này, một tổ hợp của token hiện tại và token trước đó được tạo ra. Khi này, có tổng cộng L*L*N các đặc trưng khác nhau được sinh ra, trong đó, L là số output class, N là số các đặc trưng riêng biệt được tạo bởi template. Khi số lượng các class lớn, mô hình template này sẽ tạo ra rất nhiều đặc trưng, điều này sẽ ảnh hưởng tới hiệu năng của huấn luyện và kiểm thử.

3.2.2.LibSVM

LibSVM3 là một trong số nhiều thư viện hỗ trợ thuật toán SVM. LibVM được viết bằng C++ và Java, có thể chạy được trên nhiều hệ điều hành khác nhau như Windows, Unix... LibSVM đơn giản, dễ sử dụng và hiệu quả cho SVM để phân lớp (C-SVC, m-SVC), hồi quy (epsilon-SVR, nu-SVR), ước lượng phân phối (one-class SVM) và hỗ trợ phân lớp đa lớp (multi-class classification). Với mục đích là cho phép người sử dụng có thể dễ dàng sử dụng SVM vào các ứng dụng cụ thể của họ.

Có thể kể đến những nghiên cứu thành công trong một số lĩnh vực đã sử dụng LibSVM như: thị giác máy tính, xử lý ngôn ngữ, tin sinh học... (adsbygoogle = window.adsbygoogle || []).push({});

3.3. Quá trình huấn luyện

3.3.1.Môi trường phần cứng huấn luyện:

Cấu hình phần cứng phục vụ cho quá trình huấn luyện:

- Vi xử lý: Intel Core i3

- RAM: 4.00 GB

- Hệ điều hành: Windows 7 64bit

- Dung lượng ổ cứng: 500 GB

Một phần của tài liệu Đồ án tốt nghiệp XÂY DỰNG ỨNG DỤNG TRÍCH rút THỜI GIAN, địa điểm từ dữ LIỆU TIN NHẮN (Trang 38 - 42)