วิธีค้นหาการฝังสำหรับการจับคู่ที่ใกล้เคียงที่สุด

Withi Khnha Kar Fang Sahrab Kar Cab Khu Thi Kil Kheiyng Thisud



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

ไวยากรณ์

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







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



ตัวอย่างที่ 1: การฝังคำที่ใกล้เคียงที่สุดผ่านการฝังคำ

ก่อนที่เราจะใช้การฝังคำสำหรับการจับคู่ความคล้ายคลึงกัน เราจำเป็นต้องรู้เกี่ยวกับการฝังคำ การฝังคำเป็นกระบวนการแปลงข้อความให้อยู่ในรูปของเวกเตอร์ (ค่าตัวเลข) เนื่องจากระบบของเราเข้าใจเฉพาะข้อมูลที่ป้อนในรูปแบบตัวเลขเท่านั้น



มีวิธีอื่นอีกหลายวิธีในการทำงานนี้ ซึ่งรวมถึงการเข้ารหัสแบบ one-hot แต่เราจะใช้การฝังคำ ด้วยวิธีนี้ โมเดลของโครงข่ายประสาทเทียมจะเรียนรู้การฝัง (เช่น word2vec หรือ Glove) จากข้อความ คำถูกจับคู่กับปริภูมิเวกเตอร์ที่มีมิติสูงกว่า คำเหล่านั้นทั้งหมดที่คล้ายกันในบริบทจะถูกแมปกับจุดที่ใกล้เคียงที่สุด ด้วยวิธีนี้ การฝังสามารถจับความสัมพันธ์และการเปรียบเทียบระหว่างคำต่างๆ ในข้อความได้





มาสร้างการฝังคำสำหรับประโยคกันเถอะ ในการสร้างการฝังคำ Python ให้เฟรมเวิร์ก 'gensim' Gensim เป็นแพ็คเกจไลบรารีที่อนุญาตให้ใช้โมเดล 'word2vec' ซึ่งช่วยในการสร้างการฝัง ในการใช้งานการฝัง เราต้องแน่ใจว่าได้ติดตั้ง gensim บนคอมไพเลอร์ Python ของเราก่อน จากนั้น จาก gensim เรานำเข้าโมเดล “word2vec”

โมเดล “word2vec” เป็นอัลกอริทึมประเภทหนึ่งที่ใช้อาร์กิวเมนต์อินพุตสองรายการเท่านั้น โดยที่อาร์กิวเมนต์แรกต้องการข้อความหรือประโยคที่เราต้องการสร้างการฝัง และอาร์กิวเมนต์ที่สองระบุจำนวนขั้นต่ำที่ระบุจำนวนครั้งขั้นต่ำที่ คำจะต้องปรากฏหรือเห็น



หลังจากนำเข้าโมเดล 'word2vec' แล้ว เราจะระบุ 'ข้อความ' เมื่อเราระบุข้อความแล้ว เราจะฝึกโมเดล “word2vec” นี้โดยส่งต่อข้อความนั้นและตั้งค่าจำนวนขั้นต่ำเท่ากับ “1” ตอนนี้ เราเรียกโมเดลที่ผ่านการฝึกอบรมนี้ว่า 'word2vec.wv.most_similar('consume')' และป้อนคำที่มีการฝังที่ใกล้เคียงที่สุดที่เราต้องการตรวจสอบว่าคำใดในตัวอย่างนี้คือ 'consume' ในการตรวจสอบผลลัพธ์การฝัง เราจะพิมพ์ผลลัพธ์จากโมเดล:

จาก ในฐานะประเทศชาติ โมเดล นำเข้า เวิร์ดทูเวค
ข้อความ = [ [ 'กระต่าย' , 'มี' , 'ฟัน' ] ]
แบบอย่าง = เวิร์ดทูเวค ( ข้อความ , min_count = 1 )
similar_embedding = แบบอย่าง. . most_similar ( 'กระต่าย' )
พิมพ์ ( similar_embedding )

ในตัวอย่างนี้ เราสร้างการฝังคำสำหรับข้อความโดยใช้โมเดล 'word2vec' เพื่อตรวจสอบความคล้ายคลึงกันในแง่ของบริบท และสามารถดูได้ในส่วนย่อยที่แนบมาก่อนหน้านี้ ซึ่งเป็นผลลัพธ์ของโค้ดที่ตรวจสอบการฝังที่คล้ายกัน ของคำว่า “บริโภค”.

ตัวอย่างที่ 2: การฝังการค้นหาที่ใกล้เคียงที่สุดผ่านโมเดล BERT

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

