NLP Tutorials Part -I จากพื้นฐานสู่ขั้นสูง

โหนดต้นทาง: 1581227

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

ใครก็ตามที่เป็นมือใหม่หรือศูนย์ใน NLP สามารถเริ่มต้นกับเราและติดตามบทความชุดนี้

ห้องสมุดที่ใช้: Keras, Tensorflow, Scikit เรียนรู้, NLTK, ถุงมือ ฯลฯ

หัวข้อทั้งหมดจะได้รับการอธิบายโดยใช้โค้ดของ python และเฟรมเวิร์กการเรียนรู้เชิงลึกและการเรียนรู้ของเครื่องที่ได้รับความนิยม เช่น sci-kit learn, Keras และ TensorFlow

NLP คืออะไร

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

ขั้นตอนที่ 1 การล้างข้อมูล

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

ในบทความนี้ เราจะเห็นหัวข้อต่อไปนี้ภายใต้การประมวลผลข้อความและการวิเคราะห์ข้อมูลเชิงสำรวจ

ฉันกำลังแปลงข้อมูลข้อความดิบเป็น data frame ของ pandas และใช้เทคนิคการล้างข้อมูลต่างๆ

นำเข้าแพนด้าเป็นข้อความ pd = ['นี่คือบทความ NLP TASKS ที่เขียนโดย ABhishek Jaiswal** ','ในบทความนี้ ฉันจะอธิบายเทคนิคต่างๆ ในการทำความสะอาดข้อมูล', 'โปรดคอยติดตามข้อมูลเพิ่มเติม &&','ไม่ ฉันไม่คิดว่าเขาจะไปที่ usf เขาอาศัยอยู่รอบ ๆ '] df = pd.DataFrame({'text':text})

Output:

การล้างข้อมูล | บทช่วยสอน NLP
                                                                                  ที่มา: Local

ตัวพิมพ์เล็ก

วิธีการ lower()แปลงอักขระตัวพิมพ์ใหญ่ทั้งหมดเป็นตัวพิมพ์เล็กและส่งคืน

การประยุกต์ใช้ lower() วิธีการใช้ฟังก์ชันแลมบ์ดา

df['lower'] = df['text'].apply(lambda x: " ".join(x.lower() สำหรับ x ใน x.split()))
ตัวพิมพ์เล็ก | บทช่วยสอน NLP
                                                                                           ที่มา: Local

การลบเครื่องหมายวรรคตอน 

