5. TÌM HIỂU MỘT SỐ CHỨC NĂNG TRONG NLTK
5.3.6. TnT tagger
TnT là từ viết tắc cho 3 bộ gán nhãn đầu trong Ngram mà chúng ta đã tìm hiểu. Nó là một bộ gán nhãn thống kê dựa trên mô hình Markov bật 2 để gán nhãn cho các
từ. tham khảo http://www.aclweb.org/anthology-new/A/A00/A00-1031.pdf
Ngoài ra còn có bộ gán nhãn viết lại Tnt có tên là HunposTagger tham khảo
http://code.google.com/p/hunpos/
TnT khác với các bộ gán nhãn khác về cách sử dụng, đó là bạn phải gọi tường minh phương thức train() sau khi khởi tạo nó.
>>> tnt_tagger = tnt.TnT()
>>> tnt_tagger.train(train_sents) >>> tnt_tagger.evaluate(test_sents) 0.87580401467731495
Cách làm việc của TnT dựa trên TrigGram khác hoàn toàn với cách liên kết xâu các backoff như trước theo thứ tự. Nó chọn bộ gán nhãn tốt nhất trong 3 bộ này để lấy làm bộ phân tích cho mỗi từ dựa trên nguyên tắc thống kê xác suất cao nhất và xác suât cao nhất có điều kiện. Nó cũng cố gắng đưa ra các ứng viên gán nhãn cho toàn bộ câu một lần cũng dựa vào thống kê.
Tương tự các phương pháp khác, bạn có thể bổ sung một bộ phân tích dự phòng (unknown) cho trường hợp các từ không thể tìm được nhãn với 3 bộ phân tích con ở trên. Lưu ý phải luôn truyền tham số Trained=true để nó thực hiện huấn luyện cho bộ dự phòng này. Nếu không bạn phải gọi tường minh trước khi truyền vô bằng phương thức unk.train(data).
>>> from nltk.tag import DefaultTagger >>> unk = DefaultTagger('NN')
>>> tnt_tagger = tnt.TnT(unk=unk, Trained=True) >>> tnt_tagger.train(train_sents)
>>> tnt_tagger.evaluate(test_sents) 0.89272609540254699
Trong quá trình phân tích nó có thể phân biệt kí tự Hoa và thường bằng tham số C=True. Thông thường độ chính xác của nó sẽ không tăng đáng kể, nếu có thì chủ yếu là do các danh từ riêng.