Este pacote envolve transformadores de sentença (também conhecidos como BERT de sentença) diretamente no spaCy. Você pode substituir os vetores fornecidos em qualquer modelo spaCy por vetores que foram ajustados especificamente para similaridade semântica.
Os modelos abaixo são sugeridos para análise de similaridade de sentenças, conforme indica o benchmark STS. Tenha em mente que sentence-transformers
são configurados com um comprimento máximo de sequência de 128. Portanto, para textos mais longos pode ser mais adequado trabalhar com outros modelos (por exemplo, Universal Sentence Encoder).
Compatibilidade:
Para instalar este pacote, você pode executar um dos seguintes:
pip install spacy-sentence-bert
pip install git+https://github.com/MartinoMensio/spacy-sentence-bert.git
Você pode instalar pacotes spaCy independentes do GitHub com pip. Se você instalar pacotes independentes, poderá carregar um modelo de linguagem diretamente usando a API spacy.load
, sem a necessidade de adicionar um estágio de pipeline. Esta tabela pega os modelos listados na documentação do Sentence Transformers e mostra algumas estatísticas junto com as instruções para instalar os modelos independentes. Se não quiser instalar os modelos independentes, você ainda poderá usá-los adicionando um estágio de pipeline (veja abaixo).
frase-nome BERT | nome do modelo espaçoso | dimensões | linguagem | Referência STS | instalação autônoma |
---|---|---|---|---|---|
paraphrase-distilroberta-base-v1 | en_paraphrase_distilroberta_base_v1 | 768 | pt | 81,81 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_paraphrase_distilroberta_base_v1-0.1.2.tar.gz#en_paraphrase_distilroberta_base_v1-0.1.2 |
paraphrase-xlm-r-multilingual-v1 | xx_paraphrase_xlm_r_multilingual_v1 | 768 | Mais de 50 | 83,50 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/xx_paraphrase_xlm_r_multilingual_v1-0.1.2.tar.gz#xx_paraphrase_xlm_r_multilingual_v1-0.1.2 |
stsb-roberta-large | en_stsb_roberta_large | 1024 | pt | 86,39 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_stsb_roberta_large-0.1.2.tar.gz#en_stsb_roberta_large-0.1.2 |
stsb-roberta-base | en_stsb_roberta_base | 768 | pt | 85,44 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_stsb_roberta_base-0.1.2.tar.gz#en_stsb_roberta_base-0.1.2 |
stsb-bert-large | en_stsb_bert_large | 1024 | pt | 85,29 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_stsb_bert_large-0.1.2.tar.gz#en_stsb_bert_large-0.1.2 |
stsb-distilbert-base | en_stsb_distilbert_base | 768 | pt | 85,16 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_stsb_distilbert_base-0.1.2.tar.gz#en_stsb_distilbert_base-0.1.2 |
stsb-bert-base | en_stsb_bert_base | 768 | pt | 85,14 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_stsb_bert_base-0.1.2.tar.gz#en_stsb_bert_base-0.1.2 |
nli-bert-large | en_nli_bert_large | 1024 | pt | 79,19 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_nli_bert_large-0.1.2.tar.gz#en_nli_bert_large-0.1.2 |
nli-distilbert-base | en_nli_distilbert_base | 768 | pt | 78,69 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_nli_distilbert_base-0.1.2.tar.gz#en_nli_distilbert_base-0.1.2 |
nli-roberta-large | en_nli_roberta_large | 1024 | pt | 78,69 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_nli_roberta_large-0.1.2.tar.gz#en_nli_roberta_large-0.1.2 |
nli-bert-large-max-pooling | en_nli_bert_large_max_pooling | 1024 | pt | 78,41 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_nli_bert_large_max_pooling-0.1.2.tar.gz#en_nli_bert_large_max_pooling-0.1.2 |
nli-bert-large-cls-pooling | en_nli_bert_large_cls_pooling | 1024 | pt | 78,29 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_nli_bert_large_cls_pooling-0.1.2.tar.gz#en_nli_bert_large_cls_pooling-0.1.2 |
nli-distilbert-base-max-pooling | en_nli_distilbert_base_max_pooling | 768 | pt | 77,61 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_nli_distilbert_base_max_pooling-0.1.2.tar.gz#en_nli_distilbert_base_max_pooling-0.1.2 |
nli-roberta-base | en_nli_roberta_base | 768 | pt | 77,49 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_nli_roberta_base-0.1.2.tar.gz#en_nli_roberta_base-0.1.2 |
nli-bert-base-max-pooling | en_nli_bert_base_max_pooling | 768 | pt | 77,21 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_nli_bert_base_max_pooling-0.1.2.tar.gz#en_nli_bert_base_max_pooling-0.1.2 |
nli-bert-base | en_nli_bert_base | 768 | pt | 77,12 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_nli_bert_base-0.1.2.tar.gz#en_nli_bert_base-0.1.2 |
nli-bert-base-cls-pooling | en_nli_bert_base_cls_pooling | 768 | pt | 76h30 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_nli_bert_base_cls_pooling-0.1.2.tar.gz#en_nli_bert_base_cls_pooling-0.1.2 |
average_word_embeddings_glove.6B.300d | en_average_word_embeddings_glove.6B.300d | 768 | pt | 61,77 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_average_word_embeddings_glove.6B.300d-0.1.2.tar.gz#en_average_word_embeddings_glove.6B.300d-0.1.2 |
average_word_embeddings_komninos | en_average_word_embeddings_komninos | 768 | pt | 61,56 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_average_word_embeddings_komninos-0.1.2.tar.gz#en_average_word_embeddings_komninos-0.1.2 |
average_word_embeddings_levy_dependency | en_average_word_embeddings_levy_dependency | 768 | pt | 59,22 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_average_word_embeddings_levy_dependency-0.1.2.tar.gz#en_average_word_embeddings_levy_dependency-0.1.2 |
average_word_embeddings_glove.840B.300d | en_average_word_embeddings_glove.840B.300d | 768 | pt | 52,54 | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_average_word_embeddings_glove.840B.300d-0.1.2.tar.gz#en_average_word_embeddings_glove.840B.300d-0.1.2 |
quora-distilbert-base | en_quora_distilbert_base | 768 | pt | N / D | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_quora_distilbert_base-0.1.2.tar.gz#en_quora_distilbert_base-0.1.2 |
quora-distilbert-multilingual | xx_quora_distilbert_multilingual | 768 | Mais de 50 | N / D | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/xx_quora_distilbert_multilingual-0.1.2.tar.gz#xx_quora_distilbert_multilingual-0.1.2 |
msmarco-distilroberta-base-v2 | en_msmarco_distilroberta_base_v2 | 768 | pt | N / D | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_msmarco_distilroberta_base_v2-0.1.2.tar.gz#en_msmarco_distilroberta_base_v2-0.1.2 |
msmarco-roberta-base-v2 | en_msmarco_roberta_base_v2 | 768 | pt | N / D | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_msmarco_roberta_base_v2-0.1.2.tar.gz#en_msmarco_roberta_base_v2-0.1.2 |
msmarco-distilbert-base-v2 | en_msmarco_distilbert_base_v2 | 768 | pt | N / D | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_msmarco_distilbert_base_v2-0.1.2.tar.gz#en_msmarco_distilbert_base_v2-0.1.2 |
nq-distilbert-base-v1 | en_nq_distilbert_base_v1 | 768 | pt | N / D | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_nq_distilbert_base_v1-0.1.2.tar.gz#en_nq_distilbert_base_v1-0.1.2 |
distiluse-base-multilingual-cased-v2 | xx_distiluse_base_multilingual_cased_v2 | 512 | Mais de 50 | N / D | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/xx_distiluse_base_multilingual_cased_v2-0.1.2.tar.gz#xx_distiluse_base_multilingual_cased_v2-0.1.2 |
stsb-xlm-r-multilingual | xx_stsb_xlm_r_multilingual | 768 | Mais de 50 | N / D | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/xx_stsb_xlm_r_multilingual-0.1.2.tar.gz#xx_stsb_xlm_r_multilingual-0.1.2 |
T-Systems-onsite/cross-en-de-roberta-sentence-transformer | xx_cross_en_de_roberta_sentence_transformer | 768 | pt,de | N / D | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/xx_cross_en_de_roberta_sentence_transformer-0.1.2.tar.gz#xx_cross_en_de_roberta_sentence_transformer-0.1.2 |
LaBSE | xx_LaBSE | 768 | 109 | N / D | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/xx_LaBSE-0.1.2.tar.gz#xx_LaBSE-0.1.2 |
allenai-specter | en_allenai_specter | 768 | pt | N / D | pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_allenai_specter-0.1.2.tar.gz#en_allenai_specter-0.1.2 |
Se o seu modelo não estiver nesta lista (por exemplo, xlm-r-base-en-ko-nli-ststb
), você ainda poderá usá-lo com esta biblioteca, mas não como uma linguagem independente. Você precisará adicionar um estágio de pipeline configurado corretamente (veja abaixo a API nlp.add_pipe
).
Existem diferentes maneiras de carregar os modelos de sentence-bert
.
spacy.load
: você precisa ter instalado um dos modelos da tabela acimaspacy_sentence_bert.load_model
: você pode carregar um dos modelos da tabela acima sem ter instalado os pacotes independentesnlp.add_pipe
: você pode carregar qualquer um dos modelos de sentence-bert
em cima do seu objeto nlp
spacy.load
Modelo autônomo instalado do GitHub (por exemplo, da tabela acima, pip install https://github.com/MartinoMensio/spacy-sentence-bert/releases/download/v0.1.2/en_stsb_roberta_large-0.1.2.tar.gz#en_stsb_roberta_large-0.1.2
), você pode carregar diretamente o modelo com a API spaCy:
import spacy
nlp = spacy . load ( 'en_stsb_roberta_large' )
spacy_sentence_bert.load_model
Você pode obter o mesmo resultado sem precisar instalar o modelo independente, usando este método:
import spacy_sentence_bert
nlp = spacy_sentence_bert . load_model ( 'en_stsb_roberta_large' )
nlp.add_pipe
Se quiser usar um dos embeddings de frases sobre um objeto Language existente, você pode usar o método nlp.add_pipe
. Isso também funciona se você quiser usar um modelo de linguagem que não esteja listado na tabela acima. Apenas certifique-se de que os transformadores de frases o suportem.
import spacy
nlp = spacy . blank ( 'en' )
nlp . add_pipe ( 'sentence_bert' , config = { 'model_name' : 'allenai-specter' })
nlp . pipe_names
Os modelos, quando usados pela primeira vez, baixam o sentença-BERT para a pasta definida com TORCH_HOME
nas variáveis de ambiente (padrão ~/.cache/torch
).
Depois de carregar o modelo, use-o por meio da propriedade vector
e do método similarity
de spaCy:
# get two documents
doc_1 = nlp ( 'Hi there, how are you?' )
doc_2 = nlp ( 'Hello there, how are you doing today?' )
# get the vector of the Doc, Span or Token
print ( doc_1 . vector . shape )
print ( doc_1 [ 3 ]. vector . shape )
print ( doc_1 [ 2 : 4 ]. vector . shape )
# or use the similarity method that is based on the vectors, on Doc, Span or Token
print ( doc_1 . similarity ( doc_2 [ 0 : 7 ]))
Para construir e fazer upload
VERSION=0.1.2
# build the standalone models (17)
./build_models.sh
# build the archive at dist/spacy_sentence_bert-${VERSION}.tar.gz
python setup.py sdist
# upload to pypi
twine upload dist/spacy_sentence_bert- ${VERSION} .tar.gz