首页 > 其他分享 >单月30k+ Downloads!一款头部Embedding开源模型

单月30k+ Downloads!一款头部Embedding开源模型

时间:2024-10-23 14:45:53浏览次数:7  
标签:task embeddings Downloads 30k acge Embedding encode import 模型

在数字化转型的浪潮中,文本数据的处理和分析成为了各行各业关注的焦点。如何将人类阅读的文本转换为机器可理解的形式,并且能够准确地召回和提取这些转换结果,成为了提升我们工作效率和体验的关键。

无论是从社交媒体中提取情感倾向,还是对大量文档进行内容相似性分析,或是在复杂的对话系统中实现精准的语义理解,文本向量化(Embedding)技术都扮演着至关重要的角色——纯文本无法通过数学方式计算,而转换为向量后,即可进行最基础的数学运算。

今天,我们和大家分享一款令人兴奋的开源模型——acge_text_embedding。今年三月,acge模型在Massive Text Embedding Benchmark (MTEB) 中文榜单(C-MTEB)登顶第一,目前模型已在Hugging Face和Github平台开源。

项目简介

acge_text_embedding模型由TextIn团队开发,是一个通用的文本编码模型——可变长度的向量化模型。Embedding是一种用于机器学习和自然语言处理领域的表示技术,它将高维的离散数据(如单词、句子或者图像的特征等)转换为低维的连续向量,这些向量能够捕捉到数据的语义特征和关系,将单词、短语或整个文档的语义和上下文信息封装在一个密集的、低维的向量空间中。

acge模型使用了Matryoshka Representation Learning,建议使用的维度为1024或者1792。

在Hugging Face平台上,acge模型单月下载量为30,423。

性能优势

优秀的召回效果:采用对比学习技术,通过最小化正对之间的距离和最大化负对之间的距离来呈现文本语义表示,提升整体召回效果。

强大的模型泛化能力:基于多场景、高质量、数量庞大的数据集,打造强大泛化能力,加快模型收敛。

改善模型“偏科”与遗忘问题:技术开发过程中,采用多任务混合训练,多loss适配场景,适应各种下游任务,避免模型“偏科”;引入持续学习训练方式,改善引入新数据后模型灾难性遗忘问题。

更快的处理速度:运用MRL技术,训练可变维度的嵌入,提高处理速度,降低了存储需求。

使用方式

重现C-MTEB结果示例代码

import torch
import argparse
import functools
from C_MTEB.tasks import *
from typing import List, Dict
from sentence_transformers import SentenceTransformer
from mteb import MTEB, DRESModel


class RetrievalModel(DRESModel):
    def __init__(self, encoder, **kwargs):
        self.encoder = encoder

    def encode_queries(self, queries: List[str], **kwargs) -> np.ndarray:
        input_texts = ['{}'.format(q) for q in queries]
        return self._do_encode(input_texts)

    def encode_corpus(self, corpus: List[Dict[str, str]], **kwargs) -> np.ndarray:
        input_texts = ['{} {}'.format(doc.get('title', ''), doc['text']).strip() for doc in corpus]
        input_texts = ['{}'.format(t) for t in input_texts]
        return self._do_encode(input_texts)

    @torch.no_grad()
    def _do_encode(self, input_texts: List[str]) -> np.ndarray:
        return self.encoder.encode(
            sentences=input_texts,
            batch_size=512,
            normalize_embeddings=True,
            convert_to_numpy=True
        )


def get_args():
    parser = argparse.ArgumentParser()
    parser.add_argument('--model_name_or_path', default="acge_text_embedding", type=str)
    parser.add_argument('--task_type', default=None, type=str)
    parser.add_argument('--pooling_method', default='cls', type=str)
    parser.add_argument('--output_dir', default='zh_results',
                        type=str, help='output directory')
    parser.add_argument('--max_len', default=1024, type=int, help='max length')
    return parser.parse_args()


if __name__ == '__main__':
    args = get_args()
    encoder = SentenceTransformer(args.model_name_or_path).half()
    encoder.encode = functools.partial(encoder.encode, normalize_embeddings=True)
    encoder.max_seq_length = int(args.max_len)

    task_names = [t.description["name"] for t in MTEB(task_types=args.task_type,
                                                      task_langs=['zh', 'zh-CN']).tasks]
    TASKS_WITH_PROMPTS = ["T2Retrieval", "MMarcoRetrieval", "DuRetrieval", "CovidRetrieval", "CmedqaRetrieval",
                          "EcomRetrieval", "MedicalRetrieval", "VideoRetrieval"]
    for task in task_names:
        evaluation = MTEB(tasks=[task], task_langs=['zh', 'zh-CN'])
        if task in TASKS_WITH_PROMPTS:
            evaluation.run(RetrievalModel(encoder), output_folder=args.output_dir, overwrite_results=False)
        else:
            evaluation.run(encoder, output_folder=args.output_dir, overwrite_results=False)

在sentence-transformer库中的使用方法,并算出两个文本的相似度:

from sentence_transformers import SentenceTransformer

sentences = ["合合信息是一家伟大的公司", "介绍一下合合信息公司"]
model = SentenceTransformer('acge_text_embedding')
print(model.max_seq_length)
embeddings_1 = model.encode(sentences, normalize_embeddings=True)
embeddings_2 = model.encode(sentences, normalize_embeddings=True)
similarity = embeddings_1 @ embeddings_2.T
print(similarity)

在sentence-transformer库中的使用方法,选取不同维度的向量:

from sklearn.preprocessing import normalize
from sentence_transformers import SentenceTransformer

