מהו צ'אנקינג בעיבוד שפה טבעית?

צומת המקור: 1878431

קוראים יקרים,

בבלוג זה, אדון בחתיכות הן תיאורטית והן מעשית בפייתון.

אז בואו נתחיל…

הערה: לצורך היישום, עדיף להשתמש ב-Python IDLE שכן הפלט הוא ציור של עץ שצץ בחלון נפרד.

סדר היום

  • מה זה chunking?
  • איפה משתמשים ב-chunking?
  • סוגי chunking
  • יישום chunking ב-Python
  • תוצאות

מה זה chunking?

Chunking מוגדר כתהליך של עיבוד שפה טבעית המשמש לזיהוי חלקי דיבור וביטויים קצרים המצויים במשפט נתון.

נזכור את שיעורי הדקדוק האנגלי הישנים והטובים שלנו עוד בבית הספר, שים לב שיש שמונה חלקי דיבור, כלומר שם העצם, הפועל, שם התואר, התואר, מילת היחס, צירוף, כינוי וסימן ביניים. כמו כן, בהגדרה לעיל של chunking, ביטויים קצרים מתייחסים לביטויים שנוצרו על ידי הכללת כל אחד מחלקי הדיבור הללו.

לדוגמה, ניתן לבצע chunking כדי לזהות ובכך לקבץ ביטויי עצם או שמות עצם בלבד, שמות תואר או ביטויי תואר וכו'. שקול את המשפט שלהלן:

"אכלתי המבורגרים ומאפים לארוחת הבוקר."

במקרה זה, אם נרצה לקבץ או לחלק ביטויי עצם, נקבל "בורגרים", "מאפים" ו"צהריים" שהם שמות העצם או קבוצות העצם של המשפט.

איפה משתמשים ב-chunking?

למה שנרצה ללמוד משהו מבלי לדעת היכן הוא נמצא בשימוש נרחב?! התבוננות ביישומים הנדונים בחלק זה של הבלוג תעזור לך להישאר סקרן עד הסוף!

Chunking משמש כדי לקבל את הביטויים הנדרשים ממשפט נתון. עם זאת, ניתן להשתמש בתיוג POS רק כדי לזהות את חלקי הדיבור שכל מילה במשפט שייכת אליהם.

כאשר יש לנו המון תיאורים או שינויים סביב מילה מסוימת או הביטוי שמעניין אותנו, אנו משתמשים ב-chunking כדי לתפוס לבד את הביטוי הנדרש, תוך התעלמות מהשאר סביבו. לפיכך, chunking סולל דרך לקבץ את הביטויים הנדרשים ולא לכלול את כל המשתנים סביבם שאינם נחוצים לניתוח שלנו. לסיכום, החתיכה עוזרת לנו לחלץ את המילים החשובות לבד מתיאורים ארוכים. לפיכך, chunking הוא שלב בחילוץ מידע.

מעניין שתהליך זה של chunking ב-NLP מורחב ליישומים שונים אחרים; למשל, לקבץ פירות מקטגוריה ספציפית, נניח, פירות עשירים בחלבונים כקבוצה, פירות עשירים בויטמינים כקבוצה אחרת, וכן הלאה. חוץ מזה, ניתן להשתמש ב-chunking גם כדי לקבץ מכוניות דומות, למשל, מכוניות התומכות בגיר אוטומטי לקבוצה אחת ואחרות שתומכות בגיר ידני לחלק אחר וכן הלאה.

סוגי צ'אנקינג

ישנם, בגדול, שני סוגים של chunking:

  • מתפרקים
  • מתפרק

מחלקים:

כאן, אנחנו לא צוללים לעומק; במקום זאת, אנו שמחים רק עם סקירה כללית של המידע. זה רק עוזר לנו לקבל מושג קצר על הנתונים הנתונים.

חותכים:

בשונה מהסוג הקודם של chunking, chunking down עוזר לנו לקבל מידע מפורט.

