Tokenization ในการประมวลผลภาษาธรรมชาติ
เผยแพร่แล้ว: 2020-12-01เมื่อต้องจัดการกับข้อมูลที่เป็นข้อความ ขั้นตอนพื้นฐานที่สุดคือการทำให้ข้อความเป็นโทเค็น 'โทเค็น' ถือได้ว่าเป็นคำ ประโยค หรือหน่วยขั้นต่ำใดๆ ดังนั้น การแบ่งประโยคออกเป็นหน่วยต่าง ๆ จึงไม่มีความหมายอะไรนอกจาก Tokenization
ในตอนท้ายของบทช่วยสอนนี้ คุณจะมีความรู้ดังต่อไปนี้:
- Tokenization คืออะไร
- Tokenizations ประเภทต่างๆ
- วิธีต่างๆ ในการทำ Tokenize
Tokenization เป็นขั้นตอนพื้นฐานที่สุดในไปป์ไลน์ NLP
แต่ทำไมถึงเป็นอย่างนั้น?
คำหรือโทเค็นเหล่านี้จะถูกแปลงเป็นค่าตัวเลขในภายหลังเพื่อให้คอมพิวเตอร์สามารถเข้าใจและทำความเข้าใจได้ โทเค็นเหล่านี้ได้รับการทำความสะอาด ประมวลผลล่วงหน้า แล้วแปลงเป็นค่าตัวเลขโดยใช้วิธีการ "Vectorization" เวกเตอร์เหล่านี้สามารถป้อนให้กับอัลกอริธึมการเรียนรู้ของเครื่องและโครงข่ายประสาทเทียม
Tokenization ไม่เพียง แต่เป็นระดับคำเท่านั้น แต่ยังรวมถึงระดับประโยคด้วย กล่าวคือ ข้อความสามารถแปลงเป็นโทเค็นด้วยคำเป็นโทเค็น หรือประโยคเป็นโทเค็นก็ได้ มาพูดคุยกันสองสามวิธีในการทำโทเค็น

