gte-multilingual-base_a1371.../README.md

10 KiB
Raw Blame History

tasks widgets model-type domain frameworks backbone metrics license language tags
sentence-embedding
version task inputs examples
v1.1.0 sentence-embedding
type name
text source_sentence
type name
text-list sentences_to_compare
name inputs
示例1
data
功和功率的区别
data
功反映做功多少,功率反映做功快慢。
什么是有功功率和无功功率?无功功率有什么用什么是有功功率和无功功率?无功功率有什么用电力系统中的电源是由发电机产生的三相正弦交流电,在交>流电路中,由电源供给负载的电功率有两种;一种是有功功率,一种是无功功率.
优质解答在物理学中,用电功率表示消耗电能的快慢电功率用P表示,它的单位是瓦特Watt,简称瓦Wa符号是W.电流在单位时间内做的功叫做电功率 以灯泡为例,电功率越大,灯泡越亮.灯泡的亮暗由电功率(实际功率)决定,不由通过的电流、电压、电能决定!
name inputs
示例2
data
什么是桥
data
由全国科学技术名词审定委员会审定的科技名词“桥”的定义为:跨越河流、山谷、障碍物或其他交通线而修建的架空通道
桥是一种连接两岸的建筑
转向桥,是指承担转向任务的车桥。一般汽车的前桥是转向桥。四轮转向汽车的前后桥,都是转向桥。
桥梁艺术研究桥梁美学效果的艺术。起源于人类修建桥梁的实践。作为一种建筑,由于功能不同、使用材料有差别,桥梁表现为不同的结构和形式。基本的有拱桥、梁桥和吊桥。
name inputs
示例3
data
福鼎在哪个市
data
福鼎是福建省宁德市福鼎市。
福鼎位于福建省东北部,东南濒东海,水系发达,岛屿星罗棋布。除此之外,福鼎地貌丰富,著名的太姥山就在福鼎辖内,以峰险、石奇、洞幽、雾幻四绝著称于世。
福鼎市人民政府真诚的欢迎国内外朋友前往迷人的太姥山观光、旅游。
福建省福鼎市桐山街道,地处福鼎城区,地理环境优越,三面环山,东临大海,境内水陆交通方便,是福鼎政治、经济、文化、交通中心区。
name inputs
示例4
data
吃完海鲜可以喝牛奶吗?
data
不可以,早晨喝牛奶不科学
吃了海鲜后是不能再喝牛奶的因为牛奶中含得有维生素C如果海鲜喝牛奶一起服用会对人体造成一定的伤害
吃海鲜是不能同时喝牛奶吃水果这个至少间隔6小时以上才可以。
吃海鲜是不可以吃柠檬的因为其中的维生素C会和海鲜中的矿物质形成砷
bert
nlp
pytorch
transformer
mrr@10
recall@1000
ndcg@10
Apache License 2.0
multilingual
text representation
text retrieval
passage retrieval
Transformer
GTE
多语言
长文本
文本相关性
文本相似度

GTE多语言通用文本表示模型

文本表示是自然语言处理(NLP)领域的核心问题, 其在很多NLP、信息检索的下游任务中发挥着非常重要的作用。近几年, 随着深度学习的发展,尤其是预训练语言模型的出现极大的推动了文本表示技术的效果, 基于预训练语言模型的文本表示模型在学术研究数据、工业实际应用中都明显优于传统的基于统计模型或者浅层神经网络的文本表示模型。这里, 我们主要关注基于预训练语言模型的文本表示。

文本表示示例, 输入一个句子, 输入一个固定维度的连续向量:

  • 输入: 吃完海鲜可以喝牛奶吗?
  • 输出: [0.27162,-0.66159,0.33031,0.24121,0.46122,...]

文本的向量表示通常可以用于文本聚类、文本相似度计算、文本向量召回等下游任务中。

GTE多语言通用文本表示模型

gte-multilingual-base模型是GTE(通用文本向量General Text Embedding) 系列模型中的最新的多语言模型,该模型具有几个关键特性:

  • 高性能: 在多语言检索任务和多任务表示模型评估中相比同规模模型达到了最先进的SOTA结果。
  • 高推理效率采用Encoder-Only架构进行训练使模型体积更小(300M)。LLM架构的向量模型(例如gte-qwen2-7b-instruct)不同该模型在推理时对硬件的要求更低推理速度提高了10倍
  • 长上下文支持最多8192个token的文本长度
  • 多语言能力支持70多种语言
  • 弹性向量维度:支持弹性的向量表示,同时保持下游任务的有效性,显著降低存储成本并提高了检索效率。
  • 稀疏向量:除了连续向量表示外,还可以生成稀疏向量表示

模型训练更多细节可以参考论文: mGTE: Generalized Long-Context Text Representation and Reranking Models for Multilingual Text Retrieval

