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 โครงการและความช่วยเหลือด้านงานกับบริษัทชั้นนำ

เป็นผู้นำการปฏิวัติเทคโนโลยีที่ขับเคลื่อนด้วย AI

PG DIPLOMA ในการเรียนรู้ของเครื่องและปัญญาประดิษฐ์
เรียนรู้เพิ่มเติม