สารบัญ
หลามแยก ()
ฟังก์ชัน split() ของ Python จะส่งคืนรายการโทเค็นที่แยกตามอักขระที่กล่าวถึง โดยค่าเริ่มต้น จะแบ่งคำตามช่องว่าง
Word Tokenization
Mystr = “นี่คือบทช่วยสอนการใช้โทเค็น เรากำลังเรียนรู้วิธี tokenization และวิธีต่างๆ? Tokenization เป็นสิ่งจำเป็นในงาน NLP” โทเค็น = Mystr.split() |
#ผลลัพธ์: >> [ 'นี่' 'คือ' ' a' ' การ แปลง โทเค็น' ' บท แนะนำ' , 'เรา' , 'กำลัง' , 'การเรียนรู้' , 'แตกต่าง' , 'tokenization' , 'methods,' , 'and' , 'ways?' , 'Tokenization' , 'คือ' , 'สำคัญ' , 'ใน' , 'NLP' , 'งาน' ] |
Tokenization ประโยค
ข้อความเดียวกันสามารถแบ่งออกเป็นประโยคโดยผ่านตัวคั่นเป็น “.”
Mystr = “นี่คือบทช่วยสอนการใช้โทเค็น เรากำลังเรียนรู้วิธี tokenization และวิธีต่างๆ? Tokenization เป็นสิ่งจำเป็นในงาน NLP” โทเค็น = Mystr.split ( “.” ) |
#ผลลัพธ์: >> [ 'นี่คือการสอนการใช้โทเค็ น ' ' ' เรากำลังเรียนรู้วิธีและวิธีสร้างโทเค็นที่แตกต่างกันหรือไม่ Tokenization เป็นสิ่งจำเป็นใน งาน NLP ” ] |
แม้ว่าสิ่งนี้จะดูตรงไปตรงมาและเรียบง่าย แต่ก็มีข้อบกพร่องมากมาย และถ้าคุณสังเกตเห็น มันจะแยกหลังจาก “.” ตัวสุดท้าย เช่นกัน. และไม่ถือว่า “?” เป็นตัวบ่งชี้ประโยคถัดไปเพราะใช้อักขระเพียงตัวเดียวคือ “.”
ข้อมูลข้อความในสถานการณ์จริงสกปรกมากและใส่คำและประโยคได้ไม่ดี อาจมีข้อความขยะจำนวนมากซึ่งจะทำให้ยากสำหรับคุณที่จะแปลงเป็นโทเค็นด้วยวิธีนี้ ดังนั้น เรามาดูวิธีการสร้างโทเค็นที่ดีขึ้นและเหมาะสมยิ่งขึ้นกันดีกว่า
ต้องอ่าน: เทคนิคการเรียนรู้เชิงลึก 10 อันดับแรกที่คุณควรรู้
นิพจน์ทั่วไป
Regular Expression (RegEx) คือลำดับของอักขระที่ใช้จับคู่กับรูปแบบของอักขระ เราใช้ RegEx เพื่อค้นหารูปแบบ คำ หรืออักขระบางอย่างเพื่อแทนที่หรือดำเนินการอื่นใดกับรูปแบบเหล่านั้น Python มีโมดูล re ซึ่งใช้สำหรับทำงานกับ RegEx มาดูกันว่าเราจะแปลงข้อความให้เป็นโทเค็นโดยใช้ re ได้อย่างไร
Word Tokenization
Mystr = “นี่คือบทช่วยสอนการใช้โทเค็น เรากำลังเรียนรู้วิธี tokenization และวิธีต่างๆ? Tokenization เป็นสิ่งจำเป็นในงานของ NLP” โทเค็น = re.findall ( “[\w']+” , Mystr) |
#ผลลัพธ์: >> [ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial' , 'We' , 'are' , 'learning' , 'different' , 'tokenization' , 'methods' , 'and' , 'วิธี' , 'การทำให้เป็นโทเค็น' , 'คือ' , 'จำเป็น' , 'ใน' , 'NLP' , 'งาน' ] |
แล้วเกิดอะไรขึ้นที่นี่?
ฟังก์ชัน re.findall() จะจับคู่กับลำดับทั้งหมดที่ตรงกับมันและจัดเก็บไว้ในรายการ นิพจน์ “[\w]+” หมายถึงอักขระใดๆ – ไม่ว่าจะเป็นตัวอักษรหรือตัวเลขหรือขีดล่าง (“_”) สัญลักษณ์ "+" หมายถึงรูปแบบที่เกิดขึ้นทั้งหมด โดยพื้นฐานแล้วมันจะสแกนอักขระทั้งหมดและใส่ไว้ในรายการเป็นโทเค็นเดียวเมื่อพบช่องว่างหรืออักขระพิเศษอื่น ๆ นอกเหนือจากขีดล่าง
โปรดสังเกตว่าคำว่า "NLP's" เป็นคำเดียว แต่นิพจน์ regex ของเราแยกออกเป็น "NLP" และ "s" เนื่องจากเครื่องหมายอะพอสทรอฟี
Tokenization ประโยค
Mystr = “นี่คือบทช่วยสอนการใช้โทเค็น เรากำลังเรียนรู้วิธี tokenization และวิธีต่างๆ? Tokenization เป็นสิ่งจำเป็นในงานของ NLP” โทเค็น = re.compile( '[.!?] ' ).split(Mystr) |
#ผลลัพธ์: >> [ 'นี่คือบทช่วยสอนการใช้ โทเค็ น ' 'เรากำลังเรียนรู้วิธีและวิธีสร้างโทเค็นที่แตกต่างกัน' , 'การแปลงโทเค็นเป็นสิ่งจำเป็นในงาน NLP' ] |
ตอนนี้ เรารวมอักขระแยกหลายตัวเป็นเงื่อนไขเดียว และเรียกว่าฟังก์ชัน re.split ดังนั้นเมื่อกระทบกับอักขระทั้ง 3 ตัวใด ๆ จะถือว่าเป็นประโยคที่แยกจากกัน นี่เป็นข้อได้เปรียบของ RegEx เหนือฟังก์ชันการแยกหลามซึ่งคุณไม่สามารถส่งผ่านอักขระหลายตัวเพื่อแยกได้
อ่านเพิ่มเติม: การประยุกต์ใช้การประมวลผลภาษาธรรมชาติ
NLTK Tokenizers
Natural Language Toolkit (NLTK) เป็นไลบรารี Python สำหรับจัดการงาน NLP โดยเฉพาะ NLTK ประกอบด้วยฟังก์ชันและโมดูลในตัวซึ่งสร้างขึ้นสำหรับกระบวนการเฉพาะบางอย่างของไปป์ไลน์ NLP ที่สมบูรณ์ มาดูกันว่า NLTK จัดการกับโทเค็นอย่างไร
Word Tokenization
NLTK มีโมดูลแยกต่างหาก NLTK.tokenize เพื่อจัดการงานโทเค็น สำหรับ word tokenization วิธีการหนึ่งที่ประกอบด้วย word_tokenize
จาก nltk.tokenize นำเข้า word_tokenize Mystr = “นี่คือบทช่วยสอนการใช้โทเค็น เรากำลังเรียนรู้วิธี tokenization และวิธีต่างๆ? Tokenization เป็นสิ่งจำเป็นในงานของ NLP” word_tokenize (Mystr) |
#ผลลัพธ์: >>[ 'นี่' 'คือ' ' a' ' การ แปลง โทเค็น' ' บทแนะนำ' ' . ' , 'เรา' ' กำลัง ' 'กำลัง เรียน รู้' 'แตกต่าง' ' tokenization' 'methods' ' , ' ' and' , ' ways' , ' ?' , 'Tokenization' , 'is' , 'essential' , 'in' , 'NLP' , 'tasks' , '.' ] |
โปรดสังเกตว่า word_tokenize ถือว่าเครื่องหมายวรรคตอนเป็นโทเค็นแยกต่างหาก เพื่อป้องกันไม่ให้สิ่งนี้เกิดขึ้น เราจำเป็นต้องลบเครื่องหมายวรรคตอนและอักขระพิเศษทั้งหมดก่อนขั้นตอนนี้

Tokenization ประโยค
จาก nltk.tokenize นำเข้า send_tokenize Mystr = “นี่คือบทช่วยสอนการใช้โทเค็น เรากำลังเรียนรู้วิธี tokenization และวิธีต่างๆ? Tokenization เป็นสิ่งจำเป็นในงานของ NLP” send_tokenize(Mystr) |
#ผลลัพธ์: >> [ 'นี่คือการสอนการใช้โทเค็น' , 'เรากำลังเรียนรู้วิธีและวิธี tokenization ที่แตกต่างกันหรือไม่' ' Tokenization เป็นสิ่งจำเป็นในงาน NLP' ] |
SpaCy Tokenizers
SpaCy น่าจะเป็นหนึ่งในไลบรารี่ที่ทันสมัยที่สุดสำหรับงาน NLP ประกอบด้วยการสนับสนุนเกือบ 50 ภาษา ดังนั้นขั้นตอนแรกคือการดาวน์โหลดคอร์สำหรับภาษาอังกฤษ ต่อไป เราต้องนำเข้าโมดูลภาษาอังกฤษซึ่งโหลด tokenizer, tagger, parser, NER และ word vectors
Word Tokenization
จาก spacy.lang.en นำเข้า ภาษาอังกฤษ nlp = อังกฤษ () Mystr = “นี่คือบทช่วยสอนการใช้โทเค็น เรากำลังเรียนรู้วิธี tokenization และวิธีต่างๆ? Tokenization เป็นสิ่งจำเป็นในงานของ NLP” my_doc = nlp (Mystr) โทเค็น = [] สำหรับ โทเค็น ใน my_doc: Tokens.append (token.text) โทเค็น |
#ผลลัพธ์: >> [ 'นี่' , 'คือ' , 'a' , 'การแปลงโทเค็น' , 'บทแนะนำ' , '.' , 'เรา' ' กำลัง ' 'กำลัง เรียน รู้' 'แตกต่าง' ' tokenization' 'methods' ' , ' ' and' , ' ways' , ' ?' , 'Tokenization' , 'is' , 'essential' , 'in' , 'NLP' , “'s” , 'tasks' , '.' ] |
ที่นี่เมื่อเราเรียกใช้ฟังก์ชัน nlp โดย MyStr ผ่าน จะสร้างโทเค็นคำสำหรับมัน จากนั้นเราจะจัดทำดัชนีผ่านพวกเขาและจัดเก็บไว้ในรายการแยกต่างหาก
Tokenization ประโยค
จาก spacy.lang.en นำเข้า ภาษาอังกฤษ nlp = อังกฤษ () send_tokenizer = nlp.create_pipe ( 'ผู้ตัดสิน' ) nlp.add_pipe(sent_tokenizer) Mystr = “นี่คือบทช่วยสอนการใช้โทเค็น เรากำลังเรียนรู้วิธี tokenization และวิธีต่างๆ? Tokenization เป็นสิ่งจำเป็นในงานของ NLP” my_doc = nlp (Mystr) ส่ง = [] สำหรับ ส่ง ใน doc.sents: Sents.append (sent.text) ส่ง |
#ผลลัพธ์: >> [ 'นี่คือการสอนการใช้โทเค็น' , 'เรากำลังเรียนรู้วิธีและวิธี tokenization ที่แตกต่างกันหรือไม่' , “Tokenization เป็นสิ่งจำเป็นในงานของ NLP” ] |
สำหรับการสร้างประโยคโทเค็น ให้เรียกใช้เมธอด creat_pipe เพื่อสร้างส่วนประกอบเซนเทนเซอร์ซึ่งสร้างโทเค็นของประโยค จากนั้นเราเพิ่มไปป์ไลน์ไปยังวัตถุ nlp เมื่อเราส่งสตริงข้อความไปยังวัตถุ nlp จะสร้างโทเค็นประโยคสำหรับสิ่งนี้ ตอนนี้สามารถเพิ่มลงในรายการได้เช่นเดียวกับในตัวอย่างก่อนหน้า
Keras Tokenization
Keras เป็นหนึ่งในเฟรมเวิร์กการเรียนรู้เชิงลึกที่เป็นที่ต้องการมากที่สุดในปัจจุบัน Keras ยังมีคลาสเฉพาะสำหรับงานประมวลผลข้อความ – keras.preprocessing.text คลาสนี้มี ฟังก์ชัน text_to_word_sequence ซึ่งสร้างโทเค็นระดับคำจากข้อความ เรามาดูกันอย่างรวดเร็ว
จาก keras.preprocessing.text นำเข้า text_to_word_sequence Mystr = “นี่คือบทช่วยสอนการใช้โทเค็น เรากำลังเรียนรู้วิธี tokenization และวิธีต่างๆ? Tokenization เป็นสิ่งจำเป็นในงานของ NLP” โทเค็น = text_to_word_sequence (Mystr) โทเค็น |
#ผลลัพธ์: >> [ 'นี่' , 'คือ' , 'a' , 'tokenization' , 'กวดวิชา' , 'เรา' , 'กำลัง' , 'การเรียนรู้' , 'แตกต่าง' , 'tokenization' , 'methods' , 'and' , 'วิธี' , 'โทเค็น' , 'คือ' , 'จำเป็น' , 'ใน' , "nlp's" , 'งาน' ] |
โปรดสังเกตว่ามันใช้คำว่า "NLP's" เป็นโทเค็นเดียว นอกจากนี้ keras tokenizer ยังย่อ token ทั้งหมดซึ่งเป็นโบนัสเพิ่มเติม
Gensim Tokenizer
Gensim เป็นห้องสมุดยอดนิยมอีกแห่งหนึ่งสำหรับจัดการงานตาม NLP และการสร้างแบบจำลองหัวข้อ คลาส gensim.utils เสนอวิธีการ tokenize ซึ่งสามารถใช้สำหรับงาน tokenization ของเรา

Word Tokenization
จาก gensim.utils นำเข้า tokenize Mystr = “นี่คือบทช่วยสอนการใช้โทเค็น เรากำลังเรียนรู้วิธี tokenization และวิธีต่างๆ? Tokenization เป็นสิ่งจำเป็นในงานของ NLP” รายการ (โทเค็น (Mystr)) |
#ผลลัพธ์: >> [ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial' , 'We' , 'are' , 'learning' , 'different' , 'tokenization' , 'methods' , 'and' , 'วิธี' , 'การทำให้เป็นโทเค็น' , 'คือ' , 'จำเป็น' , 'ใน' , 'NLP' , 's' , 'งาน' ] |
Tokenization ประโยค
สำหรับการสร้างประโยคโทเค็น เราใช้เมธอด split_sentences จาก คลาส gensim.summarization.textcleaner
จาก gensim.summarization.textcleaner นำเข้า split_sentences Mystr = “นี่คือบทช่วยสอนการใช้โทเค็น เรากำลังเรียนรู้วิธี tokenization และวิธีต่างๆ? Tokenization เป็นสิ่งจำเป็นในงานของ NLP” โทเค็น = split_sentences ( Mystr ) โทเค็น |
#ผลลัพธ์: >> [ 'นี่คือการสอนการใช้โทเค็น' , 'เรากำลังเรียนรู้วิธีและวิธี tokenization ที่แตกต่างกันหรือไม่' , “Tokenization เป็นสิ่งจำเป็นในงานของ NLP” ] |
ก่อนที่คุณจะไป
ในบทช่วยสอนนี้ เราได้พูดถึงวิธีต่างๆ ในการสร้างโทเค็นข้อมูลข้อความของคุณตามแอปพลิเคชัน นี่เป็นขั้นตอนสำคัญของไปป์ไลน์ NLP แต่จำเป็นต้องล้างข้อมูลก่อนที่จะดำเนินการแปลงเป็นโทเค็น
หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับแมชชีนเลิร์นนิงและ AI โปรดดูที่ IIIT-B & upGrad's PG Diploma in Machine Learning & AI ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 450 ชั่วโมง กรณีศึกษาและการมอบหมายมากกว่า 30 รายการ สถานะศิษย์เก่า IIIT-B โครงการหลัก 5 โครงการและความช่วยเหลือด้านงานกับบริษัทชั้นนำ