การจำแนกข้อความที่ไม่มีโครงสร้าง


12

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

"คำพูด" เป็นไปได้หรือไม่? หลังจากนั้นฉันสามารถเพิ่มขั้นตอนการจัดหมวดหมู่อื่นตามโครงสร้างของเอกสาร (อาจเป็นแผนผังการตัดสินใจ)

ฉันค่อนข้างคุ้นเคยกับ Mahout และ Hadoop ดังนั้นฉันจึงชอบโซลูชันที่ใช้ Java หากจำเป็นฉันสามารถเปลี่ยนเป็น Scala และ / หรือ Spark engine (ห้องสมุด ML)

คำตอบ:


14

มาเริ่มกันเลยดีกว่า การจำแนกประเภท (ยังเป็นที่รู้จักกันเป็นหมวดหมู่) เป็นตัวอย่างของการเรียนรู้ภายใต้การดูแล ในการเรียนรู้ภายใต้การดูแลของคุณ:

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

ทีนี้ลองจำแนกกรณีสแปมอย่างง่าย ชุดข้อมูลการฝึกอบรมของคุณคือคลังข้อมูลของอีเมล + ป้ายกำกับที่เกี่ยวข้อง - "สแปม" หรือ "ไม่ใช่จดหมายขยะ" ชุดข้อมูลการทดสอบมีโครงสร้างเดียวกัน แต่ทำจากอีเมลอิสระบางตัว (โดยปกติจะแยกชุดข้อมูลของเขาออกแล้วพูดว่า 9/10 ของชุดข้อมูลนั้นจะใช้สำหรับการฝึกอบรมและ 1/10 - สำหรับการทดสอบ) วิธีหนึ่งในการสร้างแบบจำลองอีเมลคือการแสดงแต่ละคำในรูปแบบชุด (ถุง) ของคำ หากเราคิดว่าคำต่าง ๆ เป็นอิสระจากกันเราสามารถใช้ตัวแยกแยะ Naive Bayesนั่นคือคำนวณความน่าจะเป็นก่อนหน้าสำหรับแต่ละคำและแต่ละคลาส (อัลกอริทึมการฝึกอบรม) จากนั้นใช้ทฤษฎีบทของเบส์เพื่อค้นหาความน่าจะเป็น ชั้นพิเศษ

ดังนั้นโดยพื้นฐานเรามี:

raw model + training set + training algorithm -> trained model
trained model + classification algorithm + new object -> object label

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

actor, analogue, bad, burn, ..., NOUN, VERB, ADJ, ..., in_bold, ... | label
    0,        0,   1,    1, ...,    5,    7,   2, ...,       2, ... | not spam
    0,        1,   0,    0, ...,    3,   12,  10, ...,       0, ... | spam

แถวแรกนี่คือรายการของคุณลักษณะที่เป็นไปได้และแถวที่ตามมาแสดงจำนวนครั้งที่คุณสมบัติเกิดขึ้นในเอกสาร เช่นในเอกสารแรกไม่มีคำว่า "นักแสดง" เกิดขึ้นคำที่ "เบิร์น" 1 คำนาม 5 คำนามคำคุณศัพท์ 2 คำและตัวอักษร 2 ตัว คอลัมน์สุดท้ายสอดคล้องกับเลเบลคลาสที่เป็นผลลัพธ์

การใช้คุณสมบัติเวกเตอร์คุณสามารถรวมคุณสมบัติใด ๆ ของข้อความของคุณได้ แม้ว่าการค้นหาชุดคุณสมบัติที่ดีอาจใช้เวลาพอสมควร

แล้วแบบจำลองและอัลกอริทึมล่ะ? พวกเราผูกพันกับ Naive Bayes หรือเปล่า ไม่ใช่เลย. การถดถอยโลจิสติก , SVM , ต้นไม้ตัดสินใจ - เพียงแค่พูดถึงตัวแยกประเภทยอดนิยมบางส่วน (โปรดทราบว่าเราพูดว่า "ตัวจําแนก" ในกรณีส่วนใหญ่เราหมายถึงรุ่น + อัลกอริทึมที่สอดคล้องกันสำหรับการฝึกอบรมและการจัดหมวดหมู่)

สำหรับการนำไปใช้งานคุณสามารถแบ่งภารกิจออกเป็น 2 ส่วนดังนี้

  1. การแยกคุณลักษณะ - แปลงข้อความดิบเป็นเวกเตอร์คุณลักษณะ
  2. การจำแนกวัตถุ - การสร้างและใช้แบบจำลอง

จุดแรกจะทำงานได้ดีออกมาในหลายห้องสมุด NLP ประการที่สองเป็นเรื่องเกี่ยวกับการเรียนรู้เครื่องดังนั้นขึ้นอยู่กับชุดของคุณคุณสามารถใช้ทั้งWekaหรือMLlib


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

@MrMeritology: อืมจากบริบทฉันจะบอกว่าผู้เขียนไม่แน่ใจเกี่ยวกับคลาสที่เป็นรูปธรรมที่เขาจะใช้ แต่ก็ยังต้องการการจำแนกไม่รวมกลุ่ม อย่างไรก็ตามเขาเป็นคนเดียวที่รู้ความจริง :)
แฟน

