Webvectors เป็นชุดเครื่องมือที่ให้บริการโมเดลความหมายของเวกเตอร์ (โดยเฉพาะการฝังคำตามการทำนาย เช่น ใน word2vec หรือ ELMo ) บนเว็บ ทำให้ง่ายต่อการแสดงความสามารถต่อสาธารณชนทั่วไป ต้องใช้ Python >= 3.6 และใช้ Flask , Gensim และ simple_elmo ภายใต้ประทุน
การสาธิตการทำงาน:
บริการนี้สามารถรวมเข้ากับเว็บเซิร์ฟเวอร์ Apache เป็นแอปพลิเคชัน WSGI หรือทำงานเป็นเซิร์ฟเวอร์แบบสแตนด์อโลนโดยใช้ Gunicorn (เราขอแนะนำตัวเลือกหลัง)
เพิ่มบรรทัดต่อไปนี้ลงในไฟล์คอนฟิกูเรชัน Apache:
WSGIScriptAlias /WEBNAME "PATH/syn.wsgi"
โดยที่ WEBNAME เป็นนามแฝงสำหรับบริการของคุณที่เกี่ยวข้องกับรูทเซิร์ฟเวอร์ (webvectors สำหรับ http://example.com/webvectors
) และ PATH คือเส้นทางระบบไฟล์ของคุณไปยังไดเร็กทอรี WebVectors
ในไฟล์ *.wsgi
และ *.py
ทั้งหมดในไดเร็กทอรี WebVectors ของคุณ ให้แทนที่ webvectors.cfg
ในสตริง config.read('webvectors.cfg')
ด้วยพาธสัมบูรณ์ไปยังไฟล์ webvectors.cfg
ตั้งค่าบริการของคุณโดยใช้ไฟล์การกำหนดค่า webvectors.cfg
การตั้งค่าที่สำคัญที่สุดคือ:
แท็ก
โมเดลสามารถใช้แท็กที่กำหนดเองซึ่งกำหนดให้กับคำได้ (เช่น แท็กส่วนของคำพูด เช่น ใน boot_NOUN ) หากโมเดลของคุณได้รับการฝึกฝนเกี่ยวกับคำที่มีแท็ก คุณควรเปิดใช้งานสิ่งนี้ใน webvectors.cfg
(ตัวแปร use_tags
) จากนั้น WebVectors จะอนุญาตให้ผู้ใช้กรองข้อความค้นหาตามแท็ก คุณควรระบุรายการแท็กที่อนุญาต ( ตัวแปร tags_list
ใน webvectors.cfg
) และรายการแท็กที่จะแสดงต่อผู้ใช้ (ไฟล์ tags.tsv
)
โมเดลดีมอน
WebVectors ใช้ daemon ซึ่งทำงานอยู่เบื้องหลังและประมวลผลงานที่เกี่ยวข้องกับการฝังทั้งหมด นอกจากนี้ยังสามารถทำงานบนเครื่องอื่นได้หากต้องการ ดังนั้น ใน webvectors.cfg
คุณควรระบุ host
และ port
ที่ daemon นี้จะรับฟัง หลังจากนั้น ให้เริ่มสคริปต์ daemon จริง word2vec_server.py
มันจะโหลดโมเดลและเปิดซ็อกเก็ตการฟัง ดีมอนนี้จะต้องเปิดใช้งานอย่างถาวร ดังนั้นคุณอาจต้องการเปิดใช้งานโดยใช้ หน้าจอ หรืออะไรทำนองนี้
โมเดล
รายการโมเดลที่คุณต้องการใช้ถูกกำหนดไว้ในไฟล์ models.tsv
ประกอบด้วยฟิลด์ที่คั่นด้วยแท็บ:
ตัวระบุโมเดลจะถูกใช้เป็นชื่อของช่องทำเครื่องหมายในหน้าเว็บ และสิ่งสำคัญคือในไฟล์ strings.csv
จะใช้ตัวระบุเดียวกันเมื่อแสดงชื่อโมเดล ภาษาของแบบจำลองถูกใช้เป็นอาร์กิวเมนต์ที่ส่งผ่านไปยังฟังก์ชันเลมาไทเซอร์ ซึ่งเป็นสตริงธรรมดาที่มีชื่อของภาษา (เช่น "อังกฤษ", "รัสเซีย", "ฝรั่งเศส")
ปัจจุบันโมเดลมี 4 รูปแบบ:
WebVectors จะตรวจจับรูปแบบโมเดลโดยอัตโนมัติและโหลดโมเดลทั้งหมดลงในหน่วยความจำ ผู้ใช้จะสามารถเลือกรุ่นที่โหลดได้
รองรับหลายภาษา
WebVectors ใช้ไฟล์ strings.csv
เป็นแหล่งที่มาของสตริงที่แปลแล้ว เป็นไฟล์ที่คั่นด้วยเครื่องหมายจุลภาคซึ่งมี 3 ช่อง:
ตามค่าเริ่มต้น ภาษา 1 คือภาษาอังกฤษ และภาษา 2 คือภาษารัสเซีย สิ่งนี้สามารถเปลี่ยนแปลงได้ใน webvectors.cfg
เทมเพลต
หน้าเว็บจริงที่แสดงต่อผู้ใช้ถูกกำหนดไว้ในไฟล์ templates/*.html
ปรับแต่งตามที่คุณต้องการ เมนูหลักถูกกำหนดไว้ที่ base.html
ไฟล์สถานะ
หากแอปพลิเคชันของคุณไม่พบไฟล์สแตติก (สคริปต์ bootstrap และ js) ให้แก้ไขตัวแปร static_url_path
ใน run_syn.py
คุณควรใส่เส้นทางที่แน่นอนไปยังโฟลเดอร์ data
คำแนะนำแบบสอบถาม
หากคุณต้องการให้คำแนะนำในการสืบค้นใช้งานได้ อย่าลืมรวบรวมรายการคำแนะนำของคุณเอง (รูปแบบ JSON) ตัวอย่างของรายการดังกล่าวมีอยู่ใน data/example_vocab.json
URL ที่แท้จริงของรายการนี้ควรระบุไว้ใน data/hint.js
การรัน WebVectors
เมื่อคุณได้แก้ไขการตั้งค่าทั้งหมดตามขั้นตอนการทำงานของคุณ ตรวจสอบให้แน่ใจว่าเทมเพลตนั้นใช้ได้สำหรับคุณ และเปิดใช้งาน Model daemon คุณก็พร้อมที่จะเริ่มบริการแล้ว หากคุณใช้การผสานรวม Apache เพียงรีสตาร์ท/โหลด Apache ใหม่ หากคุณต้องการตัวเลือกแบบสแตนด์อโลน ให้รันคำสั่งต่อไปนี้ในไดเร็กทอรีรากของโปรเจ็กต์:
gunicorn run_syn:app_syn -b address:port
โดยที่ address คือที่อยู่ที่ควรใช้บริการ (สามารถเป็น localhost ได้) และ พอร์ต ก็คือพอร์ตที่จะรับฟัง (เช่น 9999)
การสนับสนุนสำหรับการฝังตามบริบท คุณสามารถเปิดการสนับสนุนสำหรับโมเดลการฝังตามบริบทได้ (ปัจจุบันรองรับ ELMo) เพื่อทำเช่นนั้น:
ติดตั้งแพ็คเกจ simple_elmo
ดาวน์โหลดโมเดล ELMo ที่คุณเลือก (ตัวอย่าง ที่นี่)
สร้างการฉายภาพตามประเภทในรูปแบบ word2vec
สำหรับชุดคำที่จำกัด (เช่น 10,000) โดยกำหนดโมเดล ELMo และคลังข้อมูลอ้างอิง สำหรับสิ่งนี้ ให้ใช้สคริปต์ extract_elmo.py
ที่เรามีให้:
python3 extract_elmo.py --input CORPUS --elmo PATH_TO_ELMO --outfile TYPE_EMBEDDING_FILE --vocab WORD_SET_FILE
โดยจะเรียกใช้โมเดล ELMo บนคลังข้อมูลที่ให้ไว้ และสร้างการฝังประเภทค่าเฉลี่ยคงที่สำหรับแต่ละคำในชุดคำ พวกเขาจะถูกนำมาใช้แทนคำศัพท์
เตรียมพจนานุกรมความถี่เพื่อใช้กับการแสดงภาพตามบริบท เป็นไฟล์ที่คั่นด้วยแท็บข้อความธรรมดา โดยคอลัมน์แรกประกอบด้วยคำต่างๆ และคอลัมน์ที่สองประกอบด้วยความถี่ในพจนานุกรมอ้างอิงที่คุณเลือก บรรทัดแรกของไฟล์นี้ควรมีจำนวนเต็มหนึ่งจำนวนที่ตรงกับขนาดของคลังข้อมูลในโทเค็นคำ
ในส่วน [Token]
ของไฟล์การกำหนดค่า webvectors.cfg
ให้สลับ use_contextualized
เป็น True และระบุเส้นทางไปยัง token_model
ของคุณ (ELMo ที่ได้รับการฝึกล่วงหน้า), type_model
(การฉายภาพตามประเภทที่คุณสร้างด้วยสคริปต์ของเรา) และ freq_file
ซึ่งเป็นของคุณ พจนานุกรมความถี่
ในฟิลด์ ref_static_model
ให้ระบุโมเดลการฝังคำแบบคงที่ใดๆ ของคุณ (เพียงชื่อ) ซึ่งคุณต้องการใช้เป็นเป้าหมายของไฮเปอร์ลิงก์จากคำในหน้าการแสดงภาพตามบริบท
หน้าที่มีการแทนที่คำศัพท์ของ ELMo จะมีอยู่ที่ http://YOUR_ROOT_URL/contextual/
ในกรณีที่มีปัญหาใด ๆ โปรดติดต่อเรา:
http://www.aclweb.org/anthology/E17-3025
http://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf
http://flask.pocoo.org/
http://radimrehurek.com/gensim/
http://gunicorn.org/