项目概述
bge-large-en-v1.5项目是由BAAI推出的一个基于大型语言模型的项目,针对英文文本进行特征提取和信息检索优化。这个模型通过ONNX格式的权重,与Transformers.js库兼容,使得用户可以在浏览器环境中高效地利用模型的能力。
使用方法
安装Transformers.js
首先,如果还未安装,用户需要通过npm安装Transformers.js这个JavaScript库。操作非常简单,只需执行以下命令:
npm i @xenova/transformers
计算文本嵌入向量
安装完库后,用户可以使用这个模型来计算文本的嵌入向量,即将文本转换成具有特定维度的数值向量。这些向量可以用于各种自然语言处理任务,例如文本相似性或分类。
以下是一个简单的例子,展示了如何使用模型来计算句子嵌入:
import { pipeline } from '@xenova/transformers';
// 创建一个特征提取管道
const extractor = await pipeline('feature-extraction', 'Xenova/bge-large-en-v1.5');
// 准备文本
const texts = [ 'Hello world.', 'Example sentence.'];
const embeddings = await extractor(texts, { pooling: 'mean', normalize: true });
console.log(embeddings.tolist());
上述代码执行后,用户可获得相应文本的向量表示,这些向量可以进一步处理或用于其他任务。
信息检索
模型还可以用于信息检索。例如,用户可以计算一系列文档的嵌入,并根据一个查询来检索与其最相似的文档。以下是使用cosine相似度来实现简单检索的示例:
import { pipeline, cos_sim } from '@xenova/transformers';
// 创建一个特征提取管道
const extractor = await pipeline('feature-extraction', 'Xenova/bge-large-en-v1.5');
// 待嵌入的文档列表
const texts = [
'Hello world.',
'The giant panda (Ailuropoda melanoleuca), sometimes called a panda bear or simply panda, is a bear species endemic to China.',
'I love pandas so much!',
];
// 计算句子嵌入
const embeddings = await extractor(texts, { pooling: 'mean', normalize: true });
// 构建检索查询并计算嵌入
const query_prefix = 'Represent this sentence for searching relevant passages: ';
const query = query_prefix + 'What is a panda?';
const query_embeddings = await extractor(query, { pooling: 'mean', normalize: true });
// 基于余弦相似度对结果排序
const scores = embeddings.tolist().map(
(embedding, i) => ({
id: i,
score: cos_sim(query_embeddings.data, embedding),
text: texts[i],
})
).sort((a, b) => b.score - a.score);
console.log(scores);
通过余弦相似度计算,用户可以获得与给定查询最相关的文本。
注意事项
目前项目方案选择在ONNX格式下进行模型实现是一个临时的解决策略,未来会有更多关于WebML的发展和应用。如果用户有意将其他模型也引入网页环境,推荐使用🤗 Optimum工具将模型转换为ONNX格式,并按照该项目的结构进行组织。
通过bge-large-en-v1.5项目,BAAI为用户提供了一种强大且高效的工具,帮助更好地利用文本特征进行多种自然语言处理任务。无论是嵌入计算还是信息检索,该项目都为开发者提供了广泛的应用前景。