基础模型: 99eren99/ModernBERT-base-Turkish-uncased-mlm
语言:
- 土耳其语
库名称: PyLate
管道标签: 句子相似度
标签:
- ColBERT
- PyLate
- 句子转换器
- 句子相似度
- 训练生成
- 重排序器
- BERT
许可证: apache-2.0
土耳其语长上下文ColBERT重排序器
这是一个基于PyLate从99eren99/ModernBERT-base-Turkish-uncased-mlm微调的模型。它将句子和段落映射为128维密集向量序列,并可使用MaxSim操作符进行语义文本相似度计算。
模型来源
评估结果
长上下文延迟交互检索模型的nDCG和召回率分数,测试代码及详细指标见"./assets"

使用方式
首先安装PyLate库:
pip install -U einops flash_attn
pip install -U pylate
然后对文本进行归一化处理 -> lambda x: x.replace("İ", "i").replace("I", "ı").lower()
检索
PyLate提供了简洁的接口来使用ColBERT模型索引和检索文档。该索引利用Voyager HNSW索引高效处理文档嵌入并实现快速检索。
文档索引
首先加载ColBERT模型并初始化Voyager索引,然后编码并索引您的文档:
from pylate import indexes, models, retrieve
document_length = 180
model = models.ColBERT(
model_name_or_path="99eren99/ColBERT-ModernBERT-base-Turkish-uncased", document_length=document_length
)
try:
model.tokenizer.model_input_names.remove("token_type_ids")
except:
pass
index = indexes.Voyager(
index_folder="pylate-index",
index_name="index",
override=True,
)
documents_ids = ["1", "2", "3"]
documents = ["文档1文本", "文档2文本", "文档3文本"]
documents_embeddings = model.encode(
documents,
batch_size=32,
is_query=False,
show_progress_bar=True,
)
index.add_documents(
documents_ids=documents_ids,
documents_embeddings=documents_embeddings,
)
注意您无需每次都重建索引和编码文档。一旦创建索引并添加文档后,可以通过加载来重复使用索引:
index = indexes.Voyager(
index_folder="pylate-index",
index_name="index",
)
检索查询的前k个文档
文档索引完成后,您可以检索给定查询集的前k个最相关文档。
为此,使用您要搜索的索引初始化ColBERT检索器,编码查询然后检索前k个文档以获取匹配ID和相关性分数:
retriever = retrieve.ColBERT(index=index)
queries_embeddings = model.encode(
["查询文档3", "查询文档1"],
batch_size=32,
is_query=True,
show_progress_bar=True,
)
scores = retriever.retrieve(
queries_embeddings=queries_embeddings,
k=10,
)
重排序
如果您只想使用ColBERT模型在您的一阶段检索管道之上执行重排序而不构建索引,可以简单地使用rank函数并传递查询和文档进行重排序:
from pylate import rank, models
queries = [
"查询A",
"查询B",
]
documents = [
["文档A", "文档B"],
["文档1", "文档C", "文档B"],
]
documents_ids = [
[1, 2],
[1, 3, 2],
]
model = models.ColBERT(
model_name_or_path=pylate_model_id,
)
queries_embeddings = model.encode(
queries,
is_query=True,
)
documents_embeddings = model.encode(
documents,
is_query=False,
)
reranked_documents = rank.rerank(
documents_ids=documents_ids,
queries_embeddings=queries_embeddings,
documents_embeddings=documents_embeddings,
)