sentences = ["数据1", "数据2"]
model = SentenceTransformer('acge_text_embedding')
embeddings = model.encode(sentences, normalize_embeddings=False)
matryoshka_dim = 1024
embeddings = embeddings[..., :matryoshka_dim]  # Shrink the embedding dimensions
embeddings = normalize(embeddings, norm="l2", axis=1)
print(embeddings.shape)
# => (2, 1024)

现有应用

当前,acge模型已在多个应用场景下展现其优势:

  • (a) 文档分类:通过ocr技术精确识别图片、文档等场景中的文字,利用acge强大的文本编码能力,结合语义相似度匹配技术,构建通用分类模型;
  • (b) 长文档信息抽取:通过文档解析引擎与层级切片技术,利用acge生成向量索引,检索抽取内容块,提升长文档信息抽取模型精度;
  • (c) 知识问答:通过文档解析引擎与层级切片技术,利用acge生成向量索引,定位文件内容,实现精准问答。

 

更多模型细节,可以到项目地址查看:

链接:https://huggingface.co/aspire/acge_text_embedding

模型API调用:https://www.textin.com/market/detail/acge_text_embedding

更多福利、大模型应用技术学习材料,关注合合君即刻领

 

标签:task,embeddings,Downloads,30k,acge,Embedding,encode,import,模型
From: https://www.cnblogs.com/intsig/p/18496332

相关文章

  • 学习Transformer,应该从词嵌入WordEmbedding开始_trasnformer模型中embedding
    其中的2号位置,就是词嵌入层。Embedding层用于将离散的单词数据,转换为连续且固定长度的向量:这样使模型才能处理和学习这些数据的语义信息。例如,我们希望将“AreyouOK?”这句话,作为神经网络模型的输入。此时神经网络是没办法直接处理这句文本的。我们需要先将“Are......
  • RAG 中为什么使用 ReRank 而不是 Embedding 直接一步到位?
    Embedding检索时会获得问题与文本之间的相似分,以往的RAG服务直接基于相似分进行排序,但是事实上向量检索的相似分是不够准确的。原因是Embedding过程是将文档的所有可能含义压缩到一个向量中,方便使用向量进行检索。但是文本压缩为向量必然会损失信息,从而导致最终Embed......
  • 用孩子能懂的语言,解释大语言模型中的 Embedding 和 Attention
    为了让孩子能够理解大语言模型的embedding和attention技术,我们可以用一些生活中的简单例子来类比。1.Embedding:就像给每个单词做名片假设你在学校里认识很多小朋友,每个人都有不同的名字、喜欢的颜色和爱好。为了记住他们,老师给每个小朋友做了一张名片,上面写着这些信息。虽然每......
  • DRÆM – A discriminatively trained reconstruction embedding for surface anomaly
    异常检测目的:检测与正常外观显著偏离的局部图像区域。近期异常检测方法缺点:1.缺点1:重建异常区域失败近期的异常检测方法通过生成模型来重建图像,在正常区域里成功,但异常区域里重建失败缺点2:阻碍优化特征提取因为这些方法只在无异常的图像上训练,且通过人工的方式定位......
  • Transformer中的词嵌入Embedding与位置编码Positional Encoding
    参考学习:transformer详细介绍(1)__输入Embedding与位置编码_inputembedding-CSDN博客本文只是为了加强记忆而书写,具体想学习进入链接学习更清晰。Transformer模型主要是编码器与译码器,下面是模型的框架图: 编码器部分包含多头注意力机制,层归一化,前馈神经网络还有残差的思想保......
  • Long-Sequence Recommendation Models Need Decoupled Embeddings
    目录概DecoupledAttentionandRepresentationEmbeddings(DARE)modelFengN.,PangJ.,WuJ.,ChenB.,WangX.,LiQ.,HuX.,JiangJ.andLongM.Long-sequencerecommendationmodelsneeddecoupledembeddings.2024.概通过embedding选择短序列,最好从一个......
  • 如何在生成式AI里使用 Ray Data 进行大规模 RAG 应用的 Embedding Inference
    检索增强生成(RAG,即RetrievalAugmentedGeneration)是企业级生成式AI(GenAI)应用的热门案例之一。多数RAG教程演示了如何利用OpenAIAPI结合Embedding模型和大语言模型(LLM)来进行推理(Inference)。然而,在开发过程中,如果能使用开源工具,就可以免去访问自己数据的费用,同时也能加......
  • [Paper Reading] CAPE: Camera View Position Embedding for Multi-View 3D Object De
    目录名称TL;DRMethodKeyPositionEmbeddingConstructionQueryPositionEmbeddingConstructionKey/QueryPositionEmbedding两者结合关系参考下图temporalmodelingExperiment总结与发散相关链接资料查询名称link时间:23.03机构:Baidu/华科TL;DR提出CAPE(CAmeraviewPosi......
  • 月薪30k起,AI产品经理门槛揭秘:零基础转行真的可能吗?
    01什么是AI产品经理AI产品经理是对AI技术应用和功能落地负责,并为公司带来商业价值的一群人,主要集中在计算机视觉、语音、策略。cv:计算机视觉的AI产品,主要负责一些手势、肢体和其他部分检测的相关产品岗nlp:语音的AI产品,涉及nlp(自然语言处理)、asr(语音识别)、tts(语音合成)的......
  • Paper Reading: Deep forest auto-Encoder for resource-Centric attributes graph em
    目录研究动机文章贡献本文方法整体思想autoencoder预处理器深度森林编码生成器实验结果数据集和实验设置节点分类节点聚类用户推荐消融实验调参实验优点和创新点PaperReading是从个人角度进行的一些总结分享,受到个人关注点的侧重和实力所限,可能有理解不到位的地方。具体的细节......