บางทีฉันไม่ชัดเจนในตอนนี้ คำแนะนำจะเลือกหมวดหมู่ตามหมวดหมู่ดังนั้นจึงค่อนข้างจัดประเภทมากกว่าปัญหาการจัดกลุ่ม แนวคิดของการสร้างเวกเตอร์คุณลักษณะที่ซับซ้อนนั้นค่อนข้างสมเหตุสมผล - โดยเฉพาะอย่างยิ่งว่ามีแท็กบางอย่างซึ่งมีแนวโน้มมากที่สุดที่จะจำแนกตัวอย่างได้อย่างรวดเร็ว ฉันไม่แน่ใจว่า SVM เหมาะสมกับปัญหาหรือไม่เนื่องจากฉันคาดการณ์ว่ามีความไม่เชิงเส้นสูง แต่ต้นไม้การตัดสินใจและ Bayes ดูเหมือนจะใช้ได้ ฉันเริ่มคิดเกี่ยวกับการประยุกต์ใช้อัลกอริทึมไฮบริด (แผนภูมิการตัดสินใจตาม SVM)
Grzegorz E.

@GrzegorzE - หากหมวดหมู่ของคุณได้รับการกำหนดล่วงหน้าโปรดระบุหมวดหมู่ทั้งสามนี้ไว้ในคำถามของคุณ ในความคิดของฉันคุณให้ความสำคัญกับอัลกอริธึม ML มากเกินไปและไม่เพียงพอกับลักษณะของปัญหาและลักษณะของข้อมูลของคุณ ตัวอย่างเช่นคุณคาดการณ์ "ไม่เชิงเส้น" ในฟีเจอร์สำหรับเว็บไซต์ที่มีโครงสร้างที่ไม่รู้จัก ทำไม? นอกจากนี้คุณกำลังผสมแท็กด้วยข้อความหน้าเว็บกับใครรู้อะไรและมีความหมายที่แตกต่างกัน
MrMeritology

@GrzegorzE - ฉันขอแนะนำอย่างยิ่งว่าวิธีการจัดหมวดหมู่ของคุณควรได้รับการขับเคลื่อนโดยธรรมชาติของหมวดหมู่เบื้องต้นของคุณและลักษณะของข้อมูลเป็นหลัก มีหลายวิธีในการจัดหมวดหมู่เว็บไซต์โดยพลการเป็น 3 หมวดหมู่ วิธีการจัดหมวดหมู่แต่ละวิธีจะแนะนำคุณสมบัติเด่นในข้อมูลหรือรูปแบบเด่น ไม่มีการแทนที่การวิเคราะห์ด้วยตนเองขององค์ประกอบข้อมูลส่วนบุคคล (หน้าเว็บ) และบริบทของพวกเขา
MrMeritology

5

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

คุณปฏิบัติต่อเอกสารแต่ละฉบับเป็นถุงคำและดำเนินการล่วงหน้าเพื่อลบคำหยุด ฯลฯ ด้วยวิธีการที่ง่ายที่สุดคุณจะระบุจำนวนหัวข้อล่วงหน้า ในกรณีของคุณคุณสามารถระบุ "3" ซึ่งเป็นขีด จำกัด คงที่ของคุณในหมวดหมู่หรือเลือกหัวข้อจำนวนมากขึ้น (ระหว่าง 10 ถึง 100) จากนั้นในขั้นตอนแยกต่างหากจัดรูปแบบสามกลุ่มสำหรับเอกสารที่เน้นทั่วไป หัวข้อ K-mean หรือวิธีการจัดกลุ่มอื่น ๆ สามารถนำมาใช้ (ฉันแนะนำวิธีหลัง)

คุณไม่จำเป็นต้องเขียนโค้ดซอฟต์แวร์สร้างโมเดลหัวข้อตั้งแต่ต้น นี่คือหน้าเว็บที่มีทรัพยากรมากมายรวมถึงไลบรารี / แพ็คเกจซอฟต์แวร์

ไม่มีใน Java แต่มีวิธีเรียกใช้ C ++ และ Python ภายใต้ Java


4

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

  • MALLETเป็นชุดเครื่องมือเรียนรู้ด้วยเครื่องที่ได้รับใบอนุญาตจาก CPL ซึ่งสร้างโดย UMass สำหรับทำงานกับข้อมูลตัวอักษร มันรวมถึงการใช้งานของหลาย ๆอัลกอริทึมการจำแนกประเภทต่างๆ (เช่นnaïve Bayes, เอนโทรปีสูงสุด, ต้นไม้ตัดสินใจ)
  • ตัวแยกประเภทของสแตนฟอร์ดจากสแตนฟอร์ดเอ็นแอลพีกรุ๊ปเป็นการนำ Java ไปใช้งานตัวแยกประเภทเอนโทรปีสูงสุดที่ออกแบบมาเพื่อทำงานกับข้อมูลข้อความ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.