โทเค็น

Jan 10 2023
Tokenization คืออะไร?? พูดสั้นๆ มันแบ่งข้อความเป็นคำหรือประโยค… ในที่นี้เราจะพูดถึง tokenizers ต่างๆ ที่เราสามารถใช้ใน NLP ……… 2. Split เฉพาะ เหมือนกับ white space แต่ที่นี่เราจะแยก splitter ที่เราต้องการ 3.

Tokenization คืออะไร?? ในคำสั้น ๆ มันแยกข้อความเป็นคำหรือประโยค ...

โทเค็น

ที่นี่เราจะพูดถึง tokenizers ต่างๆ ที่เราสามารถใช้ใน NLP ………

  1. พื้นที่สีขาว

text = 'Earth was born around 4.54 billion years ago.'
print(text.split())
# output
# ['Earth', 'was', 'born', 'around', '4.54', 'billion', 'years', 'ago.']

2. การแยกเฉพาะ

เช่นเดียวกับพื้นที่สีขาว แต่ที่นี่เราให้splitตัวแยกที่เราต้องการ

text = 'Egypt, a country linking northeast Africa with the Middle East, dates to the time of the pharaohs.'
print(text.split(','))
# output
# ['Egypt', ' a country linking northeast Africa with the Middle East', ' dates to the time of the pharaohs.']

3. เอ็นแอลทีเค

NLTK เป็นแพลตฟอร์มชั้นนำสำหรับการสร้างโปรแกรม Python เพื่อทำงานกับข้อมูลภาษามนุษย์ มีโทเค็นไนเซอร์มากมายที่เราสามารถใช้ได้

l) word_toknizer:แก้ปัญหาในฟังก์ชันแยก:

word_toknizer: ดูเครื่องหมายสีเหลืองด้านบน

ll) send_tokenize:ใช้ข้อความแยกเป็นแบบจำลองที่ได้รับการฝึกฝนมาก่อน

send_tokenize: นี่คือคำพูดของฉัน มันแยกเป็นคำพูดและชื่อของฉัน

lll) wordpunct_tokenize:ที่นี่จะแยกคำและเครื่องหมายวรรคตอนทั้งหมด

wordpunct_tokenize: มันทำให้เรามีโทเค็นที่มีทุกคำและเครื่องหมายวรรคตอน

lV) TreebankWordTokenizer:มันแบ่งข้อความเป็นเครื่องหมายวรรคตอนเหล่านี้?!.,;ในทางกลับกัน มันเป็นกฎทั่วไปที่หลากหลายสำหรับคำภาษาอังกฤษ

TreebankWordTokenizer: ดูเครื่องหมายสีเหลืองด้านบน คุณจะรู้ว่านั่นคือชื่อของฉัน ดังนั้นมันจึงเห็นว่าเป็นโทเค็น

V) TweetTokenizer:แยกข้อความเป็นเครื่องหมายวรรคตอนและ?!.,;อิโมจิ

ทวีต Tokenizer

Vl) MWETokenizer:ที่นี่เราสามารถเพิ่มโทเค็นได้ตามที่เราต้องการเนื่องจากโทเค็นนี้add_mweช่วยให้เราสร้างสิ่งนั้นได้

MWETokenizer: เราได้เพิ่มโทเค็นตามที่เห็นในผลลัพธ์ คุณจะเห็นโทเค็นนั้น

4. ข้อความหยด

TextBlob เป็นไลบรารีPython (2 และ 3) สำหรับการประมวลผลข้อมูลที่เป็น ข้อความ โดยมี API อย่างง่ายสำหรับการดำดิ่งสู่งานประมวลผลภาษาธรรมชาติ (NLP) ทั่วไป เช่น การติดแท็กส่วนหนึ่งของคำพูด การสกัดวลีนาม การวิเคราะห์ความรู้สึก การจัดประเภท การแปล และอื่นๆ

from textblob import TextBlob
text="""But I'm glad you'll see me as I am. Above all, I wouldn't want people to think that I want to 
prove anything. I don't want to prove anything, I just want to live; to cause no evil to anyone but myself. 
I have that right, haven't I? Leo Tolstoy """

blob_object= TextBlob(text)     # Word tokenization of  the text
text_words = blob_object.words  # To see all tokens
print(text_words)  # To count the number of tokens
print(len(text_words))

# output
# ['But', 'I', "'m", 'glad', 'you', "'ll", 'see', 'me', 'as', 'I', 'am', 'Above', 'all', 'I', 'would', "n't", 'want', 'people', 'to', 'think', 'that', 'I', 'want', 'to', 'prove', 'anything', 'I', 'do', "n't", 'want', 'to', 'prove', 'anything', 'I', 'just', 'want', 'to', 'live', 'to', 'cause', 'no', 'evil', 'to', 'anyone', 'but', 'myself', 'I', 'have', 'that', 'right', 'have', "n't", 'I', 'Leo', 'Tolstoy']
# 55

5. กว้างขวาง

spaCy เป็นไลบรารีโอเพ่นซอร์สฟรีสำหรับการประมวลผลภาษาธรรมชาติใน Python มันมี NER, การแท็ก POS, การแยกวิเคราะห์การอ้างอิง, เวกเตอร์คำและอื่น ๆ

