แยกแนวคิดและคำสำคัญออกจากข้อความโดยอัตโนมัติ (ตอนที่ II: แนวทางเชิงความหมาย)
เผยแพร่แล้ว: 2022-09-20บทความนี้เป็นส่วนต่อจากส่วนแรกเกี่ยวกับการดึงคำหลักจากข้อความโดยอัตโนมัติ บทความก่อนหน้านี้กล่าวถึงวิธีการที่เรียกว่า ” ดั้งเดิม ” เพื่อแยกคำหลักจากข้อความ: ตามสถิติหรือตามกราฟ
ในที่นี้ เราจะสำรวจวิธีการต่างๆ ที่มี ความหมาย มากขึ้น ขั้นแรก เราจะแนะนำการฝังคำและ หม้อแปลง เช่น การฝังตามบริบท จากนั้นเราจะแบ่งปันตัวอย่างที่มีข้อความเดียวกันเกี่ยวกับอัลบั้ม Impressions ของ John Coltrane ซึ่งอิงตามแบบจำลองของ BERT สุดท้ายเราจะนำเสนอวิธีการประเมินบางอย่าง เช่น P@k
, f1-score
ตลอดจนเกณฑ์มาตรฐานจากความทันสมัยล่าสุด
แนวทาง เชิงความหมาย ต่างจากวิธีดั้งเดิมตรงที่ช่วยให้คุณสามารถเชื่อมโยงคำที่อยู่ในเขตข้อมูลคำศัพท์ที่คล้ายกัน แม้ว่าจะต่างกันก็ตาม แนวคิดเบื้องหลังวิธีนี้คือการคำนวณความถี่การเกิดคำในข้อความเพื่อแยกคำที่เหมาะสมที่สุด หรืออีกนัยหนึ่งคือคำที่ให้ข้อมูลที่เกี่ยวข้องมากที่สุดเกี่ยวกับข้อความ
การฝังคำ
วิธีนี้มีอายุย้อนไปถึงปี 2013 ด้วยการเปิดตัวโมเดลที่เรียกว่า word2vec เป็นสถาปัตยกรรมโครงข่ายประสาทเทียมแบบ "ง่าย" ซึ่งแตกต่างจากสถาปัตยกรรมที่เรียกว่า "การเรียนรู้เชิงลึก" ซึ่งเสนอให้เป็นตัวแทนของชุดคำศัพท์เป็นเวกเตอร์ กล่าวอีกนัยหนึ่ง แต่ละคำจะแสดงด้วยบรรทัดตัวเลข เวกเตอร์ชุดนี้แสดงถึงฟิลด์ความหมายของคำศัพท์ ซึ่งสามารถเปรียบเทียบเวกเตอร์เหล่านี้ซึ่งกันและกันได้ โดยการวัดระยะห่างระหว่างเวกเตอร์เหล่านี้ เราสามารถบอกได้ว่าคำนั้นมี ความหมายคล้ายกัน หรือไม่ การแสดงคำเป็นอาร์เรย์ของตัวเลขเรียกว่า การฝัง
เมื่อคุณมีชุดคำแทนเวกเตอร์แล้ว คุณสามารถเปรียบเทียบคำเหล่านี้กันได้ คำสองคำจะมีความหมายใกล้เคียงกันหากเวกเตอร์ทั้งสองมีมุมเล็ก ๆ ระหว่างกัน: นี่คือ ระยะทางเชิงความหมาย – ค่าระหว่าง -1 ถึง 1 ยิ่งค่าเข้าใกล้ 1 ยิ่งคำมี ” คล้ายกัน” มากเท่านั้น ความหมาย. ค่าที่ใกล้เคียง -1 ตรงกันข้ามจะหมายถึงความหมาย "ตรงกันข้าม" เช่น "ดี" และ "ไม่ดี"
วัตถุประสงค์ของโมเดลนี้คือ "ผลิต" การฝังที่มีชื่อเสียงเหล่านี้จากเอกสารข้อความในปริมาณที่ไม่มากนัก สมมติว่าคุณมีข้อความไม่กี่แสนข้อความ ตัวแบบจะเรียนรู้การคาดเดาคำโดยอิงจากคำที่คล้ายกับคำนั้น
โมเดลจะใช้กลุ่มคำหลายกลุ่ม เช่น ขนาด 5 และพยายามค้นหาทางเลือกที่ดีที่สุดสำหรับ <mask>
ภายในคลังข้อมูลของคุณ มีวลีหรือกลุ่มคำที่คล้ายกัน เราจะสามารถค้นหาคำว่า "แจ๊ส", "ร็อค", "คลาสสิก" หรือ "เร้กเก้" เป็นต้น ดังนั้น คำเหล่านี้ทั้งหมดจะมีเวกเตอร์ค่อนข้างใกล้เคียงกัน ดังนั้น ตัวแบบจึงสามารถรวบรวมแนวคิดและคำที่อยู่ในเขตข้อมูลคำศัพท์ที่คล้ายคลึงกัน
[กรณีศึกษา] ค้นหาและแก้ไขปัญหาการจัดทำดัชนี
ในทางกลับกัน อาจมีความคลุมเครือสำหรับคำที่มีการสะกดเหมือนกันแต่ไม่ได้มีความหมายเหมือนกันในบริบท: คำเหล่านี้เป็นคำพ้องเสียง
ตัวอย่างเช่น:
- เขานั่งลงริมฝั่งแม่น้ำแซน
- เธอฝากเงินที่ธนาคารเชส
นี่เป็นข้อจำกัดของโมเดลประเภทนี้: คำจะมีการแสดงเวกเตอร์เหมือนกันโดยไม่คำนึงถึงบริบท
หม้อแปลงไฟฟ้า
แนวทางล่าสุดเกิดขึ้นในปี 2560 ด้วย Attention Is All You Need ของ Google เมื่อวิธี word2vec พยายามแสดงคำสองคำที่เหมือนกันซึ่งไม่ได้มีความหมายเหมือนกัน แบบจำลองประเภท Transformers สามารถแยกแยะความหมายของคำ ตามบริบท ได้ โปรดทราบว่ายังมีโมเดล NLP ที่สามารถพิจารณาลำดับของคำต่างๆ เช่น RNN หรือ LSTM ได้ แต่เราจะไม่กล่าวถึงสิ่งเหล่านี้ในบทความนี้
Transformers จะสร้างความนิยมให้กับแนวคิดใหม่ในสถาปัตยกรรมโครงข่ายประสาทเทียม: กลไกความสนใจ ซึ่งช่วยให้คุณสามารถค้นหาภายในลำดับของคำ เช่น ประโยค ว่าแต่ละคำมีความเกี่ยวข้องกับคำอื่นๆ อย่างไร
โมเดล BERT ที่ Google สร้างขึ้นในปี 2018 เป็นโมเดลที่ทรงพลังและเป็นที่นิยม ข้อได้เปรียบของแบบจำลองภาษาเหล่านี้คือ ใช้โมเดลที่ ฝึกไว้ล่วงหน้า กล่าวคือ โมเดลนี้ได้รับการฝึกอบรมจากข้อความในภาษาอังกฤษ ฝรั่งเศส ฯลฯ เป็นจำนวนมาก จึงสามารถนำไปใช้บนพื้นฐานของ การวิเคราะห์รายละเอียดเพิ่มเติม จากนั้นจึงนำไปใช้เพื่อเปรียบเทียบข้อความ สร้างคำตอบจากคำถาม วิเคราะห์ความคิดเห็น ปรับแต่ง เนื้อหาข้อความที่เฉพาะเจาะจงมากขึ้น เป็นต้น
รูปภาพถูกสร้างขึ้นด้วย เครื่องมือสร้างภาพ exBERT เราจะเห็นได้ว่าคำว่า "เงิน" ที่เลือก มีความเชื่อมโยงอย่างมากกับคำว่า " ฝาก " และ " ธนาคาร " จากนั้นแบบจำลองจะลบความคลุมเครือของคำว่า " ธนาคาร " ได้ง่ายขึ้นด้วยบริบท
ในกรณีของ KeyBERT เป็นแบบจำลองที่ได้มาจาก BERT เรียกว่า Sentence-BERT ซึ่งช่วยให้เราสามารถเปรียบเทียบประโยคตามความหมายได้อย่างง่ายดาย
หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับโอเพ่นซอร์สและโมเดลที่ผ่านการฝึกอบรมล่วงหน้าทั้งหมด คุณสามารถเยี่ยมชมฮับ Huggingface ซึ่งเชี่ยวชาญในการจัดเก็บและแบ่งปันชุดข้อมูลและโมเดลที่เกี่ยวข้องกับ NLP (แต่ล่าสุดยังรวมถึงเสียงและภาพด้วย)
การแยกคีย์เวิร์ดด้วย KeyBERT
เราจะใช้ Transformers เพื่อแยกคำหลักที่เกี่ยวข้องออกจากข้อความได้อย่างไร มีหลายโครงการรวมถึง KeyBERT: การแยกคำหลักขั้นต่ำด้วย BERT ซึ่งเป็นไลบรารี Python แบบโอเพ่นซอร์สที่ใช้โมเดล BERT
โดยค่าเริ่มต้น KeyBERT จะใช้ตัวเปลี่ยนประโยคที่ใช้ BERT เพื่อแสดงประโยคแทนที่จะเป็นคำเดียวเป็นเวกเตอร์ นี่เป็นวิธีที่มีประสิทธิภาพมากในการเปรียบเทียบประโยคหรือกลุ่มคำ หลักการของอัลกอริทึม KeyBERT นั้นค่อนข้างง่าย ลองดูข้อความตัวอย่าง จากนั้น:
- รหัสจะแยกคำที่ไม่ซ้ำทั้งหมดออกจากข้อความ ในขั้นตอนนี้ คำหยุดมักจะถูกกำจัดออกไป
- การคำนวณการฝังข้อความทั้งหมดและของแต่ละคำ
- จากนั้นเราสามารถคำนวณระยะทางเชิงความหมายระหว่างเวกเตอร์ที่มาจากคำและเวกเตอร์ซึ่งแสดงถึงข้อความอย่างครบถ้วน
เมื่อคำนวณระยะทางทั้งหมดแล้ว เราสามารถแยกคำที่เกี่ยวข้องอย่างใกล้ชิดกับความหมายโดยรวมของข้อความ ซึ่งจะเป็นคีย์เวิร์ดที่เลือกโดยอัลกอริทึม
นอกจากนี้ KeyBERT ยังให้คุณเลือกความยาวของข้อความสำคัญ : อันที่จริงแล้วเราสามารถใช้คำเดียวหรือคู่หรือสามคำก็ได้ นอกจากนี้ โค้ดยังให้วิธีการนำวิธีการ "Maximal Marginal Relevance" (MMR) ไปใช้ เพื่อเพิ่มความหลากหลายของผลลัพธ์ วิธีนี้ช่วยให้คุณหลีกเลี่ยงการใช้คำซ้ำกัน ซึ่งอาจเกี่ยวข้องกับเนื้อหาของเอกสาร แต่มักปรากฏในผลลัพธ์ เช่น "แจ๊สคอนเสิร์ต" "ดนตรีแจ๊ส" "สไตล์แจ๊ส" ฯลฯ
สรุป ยังสามารถใช้โมเดล NLP อื่นๆ สำหรับ KeyBERT เช่น โมเดลจาก spaCy หรือไหวพริบ
เช่นเดียวกับในบทความที่แล้ว นี่คือตัวอย่างคำหลักที่ KeyBERT ดึงมาจากบทความเดียวกันเกี่ยวกับอัลบั้ม Impressions ของ John Coltrane:
“โคลเทรนอิมเพรสชั่น”, ” วงสี่”, “แจ๊สเทรเชอร์”, “จอห์นคอนเสิร์ต”, “ลำดับไข่มุก”, “ละครเพลงกราซ”, “เทเนอร์แซกโซโฟน”
วิธีการประเมินผล
ในบทความนี้และบทความก่อนหน้านี้ เราได้นำเสนอวิธีการต่างๆ ที่ใช้ในการแยกคำหลักจากเอกสาร: RAKE, Yake, TextRank และ KeyBERT อย่างไรก็ตาม สิ่งสำคัญคือต้องเลือกสิ่งที่ถูกต้องตามบริบทของคุณ
ดังนั้นจึงมีความเกี่ยวข้องในการดูวิธีการประเมินเพื่อเปรียบเทียบผลลัพธ์ของวิธีหนึ่งกับอีกวิธีหนึ่ง จากข้อมูล (document, keywords)
ที่ มีการกำหนดและตรวจสอบคีย์เวิร์ดโดยมนุษย์ เป็นไปได้ที่จะเปรียบเทียบผลลัพธ์จากแบบจำลองกับ " ความเป็นจริง " นี้ เรามีเมตริก เช่น ความแม่นยำ การเรียกคืน และคะแนน f1 ที่มักใช้ในปัญหา การจำแนกประเภท ดังนั้นเราจึงสามารถสร้างเมทริกซ์ความสับสนได้ด้วยการรู้ว่าคีย์เวิร์ดที่กำหนดซึ่งแยกโดยโมเดลนั้นอยู่ในรายการคีย์เวิร์ดที่เกี่ยวข้องหรือไม่
เนื่องจากตัวแบบสามารถแยกชุดของคำหลัก เรามักจะเปรียบเทียบคำหลัก k คำ แรกกับ ความจริง พื้นฐาน เนื่องจากผลลัพธ์อาจแตกต่างกันไปตามจำนวน คำหลัก ที่เราต้องการเปรียบเทียบ เราจึงประเมินแบบจำลองหลายครั้งตามค่า k เมตริกเหล่านี้เรียกว่า Precision@k
ซึ่งหมายความว่า "ฉันคำนวณความ แม่นยำ ที่ด้านบนสุด"
[Ebook] รูปแบบการเชื่อมโยงภายในของคุณส่งผลต่อ Inrank . อย่างไร
ความแม่นยำ
นี่คือจำนวน คำหลักที่ถูกต้อง ใน อันดับต้นๆ ของ คำหลัก ที่คาดการณ์ไว้ทั้งหมด
จำ
นี่คือจำนวน คำหลักที่ถูกต้อง ใน อันดับต้น ๆ ของ คำหลัก ทั้งหมดเกี่ยวกับความจริงพื้นฐาน
คะแนน f1
เป็นการผสมผสานระหว่างเมตริกทั้งสองก่อนหน้านี้ หรืออีกนัยหนึ่งคือค่าเฉลี่ยที่กลมกลืนกันระหว่างความแม่นยำและการเรียกคืน:
แผนที่ @ k
ความแม่นยำเฉลี่ยเฉลี่ย
ขั้นตอนแรกในการคำนวณ MAP คือการคำนวณค่าความแม่นยำเฉลี่ย เราจะนำคีย์เวิร์ดทั้งหมดที่พบโดยโมเดลมาคำนวณ P@k
สำหรับคีย์เวิร์ดที่เกี่ยวข้องแต่ละคำที่โมเดลพบ ตัวอย่างเช่น ในการคำนวณ AP@5
ด้วยคำหลักที่เกี่ยวข้อง 3 คำจาก 5 คำที่เสนอ:
คำสำคัญ: ดนตรีแจ๊ส คอนเสิร์ต ดนตรี แซกโซโฟน วิทยุ ที่เกี่ยวข้อง: 1 0 1 1 0 P@k: 1/1 2/3 3/4 พลังโจมตี: 1/3 (1 + 2/3 + 3/4) ~= 0.80
เราทราบที่นี่ว่าตำแหน่งของคำหลักที่เกี่ยวข้องมีความสำคัญ อันที่จริง AP จะไม่มีคะแนนเท่ากันหากคำหลักสามคำแรกจากห้าคำไม่เกี่ยวข้อง (สัมพันธ์กัน)
จากนั้น สำหรับแต่ละ (document, keywords)
เราจะคำนวณค่าเฉลี่ยของ AP ทั้งหมด เพื่อให้ได้ MAP ในที่สุด
โปรดทราบว่าเมตริกต่างๆ เหล่านี้ยังใช้กันอย่างแพร่หลายในการประเมินแบบจำลอง การจัดอันดับ หรือระบบการอ้างอิง
คำวิจารณ์เล็กๆ น้อยๆ เกี่ยวกับเมตริกเหล่านี้บางส่วนเกี่ยวข้องกับจำนวนคีย์เวิร์ดความจริงที่เกี่ยวข้อง ซึ่งสามารถเปลี่ยนแปลงได้ต่อชุดข้อมูลและต่อเอกสาร
- ตัวอย่างเช่น
recall@k
: คะแนนสามารถขึ้นอยู่กับขนาดของคำหลักที่เกี่ยวข้องของความจริงพื้น หากคุณมีคำหลักที่เกี่ยวข้องถึง 20 คำ สำหรับrecall@10
คุณจะต้องเปรียบเทียบคำหลัก 10 คำแรกในชุดคำหลัก 20 คำนี้ ในกรณีที่ดีที่สุด หากคำหลักทั้งหมดที่เสนอโดยแบบจำลองมีความเกี่ยวข้อง คะแนนการ เรียกคืน จะไม่เกิน 0.5 - ในทางกลับกัน หากจำนวนคีย์เวิร์ดเกี่ยวกับความจริงพื้นฐานที่เกี่ยวข้องต่ำมากเมื่อเทียบกับคีย์เวิร์ดที่เสนอโดยโมเดล คุณจะไม่สามารถได้คะแนน
precision@k
ที่ดี สำหรับคีย์เวิร์ดเกี่ยวกับความจริงพื้นฐานที่เกี่ยวข้อง 5 คำ อย่างprecision@10
จะได้รับคะแนน 0.5 แต่ไม่มากไปกว่านั้น
ไม่ว่าเมตริกใดที่ใช้ในการประเมินผลลัพธ์ จำเป็นต้องมีชุดข้อมูล (ข้อความ คีย์เวิร์ด) ที่มีการกำหนด คีย์เวิร์ด โดยบุคคลก่อนหน้านี้ เช่น ผู้เขียนข้อความ ผู้อ่าน บรรณาธิการ ฯลฯ มีชุดข้อมูลหลายชุด ซึ่งส่วนใหญ่อยู่ใน ภาษาอังกฤษและหัวข้อต่างๆ: บทความทางวิทยาศาสตร์ บทคัดย่อ ข่าว ไอที ฯลฯ ตัวอย่างเช่น นี่คือที่เก็บ Github KeywordExtractor-Datasets ซึ่งแสดงรายการชุดข้อมูลประมาณ 20 ชุด
เกณฑ์มาตรฐาน
นอกเหนือจากการนำเสนอวิธีการประเมินที่หลากหลายนี้แล้ว ฉันยังต้องการให้ "สรุป" ของเอกสารวิจัยที่เสนอ เกณฑ์มาตรฐานแก่คุณ
อย่างแรกคือโดยนักวิจัยที่ใช้ Yake! วิธีการในกระดาษ “YAKE! การแยกคำหลักจากเอกสารเดียวโดยใช้คุณสมบัติท้องถิ่นหลายรายการ" พวกเขาวิเคราะห์วิธีการของพวกเขาเกี่ยวกับชุดข้อมูลที่แตกต่างกันประมาณ 20 ชุด: PubMed, WikiNews, SemEval2010 และ KDD สำหรับชุดข้อมูลที่รู้จักกันดีที่สุด โดยใช้เมตริกส่วนใหญ่ที่อธิบายไว้ข้างต้น: P@k
, recall@k
ฯลฯ Yake! จะถูกนำไปเปรียบเทียบกับวิธีอื่น ๆ อีกประมาณสิบวิธีรวมถึง Rake, Text Rank เป็นต้น ด้วยการรวมชุดข้อมูลที่มีอยู่ทั้งหมดและ ความแม่นยำ ในการคำนวณและ การเรียกคืน Yake! วิธีที่ดีกว่าหรือใกล้เคียงกับวิธีการที่ทันสมัย ตัวอย่างเช่น สำหรับ f1@10
:
ชุดข้อมูล | ยะเกะ! | ดีที่สุดหรืออันดับ 2 |
---|---|---|
WikiNews | 0.450 | 0.337 |
KDD | 0.156 | 0.115 |
ตรวจสอบ | 0.316 | 0.378 |
ยะเกะ! มักจะดีกว่าถึง 50-100% ซึ่งใกล้เคียงกับวิธีการชั้นนำ
ในรายงานฉบับล่าสุดอีกฉบับหนึ่ง “TNT-KID: Neural tagger แบบ Transformer-based สำหรับการระบุคำหลัก” เรายังเปรียบเทียบวิธีการแบบเดิมและแบบที่ใช้ Transformer วิธีการสกัดโดยใช้ Transformers ทำงานได้ดีกว่า ระวังด้วยเนื่องจากสิ่งเหล่านี้เรียกว่าวิธีการ "ดูแล" ซึ่งแตกต่างจาก Rake, KeyBERT และ Yake ซึ่งไม่จำเป็นต้องได้รับการฝึกอบรมเกี่ยวกับเนื้อหาของข้อมูลเพื่อให้ได้ผลลัพธ์
สุดท้ายนี้ ให้เราดูการวัดประสิทธิภาพอื่นๆ อีกสองประการ:
- Simple Unsupervised Keyphrase Extraction โดยใช้ Sentence Embeddings ใช้ การฝังคำ และทำงานได้ดีเมื่อเปรียบเทียบกับ TextRank ในชุดข้อมูล เช่น Inspec และ DUC
- บล็อกโพสต์ที่เปรียบเทียบ 7 อัลกอริธึม (ใน Python): การแยกคำหลัก — เกณฑ์มาตรฐานของ 7 อัลกอริธึมใน Python ผู้เขียนเปรียบเทียบประสิทธิภาพในแง่ของเวลาในการคำนวณระหว่างวิธี KeyBERT, RAKE, Yake รวมถึงจำนวนคำที่เกี่ยวข้องที่แต่ละวิธีสามารถแยกได้
บทสรุป
ดังที่คุณได้เห็นในบทความทั้งสองนี้ มีวิธีต่างๆ มากมายในการดึงคำหลักที่เกี่ยวข้องออกจากข้อความ เมื่อพิจารณาจากเกณฑ์เปรียบเทียบที่แตกต่างกัน คุณจะสังเกตเห็นว่าไม่มีสิ่งใดที่เหนือกว่าเกณฑ์อื่นๆ ในแง่ของเมตริก จะขึ้นอยู่กับข้อความและบริบท นอกจากนี้ ตามที่ผู้เขียนบทความบล็อกเกี่ยวกับอัลกอริธึมการแยก 7 แบบชี้ให้เห็น เรายังสามารถพึ่งพาเวลาในการประมวลผลของอัลกอริทึมเมื่อต้องเผชิญกับข้อความที่มีความยาว
เวลานี้จะเป็นปัจจัยสำคัญในการนำอัลกอริธึมไปใช้งานจริงและประมวลผลเอกสารหลายแสนรายการ ในกรณีของ KeyBERT คุณควรพิจารณาโครงสร้างพื้นฐานที่มี GPU เพื่อเพิ่มเวลาในการประมวลผลอย่างมาก อันที่จริง วิธีนี้อาศัย Transformers ที่มีสถาปัตยกรรม Deep Learning ที่ต้องใช้คอมพิวเตอร์เป็นจำนวนมาก
ถ้าฉันต้องเลือก มันคงเป็นระหว่าง KeyBERT กับ Yake อดีตสำหรับ หม้อแปลง และด้าน ความหมาย ส่วนหลังสำหรับประสิทธิภาพและความเร็วในการดำเนินการ
การอ้างอิงบรรณานุกรม
- ความสนใจคือสิ่งที่คุณต้องการ 2017
- BERT: การฝึกอบรมล่วงหน้าของ Deep Bidirectional Transformers เพื่อการทำความเข้าใจภาษา 2019
- คีย์เวิร์ดตามบริบทที่ควบคุมตนเองและดึงข้อมูลคีย์เวิร์ดด้วยการติดป้ายกำกับด้วยตนเอง Sharma P. & Li Y. (2019)
- สำรวจตัวแยกคำหลักที่แตกต่างกัน — ตัวชี้วัดและกลยุทธ์การประเมิน