“ 介绍m3e开源中文嵌入模型,在中文的表现上,超过ChatGPT。”
01
—
最近在研究和部署使用 LangChain + LLM(ChatGPT/ChatGLM) 构建企业专有知识库时,接触到两个 embedding (嵌入)模型:text2vec,m3e-base。
感兴趣模型和项目的部署和教程可以看这几篇文章:
教程|使用免费GPU 资源搭建专属知识库 ChatGLM2-6B + LangChain
工程落地实践|基于 ChatGLM2-6B + LangChain 搭建专属知识库初步完成
工程落地实践|国产大模型 ChatGLM2-6B 阿里云上部署成功
例如配置文件中这段:
embedding_model_dict = {
"text2vec-base": "shibing624/text2vec-base-chinese",
"text2vec": "/home/featurize/data/text2vec-large-chinese", # 修改处
"m3e-small": "moka-ai/m3e-small",
"m3e-base": "moka-ai/m3e-base",
}
为什么要用到 embedding?
计算机只能处理数字,但我们希望它能够理解文字、图片或其他形式的数据。这就是embedding的作用。它将这些复杂的数据转换成数字表示,就像给它们贴上了标签一样。这些数字表示不仅保留了原始数据的重要信息,还能在计算机世界中更容易被处理和比较。
嵌入有点像字典,可以把不同的词、图片或对象转换成独特的数字编码。这样,我们就能用这些数字来进行计算、分类或做出预测。通过embedding,计算机可以变得更智能,因为它学会了如何用数字来理解和处理各种各样的数据。
例如,我们可以用一个三百维的数字向量(x1,x2,x3…x300)来表示一个词,这里每一个数字就是这个词在一个意义上的坐标。
举例来说,我们表述“猫”这个词,可以是(1,0.8,-2,0,1.5…)。
“狗”可以表示为(0.5,1.1,-1.8,0.4,2.2…)。
然后,我们可以通过这些数字的距离计算“猫”和“狗”的语义关系有多近。因为它们在某些数字上会更接近。
而与“桌子”的向量距离就会更远一些。
通过这种方法,embedding让词汇有了数学上的表示,计算机可以分析词汇间的关系了。
为什么把这个概念叫做 embedding (嵌入)呢?
嵌入的概念来源于拓扑学中,嵌入是在同胚基础上定义的,f把X映射到Z,若f是一个同胚且Z是Y的子空间。f称为一个X到Y的嵌入。
正如字面含义,嵌入强调的是X与Y的一部分结构相同.
若用神经网络把输入映射到更低维度的空间,实质强调的就是映射而已。
拓扑空间是指一个集合和在这个集合上定义的一组特定的开集构成的结构。而同胚关系是指两个拓扑空间之间存在一个双射(即一一对应),并且这个双射以及它的逆映射都是连续的。
换句话说,如果存在两个拓扑空间A和B,它们之间存在一个双射f:A → B,并且这个映射f以及它的逆映射f^{-1}:B → A都是连续的,那么我们就称A和B是同胚的。这种同胚关系意味着A和B在拓扑学的角度上是完全相同的,它们具有相同的拓扑性质和结构。
02
—
标题2
M3E Models :Moka(北京希瑞亚斯科技)开源的系列文本嵌入模型。
模型地址:
https://huggingface.co/moka-ai/m3e-base
M3E Models 是使用千万级 (2200w+) 的中文句对数据集进行训练的 Embedding 模型,在文本分类和文本检索的任务上都超越了 openai-ada-002 模型(ChatGPT 官方的模型)。
M3E的数据集,模型,训练脚本,评测框架都开源。
M3E 是 Moka Massive Mixed Embedding 的缩写
模型对比
说明:
Tips:
特性
文本分类
检索排序
T2Ranking 1W
T2Ranking
阅读推荐:
为什么你在用 ChatGPT 的提示词 Prompt 似乎效果不如人意?
Claude 2 解读 ChatGPT 4 的技术秘密:细节:参数数量、架构、基础设施、训练数据集、成本