พื้นฐานของการติดแท็ก Part-of-Speech (POS)
POS tagging คืออะไร?
การติดแท็กเป็นการจัดหมวดหมู่เป็นการกำหนดคำอธิบายของโทเค็นโดยอัตโนมัติ เราเรียกแท็ก descriptor ซึ่งแสดงถึงส่วนใดส่วนหนึ่งของคำพูด (คำนามกริยาคำวิเศษณ์คำคุณศัพท์คำสรรพนามการรวมและหมวดหมู่ย่อย) ข้อมูลความหมายและอื่น ๆ
ในทางกลับกันถ้าเราพูดถึงการติดแท็ก Part-of-Speech (POS) มันอาจถูกกำหนดให้เป็นกระบวนการแปลงประโยคในรูปแบบของรายการคำให้เป็นรายการ tuples ที่นี่ tuples อยู่ในรูปแบบของ (word, tag) นอกจากนี้เรายังสามารถเรียกการติดแท็ก POS เป็นกระบวนการกำหนดส่วนของคำพูดให้กับคำที่กำหนด
ตารางต่อไปนี้แสดงการแจ้งเตือน POS ที่ใช้บ่อยที่สุดในคลังข้อมูลของ Penn Treebank -
ซีเนียร์ No | แท็ก | คำอธิบาย |
---|---|---|
1 | NNP | คำนามเอกพจน์ |
2 | สวป | คำนามพหูพจน์ |
3 | กปปส | ตัวกำหนดล่วงหน้า |
4 | POS | สิ้นสุดที่เป็นเจ้าของ |
5 | PRP | สรรพนามส่วนตัว |
6 | PRP $ | สรรพนามแสดงความเป็นเจ้าของ |
7 | RB | กริยาวิเศษณ์ |
8 | RBR | กริยาวิเศษณ์เปรียบเทียบ |
9 | RBS | กริยาวิเศษณ์สุดยอด |
10 | RP | อนุภาค |
11 | SYM | สัญลักษณ์ (ทางคณิตศาสตร์หรือวิทยาศาสตร์) |
12 | ถึง | ถึง |
13 | UH | คำอุทาน |
14 | VB | คำกริยารูปฐาน |
15 | VBD | กริยาอดีตกาล |
16 | VBG | กริยา Gerund / present กริยา |
17 | VBN | กริยาที่ผ่านมา |
18 | WP | Wh- สรรพนาม |
19 | WP $ | มีสรรพนาม wh |
20 | WRB | Wh-adverb |
21 | # | เครื่องหมายปอนด์ |
22 | $ | เครื่องหมายดอลลาร์ |
23 | . | เครื่องหมายวรรคตอนสุดท้ายของประโยค |
24 | , | จุลภาค |
25 | : | ลำไส้ใหญ่กึ่งลำไส้ใหญ่ |
26 | ( | อักขระวงเล็บซ้าย |
27 | ) | อักขระวงเล็บขวา |
28 | " | คำพูดคู่ตรง |
29 | ' | เปิดเครื่องหมายคำพูดเดี่ยวด้านซ้าย |
30 | " | เปิดเครื่องหมายคำพูดคู่ซ้าย |
31 | ' | ปิดคำพูดเดียว |
32 | " | เปิดเครื่องหมายคำพูดคู่ |
ตัวอย่าง
ให้เราเข้าใจด้วยการทดลอง Python -
import nltk
from nltk import word_tokenize
sentence = "I am going to school"
print (nltk.pos_tag(word_tokenize(sentence)))
เอาต์พุต
[('I', 'PRP'), ('am', 'VBP'), ('going', 'VBG'), ('to', 'TO'), ('school', 'NN')]
ทำไมต้องติดแท็ก POS
การติดแท็ก POS เป็นส่วนสำคัญของ NLP เนื่องจากทำงานเป็นข้อกำหนดเบื้องต้นสำหรับการวิเคราะห์ NLP เพิ่มเติมดังนี้ -
- Chunking
- การแยกวิเคราะห์ไวยากรณ์
- การสกัดข้อมูล
- การแปลด้วยเครื่อง
- การวิเคราะห์ความเชื่อมั่น
- การวิเคราะห์ไวยากรณ์และการลดทอนความหมายของคำ
TaggerI - คลาสพื้นฐาน
แท็กเกอร์ทั้งหมดอยู่ในแพ็คเกจ nltk.tag ของ NLTK คลาสพื้นฐานของแท็กเกอร์เหล่านี้คือTaggerIหมายถึงผู้ติดแท็กทั้งหมดสืบทอดมาจากคลาสนี้
Methods - คลาส TaggerI มีสองวิธีดังต่อไปนี้ซึ่งต้องนำไปใช้โดยคลาสย่อยทั้งหมด -
tag() method - ตามความหมายของชื่อวิธีนี้จะใช้รายการคำเป็นอินพุตและส่งคืนรายการคำที่ติดแท็กเป็นเอาต์พุต
evaluate() method - ด้วยความช่วยเหลือของวิธีนี้เราสามารถประเมินความแม่นยำของแท็กเกอร์ได้
พื้นฐานของการติดแท็ก POS
พื้นฐานหรือขั้นตอนพื้นฐานของการติดแท็ก POS คือ Default Taggingซึ่งสามารถทำได้โดยใช้คลาส DefaultTagger ของ NLTK การติดแท็กเริ่มต้นจะกำหนดแท็ก POS เดียวกันให้กับทุกโทเค็น การติดแท็กเริ่มต้นยังเป็นพื้นฐานในการวัดการปรับปรุงความแม่นยำ
คลาส DefaultTagger
การติดแท็กเริ่มต้นดำเนินการโดยใช้ DefaultTagging คลาสซึ่งใช้อาร์กิวเมนต์เดียวนั่นคือแท็กที่เราต้องการใช้
มันทำงานอย่างไร?
อย่างที่บอกไปก่อนหน้านี้ taggers ทั้งหมดได้รับการถ่ายทอดมาจาก TaggerIชั้นเรียน DefaultTagger สืบทอดมาจาก SequentialBackoffTagger ซึ่งเป็นคลาสย่อยของ TaggerI class. ให้เราเข้าใจด้วยแผนภาพต่อไปนี้ -
ในฐานะที่เป็นส่วนหนึ่งของ SeuentialBackoffTagger, DefaultTagger ต้องใช้เมธอด select_tag () ซึ่งรับสามอาร์กิวเมนต์ต่อไปนี้
- รายการของโทเค็น
- ดัชนีของโทเค็นปัจจุบัน
- รายการโทเค็นก่อนหน้า ได้แก่ ประวัติ
ตัวอย่าง
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag(['Tutorials','Point'])
เอาต์พุต
[('Tutorials', 'NN'), ('Point', 'NN')]
ในตัวอย่างนี้เราเลือกแท็กคำนามเนื่องจากเป็นประเภทคำที่พบบ่อยที่สุด ยิ่งไปกว่านั้นDefaultTagger ยังมีประโยชน์มากที่สุดเมื่อเราเลือกแท็ก POS ที่พบบ่อยที่สุด
การประเมินความถูกต้อง
DefaultTaggerยังเป็นพื้นฐานในการประเมินความแม่นยำของผู้ติดแท็ก นั่นคือเหตุผลที่เราสามารถใช้มันควบคู่ไปด้วยevaluate()วิธีการวัดความแม่นยำ evaluate() วิธีใช้รายการโทเค็นที่ติดแท็กเป็นมาตรฐานทองคำเพื่อประเมินผู้ติดแท็ก
ต่อไปนี้เป็นตัวอย่างที่เราใช้แท็กเกอร์เริ่มต้นชื่อ exptaggerสร้างขึ้นด้านบนเพื่อประเมินความถูกต้องของชุดย่อยของ treebank คลังประโยคที่ติดแท็ก -
ตัวอย่าง
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
from nltk.corpus import treebank
testsentences = treebank.tagged_sents() [1000:]
exptagger.evaluate (testsentences)
เอาต์พุต
0.13198749536374715
ผลลัพธ์ด้านบนแสดงให้เห็นว่าโดยการเลือก NN สำหรับทุกแท็กเราสามารถทำการทดสอบความแม่นยำได้ประมาณ 13% ใน 1,000 รายการของไฟล์ treebank คลังข้อมูล
แท็กรายการประโยค
แทนที่จะติดแท็กประโยคเดียว NLTK's TaggerI ชั้นเรียนยังมี tag_sents()วิธีการด้วยความช่วยเหลือซึ่งเราสามารถแท็กรายการประโยค ต่อไปนี้เป็นตัวอย่างที่เราติดแท็กสองประโยคง่ายๆ
ตัวอย่าง
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag_sents([['Hi', ','], ['How', 'are', 'you', '?']])
เอาต์พุต
[
[
('Hi', 'NN'),
(',', 'NN')
],
[
('How', 'NN'),
('are', 'NN'),
('you', 'NN'),
('?', 'NN')
]
]
ในตัวอย่างข้างต้นเราใช้แท็กเกอร์เริ่มต้นที่สร้างขึ้นก่อนหน้านี้ชื่อ exptagger.
การยกเลิกการติดแท็กประโยค
นอกจากนี้เรายังสามารถยกเลิกการแท็กประโยค NLTK จัดเตรียมวิธีการ nltk.tag.untag () สำหรับวัตถุประสงค์นี้ จะใช้ประโยคที่ติดแท็กเป็นอินพุตและแสดงรายการคำที่ไม่มีแท็ก ให้เราดูตัวอย่าง -
ตัวอย่าง
import nltk
from nltk.tag import untag
untag([('Tutorials', 'NN'), ('Point', 'NN')])
เอาต์พุต
['Tutorials', 'Point']