เครือข่าย Neural Data แจงข้อมูลสตริง?


28

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

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

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

คำตอบ:


19

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

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

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

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

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


1
แจ้งให้เราทราบหากคุณมีคำถามเพิ่มเติมและฉันจะพยายามอย่างดีที่สุดเพื่อให้รายละเอียดเพิ่มเติม
เมดิสันอาจ

ขอบคุณที่ให้คำศัพท์ดีๆแก่ฉันในการสำรวจต่อไป!
MidnightLightning

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

6

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

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

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

อีกวิธีคือการสร้างแบบจำลองหัวข้อซึ่งเรียนรู้การแสดงข้อมูลที่ต่ำกว่าที่ซ่อนเร้น LDAและLSI / LSAเป็นตัวเลือกทั่วไป แต่สิ่งสำคัญที่ต้องจำว่านี่คือการสำรอง การเป็นตัวแทนที่เรียนรู้ไม่จำเป็นต้องเหมาะสมกับการเรียนรู้แบบมีผู้สอนที่คุณทำกับ NN ของคุณ ถ้าคุณต้องการที่จะทำแบบจำลองหัวข้อที่คุณอาจลองรุ่นหัวข้อภายใต้การดูแล

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

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

เมื่อใช้ NNs ใน NLP ผู้คนมักจะใช้สถาปัตยกรรมที่แตกต่างกันเช่นRecurrent Neural Nets (เช่นเครือข่ายหน่วยความจำระยะสั้นระยะยาว ) ในบางกรณีผู้คนได้ใช้Convolutional Neural Networksกับข้อความ


ฉันคิดว่า word2Vec เป็นคำตอบที่ถูกต้องที่สุดสำหรับคำถามนี้ มีการสอน Kaggle ที่ดีจริงๆเกี่ยวกับวิธีการฝึกอบรมและใช้งาน: kaggle.com/c/word2vec-nlp-tutorial/details/part-2-word-vectors
jagartner

ขอบคุณฉันลืมลิงค์ word2vec ฉันจะเพิ่มอีกหนึ่ง (นอกเหนือจากรายการที่คุณนี่!)
jamesmf

3

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

ลองดูที่บทช่วยสอนนี้เพื่อเรียนรู้วิธีเข้ารหัสตัวแปรเด็ดขาดสำหรับเครือข่ายประสาทเทียม และโชคดี!


น่าสังเกตว่านี่ไม่ใช่ปัญหาอย่างชัดเจนในการเรียนรู้ของเครื่องทั้งหมด แต่มีเพียงปัญหาเมื่อสร้างเวกเตอร์คุณลักษณะซึ่งไม่ได้แพร่หลายในการเรียนรู้ของเครื่อง
Slater Victoroff

การเรียนรู้ของเครื่องชนิดใดไม่ได้ใช้คุณสมบัติ
Emre

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

ฉันไม่รู้ว่าคุณหมายถึง "โครงสร้างที่เคร่งครัด"
Emre

โครงสร้างอย่างเคร่งครัดเป็นเวกเตอร์ 1d ของ unint8 ซึ่งต่างจากรายการที่มีพจนานุกรมเมทริกซ์น้ำหนักและชุดสตริง
Slater Victoroff

0

ฉันได้ลองทำ 2 วิธีต่อไปนี้สำหรับการทดลองใช้งาน -n-test ของเครือข่ายประสาทเทียมด้วยข้อความ หนึ่งหลังทำงานค่อนข้างดี แต่มีข้อ จำกัด

  1. สร้างคำศัพท์โดยใช้ word2vect หรือ NLTK / โทเค็นคำที่กำหนดเองและกำหนดดัชนีให้กับแต่ละคำ มันเป็นดัชนีนี้ซึ่งหมายถึงคำว่าเป็นตัวเลข

    ความท้าทาย:

    • ดัชนีจะต้อง "ปกติ" โดยใช้การปรับขนาดคุณสมบัติ
    • หากผลลัพธ์ของโครงข่ายประสาทมีการเปลี่ยนแปลงเพียงเล็กน้อยผลลัพธ์อาจเป็นดัชนีของคำที่ไม่คาดคิด (เช่นหากผลลัพธ์ที่คาดไว้คือ 250 แต่ NN เอาต์พุต 249 หรือ 251 แสดงว่าอาจเป็นผลลัพธ์ที่ใกล้เคียงจากบริบทตัวเลข แต่ มันเป็นดัชนีของคำต่าง ๆ ) NN ที่เกิดขึ้นซ้ำเพื่อสร้างดัชนีเอาต์พุตสามารถใช้ประโยชน์ได้ที่นี่
    • หากมีการเพิ่มคำศัพท์ใหม่ลงในคำศัพท์ดังนั้นดัชนีโทเค็นควรถูกลดขนาดอีกครั้ง โมเดลที่ได้รับการฝึกอบรมซึ่งมีค่าสเกลก่อนหน้านี้อาจไม่ถูกต้องและต้องผ่านการอบรม
  2. ใช้เมทริกซ์เอกลักษณ์เช่นสำหรับคำว่า "n" ใช้เมทริกซ์ "nx n" หรือ (n-1 x n-1) โดยที่แต่ละแถวและคอลัมน์แสดงคำ วาง "1" ในเซลล์สี่แยกและ "0" ที่สถานที่ที่เหลือ ( อ้างอิง )

    ความท้าทาย:

    • ทุกค่าอินพุทและเอาท์พุทคือ "nx 1" vector สำหรับคำศัพท์ขนาดใหญ่การคำนวณขนาดใหญ่และช้าลง
    • หากคำศัพท์ใหม่ถูกเพิ่มเข้าไปในคำศัพท์แล้วเมทริกซ์เอกลักษณ์ (เช่นคำเวกเตอร์) ควรคำนวณใหม่ โมเดลที่ฝึกกับเวกเตอร์ที่คำนวณก่อนหน้านี้อาจไม่ถูกต้องและต้องผ่านการฝึกอบรมใหม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.