8 ห้องสมุด Python ที่ยอดเยี่ยมสำหรับการประมวลผลภาษาธรรมชาติ

การประมวลผลภาษาธรรมชาติหรือ NLP สั้น ๆ นั้นอธิบายได้ดีที่สุดว่า“ AI สำหรับคำพูดและข้อความ” ความมหัศจรรย์ที่อยู่เบื้องหลังคำสั่งเสียงการแปลคำพูดและข้อความการวิเคราะห์ความรู้สึกการสรุปข้อความและการใช้งานและการวิเคราะห์ทางภาษาอื่น ๆ อีกมากมายการประมวลผลภาษาธรรมชาติได้รับการปรับปรุงอย่างมากผ่านการเรียนรู้เชิงลึก

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

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

CoreNLP

ไลบรารี CoreNLP ซึ่งเป็นผลิตภัณฑ์ของมหาวิทยาลัยสแตนฟอร์ดถูกสร้างขึ้นเพื่อเป็นโซลูชันการประมวลผลภาษาธรรมชาติที่พร้อมสำหรับการผลิตซึ่งสามารถให้การคาดการณ์และวิเคราะห์ NLP ในระดับ CoreNLP เขียนด้วย Java แต่มีแพ็คเกจ Python และ API หลายตัวพร้อมใช้งานรวมถึงไลบรารี Python NLP ดั้งเดิมที่เรียกว่า StanfordNLP

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

จุดเริ่มต้นที่ง่ายที่สุดในการเริ่มต้นด้วย Python wrapper ของ CoreNLP คือ StanfordNLP ซึ่งเป็นการใช้งานอ้างอิงที่สร้างโดย Stanford NLP Group นอกจากจะได้รับการบันทึกไว้เป็นอย่างดีแล้ว StanfordNLP ยังได้รับการดูแลอย่างสม่ำเสมอ ไลบรารี Python อื่น ๆ สำหรับ CoreNLP จำนวนมากยังไม่ได้รับการอัปเดตในบางครั้ง

CoreNLP ยังสนับสนุนการใช้ NLTK ซึ่งเป็นไลบรารี Python NLP ที่สำคัญที่กล่าวถึงด้านล่าง ในเวอร์ชัน 3.2.3 NLTK มีอินเทอร์เฟซไปยัง CoreNLP ในตัวแยกวิเคราะห์ อย่าลืมใช้ API ที่ถูกต้อง

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

Gensim

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

Gensim สามารถทำงานกับข้อความขนาดใหญ่ได้โดยการสตรีมเอกสารไปยังเครื่องมือวิเคราะห์และดำเนินการเรียนรู้ที่ไม่ได้รับการดูแลทีละน้อย สามารถสร้างโมเดลได้หลายประเภทแต่ละแบบเหมาะกับสถานการณ์ที่แตกต่างกัน: Word2Vec, Doc2Vec, FastText และ Latent Dirichlet Allocation

เอกสารโดยละเอียดของ Gensim ประกอบด้วยแบบฝึกหัดและคำแนะนำวิธีการที่อธิบายแนวคิดหลักและแสดงให้เห็นด้วยตัวอย่างแบบลงมือปฏิบัติ นอกจากนี้ยังมีสูตรอาหารทั่วไปใน repo Gensim GitHub

NLTK

Natural Language Toolkit หรือ NLTK เรียกสั้น ๆ ว่าเป็นหนึ่งในไลบรารีประมวลผลภาษาธรรมชาติของ Python ที่รู้จักกันดีและทรงพลังที่สุด องค์กร (ชุดข้อมูล) และแบบจำลองที่ผ่านการฝึกอบรมจำนวนมากพร้อมใช้งานกับ NLTK นอกกรอบดังนั้นคุณสามารถเริ่มทดลองกับ NLTK ได้ทันที

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

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

หากคุณมุ่งมั่นที่จะใช้ประโยชน์จากสิ่งที่อยู่ใน NLTK คุณอาจเริ่มต้นด้วย TextBlob แทน (ดูด้านล่าง)

รูปแบบ

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

Pattern มาพร้อมกับในตัวสำหรับการคัดลอกบริการและแหล่งข้อมูลบนเว็บยอดนิยมจำนวนมาก (Google, Wikipedia, Twitter, Facebook, RSS ทั่วไป ฯลฯ ) ซึ่งทั้งหมดนี้มีให้ในโมดูล Python (เช่นfrom pattern.web import Twitter) คุณไม่จำเป็นต้องสร้างวงล้อใหม่เพื่อรับข้อมูลจากไซต์เหล่านั้นด้วยนิสัยใจคอของแต่ละคน จากนั้นคุณสามารถดำเนินการ NLP ทั่วไปกับข้อมูลได้หลายอย่างเช่นการวิเคราะห์ความรู้สึก

รูปแบบแสดงฟังก์ชันระดับล่างบางส่วนช่วยให้คุณสามารถใช้ฟังก์ชัน NLP การค้นหาแบบ n-gram เวกเตอร์และกราฟได้โดยตรงหากต้องการ นอกจากนี้ยังมีไลบรารีตัวช่วยในตัวสำหรับการทำงานกับฐานข้อมูลทั่วไป (MySQL, SQLite และ MongoDB ในอนาคต) ทำให้ง่ายต่อการทำงานกับข้อมูลตารางที่จัดเก็บจากเซสชันก่อนหน้าหรือได้รับจากบุคคลที่สาม

พูดได้หลายภาษา

Polyglot ตามชื่อที่แสดงถึงช่วยให้แอปพลิเคชันประมวลผลภาษาธรรมชาติที่จัดการกับหลายภาษาพร้อมกัน  

