whaleloops/phrase-bert

whaleloops
Similitud de oraciones

Este es el repositorio oficial para el artículo largo de EMNLP 2021 Phrase-BERT: Improved Phrase Embeddings from BERT with an Application to Corpus Exploration. Proveemos código para entrenar y evaluar Phrase-BERT además de los conjuntos de datos utilizados en el artículo.

Como usar

Uso (Sentence-Transformers)

Usar este modelo se vuelve fácil cuando tienes instalados los sentence-transformers:

pip install -U sentence-transformers

Nuestro modelo ha sido probado en pytorch=1.9.0, transformers=4.8.1, sentence-transformers = 2.1.0 Entonces puedes usar el modelo de la siguiente manera:

from sentence_transformers import SentenceTransformer
phrase_list = ['jugar un papel activo', 'participar activamente', 'estilo de vida activo']

model = SentenceTransformer('whaleloops/phrase-bert')
phrase_embs = model.encode(phrase_list)
[p1, p2, p3] = phrase_embs

Como en sentence-BERT, la salida predeterminada es una lista de matrices numpy:

for phrase, embedding in zip(phrase_list, phrase_embs):
    print("Phrase:", phrase)
    print("Embedding:", embedding)
    print("")

Ejemplo de cálculo del producto punto de las incrustaciones de frases:

import numpy as np
print(f'El producto punto entre la frase 1 y 2 es: {np.dot(p1, p2)}')
print(f'El producto punto entre la frase 1 y 3 es: {np.dot(p1, p3)}')
print(f'El producto punto entre la frase 2 y 3 es: {np.dot(p2, p3)}')

Ejemplo de cálculo de la similitud coseno de las incrustaciones de frases:

import torch
from torch import nn
cos_sim = nn.CosineSimilarity(dim=0)
print(f'La similitud coseno entre la frase 1 y 2 es: {cos_sim(torch.tensor(p1), torch.tensor(p2))}')
print(f'La similitud coseno entre la frase 1 y 3 es: {cos_sim(torch.tensor(p1), torch.tensor(p3))}')
print(f'La similitud coseno entre la frase 2 y 3 es: {cos_sim(torch.tensor(p2), torch.tensor(p3))}')

El resultado debería parecerse a:

El producto punto entre la frase 1 y 2 es: 218.43600463867188
El producto punto entre la frase 1 y 3 es: 165.48483276367188
El producto punto entre la frase 2 y 3 es: 160.51708984375
La similitud coseno entre la frase 1 y 2 es: 0.8142536282539368
La similitud coseno entre la frase 1 y 3 es: 0.6130303144454956
La similitud coseno entre la frase 2 y 3 es: 0.584893524646759

Evaluación

Dada la falta de un benchmark unificado de evaluación de incrustaciones de frases, recopilamos las siguientes cinco tareas de evaluación de semántica de frases, que se describen más a fondo en nuestro artículo:

  • Turney [Descargar]
  • BiRD [Descargar]
  • PPDB [Descargar]
  • PPDB-filtrado [Descargar]
  • PAWS-corto [Descargar Train-split] [Descargar Dev-split] [Descargar Test-split]

Cambia config/model_path.py con la ruta del modelo de acuerdo a tus directorios y

Para la evaluación en Turney, ejecuta python eval_turney.py

Para la evaluación en BiRD, ejecuta python eval_bird.py

Para la evaluación en PPDB / PPDB-filtrado / PAWS-corto, ejecuta eval_ppdb_paws.py con:

nohup python -u eval_ppdb_paws.py \
    --full_run_mode \
    --task \
    --data_dir \
    --result_dir \
    >./output.txt 2>&1 &

Funcionalidades

Similitud de frases
Transformadores de frases
PyTorch
Transformadores
Extracción de características
Inferencia de incrustaciones de texto
Puntos finales de inferencia

Casos de uso

Exploración de corpus
Búsqueda y comparación de frases