לכן, אם אתה רק רוצה תובנה, שקול "לצמצם" אחרת העדיפו "לצמצם".

יישום chunking ב-Python

תארו לעצמכם מצב שבו אתם רוצים לחלץ את כל הפעלים מהטקסט הנתון לניתוח שלכם. לפיכך, במקרה זה, עלינו לשקול את החתיכה של ביטויי פועל. הסיבה לכך היא שהמטרה שלנו היא לחלץ את כל ביטויי הפועל מקטע הטקסט הנתון. החתיכה מתבצעת בעזרת ביטויים רגולריים.

אל תדאג אם זו הפעם הראשונה שאתה נתקל במונח "ביטויים רגילים". הטבלה למטה נמצאת כאן, לעזרתך:

סמל

משמעות

דוגמה

*

התו הקודם יכול להופיע אפס או יותר פעמים, כלומר התו הקודם עשוי להיות שם או לא.

ab* תואם את כל התשומות שמתחילות ב-ab ואחריהן מספר אפס או יותר של b. התבנית תתאים ל-ab, abb, abbb וכן הלאה.

+

התו הקודם צריך להופיע לפחות פעם אחת.

a+ מתאים ל-a,aa,aaa וכן הלאה.

?

התו הקודם עשוי שלא להופיע כלל או להתרחש רק פעם אחת כלומר התו הקודם הוא אופציונלי.

אב? תואם ab,abb אבל לא abbb וכן הלאה.

הטבלה לעיל כוללת את הביטויים הרגולריים הנפוצים ביותר בשימוש. ביטויים רגולריים שימושיים מאוד בשורת הפקודה במיוחד בעת מחיקה, איתור, שינוי שמות או העברת קבצים.

בכל מקרה, ליישום זה, נשתמש רק ב-*. אל תהסס להסתכל בטבלה לעיל כדי להכיר את הסמל!

אנו נבצע chunking באמצעות nltk, ספריית ה-NLP הפופולרית ביותר. אז תחילה בוא נביא אותו.

יבוא nltk

הבה נשקול את הטקסט לדוגמה להלן שיצרתי בעצמי. אל תהסס להחליף את הטקסט למטה בכל טקסט לדוגמא שאתה אוהב ליישם chunking!

sample_text="""
ראמה הרג את ראוואנה כדי להציל את סיטה מלנקה. אגדת הרמאיאן היא האפוס ההודי הפופולרי ביותר. הרבה סרטים וסדרות כבר עשו
צולם בכמה שפות כאן בהודו על בסיס הרמאיאנה. """

ברור שהנתונים צריכים להיות אסימון משפטי ואז סמל למילה לפני שנמשיך. אסימון אינו אלא תהליך של פירוק קטע הטקסט הנתון ליחידות קטנות יותר כגון משפטים, במקרה של אסימון משפטי ומילים, במקרה של אסימון מילים.

ואחריו טוקניזציה, תיוג POS(חלקי דיבור) מתבצע עבור כל מילה, שבו יזוהה חלקי הדיבור של כל מילה. כעת, אנו מעוניינים רק בעבודה חלק-דיבור ורוצים לחלץ אותו.

לפיכך, ציין את חלקי הדיבור המעניינים אותנו באמצעות הביטוי הרגולרי הנדרש כדלקמן:

VB: {}

tokenized=nltk.sent_tokenize(sample_text)
עבור i in tokenized: words=nltk.word_tokenize(i) # print(words) tagged_words=nltk.pos_tag(words) # print(tagged_words) chunkGram=r"""VB: {}""" chunkParser=nltk.RegexpParser( chunkGram) chunked=chunkParser.parse(tagged_words) chunked.draw()

הביטוי הרגולרי (RE) מוקף בתוך סוגריים זוויתיים () אשר בתורם מוקפים בתוך סוגריים מסולסלים ({ ו-}).

הערה: ציין את ה-RE בהתאם ל-POS הנדרש