ฟีเจอร์ NLP ใน Polyglot จะสะท้อนสิ่งที่พบในไลบรารี NLP อื่น ๆ : โทเค็น, การจดจำเอนทิตี, การติดแท็กส่วนของคำพูด, การวิเคราะห์ความรู้สึก, การฝังคำ ฯลฯ สำหรับการดำเนินการแต่ละอย่าง Polyglot มีโมเดลที่ทำงานกับภาษาที่ต้องการ

โปรดทราบว่าการรองรับภาษาของ Polyglot นั้นแตกต่างกันอย่างมากจากฟีเจอร์หนึ่งไปสู่ฟีเจอร์หนึ่ง ตัวอย่างเช่นระบบโทเค็นรองรับเกือบ 200 ภาษา (ส่วนใหญ่เป็นเพราะใช้อัลกอริธึมการแบ่งกลุ่มข้อความ Unicode) และการวิเคราะห์ความรู้สึกรองรับ 136 ภาษา แต่การติดแท็กบางส่วนของคำพูดรองรับ 16 เท่านั้น

PyNLPI

PyNLPI (ออกเสียงว่า“ สัปปะรด”) มีเพียงบัญชีรายชื่อพื้นฐานของฟังก์ชันการประมวลผลภาษาธรรมชาติ แต่มีคุณลักษณะการแปลงข้อมูลและการประมวลผลข้อมูลที่เป็นประโยชน์อย่างแท้จริงสำหรับรูปแบบข้อมูล NLP

ฟังก์ชัน NLP ส่วนใหญ่ใน PyNLPI ใช้สำหรับงานพื้นฐานเช่นโทเค็นหรือการแยก n-gram พร้อมกับฟังก์ชันทางสถิติบางอย่างที่มีประโยชน์ใน NLP เช่น Levenshtein ระยะห่างระหว่างสตริงหรือโซ่ Markov ฟังก์ชันเหล่านี้ใช้งานใน Python แท้เพื่อความสะดวกดังนั้นจึงไม่น่าจะมีประสิทธิภาพระดับการผลิต

แต่ PyNLPI ส่องแสงสำหรับการทำงานกับประเภทข้อมูลและรูปแบบที่แปลกใหม่กว่าที่ผุดขึ้นในพื้นที่ NLP PyNLPI สามารถอ่านและประมวลผลรูปแบบข้อมูล GIZA, Moses ++, SoNaR, Taggerdata และ TiMBL และอุทิศทั้งโมดูลเพื่อทำงานกับ FoLiA ซึ่งเป็นรูปแบบเอกสาร XML ที่ใช้ในการใส่คำอธิบายประกอบทรัพยากรภาษาเช่น corpora (เนื้อหาของข้อความที่ใช้สำหรับการแปลหรือการวิเคราะห์อื่น ๆ ) . 

คุณจะต้องการเข้าถึง PyNLPI เมื่อใดก็ตามที่คุณจัดการกับประเภทข้อมูลเหล่านั้น

SpaCy

SpaCy ซึ่งแตะ Python เพื่อความสะดวกและ Cython เพื่อความรวดเร็วถูกเรียกเก็บเงินว่าเป็น "การประมวลผลภาษาธรรมชาติที่มีความแข็งแกร่งทางอุตสาหกรรม" ผู้สร้างอ้างว่าเปรียบเทียบกับ NLTK, CoreNLP และคู่แข่งอื่น ๆ ในแง่ของความเร็วขนาดโมเดลและความแม่นยำ ข้อเสียเปรียบหลักของ SpaCy คือมันค่อนข้างใหม่ดังนั้นจึงครอบคลุมเฉพาะภาษาอังกฤษและภาษาอื่น ๆ (ส่วนใหญ่ในยุโรป) ที่กล่าวว่า SpaCy ได้มาถึงเวอร์ชัน 2.2 แล้วในขณะที่เขียนนี้

SpaCy มีคุณลักษณะส่วนใหญ่ที่พบในเฟรมเวิร์กที่แข่งขันกัน ได้แก่ การติดแท็กคำพูดการแยกวิเคราะห์การอ้างอิงการจดจำเอนทิตีการใช้โทเค็นการแบ่งส่วนประโยคการดำเนินการจับคู่ตามกฎเวกเตอร์คำและอื่น ๆ อีกมากมาย SpaCy ยังรวมถึงการเพิ่มประสิทธิภาพสำหรับการทำงานของ GPU ทั้งสำหรับการเร่งการคำนวณและการจัดเก็บข้อมูลบน GPU เพื่อหลีกเลี่ยงการคัดลอก

เอกสารของ Spacy นั้นยอดเยี่ยมมาก วิซาร์ดการตั้งค่าจะสร้างการดำเนินการติดตั้งบรรทัดคำสั่งสำหรับ Windows, Linux และ macOS และสำหรับสภาพแวดล้อม Python ที่แตกต่างกัน (pip, conda ฯลฯ ) เช่นกัน โมเดลภาษาติดตั้งเป็นแพ็คเกจ Python ดังนั้นจึงสามารถติดตามเป็นส่วนหนึ่งของรายการอ้างอิงของแอปพลิเคชัน

TextBlob

TextBlob เป็นฟรอนต์เอนด์ที่เป็นมิตรกับไลบรารี Pattern และ NLTK ซึ่งจะรวมไลบรารีทั้งสองไว้ในอินเทอร์เฟซระดับสูงที่ใช้งานง่าย ด้วย TextBlob คุณใช้เวลาน้อยลงในการต่อสู้กับความซับซ้อนของ Pattern และ NLTK และมีเวลามากขึ้นในการรับผลลัพธ์

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

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