Простой инструмент Python для сравнения встраивания
Emccompare - это небольшой пакет Python, очень вдохновленный инструментом Embedding Comparator, который помогает вам сравнивать ваши вставки как визуально, так и численно.
Эмплекс сохраняет вещи. Все вычисления сделаны в памяти, и пакет не приносит никакого встраивания управления хранилищем.
Если вам нужен инструмент для хранения, сравните и отслеживайте ваши эксперименты, вам может понравиться векторный проект.
# basic install
pip install embcompare
# installation with the gui tool
pip install embcompare[gui]ЭККАМПАРИЯ предоставляет CLI с тремя подключениями:
embcompare add используется для создания или обновления файла YAML, содержащего все вставки Infos: Path, Format, Mabels, Term-Fretences, ...;embcompare report используется для генерации отчетов JSON, содержащих метрики сравнения;embcompare gui используется для запуска потокового веб -приложения для визуального сравнения ваших встроений.Emccompare Используйте файл YAML для ссылки на вставки и соответствующую информацию. По умолчанию Ecccompare ищет файл с именем emccompare.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 Команда embcompare add позволяет обновлять этот файл программно (и даже создавать его, если его не существует).
Emccompare стремится помочь сравнить встраивание благодаря численным показателям, которые можно использовать для проверки, сильно ли отличается новое сгенерированное внедрение от последнего. embcompare report команду может использоваться двумя способами:
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
GUI также очень удобен для сравнения внедрения. Чтобы запустить графический интерфейс, используйте embcompare gui . Он запустит приложение Streamlit, которое позволит вам визуально сравнивать встроенные вами встроенные в файл конфигурации.
ВЫСОКАЯ ПРЕДОСТАВЛЯЕТСЯ НЕСКОЛЬКО КЛАССОВ для загрузки и сравнения встраиваний.
Класс Embedding - ребенок класса gensim.KeyedVectors .
Это добавляет несколько функций:
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 () Класс EmbeddingComparison предназначен для сравнения двух объектов 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 Класс EmbeddingReport используется для создания небольшого отчета об встроении:
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,
# ...
# } Класс EmbeddingComparisonReport используется для создания небольшого отчета о сравнении из двух встраиваемого:
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,
# ...
# } GUI построен с потоком. Мы попытались модулировать приложение, чтобы вы могли легче использовать некоторые функции для вашего приложения на пользовательском стриме:
# 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 )