Uma ferramenta simples de python para incorporar comparação
O EMBCompare é um pequeno pacote Python, altamente inspirado na ferramenta de incorporação do comparador que ajuda a comparar suas incorporações visual e numericamente.
O EmbomPare mantém as coisas semmas. Todos os cálculos são feitos na memória e o pacote não traz nenhum gerenciamento de armazenamento de incorporação.
Se você precisar de uma ferramenta para armazenar, comparar e rastrear seus experimentos, poderá gostar do projeto Vectory.
# basic install
pip install embcompare
# installation with the gui tool
pip install embcompare[gui]O EMBCOMPARE fornece a uma CLI três subcomandos:
embcompare add é usado para criar ou atualizar um arquivo YAML contendo todas as incorporações Infos: Caminho, Formato, Rótulos, Frequências de Termo, ...;embcompare report é usado para gerar relatórios JSON contendo métricas de comparação;embcompare gui é usada para iniciar um WebApp de streamlit para comparar suas incorporações visualmente.O EMBCompare usa um arquivo YAML para referenciar incorporações e informações relevantes. Por padrão, o Embompare está procurando um arquivo chamado Embompare.yaml no diretório de trabalho atual.
embeddings :
first_embedding :
name : My first embedding
path : /abspath/to/firstembedding.json
format : json
frequencies : /abspath/to/freqs.json
frequencies_format : json
labels : /abspath/to/labels.pkl
labels_format : pkl
second_embedding :
name : My second embedding
path : /abspath/to/secondembedding.json
format : word2vec
frequencies : /abspath/to/freqs.pkl
frequencies_format : pkl
labels : /abspath/to/labels.json
labels_format : json O comando embcompare add permite atualizar esse arquivo programaticamente (e até criá -lo se não existir).
O EMBCompare visa ajudar a comparar a incorporação graças a métricas numéricas que podem ser usadas para verificar se uma nova incorporação gerada é muito diferente da última. O embcompare report pode ser usado de duas maneiras:
embcompare report first_embedding
# creates a first_embedding_report.json file containing some infos about the embeddingembcompare report first_embedding second_embedding
# creates a first_embedding_second_embedding_report.json file containing comparison metrics
A GUI também é muito útil para comparar incorporações. Para iniciar a GUI, use a embcompare gui . Ele iniciará um aplicativo STRYLIT que permitirá comparar visualmente as incorporações que você adicionou no arquivo de configuração.
O EMBCompare fornece várias classes para carregar e comparar incorporações.
A aula Embedding é a classe Child of the gensim.KeyedVectors .
Acrescenta poucas funcionalidades:
import json
import gensim . downloader as api
from embcompare import Embedding
word_vectors = api . load ( "glove-wiki-gigaword-100" )
with open ( "frequencies.json" , "r" ) as f :
word_frequencies = json . load ( f )
embedding = Embedding . load_from_keyedvectors ( word_vectors , frequencies = word_frequencies )
neigh_dist , neigh_ind = embedding . compute_neighborhoods () A aula EmbeddingComparison destina -se a comparar dois objetos Embedding :
from embcompare import EmbeddingComparison , load_embedding
emb1 = load_embedding ( "first_emb.bin" , embedding_format = "fasttext" , frequencies_path = "freqs.pkl" )
emb2 = load_embedding ( "second_emb.bin" , embedding_format = "word2vec" , frequencies_path = "freqs.pkl" )
comparison = EmbeddingComparison ({ "emb1" : emb1 , "emb2" : emb2 }, n_neighbors = 25 )
comparison . neighborhoods_similarities [ "word" ]
# 0.867 A classe de EmbeddingReport é usada para gerar um pequeno relatório sobre uma incorporação:
from embcompare import EmbeddingReport , load_embedding
emb1 = load_embedding ( "first_emb.bin" , embedding_format = "fasttext" , frequencies_path = "freqs.pkl" )
report = EmbeddingReport ( emb1 )
report . to_dict ()
# {
# "vector_size": 300,
# "mean_frequency": 0.00012,
# "mean_distance_neighbors": 0.023,
# ...
# } A classe EmbeddingComparisonReport é usada para gerar um pequeno relatório de comparação a partir de duas incorporação:
from embcompare import EmbeddingComparison , EmbeddingComparisonReport , load_embedding
emb1 = load_embedding ( "first_emb.bin" , embedding_format = "fasttext" , frequencies_path = "freqs.pkl" )
emb2 = load_embedding ( "second_emb.bin" , embedding_format = "word2vec" , frequencies_path = "freqs.pkl" )
comparison = EmbeddingComparison ({ "emb1" : emb1 , "emb2" : emb2 })
report = EmbeddingComparisonReport ( comparison )
report . to_dict ()
# {
# "embeddings" : [
# {
# "vector_size": 300,
# "mean_frequency": 0.00012,
# "mean_distance_neighbors": 0.023,
# ...
# },
# ...
# ],
# "neighborhoods_similarities_median": 0.012,
# ...
# } A GUI é construída com o Streamlit. Tentamos modularizar o aplicativo para que você possa reutilizar mais facilmente alguns recursos para o seu aplicativo de streamlit personalizado:
# embcompare/gui/app.py
from embcompare . gui . features import (
display_custom_elements_comparison ,
display_elements_comparison ,
display_embeddings_config ,
display_frequencies_comparison ,
display_neighborhoods_similarities ,
display_numbers_of_elements ,
display_parameters_selection ,
display_spaces_comparison ,
display_statistics_comparison ,
)
from embcompare . gui . helpers import create_comparison
def main ():
"""Streamlit app for embeddings comparison"""
config_embeddings = config [ CONFIG_EMBEDDINGS ]
(
tab_infos ,
tab_stats ,
tab_spaces ,
tab_neighbors ,
tab_compare ,
tab_compare_custom ,
tab_frequencies ,
) = st . tabs (
[
"Infos" ,
"Statistics" ,
"Spaces" ,
"Similarities" ,
"Elements" ,
"Search elements" ,
"Frequencies" ,
]
)
# Embedding selection (inside the sidebar)
with st . sidebar :
parameters = display_parameters_selection ( config_embeddings )
# Display informations about embeddings
with tab_infos :
display_embeddings_config (
config_embeddings , parameters . emb1_id , parameters . emb2_id
)
comparison = create_comparison (
config_embeddings ,
emb1_id = parameters . emb1_id ,
emb2_id = parameters . emb2_id ,
n_neighbors = parameters . n_neighbors ,
max_emb_size = parameters . max_emb_size ,
min_frequency = parameters . min_frequency ,
)
# Display number of element in both embedding and common elements
with tab_infos :
display_numbers_of_elements ( comparison )
# Display statistics
with tab_stats :
display_statistics_comparison ( comparison )
if not comparison . common_keys :
st . warning ( "The embeddings have no element in common" )
st . stop ()
# Comparison below are based on common elements comparison
with tab_spaces :
display_spaces_comparison ( comparison )
with tab_neighbors :
display_neighborhoods_similarities ( comparison )
with tab_compare :
display_elements_comparison ( comparison )
with tab_compare_custom :
display_custom_elements_comparison ( comparison )
with tab_frequencies :
display_frequencies_comparison ( comparison )