มันให้โทเค็นและดัชนีคำและเครื่องหมายวรรคตอนและอิโมจิทั้งหมดแก่เรา

6. เกนซิม

Gensim: เป็นไลบรารีโอเพ่นซอร์สในภาษาไพธอนที่เขียนโดย Radim Rehurek ซึ่งใช้ในการสร้างแบบจำลองหัวข้อที่ไม่มีผู้ดูแลและการประมวลผลภาษาธรรมชาติ มันถูกออกแบบมาเพื่อแยกหัวข้อความหมายจากเอกสาร สามารถจัดการคอลเลคชันข้อความขนาดใหญ่ได้

ที่นี่จะลบเครื่องหมายวรรคตอนและอิโมจิทั้งหมด

7. เคราส์

Keras เป็นไลบรารีโอเพ่นซอร์สซึ่งเป็นหนึ่งในเฟรมเวิร์กการเรียนรู้เชิงลึกที่น่าเชื่อถือที่สุด ในการดำเนินการโทเค็นเราใช้เมธอด text_to_word_sequence จากคลาส Keras.preprocessing.text สิ่งที่ยอดเยี่ยมเกี่ยวกับ Keras คือการแปลงตัวอักษรเป็นตัวพิมพ์เล็กก่อนที่จะแปลงเป็นโทเค็น ซึ่งอาจช่วยประหยัดเวลาได้มากทีเดียว

from keras.preprocessing.text import Tokenizer
from keras.preprocessing.text import text_to_word_sequence

text = "Two things are infinite: the universe and human stupidity; and I'm not sure about the universe.  #Albert Einstein"


tokinzer = Tokenizer(num_words=20)  # as recommended we put here the max text length we have
tokinzer.fit_on_texts(text)
tokens = text_to_word_sequence(text)
print(tokens)

# output
# ['two', 'things', 'are', 'infinite', 'the', 'universe', 'and', 'human', 'stupidity', 'and', "i'm", 'not', 'sure', 'about', 'the', 'universe', '', 'albert', 'einstein']

8. โทเค็นตามคำย่อย

โทเค็นที่เป็นที่นิยมคือโทเค็นตามคำย่อยซึ่งเป็นวิธีแก้ปัญหาระหว่างโทเค็นตามคำและอักขระ แนวคิดหลักคือการแก้ปัญหาที่ต้องเผชิญกับโทเค็นตามคำ (ขนาดคำศัพท์ที่ใหญ่มาก โทเค็น OOV จำนวนมาก และความหมายที่แตกต่างกันของคำที่คล้ายกันมาก) และโทเค็นตามตัวอักษร (ลำดับที่ยาวมากและโทเค็นแต่ละรายการที่มีความหมายน้อยกว่า)

อัลกอริทึมโทเค็นตามคำย่อยใช้หลักการต่อไปนี้

  1. อย่าแบ่งคำที่ใช้บ่อยเป็นคำย่อยย่อยๆ
  2. แยกคำที่หายากเป็นคำย่อยที่มีความหมายเล็กลง

ความท้าทาย

มาหารือเกี่ยวกับความท้าทายและข้อจำกัดของงานโทเค็น

โดยทั่วไป งานนี้ใช้สำหรับคลังข้อความที่เขียนเป็นภาษาอังกฤษหรือภาษาฝรั่งเศส ซึ่งภาษาเหล่านี้แยกคำโดยใช้ช่องว่างหรือเครื่องหมายวรรคตอนเพื่อกำหนดขอบเขตของประโยค ขออภัย วิธีนี้ใช้กับภาษาอื่นไม่ได้ เช่น จีน ญี่ปุ่น เกาหลี ไทย ฮินดี อูรดู ทมิฬ และอื่นๆ ปัญหานี้ทำให้ต้องพัฒนาเครื่องมือโทเค็นทั่วไปที่รวมทุกภาษาเข้าด้วยกัน

ข้อจำกัดอีกประการหนึ่งคือการใช้โทเค็นของข้อความภาษาอาหรับ เนื่องจากภาษาอาหรับมีสัณฐานวิทยาที่ซับซ้อนในฐานะภาษา ตัวอย่างเช่น คำภาษาอาหรับคำหนึ่งอาจมีโทเค็นที่แตกต่างกันได้ถึงหกอย่าง เช่น คำว่า “عقد” (อีควาด)

ตัวอักษรเดียวกันแต่มีความหมายต่างกัน

บทสรุป

เราได้พูดคุยเกี่ยวกับโทเค็นและเทคนิคมากมายที่เราสามารถใช้ได้ เนื่องจากเราเห็นว่ามีการวิจัยหลายประเภทที่ทำขึ้นในสาขานี้ และกำลังเติบโตขึ้นและมีความท้าทายมากมายที่ต้องเผชิญกับ NLP แต่เราจะได้เห็นอนาคตที่ปัญหาเหล่านี้จะได้รับการแก้ไข

คุณสามารถดูรหัสได้ในลิงค์ นี้