项目介绍: Phrase-BERT
项目概述
Phrase-BERT是一个基于BERT的短语嵌入模型,提升了短语级别的嵌入能力。该模型的开发旨在优化短语语义表示,特别适用于语料库探索任务。Phrase-BERT项目的详细技术成果已发表于EMNLP 2021的长文中,进一步提供了模型的训练和评估代码,以及相关数据集。
使用方法
Phrase-BERT基于句子转换器(sentence-transformers)库,因此在开始使用前需要安装:
pip install -U sentence-transformers
模型在以下配置下经过测试:pytorch=1.9.0
,transformers=4.8.1
,sentence-transformers=2.1.0
。安装完成后,可以按照以下方式调用模型:
from sentence_transformers import SentenceTransformer
phrase_list = ['play an active role', 'participate actively', 'active lifestyle']
model = SentenceTransformer('whaleloops/phrase-bert')
phrase_embs = model.encode(phrase_list)
[p1, p2, p3] = phrase_embs
每个短语的嵌入结果是一个numpy数组。可以计算短语之间的点积和余弦相似度:
import numpy as np
print(f'The dot product between phrase 1 and 2 is: {np.dot(p1, p2)}')
import torch
from torch import nn
cos_sim = nn.CosineSimilarity(dim=0)
print(f'The cosine similarity between phrase 1 and 2 is: {cos_sim(torch.tensor(p1), torch.tensor(p2))}')
评估方法
由于目前缺乏统一的短语嵌入评估标准,Phrase-BERT收集并设计了五种短语语义评估任务:
- Turney
- BiRD
- PPDB
- PPDB-filtered
- PAWS-short
具体的评估方式可以通过修改config/model_path.py
中的模型路径设置,并通过相应的评估脚本运行。例如,要评估Turney数据集,可以执行以下命令:
python eval_turney.py
自定义训练
对于想要在特定领域数据上训练自己Phrase-BERT的用户,可以使用phrase-bert/phrase_bert_finetune.py
进行微调。微调所需的数据集可以通过以下链接获取:
使用以下命令可以重新生成训练后的Phrase-BERT:
export INPUT_DATA_PATH=<directory-of-phrasebert-finetuning-data>
export TRAIN_DATA_FILE=<training-data-filename.csv>
export VALID_DATA_FILE=<validation-data-filename.csv>
export INPUT_MODEL_PATH=bert-base-nli-stsb-mean-tokens
export OUTPUT_MODEL_PATH=<directory-of-saved-model>
python -u phrase_bert_finetune.py \
--input_data_path $INPUT_DATA_PATH \
--train_data_file $TRAIN_DATA_FILE \
--valid_data_file $VALID_DATA_FILE \
--input_model_path $INPUT_MODEL_PATH \
--output_model_path $OUTPUT_MODEL_PATH
引用方式
如果您发现Phrase-BERT对于您的工作有帮助,请引用该论文:
@inproceedings{phrasebertwang2021,
author={Shufan Wang and Laure Thompson and Mohit Iyyer},
Booktitle = {Empirical Methods in Natural Language Processing},
Year = "2021",
Title={Phrase-BERT: Improved Phrase Embeddings from BERT with an Application to Corpus Exploration}
}