เมื่อเสร็จแล้ว เราสามารถใช้โมเดลนี้เพื่อเรียนรู้การฝัง จากนั้น เราสามารถคำนวณความคล้ายคลึงกันระหว่างข้อความโดยใช้ฟังก์ชัน “ความคล้ายคลึงกันของโคไซน์” เราใช้ตัวอย่างนี้บนแพลตฟอร์ม Python ออนไลน์ซึ่งก็คือ “google colab” หากต้องการปรับแต่งโมเดลอย่างละเอียด เราโหลดโมเดล (BERT) เพื่อจุดประสงค์นั้น ก่อนอื่นเราจะติดตั้งและนำเข้า “SentenceTransformers” จากนั้น เราโหลดโมเดลจากโมเดลที่ผ่านการฝึกอบรมล่วงหน้าโดยใช้ SentenceTransformer ในการโหลดโมเดล เราเรียก SentenceTransformer และโมเดล BERT รวมกันว่า “$SentenceTransformer('bert-base-nli-mean-tokens')” โดยเราระบุชื่อของโมเดลที่ผ่านการฝึกอบรมล่วงหน้าของ BERT ในพารามิเตอร์อินพุตและ จากนั้นเราจะบันทึกไว้ในตัวแปร “BERTmodel”

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

เราเรียกฟังก์ชันการเข้ารหัสที่มีคำนำหน้าของโมเดล BERT ว่า “BERTmodel.encoding ()” จากนั้นเราจะส่ง 'ข้อความ' และ 'ความยาวสูงสุด' ที่เรากำหนดให้เท่ากับ '512' ไปยังพารามิเตอร์ของฟังก์ชันนี้ เราเรียกฟังก์ชันการเข้ารหัสนี้ในแต่ละข้อความ และจะแปลงข้อความเป็นการฝัง

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

ในการค้นหาความคล้ายคลึงกันระหว่างการฝังเหล่านี้ เราใช้ฟังก์ชันความคล้ายคลึงกันของโคไซน์และแทนที่ค่าของประโยคที่ฝังด้วยดัชนี '0' และประโยคฝังอื่นๆ ด้วยดัชนี '1 ถึง 3' เพื่อตรวจสอบความคล้ายคลึงกันของประโยค 0 กับอีก 3 ประโยค ประโยค. ค่าเอาท์พุตของฟังก์ชันความคล้ายโคไซน์อยู่ในช่วงตั้งแต่ -1 ถึง 1 ในที่นี้ 1 จะบอกว่าการฝังทั้งสองคล้ายกัน และ -1 บอกว่าการฝังทั้งสองนั้นไม่เหมือนกัน เราแนบข้อมูลโค้ดซึ่งแสดงวิธีการนำฟังก์ชันความคล้ายคลึงกันของโคไซน์ไปใช้โดยใช้การฝังประโยคสี่ประโยคที่เราเพิ่งสร้างขึ้นในตัวอย่างโดยใช้แบบจำลอง BERT ที่ฝึกไว้ล่วงหน้า

!pip ติดตั้ง Sentence_Transformers
ประโยค = [
'เมื่อสี่ปีก่อนขวดยังเต็มและ ',
'สุนัขฝันถึงการหนีออกจากกรงและในถนนที่เธอเห็นเพื่อนของเธอกำลังไป',
'คนๆ นี้เล่นกับแมงกะพรุนมาหลายเดือนแล้ว',
'เขาพบหอยทากในตู้เสื้อผ้าของเขา']
จากประโยค _transformers นำเข้า SentenceTransformer
Bertmodel = SentenceTransformer ('bert-base-nli-mean-tokens')
Sentence_embeddings = Bertmodel.encode (ประโยค)
Sentence_embeddings.shape
จาก sklearn.metrics.pairwise นำเข้า cosine_similarity
# คำนวณ = ความคล้ายคลึงกันของโคไซน์สำหรับประโยค 0:
cosine_similarity(
[sentence_embeddings[0]],
Sentence_embeddings[1:])

อาร์เรย์ในผลลัพธ์จะแสดงค่าความคล้ายคลึงกันของ “ประโยค 0” กับอีกสามประโยค เช่น 1, 2 และ 3

บทสรุป

เราได้กล่าวถึงวิธีการค้นหาความคล้ายคลึงกันระหว่างการฝัง เราแสดงสองตัวอย่างที่แตกต่างกันเพื่อค้นหาการจับคู่ที่ใกล้เคียงที่สุดของการฝังโดยใช้โมเดล gensim “word2vec” และโมเดล BERT ที่ฝึกไว้ล่วงหน้า