อินเทอร์เฟซ node.js ไปยังเครื่องมือ Google Word2vec
นี่คืออินเทอร์เฟซ Node.js กับเครื่องมือ Word2veC ที่พัฒนาขึ้นที่ Google Research สำหรับ "การใช้งานอย่างมีประสิทธิภาพของ Bag-of-words และสถาปัตยกรรมข้ามกรัมสำหรับการคำนวณการเป็นตัวแทนของคำพูด" ซึ่งสามารถใช้ในงาน NLP ที่หลากหลาย สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโครงการ Word2veC โปรดปรึกษา https://code.google.com/p/word2vec/
ปัจจุบัน node-word2vec ได้รับการสนับสนุนเฉพาะสำหรับระบบปฏิบัติการ UNIX เท่านั้น
ติดตั้งผ่าน NPM:
npm install word2vecหากต้องการใช้ภายใน node.js ต้องใช้โมดูลดังนี้:
var w2v = require ( 'word2vec' ) ;สำหรับแอปพลิเคชันที่มีความสำคัญที่คำบางคำบางคำจะถือว่าเป็นคำเดียว (เช่น "Barack Obama" หรือ "New York" ควรได้รับการปฏิบัติเหมือนเป็นคำเดียว) ข้อความที่ใช้สำหรับการฝึกอบรมควรได้รับการประมวลผลล่วงหน้าผ่านฟังก์ชัน Word2Phrases คำที่มักเกิดขึ้นถัดจากกันและกันจะถูกต่อกันผ่านขีดล่างเช่นคำว่า "ใหม่" และ "ยอร์ค" หากติดตามกันอาจถูกเปลี่ยนเป็นคำเดียว "new_york"
ภายในฟังก์ชั่นนี้เรียกแอปพลิเคชันบรรทัดคำสั่ง c ของโครงการ Google Word2vec สิ่งนี้ช่วยให้สามารถใช้ประโยชน์จากมัลติเธรดและรักษาประสิทธิภาพของรหัส C ดั้งเดิม มันประมวลผลข้อความที่กำหนดโดยเอกสารข้อความ input เขียนเอาต์พุตไปยังไฟล์ที่มีชื่อที่ได้รับจาก output
พารามิเตอร์ params คาดว่าวัตถุ JS จะมีคีย์และค่าที่เกี่ยวข้องต่อไปนี้ หากไม่ได้จัดหาค่าเริ่มต้นจะถูกใช้
| สำคัญ | คำอธิบาย | ค่าเริ่มต้น |
|---|---|---|
| นับจำนวนเงิน | ทิ้งคำพูดที่ปรากฏน้อยกว่าครั้ง ที่ mincount | 5 |
| เกณฑ์ | กำหนดจำนวนวลีค่าที่สูงขึ้นหมายถึงวลีที่น้อยลง | 100 |
| การดีบัก | ตั้งค่าโหมดการดีบัก | 2 |
| เงียบ | ตั้งค่าว่าควรพิมพ์เอาต์พุตใด ๆ ไปยังคอนโซล | เท็จ |
หลังจากการดำเนินการที่ประสบความสำเร็จฟังก์ชั่น callback ที่ให้มาจะถูกเรียกใช้ มันได้รับจำนวนรหัสออกเป็นพารามิเตอร์แรก
ฟังก์ชั่นนี้เรียกใช้แอปพลิเคชันบรรทัดคำสั่ง Word2Vec ของ Google และค้นหาการแสดงเวกเตอร์สำหรับคำในคลังข้อมูลการฝึกอบรม input เขียนผลลัพธ์ไปยังไฟล์ output เอาต์พุตสามารถโหลดลงในโหนดผ่านฟังก์ชัน loadModel ซึ่งเปิดเผยวิธีการหลายวิธีในการโต้ตอบกับการแสดงเวกเตอร์ที่เรียนรู้ของคำ
พารามิเตอร์ params คาดว่าวัตถุ JS จะมีคีย์และค่าที่เกี่ยวข้องต่อไปนี้ สำหรับผู้ที่ขาดหายไปค่าเริ่มต้นจะถูกใช้:
| สำคัญ | คำอธิบาย | ค่าเริ่มต้น |
|---|---|---|
| ขนาด | ตั้งค่าขนาดของเวกเตอร์คำ | 100 |
| หน้าต่าง | ตั้งค่าความยาวข้ามสูงสุดระหว่างคำ | 5 |
| ตัวอย่าง | ตั้งค่าเกณฑ์สำหรับการเกิดขึ้นของคำ ผู้ที่ปรากฏด้วยความถี่ที่สูงขึ้นในข้อมูลการฝึกอบรมจะถูกสุ่มลดลง ช่วงที่มีประโยชน์คือ (0, 1E-5) | 1E-3 |
| HS | 1 = ใช้ softmax ลำดับชั้น | 0 |
| เชิงลบ | จำนวนตัวอย่างเชิงลบ ค่าทั่วไปคือ 3 - 10 (0 = ไม่ได้ใช้) | 5 |
| ด้าย | จำนวนเธรดที่ใช้แล้ว | 12 |
| iter | จำนวนการทำซ้ำการฝึกอบรม | 5 |
| นับจำนวนเงิน | สิ่งนี้จะละทิ้งคำที่ปรากฏน้อยกว่าเวลา ที่นับไม่ถ้วน | 5 |
| อัลฟ่า | กำหนดอัตราการเรียนรู้เริ่มต้น | 0.025 สำหรับการข้ามกรัมและ 0.05 สำหรับ cbow |
| ชั้นเรียน | เอาท์พุทคลาสคำมากกว่าเวกเตอร์คำ | 0 (เขียนเวกเตอร์) |
| การดีบัก | ตั้งค่าโหมดการดีบัก | 2 |
| เป็นไบนารี | บันทึกเวกเตอร์ผลลัพธ์ในโหมดไบนารี | 0 (ปิด) |
| Savevocab | คำศัพท์จะถูกบันทึกไว้ในค่า savevocab | |
| readVocab | คำศัพท์จะถูกอ่านจากค่า readVocab ไม่ได้สร้างจากข้อมูลการฝึกอบรม | |
| cbow | ใช้โมเดลคำพูดต่อเนื่อง | 1 (ใช้ 0 สำหรับรุ่นข้ามกรัม) |
| เงียบ | ตั้งค่าว่าควรพิมพ์เอาต์พุตใด ๆ ไปยังคอนโซล | เท็จ |
หลังจากการดำเนินการที่ประสบความสำเร็จฟังก์ชั่น callback ที่ให้มาจะถูกเรียกใช้ มันได้รับจำนวนรหัสออกเป็นพารามิเตอร์แรก
นี่คือฟังก์ชั่นหลักของแพ็คเกจซึ่งโหลดไฟล์โมเดลที่บันทึกไว้ซึ่งมีการแสดงเวกเตอร์ของคำลงในหน่วยความจำ ไฟล์ดังกล่าวสามารถสร้างขึ้นได้โดยใช้ฟังก์ชัน Word2Vec หลังจากโหลดไฟล์เรียบร้อยแล้วฟังก์ชั่นการโทรกลับที่ให้มาจะถูกไล่ออกซึ่งการประชุมต่อไปนี้มีพารามิเตอร์สองพารามิเตอร์: err และ model หากทุกอย่างทำงานได้อย่างราบรื่นและไม่มีข้อผิดพลาดเกิดขึ้นอาร์กิวเมนต์แรกควรเป็น null พารามิเตอร์ model เป็นวัตถุโมเดลที่เก็บข้อมูลทั้งหมดและเปิดเผยคุณสมบัติและวิธีการที่อธิบายไว้ในส่วน วัตถุโมเดล
ตัวอย่าง:
w2v . loadModel ( './vectors.txt' , function ( error , model ) {
console . log ( model ) ;
} ) ;ตัวอย่างเอาท์พุท:
{
getVectors : [ Function ] ,
distance : [ Function : distance ] ,
analogy : [ Function : analogy ] ,
words : '98331' ,
size : '200'
} จำนวนคำที่ไม่ซ้ำกันในคลังการฝึกอบรม
ความยาวของเวกเตอร์คำที่เรียนรู้
คำนวณความคล้ายคลึงกันของคำระหว่าง word1 และ word2
ตัวอย่าง:
model . similarity ( 'ham' , 'cheese' ) ;ตัวอย่างเอาท์พุท:
0.4907762118841032 คำนวณระยะห่างจากโคไซน์ระหว่างวลีที่ให้มา ( string ซึ่งถูกแปลงภายในเป็นคำศัพท์ภายในซึ่งส่งผลให้ เวกเตอร์วลี ) และเวกเตอร์คำอื่น ๆ ของคำศัพท์ ส่งคืนเป็นคำ number ที่มีความคล้ายคลึงกันสูงสุดกับวลีที่ให้มา หากไม่ได้ระบุ number โดยค่าเริ่มต้นคำให้คะแนนสูงสุด 40 คำจะถูกส่งคืน หากไม่มีคำใดในวลีที่ปรากฏในพจนานุกรมฟังก์ชั่นจะส่งคืน null ในกรณีอื่น ๆ ทั้งหมดคำที่ไม่รู้จักจะถูกลดลงในการคำนวณระยะทางโคไซน์
ตัวอย่าง:
model . mostSimilar ( 'switzerland' , 20 ) ;ตัวอย่างเอาท์พุท:
[
{ word : 'chur' , dist : 0.6070252929307018 } ,
{ word : 'ticino' , dist : 0.6049085549621765 } ,
{ word : 'bern' , dist : 0.6001648890419077 } ,
{ word : 'cantons' , dist : 0.5822226582323267 } ,
{ word : 'z_rich' , dist : 0.5671853621346818 } ,
{ word : 'iceland_norway' , dist : 0.5651901750812693 } ,
{ word : 'aargau' , dist : 0.5590524831511438 } ,
{ word : 'aarau' , dist : 0.555220055372284 } ,
{ word : 'zurich' , dist : 0.5401119092258485 } ,
{ word : 'berne' , dist : 0.5391358099043649 } ,
{ word : 'zug' , dist : 0.5375590160292268 } ,
{ word : 'swiss_confederation' , dist : 0.5365824598661265 } ,
{ word : 'germany' , dist : 0.5337325187293028 } ,
{ word : 'italy' , dist : 0.5309218588704736 } ,
{ word : 'alsace_lorraine' , dist : 0.5270204106304165 } ,
{ word : 'belgium_denmark' , dist : 0.5247942780963807 } ,
{ word : 'sweden_finland' , dist : 0.5241634037188426 } ,
{ word : 'canton' , dist : 0.5212495170066538 } ,
{ word : 'anterselva' , dist : 0.5186651140386938 } ,
{ word : 'belgium' , dist : 0.5150383129735169 }
] สำหรับคำสองคำในความสัมพันธ์เช่น man และ king ฟังก์ชั่นนี้พยายามค้นหาคำที่อยู่ในความสัมพันธ์ที่คล้ายคลึงกับ word ที่ให้มา หากไม่ได้รับหมายเลขโดย number เริ่มต้นผลลัพธ์ที่ให้คะแนนสูงสุด 40 รายการจะถูกส่งคืน
ตัวอย่าง:
model . analogy ( 'woman' , [ 'man' , 'king' ] , 10 ) ;ตัวอย่างเอาท์พุท:
[
{ word : 'queen' , dist : 0.5607083309028658 } ,
{ word : 'queen_consort' , dist : 0.510974781496456 } ,
{ word : 'crowned_king' , dist : 0.5060923120115347 } ,
{ word : 'isabella' , dist : 0.49319425034513376 } ,
{ word : 'matilda' , dist : 0.4931204901924969 } ,
{ word : 'dagmar' , dist : 0.4910608716969606 } ,
{ word : 'sibylla' , dist : 0.4832698899279795 } ,
{ word : 'died_childless' , dist : 0.47957251302898396 } ,
{ word : 'charles_viii' , dist : 0.4775804990655765 } ,
{ word : 'melisende' , dist : 0.47663194967001704 }
] ส่งคืนการแสดงเวกเตอร์ที่เรียนรู้สำหรับ word ป้อนข้อมูล หาก word ไม่มีอยู่ในคำศัพท์ฟังก์ชั่นจะส่งคืน null
ตัวอย่าง:
model . getVector ( 'king' ) ;ตัวอย่างเอาท์พุท:
{
word : 'king' ,
values : [
0.006371254151248689 ,
- 0.04533821363410406 ,
0.1589142808632736 ,
...
0.042080221123209825 ,
- 0.038347102017109225
]
} ส่งคืนตัวแทนเวกเตอร์ที่เรียนรู้สำหรับคำที่ให้มา หาก คำพูด ไม่ได้กำหนดไว้เช่นฟังก์ชั่นจะปรากฏขึ้นโดยไม่ผ่านข้อโต้แย้งใด ๆ มันจะส่งคืนเวกเตอร์สำหรับคำที่เรียนรู้ทั้งหมด ค่าที่ส่งคืนเป็น array ของวัตถุซึ่งเป็นอินสแตนซ์ของคลาส WordVec
ตัวอย่าง:
model . getVectors ( [ 'king' , 'queen' , 'boy' , 'girl' ] ) ;ตัวอย่างเอาท์พุท:
[
{
word : 'king' ,
values : [
0.006371254151248689 ,
- 0.04533821363410406 ,
0.1589142808632736 ,
...
0.042080221123209825 ,
- 0.038347102017109225
]
} ,
{
word : 'queen' ,
values : [
0.014399041122817985 ,
- 0.000026896638109750347 ,
0.20398248693190596 ,
...
- 0.05329081648586445 ,
- 0.012556868376422963
]
} ,
{
word : 'girl' ,
values : [
- 0.1247347144692245 ,
0.03834108759049417 ,
- 0.022911846734360187 ,
...
- 0.0798994867922872 ,
- 0.11387393949666696
]
} ,
{
word : 'boy' ,
values : [
- 0.05436531234037158 ,
0.008874993957578164 ,
- 0.06711992414442335 ,
...
0.05673998568026764 ,
- 0.04885347925837509
]
}
] ส่งคืนคำที่มีการแสดงเวกเตอร์ที่ใกล้เคียงที่สุดไปยัง vec อินพุต ฟังก์ชั่นคาดว่าจะมีเวกเตอร์คำไม่ว่าจะเป็นอินสแตนซ์ของตัวสร้าง WordVector หรืออาร์เรย์ของค่าตัวเลขที่มี size ความยาว มันส่งคืนคำในคำศัพท์ที่ระยะห่างระหว่างเวกเตอร์และเวกเตอร์อินพุตที่ให้มานั้นต่ำที่สุด
ตัวอย่าง:
model . getNearestWord ( model . getVector ( 'empire' ) ) ;ตัวอย่างเอาท์พุท:
{ word : 'empire' , dist : 1.0000000000000002 } ส่งคืนคำที่เป็นตัวแทนเวกเตอร์ใกล้เคียงกับอินพุต vec พารามิเตอร์แรกของฟังก์ชั่นคาดว่าจะมีเวกเตอร์คำไม่ว่าจะเป็นอินสแตนซ์ของตัวสร้าง WordVector หรืออาร์เรย์ของค่า size ความยาว พารามิเตอร์ที่สอง number เป็นตัวเลือกและระบุจำนวนคำที่ส่งคืน หากไม่ได้ให้มาจะใช้ค่าเริ่มต้น 10
ตัวอย่าง:
model . getNearestWords ( model . getVector ( 'man' ) , 3 )ตัวอย่างเอาท์พุท:
[
{ word : 'man' , dist : 1.0000000000000002 } ,
{ word : 'woman' , dist : 0.5731114915085445 } ,
{ word : 'boy' , dist : 0.49110060323870924 }
] คำในคำศัพท์
การเป็นตัวแทนของเวกเตอร์ที่เรียนรู้สำหรับคำที่มี size ความยาวอาร์เรย์
เพิ่มเวกเตอร์ของอินพุต wordVector ลงในเวกเตอร์ .values
ลบเวกเตอร์ของอินพุต wordVector ไปยังเวกเตอร์ .values
รันการทดสอบผ่าน npm test
โคลนที่เก็บ Git ด้วยคำสั่ง
$ git clone https://github.com/Planeshifter/node-word2vec.gitเปลี่ยนเป็นไดเรกทอรีโครงการและรวบรวมไฟล์ต้นฉบับ C ผ่าน
$ cd node-word2vec
$ make --directory=srcApache v2