การแยกภาษาเพื่อค้นหาคำสำคัญ


9

ฉันกำลังมองหาข้อมูลและทฤษฎีเกี่ยวกับวิธีการเข้าถึงหัวข้อคำศัพท์

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

ลองดูตัวอย่างเล็ก ๆ น้อย ๆ ของสิ่งที่ฉันหมายถึง

ตัวอย่าง # 1:

"ฉันต้องการ Keurig จริงๆ แต่ฉันไม่สามารถซื้อได้!"

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

"Keurig" => 0.9
"afford" => 0.4
"want"   => 0.2
"really" => 0.1
etc...

ตัวอย่างที่ 2:

"แค่หนึ่งในวิธีการว่ายน้ำที่ดีที่สุดในชีวิตของฉันฉันหวังว่าฉันจะสามารถรักษาเวลาของฉันให้แข่งขันได้ถ้าฉันจำได้ว่าต้องใช้นาฬิกาที่ไม่กันน้ำ"

ตัวอย่างนี้มีหลายประโยคดังนั้นจะมีคำที่สำคัญมากกว่านี้ตลอด โดยไม่ต้องทำซ้ำแบบฝึกหัดจากตัวอย่างที่ 1 ฉันอาจคาดหวังว่าจะเห็นสองหรือสามคำที่สำคัญจริงๆออกมาจากนี้: "ว่ายน้ำ" (หรือ "ฝึกว่ายน้ำ") "แข่งขัน" และ "ดู" (กันน้ำ) นาฬิกา "หรือ" นาฬิกาที่ไม่กันน้ำ "ขึ้นอยู่กับวิธีการใช้ยัติภังค์)

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


นอกจากนี้เป็นโพสต์แรกของฉันใน programmers.stackexchange.com ขออภัยหากนี่เป็นสถานที่ที่ไม่ถูกต้องและอยู่ใน StackOverflow หรือไซต์ SE อื่น ยินดีย้ายคำถามหากจำเป็น
Matt Huggins

ฉันไม่เข้าใจคำถามที่คุณพยายามทำ สำหรับตัวอย่างแรกโดยเฉพาะคำว่า "Keurig" และ "จ่าย" สามารถระบุได้โดยการตรวจสอบทางสถิติอย่างง่าย: ในบรรดาคำของประโยคคำสองคำนี้เป็นคำสามัญน้อยกว่าภาษาอังกฤษ ดังนั้นหากคุณมีฐานข้อมูลความถี่คำคุณสามารถระบุคำเหล่านั้นได้อย่างง่ายดาย
Qwertie

คำตอบ:


5

มีคนกำลังคิดเกี่ยวกับปัญหาที่คุณอธิบายอย่างแน่นอน João Ventura และ Joaquim Ferreira da Silva การจัดอันดับและการแยกคำเดี่ยวที่เกี่ยวข้องในข้อความ (pdf) เป็นการแนะนำเทคนิคการจัดอันดับที่มีอยู่เป็นอย่างดีรวมถึงคำแนะนำสำหรับการปรับปรุง เทคนิคทั้งหมดที่พวกเขาอธิบายนั้นขึ้นอยู่กับคลังข้อมูล (ข้อความจำนวนมาก) เมื่อเทียบกับข้อความหนึ่งหรือสองบรรทัด คลังข้อมูลของคุณจะต้องมีการรวบรวมตัวอย่างทั้งหมดหรือเป็นไปได้ที่จะเก็บตัวอย่างจากแหล่งข้อมูลเฉพาะจำนวนมาก โปรดทราบว่าความเกี่ยวข้องของคำเดี่ยว (unigram) นั้นเป็นปัญหาที่ไม่ได้รับการแก้ไข ตามที่อธิบายในกระดาษ:

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

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

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


1

การประมวลผลภาษาธรรมชาติเป็นระเบียบวินัยของตัวเองซึ่งมีการวิจัยอย่างเป็นทางการค่อนข้างมาก ฉันจะเริ่มต้นด้วยการดูที่นั่น

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

หากมีข้อ จำกัด บางอย่างในการพูด (เช่น Siri สมมติว่าคุณมีคำสั่งหรือคำถามง่าย ๆ ) มันจะดีกว่า พิจารณาความต้องการของฉันใหม่ (สมมติว่าฉันต้องการ NLP) จะรวมถึงการกำหนดข้อ จำกัด ของฉัน หลังจากนั้นฉันอาจจะตามล่าหาตัวอย่างมากมาย ส่วนหนึ่งเพื่อทดสอบสิ่งที่ฉันคิดขึ้นมา แต่โซลูชั่นที่ทันสมัยหลายอย่างเกี่ยวข้องกับการเรียนรู้ของเครื่อง ฉันต้องการตัวอย่างเหล่านั้นเพื่อป้อนเข้าสู่ช่วงการเรียนรู้

ดังนั้นโดยสรุปฉันสงสัยอย่างจริงจังว่าอะไรจะสามารถให้คะแนนที่ดีกับคุณในสถานการณ์แบบนี้


+1 สำหรับ Siri dig ... หรือโปรโมชัน ...
Aaron McIver
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.