การลบเครื่องหมายวรรคตอน (*,&,%#@#()) เป็นขั้นตอนสำคัญเนื่องจากเครื่องหมายวรรคตอนไม่ได้เพิ่มข้อมูลหรือคุณค่าเพิ่มเติมให้กับข้อมูลของเรา ดังนั้นการลบเครื่องหมายวรรคตอนจะลดขนาดข้อมูล ดังนั้นจึงช่วยเพิ่มประสิทธิภาพในการคำนวณ

ขั้นตอนนี้สามารถทำได้โดยใช้วิธี Regex หรือ Replace

การลบเครื่องหมายวรรคตอน
                                                                                                 ที่มา: Local

string.punctuation ส่งคืนสตริงที่มีเครื่องหมายวรรคตอนทั้งหมด

เครื่องหมายวรรคตอน | บทช่วยสอน NLP
                                                                                               ที่มา: Local

การลบเครื่องหมายวรรคตอนโดยใช้ นิพจน์ทั่วไป:

การลบเครื่องหมายวรรคตอน
                                                                                                 ที่มา: Local

หยุดการลบคำ

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

การใช้ไลบรารี NLTK ทำให้เรากรองคำหยุดของเราออกจากชุดข้อมูลได้

# !pip ติดตั้ง nltk นำเข้า nltk nltk.download('stopwords') จาก nltk.corpus นำเข้าคำหยุด allstopwords = stopwords.words('english') df.lower.apply(lambda x: " ".join(i for i in x) .split() ถ้าฉันไม่ได้อยู่ใน allstopwords))
หยุดการถอดคำ
                                                                                          ที่มา: Local

การแก้ไขตัวสะกด

ข้อมูลข้อความส่วนใหญ่ที่ดึงมาจากบทวิจารณ์ของลูกค้า บล็อก หรือทวีตมีโอกาสสะกดคำผิด

การแก้ไขข้อผิดพลาดในการสะกดคำช่วยปรับปรุงความถูกต้องของแบบจำลอง

มีไลบรารี่ต่างๆ เพื่อแก้ไขข้อผิดพลาดในการสะกดคำ แต่วิธีที่สะดวกที่สุดคือการใช้ text blob

วิธีการ correct() ทำงานบนวัตถุหยดข้อความและแก้ไขข้อผิดพลาดในการสะกดคำ

#Install ไลบรารี textblob !pip ติดตั้ง textblob จาก textblob นำเข้า TextBlob
การแก้ไขตัวสะกด
                                                                        ที่มา: Local

tokenization

Tokenization หมายถึงการแยกข้อความออกเป็นหน่วยคำที่มีความหมาย มีตัวสร้างประโยคและตัวสร้างคำ

ประโยค tokenizer แบ่งย่อหน้าเป็นประโยคที่มีความหมาย ในขณะที่ tokenizer ของคำจะแยกประโยคออกเป็นคำที่มีความหมายเป็นหน่วย ห้องสมุดหลายแห่งสามารถทำโทเค็นได้ เช่น SpaCy, NLTK และ TextBlob

การแยกประโยคในช่องว่างเพื่อให้ได้คำแต่ละหน่วยสามารถเข้าใจได้ว่าเป็นโทเค็น

import nltk mystring = "สัตว์ที่ฉันชอบคือแมว" nltk.word_tokenize(mystring)
mystring.split(" ")

เอาท์พุท:

['ของฉัน', 'รายการโปรด', 'สัตว์', 'คือ', 'แมว']

อารมณ์

Stemming คือการแปลงคำเป็นคำรากศัพท์โดยใช้กฎบางชุดโดยไม่คำนึงถึงความหมาย เช่น,

  • "ปลา" "ปลา" และ "การตกปลา" ถูกเรียกว่า "ปลา"
  • "เล่น", "เล่น", "เล่น" กลายเป็น "เล่น"
  • Stemming ช่วยลดคำศัพท์ซึ่งจะช่วยเพิ่มความแม่นยำ

วิธีที่ง่ายที่สุดในการดำเนินการแยกจากกันคือการใช้ NLTK หรือไลบรารี TextBlob

NLTK มีเทคนิคการแยกส่วนต่างๆ เช่น Snowball, PorterStemmer; เทคนิคต่าง ๆ ใช้กฎเกณฑ์ต่าง ๆ เพื่อแปลงคำเป็นคำรูท

นำเข้า nltk จาก nltk.stem นำเข้า PorterStemmer st = PorterStemmer() df['text'].apply(lambda x:" ".join([st.stem(word) for word in x.split()]))
อารมณ์
ที่มา: local

“บทความ” มีต้นกำเนิดมาจาก “articl","lives“ — -> “live"

เล็มมาไลเซชั่น

Lemmatization คือการแปลงคำเป็นคำรากศัพท์โดยใช้การทำแผนที่คำศัพท์ Lemmatization ทำได้โดยใช้ส่วนหนึ่งของคำพูดและความหมาย จึงไม่สร้างรากศัพท์ที่ไม่มีความหมาย แต่การให้เล็มมาไลเซชันช้ากว่าการโค่นล้ม

  • "ดี, ""ดีกว่า," หรือ "ดีที่สุด” ถูกย่อเป็น “ดี"
  • Lemmatization จะแปลงคำพ้องความหมายทั้งหมดเป็นคำรากศัพท์เดียว เช่น "รถยนต์","รถ"" รถบรรทุก"" ยานพาหนะ” ถูกย่อเป็น “รถยนต์”
  • Lemmatization มักจะได้ผลลัพธ์ที่ดีกว่า

เช่น. leafs มีต้นกำเนิดมาจาก ใบมีก้านถึง leav ในขณะที่ leafs , leaves lemmatized เพื่อ leaf

Lemmatization สามารถทำได้โดยใช้ NLTK, ไลบรารี TextBlob

เล็มมาทิเซชั่น
                                                                                                 ที่มา: local

เล็มมาทั้งชุดข้อมูล

เล็มมาไทเซชั่น 2 | บทช่วยสอน NLP
                                                                                                   ที่มา: local

ขั้นตอนที่ 2 การวิเคราะห์ข้อมูลเชิงสำรวจ

จนถึงตอนนี้ เราได้เห็นเทคนิคการประมวลผลข้อความล่วงหน้าต่างๆ ที่ต้องทำหลังจากได้รับข้อมูลดิบแล้ว หลังจากล้างข้อมูลแล้ว ตอนนี้เราสามารถวิเคราะห์ข้อมูลเชิงสำรวจ สำรวจและทำความเข้าใจข้อมูลที่เป็นข้อความได้

ความถี่ของคำในข้อมูล

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

nltk ให้ Freq_dist เพื่อคำนวณความถี่ของคำ และใช้ถุงคำเป็นอินพุต

all_words = [] สำหรับประโยคใน df['processed']: all_words.extend(sentence.split())

all_words มีคำทั้งหมดที่มีอยู่ในชุดข้อมูลของเรา เรามักเรียกมันว่าคำศัพท์

นำเข้า nltk nltk.Freq_dist (all_words)
ความถี่ของคำในข้อมูล
                                                                                                 ที่มา: Local

ซึ่งแสดงคำที่เป็นคีย์และจำนวนครั้งในข้อมูลของเราเป็นค่า

โปรแกรม Word Cloud

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

พื้นที่ ห้องสมุด wordcloud ให้เราสร้าง word cloud ในโค้ดสองสามบรรทัด

นำเข้าไลบรารี:

จากการนำเข้า wordcloud WordCloud จากการนำเข้า wordcloud STOPWORDS นำเข้า matplotlib.pyplot เป็น plt

เราสามารถวาด word cloud โดยใช้ข้อความที่มีคำทั้งหมดในข้อมูลของเรา

คำ = [] สำหรับข้อความใน df['processed']: words.extend([word for word in message.split() ถ้าคำไม่อยู่ใน STOPWORDS]) wordcloud = WordCloud (ความกว้าง = 1000 ความสูง = 500). สร้าง ( " ".join(คำ)) plt.imshow(wordcloud, interpolation='bilinear') plt.axis("off") plt.show()
เมฆคำ | บทช่วยสอน NLP
                                                             ที่มา: Local
  • background_color = 'white' โดยใช้พารามิเตอร์นี้ เราสามารถเปลี่ยนสีพื้นหลังของ word cloud
  • collocations = False เก็บไว้เป็นเท็จจะละเว้นคำจัดระเบียบ Collocations คือคำที่เกิดขึ้นจากคำเหล่านั้นซึ่งเกิดขึ้นพร้อมกัน เช่น การเอาใจใส่ การบ้าน เป็นต้น
  • เราสามารถปรับความสูงและความกว้างได้โดยใช้พารามิเตอร์

หมายเหตุ : ก่อนสร้าง word cloud ให้เอาคำหยุดออกเสมอ

หมายเหตุท้ายเรื่อง

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

ในบทความที่สองของชุดนี้ เราจะเรียนรู้หัวข้อต่อไปนี้:

ที่มา: https://www.analyticsvidhya.com/blog/2022/01/nlp-tutorials-part-i-from-basics-to-advance/

ประทับเวลา:

เพิ่มเติมจาก การวิเคราะห์ วิทยา