埋め込み比較のためのシンプルなPythonツール
EmbCompareは、埋め込みと数値の両方で埋め込みを比較するのに役立つ埋め込みコンパレータツールに非常にインスピレーションを受けた小さなPythonパッケージです。
EmbCompareは物事をシンプルに保ちます。すべての計算はメモリで行われ、パッケージは埋め込みストレージ管理をもたらさない。
保存するツールが必要な場合は、実験を比較して追跡するには、Vectoryプロジェクトが好きかもしれません。
# basic install
pip install embcompare
# installation with the gui tool
pip install embcompare[gui]EmbCompareは、3つのサブコマンドを備えたCLIを提供します。
embcompare add 、すべての埋め込みインフォスを含むYAMLファイルを作成または更新するために使用されます。embcompare report 、比較メトリックを含むJSONレポートを生成するために使用されます。embcompare gui 、埋め込み型を視覚的に比較するために、施設のWebAppを起動するために使用されます。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 2つの方法で使用できます。
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クラスは、2つの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クラスは、2つの埋め込みから小さな比較レポートを生成するために使用されます。
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 )