Kết quả thực hiện crf_learn

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Lập trình song song trên nền đơn vị xử lý đồ họa và ứng dụng (Trang 41 - 44)

Trong đó:

- iter: số lần lặp

- terr: tỷ lệ lỗi đối với các tag. (số tag lỗi chia cho tất cả các tag) - serr: tỷ lệ lỗi đối với các câu. (số câu lỗi chia cho tổng số câu) - act: số ví dụ đƣợc kích hoạt trong tập làm việc

- uact: số ví dụ mà tham số kép đạt ngƣỡng trên của C. 0 uact khi dữ liệu huấn luyện là tách tuyến tính.

- obj: giá trị của đối tƣợng hiện thời, ||w||^2

- kkt: giá trị kkt lớn nhất. Khi giá trị này = 0.0, MIRA training kết thúc. * Ánh xạ CRF-CRF++:

Trong CRF++, tác giả tổ chức các câu thành các đối trƣợng Tagger, đối tƣợng này chứa các thông tin về tập dữ liệu training nhƣ:

- Câu cần gán nhãn:

std::vector<std::vector <const char *> > x_;

- Các loại nhãn: std::vector<char*> y_;

- Thừa số chuẩn hóa: double Z_;

- …

Tính toán thừa số chuẩn hóa bằng thuật toán forwardbackward nhƣ sau:

void TaggerImpl::forwardbackward() {

if (x_.empty()) return;

for (int i = 0; i < static_cast<int>(x_.size()); ++i)

for (size_t j = 0; j < ysize_; ++j)

node_[i][j]->calcAlpha();

for (int i = static_cast<int>(x_.size() - 1); i >= 0; --i)

for (size_t j = 0; j < ysize_; ++j)

node_[i][j]->calcBeta(); Z_ = 0.0;

for (size_t j = 0; j < ysize_; ++j)

Z_ = logsumexp(Z_, node_[0][j]->beta, j == 0);

return;

Trong CRF++, để xác định y trong công thức (3.13), tác giả dùng thuật toán Viterrbi nhƣ sau:

void TaggerImpl::viterbi() {

for (size_t i = 0; i < x_.size(); ++i) { for (size_t j = 0; j < ysize_; ++j) { double bestc = -1e37;

Node *best = 0;

const std::vector<Path *> &lpath = node_[i][j]->lpath; for (const_Path_iterator it = lpath.begin(); it != lpath.end(); ++it) {

double cost = (*it)->lnode->bestCost +(*it)->cost + node_[i][j]->cost; if (cost > bestc) { bestc = cost; best = (*it)->lnode; } } node_[i][j]->prev = best;

node_[i][j]->bestCost = best ? bestc : node_[i][j]- >cost;

} }

double bestc = -1e37; Node *best = 0;

size_t s = x_.size()-1;

for (size_t j = 0; j < ysize_; ++j) { if (bestc < node_[s][j]->bestCost) { best = node_[s][j];

bestc = node_[s][j]->bestCost; }

}

for (Node *n = best; n; n = n->prev) result_[n->x] = n->y;

cost_ = -node_[x_.size()-1][result_[x_.size()-1]]- >bestCost;

4.2.2. Testing

Trong đó model_file đƣợc tạo ra ở bƣớc learn. Còn test_file là dữ liệu kiểm thử muốn gán tag tuần tự. test file phải cùng dạng với training file.

Ví dụ kết quả thực hiện crf_test:

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Lập trình song song trên nền đơn vị xử lý đồ họa và ứng dụng (Trang 41 - 44)

Tải bản đầy đủ (PDF)

(57 trang)