VB מייצג את הפועל POS. הנקודה העוקבת אחרי ה-VB פירושה להתאים לכל תו שאחרי VB. סימן השאלה אחרי הנקודה מציין שכל תו אחרי B חייב להופיע פעם אחת בלבד או לא חייב להופיע בכלל. עם זאת, מהטבלה שראינו בעבר, תו זה הוא אופציונלי. ניסחנו את הביטוי הרגולרי בצורה זו מכיוון שב-NLTK, ביטויי פועל כוללים את תגי ה-POS הבאים:

קופה

משמעות

VB

פועל בצורת הבסיס שלו

VBD

פועל בזמן העבר שלו

GBV

פועל בזמן הווה שלו

VBN

פועל בצורת חלק העבר שלו

VBP

פועל בזמן הווה אך לא בגוף שלישי יחיד

VBZ

פועל בזמן הווה שלו והוא גוף שלישי יחיד

לפיכך, ביטויי פועל יכולים להשתייך לכל אחד מה-POS לעיל. זו הסיבה שהביטוי הרגולרי ממוסגר כ-VB.? הכולל את כל הקטגוריות לעיל. חבילת RegexpParser משמשת כדי לבדוק אם קופה עומדת בדפוס הנדרש שלנו שהזכרנו באמצעות ה-RE בעבר.

ניתן לראות את כל הקוד באופן הבא:

ייבוא ​​nltk
nltk.download('averaged_perceptron_tagger')
sample_text="""
ראמה הרג את ראוואנה כדי להציל את סיטה מלנקה. אגדת הרמאיאן היא האפוס ההודי הפופולרי ביותר. הרבה סרטים וסדרות כבר עשו
צולם בכמה שפות כאן בהודו על בסיס הרמאיאנה. """
tokenized=nltk.sent_tokenize(sample_text)
עבור i in tokenized: words=nltk.word_tokenize(i) # print(words) tagged_words=nltk.pos_tag(words) # print(tagged_words) chunkGram=r"""VB: {}""" chunkParser=nltk.RegexpParser( chunkGram) chunked=chunkParser.parse(tagged_words) chunked.draw()

תוצאות

תוצאה חתיכה
תוצאה חתיכה

לבסוף, נקבל צורת עץ של ה-POS של המילים יחד עם המילים שה-POS שלהן תואם ל-RE הנתון. את תמונת המצב של הפלט שהתקבל עבור הטקסט לדוגמה שהועבר על ידינו ניתן לראות באיורים לעיל.

שימו לב שהמילים שמספקות את ה-RE שלנו עבור ביטויי פועל בלבד מודגשות בבירור בפלט. לפיכך, חתיכה של ביטויי פועל בוצעה בהצלחה.

מקווה שמצאת את המאמר שלי שימושי.

תודה!

הפניות

1. יישום chunking ב- Python

2. תיאוריה מאחורי chunking

3. רשימה מלאה של POS זמין ב-NLP

עליי

אני Nithyashree V, סטודנט שנה אחרונה BTech למדעי המחשב והנדסה. אני אוהב ללמוד טכנולוגיות מגניבות כאלה וליישם אותן בפועל, במיוחד להתבונן כיצד הן עוזרות לנו לפתור את הבעיות המאתגרות של החברה. תחומי העניין שלי כוללים בינה מלאכותית, מדעי נתונים ועיבוד שפה טבעית.

הנה פרופיל הלינקדאין שלי: הלינקדאין שלי

אתה יכול לקרוא מאמרים אחרים שלי על Analytics Vidhya מ כאן.

המדיה המוצגת במאמר זה אינה בבעלות Analytics Vidhya ונעשה בהם שימוש לפי שיקול דעתו של המחבר.

מקור: https://www.analyticsvidhya.com/blog/2021/10/what-is-chunking-in-natural-language-processing/

בול זמן:

עוד מ אנליטיקה וידיה