如何使用

import torch.nn.functional as F
from modelscope import AutoModel, AutoTokenizer

input_texts = [
    "what is the capital of China?",
    "how to implement quick sort in python?",
    "北京",
    "快排算法介绍"
]

model_name_or_path = 'iic/gte_sentence-embedding_multilingual-base'
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
model = AutoModel.from_pretrained(model_name_or_path, trust_remote_code=True)

# Tokenize the input texts
batch_dict = tokenizer(input_texts, max_length=8192, padding=True, truncation=True, return_tensors='pt')

outputs = model(**batch_dict)

dimension=768 # The output dimension of the output embedding, should be in [128, 768]
embeddings = outputs.last_hidden_state[:, 0][:dimension]

embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings[:1] @ embeddings[1:].T)
print(scores.tolist())

# [[0.3016996383666992, 0.7503870129585266, 0.3203084468841553]]
  • 使用sentence-transformers进行推理
# Requires sentences-transformers>=3.0.0

from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim
import numpy as np

input_texts = [
    "what is the capital of China?",
    "how to implement quick sort in python?",
    "北京",
    "快排算法介绍"
]

model_name_or_path="Alibaba-NLP/gte-multilingual-base"
model = SentenceTransformer(', trust_remote_code=True)
embeddings = model.encode(input_texts) # embeddings.shape (4, 768)

# normalized embeddings
norms = np.linalg.norm(embeddings, ord=2, axis=1, keepdims=True)
norms[norms == 0] = 1
embeddings = embeddings / norms

# sim scores
scores = (embeddings[:1] @ embeddings[1:].T)

print(scores.tolist())
# [[0.301699697971344, 0.7503870129585266, 0.32030850648880005]]
  • 使用自定义GTE-Embedding脚本获取连续向量表示和离散向量表示 gte_embedding.py文件在scripts/gte_embedding.py
from gte_embedding import GTEEmbeddidng

model_name_or_path = 'gte_sentence-embedding_multilingual-base'
model = GTEEmbeddidng(model_name_or_path)
query = "中国的首都在哪儿"

docs = [
    "what is the capital of China?",
    "how to implement quick sort in python?",
    "北京",
    "快排算法介绍"
]

embs = model.encode(docs, return_dense=True,return_sparse=True)
print('dense_embeddings vecs', embs['dense_embeddings'])
print('token_weights', embs['token_weights'])
pairs = [(query, doc) for doc in docs]
dense_scores = model.compute_scores(pairs, dense_weight=1.0, sparse_weight=0.0)
sparse_scores = model.compute_scores(pairs, dense_weight=0.0, sparse_weight=1.0)
hybird_scores = model.compute_scores(pairs, dense_weight=1.0, sparse_weight=0.3)

print('dense_scores', dense_scores)
print('sparse_scores', sparse_scores)
print('hybird_scores', hybird_scores)

#dense_scores [0.85302734375, 0.257568359375, 0.76953125, 0.325439453125]
#sparse_scores [0.0, 0.0, 4.600879669189453, 1.570279598236084]
#hybird_scores [0.85302734375, 0.257568359375, 2.1497951507568356, 0.7965233325958252]

模型效果评估

我们在多个下游任务上验证了GTE多语言表征模型的效果包括多语言检索、跨语言检索、长文本检索以及在MTEB多任务文本表征评测

  • 检索任务

Retrieval results on MIRACL and MLDR (multilingual), MKQA (crosslingual), BEIR and LoCo (English)

image

  • MTEB多语言

Results on MTEB English, Chinese, French, Polish

image

更多实验结果可以参考论文paper.

API云服务

除了开源的 GTE 系列模型GTE系列模型同时在阿里云上提供商用API服务:

  • 文本Embedding模型: 提供三种版本的文本嵌入模型text-embedding-v1/v2/v3其中v3是最新版本的模型服务
  • 文本ReRank模型: 提供gte-rerank模型服务, 模型持续迭代中

Note: API服务背后的模型与开源模型并不完全相同

引用

@article{zhang2024mgte,
  title={mGTE: Generalized Long-Context Text Representation and Reranking Models for Multilingual Text Retrieval},
  author={Zhang, Xin and Zhang, Yanzhao and Long, Dingkun and Xie, Wen and Dai, Ziqi and Tang, Jialong and Lin, Huan and Yang, Baosong and Xie, Pengjun and Huang, Fei and others},
  journal={arXiv preprint arXiv:2407.19669},
  year={2024}
}
@article{li2023towards,
  title={Towards general text embeddings with multi-stage contrastive learning},
  author={Li, Zehan and Zhang, Xin and Zhang, Yanzhao and Long, Dingkun and Xie, Pengjun and Zhang, Meishan},
  journal={arXiv preprint arXiv:2308.03281},
  year={2023}
}