비교를 포함시키기위한 간단한 파이썬 도구
Embcompare는 임베딩 비교기 도구에서 고도로 영감을 얻은 작은 파이썬 패키지입니다.
Embcompare는 일을 단순하게 유지합니다. 모든 계산은 메모리로 작성되며 패키지는 임베딩 스토리지 관리를 가져 오지 않습니다.
실험을 저장, 비교 및 추적하는 도구가 필요한 경우 벡터 프로젝트가 마음에들 수 있습니다.
# basic install
pip install embcompare
# installation with the gui tool
pip install embcompare[gui]Embcompare는 세 가지 하위 명령과 함께 CLI를 제공합니다.
embcompare add 모든 임베드 인포를 포함하는 Yaml 파일을 생성하거나 업데이트하는 데 사용됩니다. 경로, 형식, 레이블, 용어 주파수, ...;embcompare report 비교 메트릭이 포함 된 JSON 보고서를 생성하는 데 사용됩니다.embcompare gui 삽입을 시각적으로 비교하기 위해 능률적 인 웹 앱을 시작하는 데 사용됩니다.Embcompare는 임베딩 및 관련 정보를 참조하기 위해 YAML 파일을 사용합니다. 기본적으로 Embcompare는 현재 작업 디렉토리에서 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 embcompare add 명령을 통해이 파일을 프로그래밍 방식으로 업데이트 할 수 있습니다 (존재하지 않으면 생성).
Embcompare는 새로운 생성 된 임베딩이 마지막과는 매우 다른지 확인하는 데 사용할 수있는 수치 지표 덕분에 포함을 비교하는 데 도움이됩니다. 명령 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는 또한 임베딩을 비교하는 데 매우 편리합니다. GUI를 시작하려면 Commande embcompare gui 사용하십시오. 구성 파일에 추가 한 임베딩을 시각적으로 비교할 수있는 간단한 앱을 시작합니다.
Embcompare는 임베딩을로드하고 비교하기위한 여러 클래스를 제공합니다.
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는 Sleamlit으로 제작되었습니다. 우리는 앱을 모듈화하려고 시도하여 사용자 정의 간소화 앱의 일부 기능을보다 쉽게 재사용 할 수 있습니다.
# 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 )