Ein einfaches Python -Tool zum Einbetten des Vergleichs
EmbCompare ist ein kleines Python -Paket, das von dem Einbettungsvergleichs -Tool inspiriert ist, mit dem Sie Ihre Einbettung sowohl visuell als auch numerisch vergleichen können.
EmbCompare hält die Dinge Simples. Alle Berechnungen werden im Speicher durchgeführt und das Paket bringt keine Einbettungsspeicherverwaltung mit sich.
Wenn Sie ein Tool benötigen, um Ihre Experimente zu speichern, zu vergleichen und zu verfolgen, mögen Sie das Vektor -Projekt.
# basic install
pip install embcompare
# installation with the gui tool
pip install embcompare[gui]EmbCompare bietet eine CLI mit drei Unterbefehlen:
embcompare add wird verwendet, um eine YAML-Datei mit allen Einbettungsdings zu erstellen oder zu aktualisieren: Pfad, Format, Beschriftungen, Term-Frequenzen, ...;embcompare report wird verwendet, um JSON -Berichte zu generieren, die Vergleichskennzahlen enthalten.embcompare gui wird verwendet, um eine streamlite WebApp zu starten, um Ihre Einbettungsdings visuell zu vergleichen.EmbCompare Verwenden Sie eine YAML -Datei, um Einbettungen und relevante Informationen zu verweisen. Standardmäßig sucht EmbCompare im aktuellen Arbeitsverzeichnis nach einer Datei namens embcompare.yaml.
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 Mit dem Befehl embcompare add können diese Datei programmatisch aktualisieren (und sogar erstellen, wenn er nicht vorhanden ist).
EmbCompare zielt darauf ab, die Einbettung dank numerischer Metriken zu vergleichen, die verwendet werden können, um zu überprüfen, ob sich eine neue generierte Einbettung sehr vom letzten unterscheidet. Der Befehls embcompare report kann auf zwei Arten verwendet werden:
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
Die GUI ist auch sehr praktisch, um Einbettungen zu vergleichen. Um die GUI zu starten, verwenden Sie die Commande embcompare gui . Es wird eine Streamlit -App gestartet, mit der Sie die in der Konfigurationsdatei hinzugefügten Einbettungen visuell vergleichen können.
EmbCompare bietet mehrere Klassen zum Laden und Vergleich von Einbettungen.
Die Embedding ist ein Kind der gensim.KeyedVectors -Klasse.
Es fügt nur wenige Funktionen hinzu:
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 () Die EmbeddingComparison soll zwei Embedding vergleichen:
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 Die EmbeddingReport wird verwendet, um einen kleinen Bericht über eine Einbettung zu erstellen:
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,
# ...
# } Die EmbeddingComparisonReport wird verwendet, um einen kleinen Vergleichsbericht aus zwei Einbettung zu erstellen:
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,
# ...
# } Die GUI ist mit stromplimitiertem Zustand gebaut. Wir haben versucht, die App zu modularisieren, damit Sie einige Funktionen für Ihre benutzerdefinierte Streamlit -App leichter wiederverwenden können:
# 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 )