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/