Webvectors é um kit de ferramentas para servir modelos semânticos vetoriais (particularmente, embeddings de palavras baseados em predição, como em word2vec ou ELMo ) na web, facilitando a demonstração de suas habilidades ao público em geral. Requer Python >= 3.6 e usa Flask , Gensim e simple_elmo nos bastidores.
Demonstrações de trabalho:
O serviço pode ser integrado ao servidor web Apache como um aplicativo WSGI ou executado como um servidor independente usando Gunicorn (recomendamos a última opção).
Adicione a seguinte linha ao arquivo de configuração do Apache:
WSGIScriptAlias /WEBNAME "PATH/syn.wsgi"
, onde WEBNAME é o alias do seu serviço relativo à raiz do servidor (webvectors para http://example.com/webvectors
) e PATH é o caminho do sistema de arquivos para o diretório WebVectors .
Em todos os arquivos *.wsgi
e *.py
em seu diretório WebVectors , substitua webvectors.cfg
na string config.read('webvectors.cfg')
pelo caminho absoluto para o arquivo webvectors.cfg
.
Configure seu serviço usando o arquivo de configuração webvectors.cfg
. As configurações mais importantes são:
Etiquetas
Os modelos podem usar tags arbitrárias atribuídas a palavras (por exemplo, tags de classe gramatical, como em boot_NOUN ). Se seus modelos são treinados em palavras com tags, você deve ativar isso em webvectors.cfg
(variável use_tags
). Então, o WebVectors permitirá que os usuários filtrem suas consultas por tags. Você também deve especificar a lista de tags permitidas (variável tags_list
em webvectors.cfg
) e a lista de tags que serão mostradas ao usuário (arquivo tags.tsv
).
Daemon de modelos
WebVectors usa um daemon, que é executado em segundo plano e realmente processa todas as tarefas relacionadas à incorporação. Ele também pode ser executado em uma máquina diferente, se desejar. Assim, em webvectors.cfg
você deve especificar host
e port
que este daemon irá escutar. Depois disso, inicie o script daemon real word2vec_server.py
. Ele carregará os modelos e abrirá um soquete de escuta. Este daemon deve estar ativo permanentemente, então você pode querer iniciá-lo usando screen ou algo parecido com isto.
Modelos
A lista de modelos que você deseja utilizar está definida no arquivo models.tsv
. Consiste em campos separados por tabulações:
O identificador do modelo será usado como nome para caixas de seleção nas páginas da web, e também é importante que no arquivo strings.csv
o mesmo identificador seja usado ao denotar nomes de modelos. O idioma do modelo é usado como argumento passado para a função lematizadora, é uma string simples com o nome do idioma (por exemplo, "inglês", "russo", "francês").
Atualmente, os modelos podem estar em 4 formatos:
WebVectors detectará automaticamente o formato dos modelos e carregará todos eles na memória. Os usuários poderão escolher entre os modelos carregados.
Localização
WebVectors usa o arquivo strings.csv
como fonte de strings localizadas. É um arquivo separado por vírgula com 3 campos:
Por padrão, o idioma 1 é o inglês e o idioma 2 é o russo. Isso pode ser alterado em webvectors.cfg
.
Modelos
As páginas da web reais mostradas ao usuário são definidas nos arquivos templates/*.html
. Ajuste-os como desejar. O menu principal é definido em base.html
.
Arquivos de estatísticas
Caso sua aplicação não encontre os arquivos estáticos (scripts bootstrap e js), edite a variável static_url_path
em run_syn.py
. Você deve colocar lá o caminho absoluto para a pasta data
.
Dicas de consulta
Se você quiser que as dicas de consulta funcionem, não se esqueça de compilar sua própria lista de dicas (formato JSON). Um exemplo dessa lista é fornecido em data/example_vocab.json
. O URL real desta lista deve ser indicado em data/hint.js
.
Executando WebVectors
Depois de modificar todas as configurações de acordo com seu fluxo de trabalho, certificar-se de que os modelos estão adequados para você e iniciar o daemon de modelos, você estará pronto para realmente iniciar o serviço. Se você usar a integração com o Apache , simplesmente reinicie/recarregue o Apache . Se preferir a opção autônoma, execute o seguinte comando no diretório raiz do projeto:
gunicorn run_syn:app_syn -b address:port
onde endereço é o endereço no qual o serviço deve estar ativo (pode ser localhost) e porta é, bem, porta para escutar (por exemplo, 9999).
Suporte para incorporações contextualizadas Você pode ativar o suporte para modelos de incorporação contextualizada (atualmente há suporte para ELMo). Para fazer isso:
Instale o pacote simple_elmo
Baixe um modelo ELMo de sua escolha (por exemplo, aqui).
Crie uma projeção baseada em tipo no formato word2vec
para um conjunto limitado de palavras (por exemplo 10.000), dado o modelo ELMo e um corpus de referência. Para isso, use o script extract_elmo.py
que fornecemos:
python3 extract_elmo.py --input CORPUS --elmo PATH_TO_ELMO --outfile TYPE_EMBEDDING_FILE --vocab WORD_SET_FILE
Ele executará o modelo ELMo no corpus fornecido e gerará embeddings de tipo médio estático para cada palavra no conjunto de palavras. Eles serão usados como substitutos lexicais.
Prepare um dicionário de frequências para usar com as visualizações contextualizadas, como um arquivo de texto simples separado por tabulações, onde a primeira coluna contém palavras e a segunda coluna contém suas frequências no dicionário de referência de sua escolha. A primeira linha deste arquivo deve conter um número inteiro correspondente ao tamanho do corpus em tokens de palavras.
Na seção [Token]
do arquivo de configuração webvectors.cfg
, alterne use_contextualized
para True e indique os caminhos para seu token_model
(ELMo pré-treinado), type_model
(a projeção baseada em tipo que você criou com nosso script) e freq_file
que é seu dicionário de frequência.
No campo ref_static_model
, especifique qualquer um dos seus modelos de incorporação de palavras estáticas (apenas seu nome), que você deseja usar como destino de hiperlinks de palavras nas páginas de visualização contextualizadas.
A página com substitutos lexicais do ELMo estará disponível em http://YOUR_ROOT_URL/contextual/
Em caso de qualquer problema, não hesite em contactar-nos:
http://www.aclweb.org/antology/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/