הדרכות NLP חלק א' מהיסודות למתקדמים

צומת המקור: 1581227

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

כל אחד חדש או אפס ב-NLP יכול להתחיל איתנו ולעקוב אחר סדרת המאמרים הזו.

ספריות בשימוש: Keras, Tensorflow, Scikit learn, NLTK, Glove וכו'.

כל הנושאים יוסברו באמצעות קודים של python ומסגרות למידה עמוקה ולמידת מכונה פופולריות, כגון Sci-kit learning, Keras ו-TensorFlow.

מה זה NLP?

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

שלב 1 ניקוי נתונים

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

במאמר זה, נראה את הנושאים הבאים תחת עיבוד טקסט וניתוח נתונים חקרניים.

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

import pandas as pd text = ['זהו מאמר ה-NLP TASKS שנכתב על ידי ABhishek Jaiswal** ','במאמר זה אני אסביר טכניקות שונות לניקוי נתונים', 'אז הישארו מעודכנים לעוד &&','לא אני לא חושב שהוא הולך ל-usf, הוא גר בסביבה'] df = pd.DataFrame({'text':text})

פלט:

ניקוי נתונים | הדרכות NLP
                                                                                  מקור: מקומי

צמצום נמוך יותר

השיטה lower()ממירה את כל התווים הגדולים לאותיות קטנות ומחזירה.

מריחה lower() שיטה באמצעות פונקציית למבדה

df['lower'] = df['text'].apply(lambda x: " ".join(x.lower() עבור x ב-x.split()))
אותיות קטנות | הדרכות NLP
                                                                                           מקור: מקומי

הסרת סימני פיסוק 

מסיר סימני פיסוק(*,&,%#@#()) הוא שלב מכריע מכיוון שסימני פיסוק אינם מוסיפים מידע או ערך נוסף לנתונים שלנו. לפיכך, הסרת סימני פיסוק מקטינה את גודל הנתונים; לכן, זה משפר את היעילות החישובית.

שלב זה יכול להיעשות באמצעות שיטת Regex או Replace.

הסרת סימני פיסוק
                                                                                                 מקור: מקומי

string.punctuation מחזירה מחרוזת המכילה את כל סימני הפיסוק.

סימני פיסוק | הדרכות NLP
                                                                                               מקור: מקומי

הסרת סימני פיסוק באמצעות ביטויים רגילים:

הסרת סימני פיסוק
                                                                                                 מקור: מקומי

עצור הסרת מילים

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

באמצעות ספריית NLTK, אנו יכולים לסנן את מילות העצירה שלנו ממערך הנתונים.

# !pip install nltk import nltk nltk.download('stopwords') from nltk.corpus import stopwords allstopwords = stopwords.words('english') df.lower.apply(lambda x: " ".join(i for i in x .split() אם אני לא ב-allstopwords))
עצירת מילים הסרת
                                                                                          מקור: מקומי

תיקון איות

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

תיקון שגיאות כתיב משפר את דיוק המודל.

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

השיטה correct() עובד על אובייקטים של כתמי טקסט ומתקן את שגיאות הכתיב.

#התקן ספריית textblob !pip התקן textblob מ-textblob ייבוא ​​TextBlob
תיקון איות
                                                                        מקור: מקומי

טוקניזציה

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

Tokenizer למשפטים מפצל פסקה למשפטים בעלי משמעות, בעוד ש-Tokenizer למילים מפצל משפט למילים בעלות משמעות ליחידה. ספריות רבות יכולות לבצע טוקניזציה כמו SpaCy, NLTK ו-TextBlob.

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

import nltk mystring = "החיה האהובה עליי היא חתול" nltk.word_tokenize(mystring)
mystring.split(" ")

תְפוּקָה:

['שלי', 'מועדף', 'חיה', 'הוא', 'חתול']

נובע

גזע הוא המרת מילים למילת השורש שלהן תוך שימוש בקבוצת כללים כלשהי ללא קשר למשמעות. כְּלוֹמַר,

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

הדרך הפשוטה ביותר לביצוע הסכמה היא להשתמש ב-NLTK או בספריית TextBlob.

NLTK מספקת טכניקות שונות, כגון Snowball, PorterStemmer; טכניקה שונה עוקבת אחר סטים שונים של כללים כדי להמיר מילים למילת השורש שלהן.

ייבוא ​​nltk מ-nltk.stem ייבוא ​​PorterStemmer st = PorterStemmer() df['text'].apply(lambda x:" ".join([st.stem(word) עבור מילה ב-x.split()]))
נובע
מקור: מקומי

"מאמר" מקורו ב"articl","lives" - -> "live

לימטיזציה

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

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

כְּלוֹמַר. leafs נבע ל. עלים נבעו ל leav בזמן leafs , leaves lemmatized ל leaf

ניתן לבצע Lematization באמצעות NLTK, ספריית TextBlob.

למטיזציה
                                                                                                 מקור: מקומי

הפוך את כל מערך הנתונים.

Lematisation 2 | הדרכות NLP
                                                                                                   מקור: מקומי

שלב 2 ניתוח נתונים חקרני

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

תדירות מילים בנתונים

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

nltk מספק Freq_dist כיתה כדי לחשב את תדירות המילים, וזה לוקח שקית של מילים כקלט.

all_words = [] למשפט ב-df['processed']: all_words.extend(sentence.split())

all_words מכיל את כל המילים הזמינות במערך הנתונים שלנו. לעתים קרובות אנו קוראים לזה אוצר מילים.

ייבוא ​​nltk nltk.Freq_dist(all_words)
תדירות מילים בנתונים
                                                                                                 מקור: מקומי

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

ענן Word

Wordcloud הוא הייצוג הציורי של תדירות המילים של מערך הנתונים. WordCloud קל יותר להבנה ונותן מושג טוב יותר לגבי הנתונים הטקסטואליים שלנו.

השמיים ספריה wordcloud תנו לנו ליצור ענן מילים בכמה שורות קוד.

ייבוא ​​ספריות:

מ-wordcloud ייבוא ​​WordCloud מ-wordcloud ייבוא ​​STOPWORDS ייבוא ​​matplotlib.pyplot כ-plt

אנו יכולים לצייר ענן מילים באמצעות טקסט המכיל את כל המילים של הנתונים שלנו.

words = [] להודעה ב-df['processed']: words.extend([מילה למילה ב-message.split() אם מילה לא ב-STOPWORDS]) wordcloud = WordCloud(width = 1000, גובה = 500).generate( " ".join(words)) plt.imshow(wordcloud, interpolation='bilinear') plt.axis("off") plt.show()
ענן מילים | הדרכות NLP
                                                             מקור: מקומי
  • background_color = 'white' באמצעות פרמטר זה, נוכל לשנות את צבע הרקע של ענן המילים.
  • collocations = False שמירה על זה כ-false תתעלם ממילות ה-colocation. קולוקציות הן אותן מילים שנוצרות על ידי אותן מילים המתרחשות יחד. כלומר שימו לב, עבודות בית וכו'.
  • אנו יכולים להתאים את הגובה והרוחב באמצעות הפרמטרים.

הערות : לפני יצירת ענן המילים תמיד הסר את מילות העצירה.

EndNotes

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

במאמר השני בסדרה זו נלמד את הנושאים הבאים:

מקור: https://www.analyticsvidhya.com/blog/2022/01/nlp-tutorials-part-i-from-basics-to-advance/

בול זמן:

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