pipeline_tag: 句子相似度
tags:
- 句子转换器
- 特征提取
- 句子相似度
language: 英文
license: 其他
datasets:
- FremyCompany/BioLORD-数据集
widget:
- source_sentence: 巴尔通体病
sentences:
FremyCompany/BioLORD-STAMB2-v1
该模型采用BioLORD新型预训练策略训练而成,旨在为临床语句和生物医学概念生成富有意义的表征。
重要提示:
此模型发布于2022年。现已推出新版。
对于大多数应用场景,建议使用我们的最新一代模型BioLORD-2023。
当前最先进的方法通过最大化指代同一概念的名称在表征上的相似性,并借助对比学习防止表征坍缩。但由于生物医学名称往往不具备自解释性,这有时会导致生成非语义化的表征。
BioLORD通过将概念表征锚定于定义及源自生物医学本体论多关系知识图谱的简短描述,成功解决了这一问题。这种锚定机制使模型能生成更符合本体论层次结构的语义化概念表征。BioLORD在临床语句(MedSTS)和生物医学概念(MayoSRS)的文本相似度任务上均创造了新标杆。
本模型基于sentence-transformers/all-mpnet-base-v2,并在BioLORD-数据集上进行了微调。
通用用途
这是一个sentence-transformers模型:可将句子和段落映射至768维稠密向量空间,适用于聚类或语义搜索等任务。该模型专为生物医学领域微调,在保持通用文本嵌入能力的同时,能更高效处理电子健康记录(EHR)或临床笔记等医疗文档。句子与短语可嵌入同一潜在空间。
引用
本模型伴随论文《BioLORD:从定义中学习本体表征》发布,该论文已被EMNLP 2022 Findings收录。使用时请引用原文:
@inproceedings{remy-etal-2022-biolord,
title = "{B}io{LORD}: 基于定义的生物医学概念及其文本描述的本体表征学习",
author = "雷米, 弗朗索瓦 和
德穆因克, 克里斯 和
德梅斯特, 托马斯",
booktitle = "计算语言学协会发现:EMNLP 2022",
month = 12,
year = "2022",
address = "阿联酋阿布扎比",
publisher = "计算语言学协会",
url = "https://aclanthology.org/2022.findings-emnlp.104",
pages = "1454--1465",
abstract = "本文提出BioLORD——一种为临床语句和生物医学概念生成语义化表征的新型预训练策略。现有方法通过最大化同概念名称的表征相似性,结合对比学习防止坍缩。但由于生物医学名称的语义模糊性,常导致非语义化表征。BioLORD通过将概念表征锚定于定义及生物医学本体论衍生的简短描述,生成更贴合本体层次结构的语义化表征,在临床语句(MedSTS)和生物医学概念(MayoSRS)相似度任务上达到新高度。",
}
另推荐阅读我们在MWE 2023发表的论文:
使用指南(Sentence-Transformers)
安装sentence-transformers后即可便捷使用:
pip install -U sentence-transformers
使用示例:
from sentence_transformers import SentenceTransformer
sentences = ["猫抓伤", "猫抓病", "巴尔通体病"]
model = SentenceTransformer('FremyCompany/BioLORD-STAMB2-v1')
embeddings = model.encode(sentences)
print(embeddings)
使用指南(HuggingFace Transformers)
若不使用sentence-transformers,可按以下方式操作:先将输入通过transformer模型,再对上下文词嵌入执行正确的池化操作。
from transformers import AutoTokenizer, AutoModel
import torch
import torch.nn.functional as F
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0]
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
sentences = ["猫抓伤", "猫抓病", "巴尔通体病"]
tokenizer = AutoTokenizer.from_pretrained('FremyCompany/BioLORD-STAMB2-v1')
model = AutoModel.from_pretrained('FremyCompany/BioLORD-STAMB2-v1')
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
with torch.no_grad():
model_output = model(**encoded_input)
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)
print("语句嵌入:")
print(sentence_embeddings)
许可协议
模型贡献部分采用MIT许可。但鉴于训练数据源自UMLS,使用时需确保已获得UMLS许可。UMLS在多数国家可免费使用,但需创建账户并每年报告数据使用情况以维持许可有效性。