Khái niệm cơ bản về gắn thẻ Part-of-Speech (POS)
Gắn thẻ POS là gì?
Gắn thẻ, một loại phân loại, là việc tự động gán mô tả của các mã thông báo. Chúng tôi gọi là 'thẻ' của bộ mô tả, đại diện cho một trong những phần của lời nói (danh từ, động từ, trạng từ, tính từ, đại từ, kết hợp và các tiểu loại của chúng), thông tin ngữ nghĩa, v.v.
Mặt khác, nếu chúng ta nói về gắn thẻ Part-of-Speech (POS), nó có thể được định nghĩa là quá trình chuyển đổi một câu dưới dạng một danh sách các từ, thành một danh sách các bộ giá trị. Ở đây, các bộ giá trị có dạng (từ, thẻ). Chúng ta cũng có thể gọi việc gắn thẻ POS là một quá trình gán một trong những phần của lời nói cho từ đã cho.
Bảng sau đại diện cho thông báo POS thường xuyên nhất được sử dụng trong kho tài liệu Penn Treebank -
Sr.No | Nhãn | Sự miêu tả |
---|---|---|
1 | NNP | Danh từ riêng, số ít |
2 | NNPS | Danh từ riêng, số nhiều |
3 | PDT | Người xác định trước |
4 | POS | Kết thúc có lợi |
5 | PRP | Đại từ nhân xưng |
6 | PRP $ | Đại từ sở hữu |
7 | RB | Trạng từ |
số 8 | RBR | Trạng từ, so sánh |
9 | RBS | Trạng từ so sánh nhất |
10 | RP | Hạt |
11 | SYM | Biểu tượng (toán học hoặc khoa học) |
12 | ĐẾN | đến |
13 | UH | Thán từ |
14 | VB | Động từ, dạng cơ sở |
15 | VBD | Động từ, thì quá khứ |
16 | VBG | Động từ, phân từ / hiện tại phân từ |
17 | VBN | Động từ, quá khứ |
18 | WP | Đại từ wh |
19 | WP $ | Đại từ sở hữu |
20 | WRB | Trạng từ wh |
21 | # | Bảng Anh |
22 | $ | Ký hiệu đô la |
23 | . | Dấu câu cuối câu |
24 | , | Dấu phẩy |
25 | : | Dấu hai chấm, dấu chấm phẩy |
26 | ( | Ký tự trong ngoặc trái |
27 | ) | Ký tự trong ngoặc phải |
28 | " | Dấu ngoặc kép thẳng |
29 | ' | Còn mở một trích dẫn |
30 | " | Dấu ngoặc kép còn mở |
31 | ' | Dấu ngoặc kép phải đóng |
32 | " | Dấu ngoặc kép mở ngay |
Thí dụ
Hãy để chúng tôi hiểu nó bằng một thử nghiệm Python -
import nltk
from nltk import word_tokenize
sentence = "I am going to school"
print (nltk.pos_tag(word_tokenize(sentence)))
Đầu ra
[('I', 'PRP'), ('am', 'VBP'), ('going', 'VBG'), ('to', 'TO'), ('school', 'NN')]
Tại sao phải gắn thẻ POS?
Gắn thẻ POS là một phần quan trọng của NLP vì nó hoạt động như điều kiện tiên quyết để phân tích thêm NLP như sau:
- Chunking
- Phân tích cú pháp
- Trích xuất thông tin
- Dịch máy
- Phân tích tình cảm
- Phân tích ngữ pháp & phân định từ ngữ
TaggerI - Lớp cơ sở
Tất cả các trình gắn thẻ nằm trong gói nltk.tag của NLTK. Lớp cơ sở của các trình gắn thẻ này làTaggerI, có nghĩa là tất cả các trình kích hoạt kế thừa từ lớp này.
Methods - Lớp TaggerI có hai phương thức sau đây phải được thực hiện bởi tất cả các lớp con của nó -
tag() method - Như tên của nó, phương thức này nhận danh sách các từ làm đầu vào và trả về danh sách các từ được gắn thẻ làm đầu ra.
evaluate() method - Với sự trợ giúp của phương pháp này, chúng tôi có thể đánh giá độ chính xác của trình gắn thẻ.
Cơ sở của việc gắn thẻ POS
Đường cơ sở hoặc bước cơ bản của việc gắn thẻ POS là Default Tagging, có thể được thực hiện bằng cách sử dụng lớp DefaultTagger của NLTK. Gắn thẻ mặc định chỉ cần gán cùng một thẻ POS cho mọi mã thông báo. Gắn thẻ mặc định cũng cung cấp đường cơ sở để đo lường các cải tiến về độ chính xác.
Lớp DefaultTagger
Gắn thẻ mặc định được thực hiện bằng cách sử dụng DefaultTagging lớp, nhận đối số duy nhất, tức là, thẻ mà chúng ta muốn áp dụng.
Làm thế nào nó hoạt động?
Như đã nói trước đó, tất cả các trình kích hoạt được kế thừa từ TaggerIlớp học. CácDefaultTagger được thừa kế từ SequentialBackoffTagger đó là một lớp con của TaggerI class. Hãy để chúng tôi hiểu nó với sơ đồ sau:
Là một phần của SeuentialBackoffTagger, các DefaultTagger phải triển khai phương thức select_tag () có ba đối số sau.
- Danh sách mã thông báo
- Chỉ mục của mã thông báo hiện tại
- Danh sách mã thông báo trước đó, tức là lịch sử
Thí dụ
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag(['Tutorials','Point'])
Đầu ra
[('Tutorials', 'NN'), ('Point', 'NN')]
Trong ví dụ này, chúng tôi chọn thẻ danh từ vì nó là loại từ phổ biến nhất. Hơn thế nữa,DefaultTagger cũng hữu ích nhất khi chúng tôi chọn thẻ POS phổ biến nhất.
Đánh giá độ chính xác
Các DefaultTaggercũng là cơ sở để đánh giá độ chính xác của các trình kích hoạt. Đó là lý do chúng ta có thể sử dụng nó cùng vớievaluate()phương pháp đo độ chính xác. Cácevaluate() phương pháp này lấy danh sách các mã thông báo được gắn thẻ làm tiêu chuẩn vàng để đánh giá trình gắn thẻ.
Sau đây là một ví dụ trong đó chúng tôi sử dụng trình gắn thẻ mặc định của mình, có tên exptagger, được tạo ở trên, để đánh giá độ chính xác của một tập hợp con treebank câu được gắn thẻ ngữ liệu -
Thí dụ
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
from nltk.corpus import treebank
testsentences = treebank.tagged_sents() [1000:]
exptagger.evaluate (testsentences)
Đầu ra
0.13198749536374715
Kết quả ở trên cho thấy rằng bằng cách chọn NN đối với mỗi thẻ, chúng tôi có thể đạt được kiểm tra độ chính xác khoảng 13% trên 1000 mục nhập của treebank ngữ liệu.
Gắn thẻ danh sách các câu
Thay vì gắn thẻ một câu duy nhất, NLTK của TaggerI lớp học cũng cung cấp cho chúng tôi một tag_sents()với sự trợ giúp của chúng tôi có thể gắn thẻ một danh sách các câu. Sau đây là ví dụ trong đó chúng tôi gắn thẻ hai câu đơn giản
Thí dụ
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag_sents([['Hi', ','], ['How', 'are', 'you', '?']])
Đầu ra
[
[
('Hi', 'NN'),
(',', 'NN')
],
[
('How', 'NN'),
('are', 'NN'),
('you', 'NN'),
('?', 'NN')
]
]
Trong ví dụ trên, chúng tôi đã sử dụng trình gắn thẻ mặc định được tạo trước đó có tên exptagger.
Bỏ gắn thẻ một câu
Chúng tôi cũng có thể bỏ gắn thẻ một câu. NLTK cung cấp phương thức nltk.tag.untag () cho mục đích này. Nó sẽ lấy một câu được gắn thẻ làm đầu vào và cung cấp danh sách các từ không có thẻ. Hãy để chúng tôi xem một ví dụ -
Thí dụ
import nltk
from nltk.tag import untag
untag([('Tutorials', 'NN'), ('Point', 'NN')])
Đầu ra
['Tutorials', 'Point']