แพ็คเกจ Python ที่เต็มไปด้วยคุณสมบัติและรูปแบบการจัดเก็บเวกเตอร์สำหรับการใช้ประโยชน์จากการฝังเวกเตอร์ในรูปแบบการเรียนรู้ของเครื่องในลักษณะที่รวดเร็วมีประสิทธิภาพและง่ายที่พัฒนาโดยพลาสติก มันมีจุดประสงค์หลักที่จะเป็นทางเลือกที่ง่ายกว่า / เร็วกว่าสำหรับ gensim แต่สามารถใช้เป็นร้านค้าคีย์-เวกเตอร์ทั่วไปสำหรับโดเมนนอก NLP มันมีคุณสมบัติที่เป็นเอกลักษณ์เช่นการค้นหาที่ไม่ได้รับการตรวจหาผลปริมาณและการสตรีมของรุ่นใหญ่ผ่าน HTTP ตีพิมพ์ในบทความของเราที่ EMNLP 2018 และวางจำหน่ายใน Arxiv
คุณสามารถติดตั้งแพ็คเกจนี้ด้วย pip :
pip install pymagnitude # Python 2.7
pip3 install pymagnitude # Python 3Google Colaboratory มีปัญหาการพึ่งพาบางอย่างกับการติดตั้งขนาดเนื่องจากการพึ่งพาที่ขัดแย้งกัน คุณสามารถใช้ตัวอย่างต่อไปนี้เพื่อติดตั้งขนาดบน Google Colaboratory:
# Install Magnitude on Google Colab
! echo " Installing Magnitude.... (please wait, can take a while) "
! (curl https://raw.githubusercontent.com/plasticityai/magnitude/master/install-colab.sh | /bin/bash 1> /dev/null 2> /dev/null)
! echo " Done installing Magnitude. " โมเดลการฝังพื้นที่เวกเตอร์ได้กลายเป็นเรื่องธรรมดามากขึ้นในการเรียนรู้ของเครื่องและเป็นที่นิยมสำหรับแอพพลิเคชั่นการประมวลผลภาษาธรรมชาติ เครื่องมือที่รวดเร็วและมีน้ำหนักเบาในการใช้งานการฝังพื้นที่เวกเตอร์ขนาดใหญ่เหล่านี้อย่างมีประสิทธิภาพนั้นขาดไป
รูปแบบไฟล์ขนาด ( .magnitude ) สำหรับการฝังตัวเวกเตอร์มีจุดประสงค์เพื่อให้มีรูปแบบการฝังเวกเตอร์สากลที่มีประสิทธิภาพมากขึ้นซึ่งช่วยให้การโหลดขี้เกียจสำหรับการเริ่มต้นความเย็นเร็วขึ้นในการพัฒนาหน่วยความจำ LRU แคชสำหรับประสิทธิภาพในการผลิต กุญแจที่สะกดผิดและเชื่อมต่อหลายรุ่นเวกเตอร์เข้าด้วยกัน นอกจากนี้ยังมีจุดประสงค์เพื่อทำงานกับรุ่นเวกเตอร์ขนาดใหญ่ที่อาจไม่พอดีกับหน่วยความจำ
มันใช้ SQLite ซึ่งเป็นฐานข้อมูลฝังตัวที่รวดเร็วและเป็นที่นิยมเป็นที่เก็บข้อมูลพื้นฐาน มันใช้ดัชนีสำหรับการค้นหาคีย์ที่รวดเร็วเช่นเดียวกับการใช้การแมปหน่วยความจำคำสั่ง SIMD และการจัดทำดัชนีเชิงพื้นที่สำหรับการค้นหาความคล้ายคลึงกันอย่างรวดเร็วในพื้นที่เวกเตอร์ปิดดิสก์พร้อมประสิทธิภาพของหน่วยความจำที่ดีแม้ระหว่างหลายกระบวนการ ยิ่งไปกว่านั้นแผนที่หน่วยความจำจะถูกแคชระหว่างการรันดังนั้นแม้หลังจากปิดกระบวนการแล้วการปรับปรุงความเร็วจะถูกเก็บเกี่ยว
| ตัวชี้วัด | ไฟขนาด | ขนาดกลาง | ขนาดหนัก | สตรีมขนาด |
|---|---|---|---|---|
| เวลาโหลดเริ่มต้น | 0.7210s | ━ 1 | ━ 1 | 7.7550s |
| คีย์คีย์เดี่ยวเย็น | 0.0001s | ━ 1 | ━ 1 | 1.6437S |
| คีย์คีย์เดี่ยวอันอบอุ่น (คีย์เดียวกับคิวรีเย็น) | 0.00004S | ━ 1 | ━ 1 | 0.0004S |
| คีย์คีย์ที่เย็นหลายแบบเย็น (n = 25) | 0.0442S | ━ 1 | ━ 1 | 1.7753S |
| อบอุ่นหลายคีย์คีย์ (n = 25) (ปุ่มเดียวกับแบบสอบถามเย็น) | 0.00004S | ━ 1 | ━ 1 | 0.0001s |
คำค้นหาการค้นหา most_similar ครั้งแรก(n = 10) (กรณีที่เลวร้ายที่สุด) | 247.05s | ━ 1 | ━ 1 | - |
คำค้นหาการค้นหา most_similar ครั้งแรก(n = 10) (กรณีเฉลี่ย) (w/ disk แคชถาวร) | 1.8217S | ━ 1 | ━ 1 | - |
การค้นหา most_similar ที่ตามมา(n = 10) (คีย์ที่แตกต่างจากแบบสอบถามแรก) | 0.2434S | ━ 1 | ━ 1 | - |
การค้นหา most_similar ที่อบอุ่นในภายหลัง(n = 10) (คีย์เดียวกับแบบสอบถามแรก) | 0.00004S | 0.00004S | 0.00004S | - |
ครั้งแรก most_similar_approx ค้นหาคำค้นหา(n = 10, ความพยายาม = 1.0) (กรณีที่เลวร้ายที่สุด) | N/A | N/A | 29.610s | - |
ครั้งแรก most_similar_approx ค้นหาคำค้นหา(n = 10, ความพยายาม = 1.0) (กรณีเฉลี่ย) (แคชแบบถาวร w/ ดิสก์) | N/A | N/A | 0.9155S | - |
การค้นหา most_similar_approx ที่ตามมา(n = 10, ความพยายาม = 1.0) (คีย์ที่แตกต่างจากแบบสอบถามแรก) | N/A | N/A | 0.1873S | - |
การค้นหา most_similar_approx ที่ตามมา(n = 10, ความพยายาม = 0.1) (คีย์ที่แตกต่างจากแบบสอบถามแรก) | N/A | N/A | 0.0199s | - |
การค้นหา most_similar_approx ที่อบอุ่นในภายหลัง(n = 10, ความพยายาม = 1.0) (คีย์เดียวกับแบบสอบถามแรก) | N/A | N/A | 0.00004S | - |
| ขนาดไฟล์ | 4.21GB | 5.29GB | 10.74GB | 0.00GB |
| การใช้งานหน่วยความจำ (RAM) | 18KB | ━ 1 | ━ 1 | 1.71MB |
| การใช้หน่วยความจำ (RAM) การใช้งานหลังจาก 100 คีย์แบบสอบถาม | 168KB | ━ 1 | ━ 1 | 1.91MB |
| การใช้หน่วยความจำ (RAM) การใช้งานหลังจาก 100 คีย์คีย์ + การค้นหาความคล้ายคลึงกัน | 342KB 2 | ━ 1 | ━ 1 | |
| การตรวจสอบและทดสอบความสมบูรณ์ | ||||
รูปแบบสากลระหว่าง word2vec ( .txt , .bin ), ถุงมือ ( .txt ), fasttext ( .vec ) และ elmo ( .hdf5 ) ด้วยยูทิลิตี้ตัวแปลง | ||||
| อินเทอร์เฟซ Pythonic ง่ายๆ | ||||
| การพึ่งพาน้อย | ||||
| รองรับรุ่นหน่วยความจำที่มีขนาดใหญ่กว่าหน่วยความจำ | ||||
| ขี้เกียจโหลดเมื่อใดก็ตามที่เป็นไปได้สำหรับความเร็วและประสิทธิภาพ | ||||
ปรับให้เหมาะสมสำหรับ threading และ multiprocessing | ||||
| การค้นหาจำนวนมากและคีย์หลายครั้งด้วยช่องว่างภายในการตัดทอนตัวยึดตำแหน่งและการสนับสนุน featurization | ||||
| เข้าด้วยกันหลายรุ่นเวกเตอร์เข้าด้วยกัน | ||||
| การค้นหาคีย์นอกกฎหมายขั้นพื้นฐาน (การแฮชคุณสมบัติตัวละคร N-Gram) | ||||
| การค้นหาคีย์นอกกฎหมายขั้นสูงพร้อมการสนับสนุนการสะกดผิด (ตัวละคร N-Gram Hashing ไปยังคีย์ใน vocabulary ที่คล้ายกัน) | ||||
| การค้นหาที่คล้ายกันมากที่สุดโดยประมาณด้วยดัชนีรบกวน | ||||
| การฝึกอบรมในตัวสำหรับรุ่นใหม่ |
1: ค่าเดียวกับคอลัมน์ก่อนหน้า
2: ใช้ mmap เพื่ออ่านจากดิสก์ดังนั้นระบบปฏิบัติการจะยังคงจัดสรรหน้าหน่วยความจำเมื่อมีหน่วยความจำ แต่สามารถแชร์ระหว่างกระบวนการและไม่ได้จัดการภายในแต่ละกระบวนการสำหรับไฟล์ขนาดใหญ่มาก
*: เกณฑ์มาตรฐานทั้งหมดดำเนินการบนเวกเตอร์คำที่ผ่านการฝึกอบรมของ Google News ( GoogleNews-vectors-negative300.bin ) ด้วย MacBook Pro (Retina, 15 นิ้ว, กลางปี 2014) 2.2GHz quad-core core core i7 @ 16GB RAM บน SSD
โมเดลการฝังที่ได้รับความนิยมได้รับการแปลงล่วงหน้าเป็นรูปแบบ .magnitude ความสำคัญสำหรับการดาวน์โหลดและการใช้
| ผู้สนับสนุน | ข้อมูล | แสงสว่าง (การสนับสนุนพื้นฐานสำหรับคีย์นอกกฎหมาย) | ปานกลาง (ที่แนะนำ) (การสนับสนุนขั้นสูงสำหรับคีย์นอกกฎหมาย) | หนัก (การสนับสนุนขั้นสูงสำหรับคีย์นอกกฎหมายและเร็วที่สุด most_similar_approx ) |
|---|---|---|---|---|
| Google - Word2Vec | Google News 100b | 300D | 300D | 300D |
| สแตนฟอร์ด - ถุงมือ | Wikipedia 2014 + Gigaword 5 6b | 50D, 100D, 200D, 300D | 50D, 100D, 200D, 300D | 50D, 100D, 200D, 300D |
| สแตนฟอร์ด - ถุงมือ | Wikipedia 2014 + Gigaword 5 6b (lemmatized โดยความเป็นพลาสติก) | 50D, 100D, 200D, 300D | 50D, 100D, 200D, 300D | 50D, 100D, 200D, 300D |
| สแตนฟอร์ด - ถุงมือ | การรวบรวมข้อมูลทั่วไป 840b | 300D | 300D | 300D |
| สแตนฟอร์ด - ถุงมือ | Twitter 27b | 25d, 50d, 100d, 200d | 25d, 50d, 100d, 200d | 25d, 50d, 100d, 200d |
| Facebook - FastText | ภาษาอังกฤษ Wikipedia 2017 16B | 300D | 300D | 300D |
| Facebook - FastText | ภาษาอังกฤษ Wikipedia 2017 + Subword 16b | 300D | 300D | 300D |
| Facebook - FastText | การรวบรวมข้อมูลทั่วไป 600B | 300D | 300D | 300D |
| AI2 - Allennlp Elmo | รุ่น Elmo | รุ่น Elmo | รุ่น Elmo | รุ่น Elmo |
| Google - Bert | เร็วๆ นี้... | เร็วๆ นี้... | เร็วๆ นี้... | เร็วๆ นี้... |
มีคำแนะนำด้านล่างสำหรับการแปลงไฟล์ .bin , .txt , .vec , .hdf5 เป็นไฟล์. .magnitude
คุณสามารถสร้างวัตถุขนาดได้เช่น:
from pymagnitude import *
vectors = Magnitude ( "/path/to/vectors.magnitude" ) หากจำเป็นและรวมอยู่ในความสะดวกคุณยังสามารถเปิดไฟล์ .bin , .txt , .vec , .hdf5 โดยตรงพร้อมขนาด อย่างไรก็ตามนี่คือประสิทธิภาพน้อยลงและช้ามากสำหรับรุ่นขนาดใหญ่เนื่องจากจะแปลงไฟล์เป็นไฟล์ .magnitude ในการวิ่งครั้งแรกเป็นไดเรกทอรีชั่วคราว ไดเรกทอรีชั่วคราวไม่รับประกันว่าจะคงอยู่และไม่คงอยู่เมื่อคอมพิวเตอร์ของคุณรีบูต คุณควรแปลงล่วงหน้า .bin , .txt , .vec , .hdf5 ไฟล์ด้วย python -m pymagnitude.converter โดยทั่วไปสำหรับความเร็วที่เร็วขึ้น แต่คุณสมบัตินี้มีประโยชน์สำหรับกรณีการใช้งานครั้งเดียว คำเตือนจะถูกสร้างขึ้นเมื่ออินสแตนซ์วัตถุขนาดโดยตรงกับ .bin , .txt , .vec , .hdf5 คุณสามารถสรุปคำเตือนได้โดยการตั้งค่าอาร์กิวเมนต์ supress_warnings ในตัวสร้างเป็น True
lazy_loading เสริมไปยังตัวสร้างที่มีค่า -1 เพื่อปิดใช้งานการโหลดขี้เกียจและโหลดเวกเตอร์ทั้งหมดลงในหน่วยความจำ (a la gensim), 0 (เริ่มต้น X เพื่อเปิดใช้งานการโหลดขี้เกียจด้วยแคช LRU ที่ไม่ได้รับการ Xmost_similar ที่จะโหลดล่วงหน้าอย่างกระตือรือร้นในการเริ่มต้นให้ตั้งค่า eager เป็น Truelazy_loading จะถูกตั้งค่าเป็น -1 หรือ eager ถูกตั้งค่าเป็นข้อมูล True จะถูกโหลดลงในหน่วยความจำล่วงหน้าในเธรดพื้นหลังเพื่อป้องกันไม่ให้ตัวสร้างปิดกั้นไม่กี่นาทีสำหรับรุ่นขนาดใหญ่ หากคุณต้องการพฤติกรรมการปิดกั้นคุณสามารถส่งผ่านข้อโต้แย้ง blocking ได้ Truenormalized เป็นตัวเลือกให้เป็น False หากคุณต้องการรับเวกเตอร์ดิบที่ไม่ใช่ปกติแทนuse_numpy เป็น False หากคุณต้องการรับรายการ Python แทนcase_insensitive เป็น True หากคุณต้องการทำการค้นหาที่ไม่รู้สึกตัวpad_to_length ซึ่งจะระบุความยาวตัวอย่างทั้งหมดควรได้รับการบุด้วยหากผ่านในตัวอย่างหลาย ๆ ตัวอย่าง ตัวอย่างใด ๆ ที่ยาวกว่าความยาวของแผ่นจะถูกตัดทอนtruncate_left เป็น True หากคุณต้องการจุดเริ่มต้นของรายการคีย์ในแต่ละตัวอย่างที่จะถูกตัดทอนแทนที่จะเป็นจุดสิ้นสุดในกรณีที่ยาวกว่า pad_to_length เมื่อระบุpad_left เป็น True หากคุณต้องการให้ช่องว่างปรากฏขึ้นที่จุดเริ่มต้นเมื่อเทียบกับจุดสิ้นสุด (ซึ่งเป็นค่าเริ่มต้น)placeholders ซึ่งจะเพิ่มขนาดของเวกเตอร์แต่ละตัวโดยจำนวน placeholders ไม่มีการเสริมมิติพิเศษเหล่านั้น สิ่งนี้มีประโยชน์หากคุณวางแผนที่จะเพิ่มค่าและข้อมูลอื่น ๆ ให้กับเวกเตอร์และต้องการพื้นที่สำหรับการจัดสรรล่วงหน้าในเวกเตอร์เพื่อประสิทธิภาพlanguage ด้วยรหัสภาษา ISO 639-1 ซึ่งหากคุณใช้ขนาดสำหรับเวกเตอร์ Word จะทำให้มั่นใจได้ว่าห้องสมุดเคารพที่เกิดขึ้นและคุณสมบัติเฉพาะภาษาอื่น ๆ สำหรับภาษานั้น ค่าเริ่มต้นคือ en สำหรับภาษาอังกฤษ นอกจากนี้คุณยังสามารถส่งผ่านใน None หากคุณไม่ได้ใช้ขนาดสำหรับเวกเตอร์คำdtype ซึ่งจะช่วยให้คุณควบคุมประเภทข้อมูลของอาร์เรย์ NumPy ที่ส่งคืนโดยขนาดdevices ซึ่งจะช่วยให้คุณควบคุมการใช้ GPU เมื่อโมเดลพื้นฐานรองรับการใช้งาน GPU อาร์กิวเมนต์นี้ควรเป็นรายการของจำนวนเต็มที่จำนวนเต็มแต่ละตัวแสดงถึงหมายเลขอุปกรณ์ GPU ( 0 , 1 , ฯลฯ )temp_dir ซึ่งจะช่วยให้คุณควบคุมตำแหน่งของขนาดไดเรกทอรีชั่วคราวจะใช้log ซึ่งจะมีความคืบหน้าในการบันทึกขนาดถึงข้อผิดพลาดมาตรฐานเมื่อมีการดำเนินการช้าคุณสามารถสอบถามจำนวนเวกเตอร์ทั้งหมดในไฟล์เช่น So:
len ( vectors )คุณสามารถสอบถามขนาดของเวกเตอร์ได้เช่นนี้:
vectors . dimคุณสามารถตรวจสอบได้ว่าคีย์อยู่ในคำศัพท์หรือไม่:
"cat" in vectorsคุณสามารถวนซ้ำผ่านคีย์และเวกเตอร์ทั้งหมดได้เช่น:
for key , vector in vectors :
...คุณสามารถสอบถามสำหรับเวกเตอร์ของคีย์ได้เช่นนั้น:
vectors . query ( "cat" )คุณสามารถจัดทำดัชนีสำหรับคีย์ n-th และเวกเตอร์ได้เช่น:
vectors [ 42 ]คุณสามารถสอบถามสำหรับเวกเตอร์ของหลายปุ่มเช่น So:
vectors . query ([ "I" , "read" , "a" , "book" ])อาร์เรย์ 2D (คีย์โดยเวกเตอร์) จะถูกส่งคืน
คุณสามารถสอบถามสำหรับเวกเตอร์ของตัวอย่างหลายตัวอย่างเช่น SO:
vectors . query ([[ "I" , "read" , "a" , "book" ], [ "I" , "read" , "a" , "magazine" ]]) อาร์เรย์ 3D (ตัวอย่างโดยคีย์โดยเวกเตอร์) จะถูกส่งคืน หากไม่ได้ระบุ pad_to_length และขนาดของแต่ละตัวอย่างไม่สม่ำเสมอพวกเขาจะถูกเบาะตามความยาวของตัวอย่างที่ยาวที่สุด
คุณสามารถจัดทำดัชนีสำหรับคีย์และเวกเตอร์ของดัชนีหลายตัวเช่น SO:
vectors [: 42 ] # slice notation
vectors [ 42 , 1337 , 2001 ] # tuple notationคุณสามารถสอบถามระยะทางสองหรือหลายปุ่มได้เช่น:
vectors . distance ( "cat" , "dog" )
vectors . distance ( "cat" , [ "dog" , "tiger" ])คุณสามารถสอบถามความคล้ายคลึงกันของสองปุ่มหรือหลายปุ่มเช่น:
vectors . similarity ( "cat" , "dog" )
vectors . similarity ( "cat" , [ "dog" , "tiger" ])คุณสามารถค้นหาคีย์ที่คล้ายกันมากที่สุดจากรายการคีย์ไปยังคีย์ที่กำหนดเช่น:
vectors . most_similar_to_given ( "cat" , [ "dog" , "television" , "laptop" ]) # dogคุณสามารถสอบถามได้ว่าคีย์ใดที่ไม่ตรงกับรายการคีย์กับคีย์ที่กำหนดเช่น:
vectors . doesnt_match ([ "breakfast" , "cereal" , "dinner" , "lunch" ]) # cerealคุณสามารถสืบค้นปุ่มสำหรับปุ่ม (เพื่อนบ้านที่ใกล้ที่สุด) ที่คล้ายกันมากที่สุดเช่น So:
vectors . most_similar ( "cat" , topn = 100 ) # Most similar by key
vectors . most_similar ( vectors . query ( "cat" ), topn = 100 ) # Most similar by vector ทางเลือกคุณสามารถส่งอาร์กิวเมนต์ min_similarity ไปยัง most_similar ค่าจาก [-1.0-1.0] ถูกต้อง
นอกจากนี้คุณยังสามารถสอบถามสำหรับคีย์ที่คล้ายกันมากที่สุดที่ให้ตัวอย่างบวกและลบ (ซึ่งบังเอิญแก้ปัญหาการเปรียบเทียบ) เช่น SO:
vectors . most_similar ( positive = [ "woman" , "king" ], negative = [ "man" ]) # queen คล้ายกับ vectors.most_similar , vectors.most_similar_cosmul ฟังก์ชั่น most_similar_cosmul มีอยู่ที่ใช้ฟังก์ชัน 3cosmul จาก Levy และ Goldberg:
vectors . most_similar_cosmul ( positive = [ "woman" , "king" ], negative = [ "man" ]) # queenนอกจากนี้คุณยังสามารถสอบถามสำหรับคีย์ที่คล้ายกันมากที่สุดโดยใช้ดัชนีเพื่อนบ้านที่ใกล้ที่สุดโดยประมาณซึ่งเร็วกว่ามาก แต่ไม่รับประกันคำตอบที่แน่นอน:
vectors . most_similar_approx ( "cat" )
vectors . most_similar_approx ( positive = [ "woman" , "king" ], negative = [ "man" ]) ทางเลือกคุณสามารถผ่านอาร์กิวเมนต์ effort ที่มีค่าระหว่าง [0.0-1.0] ไปยังฟังก์ชั่น most_similar_approx ซึ่งจะทำให้คุณแลกเปลี่ยนรันไทม์ ค่าเริ่มต้นสำหรับ effort คือ 1.0 ซึ่งจะใช้เวลานานที่สุด แต่จะให้ผลลัพธ์ที่แม่นยำที่สุด
คุณสามารถสืบค้นสำหรับคีย์ทั้งหมดที่อยู่ใกล้กับคีย์มากกว่าคีย์อื่นเป็นเช่นนั้น:
vectors . closer_than ( "cat" , "rabbit" ) # ["dog", ...] คุณสามารถเข้าถึงเวกเตอร์พื้นฐานทั้งหมดในโมเดลในอาร์เรย์ขนาดใหญ่ numpy.memmap ขนาด ( len(vectors) x vectors.emb_dim ) เช่น:
vectors . get_vectors_mmap ()คุณสามารถทำความสะอาดทรัพยากรที่เกี่ยวข้องทั้งหมดเปิดไฟล์และการเชื่อมต่อฐานข้อมูลได้เช่น So:
vectors . close ()สำหรับการเป็นตัวแทนของ Word Vector การจัดการกุญแจนอกกฎหมายเป็นสิ่งสำคัญในการจัดการกับคำศัพท์ใหม่ที่ไม่ได้อยู่ในรูปแบบที่ผ่านการฝึกอบรมการจัดการการผิดพลาดและการพิมพ์ผิดและทำแบบจำลองที่ได้รับการฝึกฝนเกี่ยวกับการเป็นตัวแทนของคำว่าเวกเตอร์ที่มีความแข็งแกร่งมากขึ้น
คีย์ที่ไม่ได้รับการดูแลจากการใช้ยาเสพติดได้รับการจัดการโดยกำหนดค่าเวกเตอร์แบบสุ่ม อย่างไรก็ตามการสุ่มนั้นเป็นตัวกำหนด ดังนั้นหากพบคีย์ที่ไม่ได้รับการ vocabulary เดียวกัน สองครั้งมันจะถูกกำหนดค่าเวกเตอร์แบบสุ่มเดียวกันเพื่อประโยชน์ในการฝึกอบรมบนกุญแจที่อยู่นอก vocabulary เหล่านั้น ยิ่งไปกว่านั้นหากคีย์สองตัวที่ไม่ได้ใช้ร่วมกันแบ่งปันตัวละคร N-GRAMS ที่คล้ายกัน ("Uberx", "Uberxl") พวกเขาจะวางไว้ใกล้กันแม้ว่าพวกเขาจะไม่ได้อยู่ในคำศัพท์:
vectors = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
"uberx" in vectors # False
"uberxl" in vectors # False
vectors . query ( "uberx" ) # array([ 5.07109939e-02, -7.08248823e-02, -2.74812328e-02, ... ])
vectors . query ( "uberxl" ) # array([ 0.04734962, -0.08237578, -0.0333479, -0.00229564, ... ])
vectors . similarity ( "uberx" , "uberxl" ) # 0.955000000200815หากใช้ไฟล์ขนาดที่มีการรองรับนอก vocabulary ขั้นสูง (ปานกลางหรือหนัก) ปุ่มนอก vocabulary จะถูกฝังอยู่ใกล้กับปุ่มที่คล้ายกัน (กำหนดโดยความคล้ายคลึงกันของสตริง) ที่ อยู่ใน คำศัพท์:
vectors = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
"uberx" in vectors # False
"uberification" in vectors # False
"uber" in vectors # True
vectors . similarity ( "uberx" , "uber" ) # 0.7383483267618451
vectors . similarity ( "uberification" , "uber" ) # 0.745452837882727 นอกจากนี้ยังทำให้ขนาดของข้อผิดพลาดในการสะกดคำมากมาย:
vectors = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
"missispi" in vectors # False
vectors . similarity ( "missispi" , "mississippi" ) # 0.35961736624824003
"discrimnatory" in vectors # False
vectors . similarity ( "discrimnatory" , "discriminatory" ) # 0.8309152561753461
"hiiiiiiiiii" in vectors # False
vectors . similarity ( "hiiiiiiiiii" , "hi" ) # 0.7069775034853861อักขระ N-GRAMs ใช้เพื่อสร้างเอฟเฟกต์นี้สำหรับคีย์ที่ไม่ได้รับการ vocabulary แรงบันดาลใจสำหรับคุณลักษณะนี้นำมาจากเวกเตอร์คำที่เพิ่มคุณค่าของ Facebook AI Research ด้วยข้อมูล subword แต่แทนที่จะใช้ตัวละคร n-grams ในเวลารถไฟตัวละคร n-grams จะถูกใช้ในการอนุมานเพื่อให้เอฟเฟกต์สามารถจำลองแบบได้ (แต่ไม่ได้จำลองแบบสมบูรณ์) ในรุ่นเก่า
ทางเลือกคุณสามารถรวมเวกเตอร์จากหลายรุ่นเพื่อป้อนข้อมูลที่แข็งแกร่งขึ้นในรูปแบบการเรียนรู้ของเครื่องเช่น SO:
from pymagnitude import *
word2vec = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
glove = Magnitude ( "/path/to/glove.6B.50d.magnitude" )
vectors = Magnitude ( word2vec , glove ) # concatenate word2vec with glove
vectors . query ( "cat" ) # returns 350-dimensional NumPy array ('cat' from word2vec concatenated with 'cat' from glove)
vectors . query (( "cat" , "cats" )) # returns 350-dimensional NumPy array ('cat' from word2vec concatenated with 'cats' from glove)คุณสามารถเชื่อมต่อมากกว่าสองรุ่นเวกเตอร์เพียงแค่ผ่านข้อโต้แย้งเพิ่มเติมไปยังตัวสร้าง
คุณสามารถสร้างเวกเตอร์จากคุณสมบัติเพิ่มเติมที่คุณอาจมีเช่นส่วนหนึ่งของคำพูดข้อมูลการพึ่งพาไวยากรณ์หรือข้อมูลอื่น ๆ โดยใช้คลาส FeaturizerMagnitude :
from pymagnitude import *
pos_vectors = FeaturizerMagnitude ( 100 , namespace = "PartsOfSpeech" )
pos_vectors . dim # 4 - number of dims automatically determined by Magnitude from 100
pos_vectors . query ( "NN" ) # - array([ 0.08040417, -0.71705252, 0.61228951, 0.32322192])
pos_vectors . query ( "JJ" ) # - array([-0.11681135, 0.10259253, 0.8841201 , -0.44063763])
pos_vectors . query ( "NN" ) # - array([ 0.08040417, -0.71705252, 0.61228951, 0.32322192]) (deterministic hashing so the same value is returned every time for the same key)
dependency_vectors = FeaturizerMagnitude ( 100 , namespace = "SyntaxDependencies" )
dependency_vectors . dim # 4 - number of dims automatically determined by Magnitude from 100
dependency_vectors . query ( "nsubj" ) # - array([-0.81043793, 0.55401352, -0.10838071, 0.15656626])
dependency_vectors . query ( "prep" ) # - array([-0.30862918, -0.44487267, -0.0054573 , -0.84071788])ขนาดจะใช้เคล็ดลับการแฮชแฮทฟีเจอร์ภายในเพื่อใช้แฮชของค่าคุณสมบัติโดยตรงเพื่อสร้างเวกเตอร์ที่ไม่ซ้ำกันสำหรับค่าคุณสมบัตินั้น
อาร์กิวเมนต์แรกของ FeaturizerMagnitude ควรเป็นค่าโดยประมาณในจำนวนของค่าสำหรับคุณลักษณะ เนื่องจากมี <100 ส่วนของแท็กคำพูดและ <100 การพึ่งพาไวยากรณ์เราจึงเลือก 100 สำหรับทั้งสองในตัวอย่างด้านบน ค่าที่เลือกจะกำหนดจำนวนขนาดขนาดที่จะกำหนดให้กับวัตถุ FeaturizerMagnitude โดยอัตโนมัติเพื่อลดโอกาสในการชนกันของแฮช อาร์กิวเมนต์ namespace สามารถเป็นสตริงใด ๆ ที่อธิบายคุณสมบัติเพิ่มเติมของคุณ เป็นทางเลือก แต่แนะนำเป็นอย่างยิ่ง
จากนั้นคุณสามารถเชื่อมต่อคุณสมบัติเหล่านี้เพื่อใช้กับวัตถุขนาดมาตรฐาน:
from pymagnitude import *
word2vec = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
pos_vectors = FeaturizerMagnitude ( 100 , namespace = "PartsOfSpeech" )
dependency_vectors = FeaturizerMagnitude ( 100 , namespace = "SyntaxDependencies" )
vectors = Magnitude ( word2vec , pos_vectors , dependency_vectors ) # concatenate word2vec with pos and dependencies
vectors . query ([
( "I" , "PRP" , "nsubj" ),
( "saw" , "VBD" , "ROOT" ),
( "a" , "DT" , "det" ),
( "cat" , "NN" , "dobj" ),
( "." , "." , "punct" )
]) # array of size 5 x (300 + 4 + 4) or 5 x 308
# Or get a unique vector for every 'buffalo' in:
# "Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo"
# (https://en.wikipedia.org/wiki/Buffalo_buffalo_Buffalo_buffalo_buffalo_buffalo_Buffalo_buffalo)
vectors . query ([
( "Buffalo" , "JJ" , "amod" ),
( "buffalo" , "NNS" , "nsubj" ),
( "Buffalo" , "JJ" , "amod" ),
( "buffalo" , "NNS" , "nsubj" ),
( "buffalo" , "VBP" , "rcmod" ),
( "buffalo" , "VB" , "ROOT" ),
( "Buffalo" , "JJ" , "amod" ),
( "buffalo" , "NNS" , "dobj" )
]) # array of size 8 x (300 + 4 + 4) or 8 x 308รูปแบบการเรียนรู้ของเครื่องที่ได้รับผลลัพธ์นี้ตอนนี้สามารถเข้าถึงข้อมูลส่วนหนึ่งของข้อมูลการพูดและข้อมูลการพึ่งพาไวยากรณ์แทนเพียงข้อมูลเวกเตอร์ Word ในกรณีนี้ข้อมูลเพิ่มเติมนี้สามารถให้สัญญาณประสาทที่แข็งแกร่งขึ้นสำหรับข้อมูลความหมายและลดความต้องการข้อมูลการฝึกอบรม
ขนาดทำให้ง่ายต่อการสร้างและวนซ้ำอย่างรวดเร็วในรุ่นที่ต้องใช้การเป็นตัวแทนเวกเตอร์โดยการดูแลรหัสล่วงหน้าจำนวนมากเพื่อแปลงชุดข้อมูลของข้อความ (หรือปุ่ม) เป็นเวกเตอร์ ยิ่งไปกว่านั้นมันสามารถทำให้โมเดลเหล่านี้มีความแข็งแกร่งมากขึ้นต่อคำและการสะกดคำผิด
มีรหัสตัวอย่างที่ใช้งานโดยใช้ขนาดเพื่อสร้างรูปแบบการจำแนกความตั้งใจสำหรับชุดข้อมูล ATIS (Airline Travel Information Systems) (รถไฟ/ทดสอบ) ใช้สำหรับแชทบอทหรืออินเทอร์เฟซการสนทนาในห้องสมุดการเรียนรู้ของเครื่องจักรยอดนิยมด้านล่าง
คุณสามารถเข้าถึงคำแนะนำสำหรับการใช้ขนาดกับ keras (ซึ่งรองรับ TensorFlow, Theano, CNTK) ที่โน้ตบุ๊ก Google Colaboratory Python นี้
คู่มือ Pytorch กำลังจะมาเร็ว ๆ นี้
คู่มือ Tflearn กำลังจะมาเร็ว ๆ นี้
คุณสามารถใช้คลาส MagnitudeUtils เพื่อเข้าถึงฟังก์ชั่นที่สะดวกซึ่งอาจเป็นประโยชน์เมื่อสร้างรูปแบบการเรียนรู้ของเครื่อง
คุณสามารถนำเข้า MigituesUtils ได้เช่น:
from pymagnitude import MagnitudeUtilsคุณสามารถดาวน์โหลดโมเดลขนาดจากแหล่งไกลได้เช่น So:
vecs = Magnitude ( MagnitudeUtils . download_model ( 'word2vec/heavy/GoogleNews-vectors-negative300' )) โดยค่าเริ่มต้น download_model จะดาวน์โหลดไฟล์จาก http://magnitude.plasticity.ai ไปยังโฟลเดอร์ ~/.magnitude ที่สร้างขึ้นโดยอัตโนมัติ หากดาวน์โหลดไฟล์แล้วจะไม่ถูกดาวน์โหลดอีกครั้ง คุณสามารถเปลี่ยนไดเรกทอรีของโฟลเดอร์ดาวน์โหลดท้องถิ่นโดยใช้อาร์กิวเมนต์ download_dir เสริม คุณสามารถเปลี่ยนโดเมนจากรุ่นที่จะดาวน์โหลดด้วยอาร์กิวเมนต์ remote_path เสริม
คุณสามารถสร้างตัวสร้างแบทช์สำหรับข้อมูล X และ y ด้วย batchify ได้เช่น:
X = [ .3 , .2 , .7 , .8 , .1 ]
y = [ 0 , 0 , 1 , 1 , 0 ]
batch_gen = MagnitudeUtils . batchify ( X , y , 2 )
for X_batch , y_batch in batch_gen :
print ( X_batch , y_batch )
# Returns:
# 1st loop: X_batch = [.3, .2], y_batch = [0, 0]
# 2nd loop: X_batch = [.7, .8], y_batch = [1, 1]
# 3rd loop: X_batch = [.1], y_batch = [0]
# next loop: repeats infinitely... คุณสามารถเข้ารหัสฉลากคลาสเป็นจำนวนเต็มและกลับมาด้วย class_encoding เช่น:
add_class , class_to_int , int_to_class = MagnitudeUtils . class_encoding ()
add_class ( "cat" ) # Returns: 0
add_class ( "dog" ) # Returns: 1
add_class ( "cat" ) # Returns: 0
class_to_int ( "dog" ) # Returns: 1
class_to_int ( "cat" ) # Returns: 0
int_to_class ( 1 ) # Returns: "dog"
int_to_class ( 0 ) # Returns: "cat" to_categorical
y = [ 1 , 5 , 2 ]
MagnitudeUtils . to_categorical ( y , num_classes = 6 ) # num_classes is optional
# Returns:
# array([[0., 1., 0., 0., 0., 0.]
# [0., 0., 0., 0., 0., 1.]
# [0., 0., 1., 0., 0., 0.]]) คุณสามารถแปลงจากอาร์เรย์ Numpy ที่ร้อนได้หนึ่งตัวกลับไปเป็นอาร์เรย์ 1D Numpy ของจำนวนเต็มคลาสที่มี from_categorical เช่น:
y_c = [[ 0. , 1. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 1. ]]
MagnitudeUtils . from_categorical ( y_c )
# Returns:
# array([1., 5.]) ไลบรารีเป็นเธรดที่ปลอดภัย (ใช้การเชื่อมต่อที่แตกต่างกับร้านค้าพื้นฐานต่อเธรด) เป็นแบบอ่านอย่างเดียวและไม่เคยเขียนไปยังไฟล์ เนื่องจากการใช้งานหน่วยความจำแสงคุณยังสามารถเรียกใช้ในหลายกระบวนการ (หรือใช้ multiprocessing ) ที่มีช่องว่างที่แตกต่างกันโดยไม่ต้องทำซ้ำข้อมูลในหน่วยความจำเช่นเดียวกับไลบรารีอื่น ๆ และไม่ต้องสร้างตัวแปรที่ใช้ร่วมกันหลายกระบวนการเนื่องจากข้อมูลถูกอ่าน สำหรับฟังก์ชั่นที่หนักกว่าเช่น most_similar ไฟล์ที่แมปหน่วยความจำที่ใช้ร่วมกันถูกสร้างขึ้นเพื่อแชร์หน่วยความจำระหว่างกระบวนการ
แพ็คเกจขนาดใช้รูปแบบไฟล์ .magnitude แทน .bin , .txt , .vec หรือ .hdf5 เช่นเดียวกับเวกเตอร์รุ่นอื่น ๆ เช่น Word2vec, Glove, Fasttext และ Elmo มียูทิลิตี้บรรทัดคำสั่งที่รวมไว้สำหรับการแปลงไฟล์ Word2vec, GLOVE, FASTTEXT และไฟล์ ELMO เป็นไฟล์ขนาด
คุณสามารถแปลงได้เช่นนั้น:
python -m pymagnitude.converter -i < PATH TO FILE TO BE CONVERTED > -o < OUTPUT PATH FOR MAGNITUDE FILE >รูปแบบอินพุตจะถูกกำหนดโดยอัตโนมัติโดยส่วนขยาย / เนื้อหาของไฟล์อินพุต คุณควรดำเนินการแปลงนี้เพียงครั้งเดียวสำหรับโมเดล หลังจากแปลงรูปแบบไฟล์ขนาดจะคงที่และจะไม่ได้รับการแก้ไขหรือเขียนเพื่อให้การเข้าถึงการอ่านพร้อมกันอย่างปลอดภัย
Flags for pymagnitude.converter มีการระบุไว้ด้านล่าง:
-h เพื่อขอความช่วยเหลือและแสดงรายการธงทั้งหมด-p <PRECISION> เพื่อระบุความแม่นยำของทศนิยมเพื่อรักษา (การเลือกหมายเลขที่ต่ำกว่าจะสร้างไฟล์ที่เล็กลง) ค่าพื้นฐานที่เกิดขึ้นจริงจะถูกเก็บไว้เป็นจำนวนเต็มแทนที่จะลอยดังนั้นนี่จึงเป็นปริมาณที่สำคัญสำหรับรอยเท้าแบบจำลองขนาดเล็ก-a ซึ่งจะเปิดใช้งานการใช้ฟังก์ชัน most_similar_approx ธง -t <TREES> ควบคุมจำนวนต้นไม้ในดัชนีเพื่อนบ้านเพื่อนบ้านโดยประมาณ (สูงกว่านั้นแม่นยำยิ่งขึ้น) เมื่อใช้ร่วมกับธง -a (หากไม่ได้จัดหาจำนวนต้นไม้จะถูกกำหนดโดยอัตโนมัติ)-s เพื่อปิดการใช้งานการเพิ่มข้อมูล subword ไปยังไฟล์ (ซึ่งจะทำให้ไฟล์มีขนาดเล็กลง) แต่ปิดใช้งานการสนับสนุนคีย์ที่ไม่ได้ใช้ vocabulary ขั้นสูง-v พร้อมกับเส้นทางไปยังไฟล์ขนาดอื่นที่คุณต้องการใช้คำศัพท์ เป็นทางเลือกคุณสามารถแปลงไฟล์จำนวนมากได้โดยผ่านโฟลเดอร์อินพุตและโฟลเดอร์เอาต์พุตแทนไฟล์อินพุตและไฟล์เอาต์พุต ไฟล์ .txt , .bin , .vec , .hdf5 ทั้งหมดในโฟลเดอร์อินพุตจะถูกแปลงเป็นไฟล์ .magnitude ในโฟลเดอร์เอาต์พุต โฟลเดอร์เอาท์พุทจะต้องมีอยู่ก่อนการดำเนินการแปลงจำนวนมาก
คุณสามารถแนะนำการดาวน์โหลดขนาดและเปิดโมเดลจากที่เก็บระยะไกลของ Magentitude แทนเส้นทางไฟล์ท้องถิ่น ไฟล์จะถูกดาวน์โหลดโดยอัตโนมัติในเครื่องในการเรียกใช้ครั้งแรกเป็น ~/.magnitude/ และต่อมาข้ามการดาวน์โหลดหากไฟล์มีอยู่แล้ว
vecs = Magnitude ( 'http://magnitude.plasticity.ai/word2vec/heavy/GoogleNews-vectors-negative300.magnitude' ) # full url
vecs = Magnitude ( 'word2vec/heavy/GoogleNews-vectors-negative300' ) # or, use the shorthand for the url สำหรับการควบคุมเพิ่มเติมเกี่ยวกับโดเมนดาวน์โหลดระยะไกลและไดเรกทอรีดาวน์โหลดในท้องถิ่นดูวิธีการใช้ MagnitudeUtils.download_model
แบบจำลองขนาดโดยทั่วไปเป็นไฟล์ขนาดใหญ่ (หลาย GB) ที่ใช้พื้นที่ดิสก์จำนวนมากแม้ว่ารูปแบบ .magnitude จะทำให้การใช้เวกเตอร์เป็นไปอย่างรวดเร็ว ขนาดมีตัวเลือกในการสตรีมไฟล์ขนาดใหญ่เหล่านี้ผ่าน HTTP สิ่งนี้แตกต่างอย่างชัดเจนจากคุณสมบัติการโหลดระยะไกลซึ่งโมเดลไม่จำเป็นต้องดาวน์โหลดเลย คุณสามารถเริ่มการสอบถามแบบจำลองได้ทันทีโดยไม่มีพื้นที่ใช้ดิสก์ที่ใช้เลย
vecs = Magnitude ( 'http://magnitude.plasticity.ai/word2vec/heavy/GoogleNews-vectors-negative300.magnitude' , stream = True ) # full url
vecs = Magnitude ( 'word2vec/heavy/GoogleNews-vectors-negative300' , stream = True ) # or, use the shorthand for the url
vecs . query ( "king" ) # Returns: the vector for "king" quickly, even with no local model file downloadedคุณสามารถเล่นได้ด้วยการสาธิตสิ่งนี้ในสมุดบันทึก Python ของ Google Colaboratory
คุณลักษณะนี้มีประโยชน์อย่างมากหากสภาพแวดล้อมการคำนวณของคุณถูก จำกัด ทรัพยากร (RAM ต่ำและพื้นที่ดิสก์ต่ำ) คุณต้องการทดลองใช้เวกเตอร์อย่างรวดเร็วโดยไม่ต้องดาวน์โหลดและตั้งค่าไฟล์รุ่นใหญ่หรือคุณกำลังฝึกอบรมรุ่นเล็ก ๆ ในขณะที่มีบางส่วนที่เพิ่มเข้ามาในเครือข่ายเวลาแฝงเนื่องจากข้อมูลกำลังถูกสตรีมขนาดจะยังคงใช้แคชในหน่วยความจำตามที่ระบุโดยพารามิเตอร์ lazy_loading Parameter เนื่องจากภาษาโดยทั่วไปมีการกระจาย ZIPF-IAN ความล่าช้าของเครือข่ายส่วนใหญ่จึงไม่เป็นปัญหาหลังจากแคชได้รับความอบอุ่นหลังจากถูกสอบถามจำนวนเล็กน้อย
พวกเขาจะถูกสอบถามโดยตรงจากเว็บเซิร์ฟเวอร์ HTTP แบบคงที่โดยใช้ส่วนหัวคำขอช่วง HTTP วิธีการขนาดทั้งหมดรองรับสตรีมมิ่งอย่างไรก็ตาม most_similar และ most_similar_approx อาจช้าเนื่องจากยังไม่ได้รับการปรับให้เหมาะสมสำหรับการสตรีม คุณสามารถดูว่าโหมดสตรีมมิ่งนี้ทำงานได้อย่างไรในมาตรฐานอย่างไรก็ตามมันจะเร็วขึ้นเมื่อเราปรับให้เหมาะสมในอนาคต!
เอกสารอื่น ๆ ไม่สามารถใช้ได้ในขณะนี้ ดูไฟล์ต้นฉบับโดยตรง (มีความคิดเห็นที่ดี) หากคุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับอาร์กิวเมนต์ของวิธีการหรือต้องการดูคุณสมบัติที่รองรับทั้งหมด
ขณะนี้เรามีเฉพาะโมเดลเวกเตอร์คำภาษาอังกฤษในหน้านี้แปลงล่วงหน้าเป็นรูปแบบ. .magnitude อย่างไรก็ตามคุณสามารถใช้ขนาดกับเวกเตอร์คำของภาษาอื่น ๆ ได้ Facebook ได้ฝึกฝนเวกเตอร์ fasttext ของพวกเขาสำหรับภาษาต่าง ๆ มากมาย คุณสามารถลงไฟล์ .vec สำหรับภาษาใด ๆ ที่คุณต้องการแล้วแปลงเป็น .magnitude ของตัวแปลง
ปัจจุบันการอ่านไฟล์ขนาดได้รับการสนับสนุนใน Python เท่านั้นเนื่องจากได้กลายเป็นภาษา de-facto สำหรับการเรียนรู้ของเครื่อง เพียงพอสำหรับกรณีการใช้งานส่วนใหญ่ การขยายรูปแบบไฟล์ไปยังภาษาอื่น ๆ ไม่ควรยากเนื่องจาก SQLite มีการใช้งาน C ดั้งเดิมและมีการเชื่อมโยงในภาษาส่วนใหญ่ รูปแบบไฟล์เองและโปรโตคอลสำหรับการอ่านและการค้นหานั้นค่อนข้างตรงไปตรงมาเมื่ออ่านซอร์สโค้ดของที่เก็บนี้
ปัจจุบันการประมวลผลภาษาธรรมชาติเป็นโดเมนที่ได้รับความนิยมมากที่สุดที่ใช้โมเดลการฝังเวกเตอร์ที่ผ่านการฝึกอบรมมาก่อนสำหรับการเป็นตัวแทนของ Word Vector อย่างไรก็ตามมีโดเมนอื่น ๆ เช่นวิสัยทัศน์คอมพิวเตอร์ที่เริ่มใช้แบบจำลองการฝังเวกเตอร์ที่ผ่านการฝึกอบรมมาแล้วเช่น Deep1B สำหรับการแสดงภาพ ห้องสมุดนี้มุ่งมั่นที่จะไม่เชื่อฟังโดเมนต่าง ๆ และให้บริการร้านค้าคีย์-เวกเตอร์ทั่วไปและอินเทอร์เฟซที่มีประโยชน์สำหรับทุกโดเมน
ที่เก็บหลักสำหรับโครงการนี้สามารถพบได้ใน Gitlab ที่เก็บ GitHub เป็นเพียงกระจก คำขอดึงสำหรับการทดสอบเพิ่มเติมการตรวจสอบข้อผิดพลาดที่ดีขึ้นการแก้ไขข้อบกพร่องการปรับปรุงประสิทธิภาพหรือเอกสารหรือเพิ่ม UTILTIES / FUNCTIONALITIES เพิ่มเติมยินดีต้อนรับบน GitLab
คุณสามารถติดต่อเราได้ที่ [email protected]
most_similar_approx ปรับให้เหมาะสมสำหรับการสตรีมมิ่งmost_similar ช้าที่สุดครั้งแรก.bin most_similar_approx ในขนาดโดยใช้ต้นไม้ที่ฉายแบบสุ่มและลำดับชั้น 2-mean ขอบคุณผู้เขียน Erik Bernhardsson ที่ให้ความช่วยเหลือในรายละเอียดการรวมระหว่างขนาดและความรำคาญ หากคุณต้องการอ้างอิงกระดาษของเราที่ EMNLP 2018 คุณสามารถใช้การอ้างอิง BibTex ต่อไปนี้:
@inproceedings{patel2018magnitude,
title={Magnitude: A Fast, Efficient Universal Vector Embedding Utility Package},
author={Patel, Ajay and Sands, Alexander and Callison-Burch, Chris and Apidianaki, Marianna},
booktitle={Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing: System Demonstrations},
pages={120--126},
year={2018}
}หรือติดตามลิงค์ Google Scholar สำหรับวิธีอื่น ๆ ในการอ้างอิงกระดาษ
หากคุณต้องการอ้างถึงที่เก็บนี้คุณสามารถใช้ป้าย DOI ต่อไปนี้:
การคลิกที่ตราจะนำไปสู่หน้าเว็บที่จะช่วยให้คุณสร้างการอ้างอิง Bibtex ที่เหมาะสมการอ้างอิง JSON-LD และการอ้างอิงอื่น ๆ
ที่เก็บนี้ได้รับใบอนุญาตภายใต้ใบอนุญาตที่พบที่นี่
ไอคอน“ แผ่นดินไหว” โดย Johnnyzi จากโครงการคำนาม