Webvectors是一個透過網路提供向量語意模型(特別是基於預測的字詞嵌入,如word2vec或ELMo )的工具包,可以輕鬆地向公眾展示其能力。它需要 Python >= 3.6,並在底層使用Flask 、 Gensim和simple_elmo 。
工作演示:
該服務可以作為 WSGI 應用程式整合到Apache Web 伺服器中,也可以使用Gunicorn作為獨立伺服器運行(我們推薦後者)。
將以下行新增至 Apache 設定檔:
WSGIScriptAlias /WEBNAME "PATH/syn.wsgi"
,其中WEBNAME是相對於伺服器根目錄的服務別名(webvectors 表示http://example.com/webvectors
), PATH是WebVectors目錄的檔案系統路徑。
在WebVectors目錄中的所有*.wsgi
和*.py
檔案中,將字串config.read('webvectors.cfg')
中的webvectors.cfg
替換為webvectors.cfg
檔案的絕對路徑。
使用設定檔webvectors.cfg
設定您的服務。最重要的設定是:
標籤
模型可以使用分配給單字的任意標籤(例如,詞性標籤,如boot_NOUN中的)。如果您的模型是針對帶有標籤的單字進行訓練的,您應該在webvectors.cfg
( use_tags
變數)中開啟它。然後, WebVectors將允許使用者透過標籤過濾他們的查詢。您還應該指定允許的標籤清單( webvectors.cfg
中的tags_list
變數)以及將向使用者顯示的標籤清單( tags.tsv
檔案)。
模型守護程式
WebVectors使用一個守護進程,該進程在背景運行並實際處理所有與嵌入相關的任務。如果您願意,它也可以在不同的機器上運行。因此,在webvectors.cfg
中,您應該指定該守護程序將偵聽的host
和port
。之後,啟動實際的守護程式腳本word2vec_server.py
。它將載入模型並打開監聽套接字。這個守護程式必須永久處於活動狀態,因此您可能需要使用screen或類似的東西來啟動它。
型號
您要使用的模型清單在檔案models.tsv
中定義。它由製表符分隔的字段組成:
模型識別碼將用作網頁中複選框的名稱,並且在strings.csv
檔案中表示模型名稱時使用相同的標識符也很重要。模型的語言用作傳遞給詞形還原函數的參數,它是一個帶有語言名稱的簡單字串(例如“英語”、“俄語”、“法語”)。
模型目前有 4 種格式:
WebVectors將自動偵測模型格式並將它們全部載入記憶體。用戶將能夠在載入的模型中進行選擇。
本土化
WebVectors使用strings.csv
檔案作為本地化字串的來源。它是一個以逗號分隔的文件,包含 3 個欄位:
預設情況下,語言 1 為英語,語言 2 為俄語。這可以在webvectors.cfg
中更改。
範本
向使用者顯示的實際網頁在檔案templates/*.html
中定義。按照您的意願調整它們。主選單在base.html
中定義。
統計文件
如果您的應用程式找不到靜態檔案(引導程式和js腳本),請編輯run_syn.py
中的變數static_url_path
。您應該將data
資料夾的絕對路徑放在那裡。
查詢提示
如果您希望查詢提示起作用,請不要忘記編譯您自己的提示清單(JSON 格式)。 data/example_vocab.json
中給出了此類清單的範例。該清單的真實 URL 應在data/hint.js
中說明。
運行WebVectors
根據您的工作流程修改所有設定、確保範本適合您並啟動模型守護程序後,您就可以實際啟動服務了。如果您使用Apache集成,只需重新啟動/重新加載Apache即可。如果您喜歡獨立選項,請在專案的根目錄中執行以下命令:
gunicorn run_syn:app_syn -b address:port
其中, address是服務應處於活動狀態的位址(可以是 localhost), port是要偵聽的連接埠(例如,9999)。
支援上下文嵌入您可以開啟對上下文嵌入模型的支援(目前支援 ELMo)。為了做到這一點:
安裝 simple_elmo 套件
下載您選擇的 ELMo 模型(例如,此處)。
在給定 ELMo 模型和參考語料庫的情況下,為有限的單字集(例如 10 000 個)建立word2vec
格式的基於類型的投影。為此,請使用我們提供的extract_elmo.py
腳本:
python3 extract_elmo.py --input CORPUS --elmo PATH_TO_ELMO --outfile TYPE_EMBEDDING_FILE --vocab WORD_SET_FILE
它將在提供的語料庫上運行 ELMo 模型,並為單字集中的每個單字產生靜態平均類型嵌入。它們將用作詞彙替代品。
準備一個頻率字典以與上下文視覺化一起使用,作為純文字製表符分隔文件,其中第一列包含單詞,第二列包含它們在您選擇的參考字典中的頻率。該檔案的第一行應包含一個與單字標記中的語料庫大小相符的整數。
在webvectors.cfg
設定檔的[Token]
部分中,將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/