AI系统性学习04—文本嵌入模型

2024-03-18 17:28

本文主要是介绍AI系统性学习04—文本嵌入模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文本嵌入(text embedding)是自然语言中的一项重要技术,是将文本转换了固定长度的低密度集向量的表示。

文章目录

  • 1、文本嵌入介绍
    • 1.1 介绍
    • 1.2 文本嵌入与文本向量
    • 1.3 应用场景
    • 1.4 常用的文本嵌入模型
  • 2、M3E文本嵌入模型
    • 2.1 模型介绍
    • 2.2 模型对比
    • 2.3 模型使用
  • 3、OpenAI Embeddings文本嵌入模型
    • 3.1 定义
    • 3.2 使用embeddings模型
  • 4、Text2Vec文本嵌入模型
    • 4.1 定义
    • 4.2 安装
    • 4.3 计算文本向量例子
  • 5、BGE模型FlagEmbedding
    • 5.1 FlagEmbedding
    • 5.2 例子

1、文本嵌入介绍

1.1 介绍

文本嵌入(text embedding)是自然语言中的一个中重要概念,它的目标是将文本的词表示成固定长度的稠密向量,也称为词向量(word vector)。
例如:Girl和Boy,Queen和King,Sport和Game这三对词都有相近的意思,所以他们文本向量的几何距离都比较接近。操作中,文本嵌入可以通过神经网络模型进行无监督学习得到,比如word2vec中的CBOW、SKIP-GRAM模型、GloVe等。这些模型通过大规模文本的统计信息来学习每个词的向量表示

1.2 文本嵌入与文本向量

通过文本嵌入模型(embedding)可以计算出文本的特征向量,在文本嵌入中,每个词或短语被赋予一个向量。这些向量可以组成文本的向量表示,从而表示整个文本的含义,也叫文本特征向量,因为这些向量可以表示文本的语义信息等关键特征信息。会得到一个长度为768的浮点数数组。

1.3 应用场景

文本嵌入可以用于各种NLP任务,如下所示:

  • 文本相似度搜索
  • 文本分类任务
  • 情感分析
  • 垃圾邮件过滤
  • 文本推荐
  • 自动翻译
  • 实体识别
  • 问答系统

1.4 常用的文本嵌入模型

以下是一些流行的文本嵌入模型:

  • Word2Vec:一种基于神经网络的模型,用于生成单词的向量表示。
  • Glove:一种基于共现矩阵的模型,用于生成单词的向量表示。
  • FastText:Facebook开发的一种基于字符级别的文本嵌入模型,可以为单词和短语生成向量表示。
  • BERT:一种基于Transfomer的语言模型,可以生成单词、短语甚至是整个句子的向量表示。
  • M3E:Moka Massive Mixed Embedding的缩写。
  • OpenAI Embedding:这是OpenAI官方发布的Embeddings的API接口,目前主要有text-embedding-ada-002模型。

2、M3E文本嵌入模型

2.1 模型介绍

M3E是Moka Massive Mixed Embeding的缩写,该模型是文本嵌入模型,可以将自然语言转换低维度的向量用于计算文本向量。

  • Moka:模型有MokaAI训练、开源和评测,训练脚本使用uniem,评测BenchMark使用MTEB-zh。
  • Massive:此模型通过千万级(2200w+)的中文句对数据集进行训练。
  • Mixed:此模型支持中英双语的同质文本相似度计算,异质文本检索功能,未来还会支持代码检索功能。

2.2 模型对比

M3E目前提供两个版本:M3E-small、M3E-base

Embedding model参数数量维度中文英文s2ss2ps2c开源兼容性s2c Accs2p ndcg
m3e-small24M5120.58340.7262
m3e-base110M7680.61570.8004
Text2Vec110M7680.57550.6346
openai-ada-002未知15360.59560.7786

说明:⭐️⭐️⭐️

  • s2s:即sentence to sentence,代表了同质文本之间的嵌入能力,使用任务:文本相似度,重复问题检测,文本分类等;
  • s2p:即sentence to passage,代表了异质文本之间的嵌入能力,使用场景:文本检索,GPT记忆模型块等;
  • s2c:即sentence to code,代表了自然语言和程序语言之间嵌入能力,使用场景,代码检索;
  • 兼容性,代表了模型在开源社区中各种项目被支持的程度,由于 m3e 和 text2vec 都可以直接通过 sentence-transformers 直接使用,所以和 openai 在社区的支持度上相当

Tips:⭐️⭐️⭐️

  • 使用场景如果主要是中文,少量英文的情况,不想花钱,不想泄露私有数据,建议使用m3e系列模型;
  • 多语言使用场景且不建议数据隐私的话,就使用OpenAI text-embedding-ada-002
  • 代码检索场景,推荐使用上训练的文本嵌入模型,没有办法完成文本检索任务。

2.3 模型使用

  • 先安装sentence-transformer
pip install -U sentence-transformers
  • 调用代码
from sentence_transformers import SentenceTransformermodel = SentenceTransformer('moka-ai/m3e-base')# 准备一些测试文本,用于生成文本向量
sentences = ['* Moka 此文本嵌入模型由 MokaAI 训练并开源,训练脚本使用 uniem','* Massive 此文本嵌入模型通过**千万级**的中文句对数据集进行训练','* 欢迎访问 www.tizi365.com'
]# 调用模型生成文本向量
embeddings = model.encode(sentences)# 打印向量计算结果
for sentence, embedding in zip(sentences, embeddings):print("文本内容:", sentence)print("文本向量:", embedding)print("")

3、OpenAI Embeddings文本嵌入模型

3.1 定义

OpenAI Embeddings提供嵌入的功能和其他的嵌入功能类似,但是目前在文本向量计算这块,OpenAI的embedding模型效果比较好,缺点就是需要花钱,不过价格还是便宜。

3.2 使用embeddings模型

from openai import OpenAIclient = OpenAI(api_key="REPLACE BY YOUR API KEY")
r = client.embeddings.create(model="text-embedding-ada-002",input="人工智能真好玩儿!")print(r.data)

4、Text2Vec文本嵌入模型

4.1 定义

Text2Vec:text to vector,get sentence embeddings,文本向量化,把文本(包括词、句子、段落)计算为特征向量。
text2vec实现了Word2Vec、RankBM25、BERT、Sentence-BERT、CoSENT等多种文本表征、文本相似度计算模型,并在文本语义匹配(相似度计算)任务上比较了各模型效果。

4.2 安装

pip install torch
pip install -U text2vec

4.3 计算文本向量例子

  • 简单使用
from text2vec import SentenceModelm = SentenceModel()
r = m.encode("人工只能真好玩儿!")
print(r)

输出:

[-2.04385534e-01 -2.95479000e-01  7.88224220e-01  9.25866365e-014.56570178e-01 -6.61403418e-01  5.00589669e-01 -8.20730180e-02........-9.63875711e-01  5.55880088e-03 -6.99731112e-01 -1.78207383e-01]
  • 更复杂的情况
from text2vec import SentenceModeldef compute_emb(model):# Embed a list of sentencessentences = ['卡','银行卡','如何更换花呗绑定银行卡','花呗更改绑定银行卡','This framework generates embeddings for each input sentence','Sentences are passed as a list of string.','The quick brown fox jumps over the lazy dog.']sentence_embeddings = model.encode(sentences)print(type(sentence_embeddings), sentence_embeddings.shape)# The result is a list of sentence embeddings as numpy arraysfor sentence, embedding in zip(sentences, sentence_embeddings):print("Sentence:", sentence)print("Embedding shape:", embedding.shape)print("Embedding head:", embedding[:10])print()if __name__ == '__main__':# Load the Chinese sentence embedding model from local patht2v_model = SentenceModel("/huggingface/shibing624-text2vec-base-chinese")compute_emb(t2v_model)# Load the multilingual sentence embedding model from local pathsbert_model = SentenceModel("/huggingface/shibing624-text2vec-base-multilingual")compute_emb(sbert_model)

输出如下:

2024-03-18 15:21:52.313 | DEBUG    | text2vec.sentence_model:__init__:80 - Use device: cpu
<class 'numpy.ndarray'> (7, 768)
Sentence: 卡
Embedding shape: (768,)
Embedding head: [-0.35981426 -0.3186864   0.13830365  0.64885354 -0.01408281 -0.487384231.30226    -0.39590654  0.18606906  0.26202226]Sentence: 银行卡
Embedding shape: (768,)
Embedding head: [ 0.8671567  -0.60671663  0.02293688  0.4132002  -0.5967976  -0.51031811.4806948   0.8551277   0.22801681  0.63256466]Sentence: 如何更换花呗绑定银行卡
Embedding shape: (768,)
Embedding head: [-4.4358522e-04 -2.9734722e-01  8.5790163e-01  6.9065177e-013.9645979e-01 -8.4892750e-01 -1.9156864e-01  8.4548742e-024.0232992e-01  3.1966275e-01]Sentence: 花呗更改绑定银行卡
Embedding shape: (768,)
Embedding head: [ 0.6536202  -0.076667    0.9596226   1.2794415  -0.00143553 -1.03844110.13855436 -0.9394696   0.33802456  0.15471926]Sentence: This framework generates embeddings for each input sentence
Embedding shape: (768,)
Embedding head: [-0.07267489  0.13551307  0.8715128   0.32199794  0.04113241 -1.40393961.0236042   0.4870898  -0.32605407 -0.08317855]Sentence: Sentences are passed as a list of string.
Embedding shape: (768,)
Embedding head: [-0.06514414  0.07455871  0.2267004   1.1061312  -0.27176154 -1.69787560.29453832 -0.12722531  0.09710422 -0.36989313]Sentence: The quick brown fox jumps over the lazy dog.
Embedding shape: (768,)
Embedding head: [-0.19875857 -0.67079747 -0.07586769  0.4634221   0.9580124  -0.76826890.02202583  1.2257732  -0.4276425  -0.24545906]2024-03-18 15:21:55.567 | DEBUG    | text2vec.sentence_model:__init__:80 - Use device: cpu
<class 'numpy.ndarray'> (7, 384)
Sentence: 卡
Embedding shape: (384,)
Embedding head: [ 0.12097563  0.3195333  -0.3903885  -0.10349016 -0.0327206  -0.154865240.4462906   0.29238302  0.3376441   0.08386162]Sentence: 银行卡
Embedding shape: (384,)
Embedding head: [ 0.15900336  0.40306988 -0.46625367 -0.14987263 -0.0500416  -0.195239160.39799288  0.20468327  0.1518769   0.074183  ]Sentence: 如何更换花呗绑定银行卡
Embedding shape: (384,)
Embedding head: [ 0.07825766  0.3953699   0.00506953  0.12258322 -0.26160595 -0.257596140.07189055 -0.23021507 -0.0203216  -0.0229045 ]Sentence: 花呗更改绑定银行卡
Embedding shape: (384,)
Embedding head: [ 0.07381158  0.37328285  0.02697924  0.18422425 -0.15165754 -0.186038970.08140875 -0.17768659  0.06038244  0.01786209]Sentence: This framework generates embeddings for each input sentence
Embedding shape: (384,)
Embedding head: [-0.10125275 -0.12747736 -0.31334925 -0.04386095  0.0064016   0.156378670.42076212 -0.00064787  0.2419882   0.07633833]Sentence: Sentences are passed as a list of string.
Embedding shape: (384,)
Embedding head: [ 0.0256436   0.2687917   0.07968786  0.05905652  0.09481868 -0.19011540.40289983 -0.16571264  0.2011836   0.11741532]Sentence: The quick brown fox jumps over the lazy dog.
Embedding shape: (384,)
Embedding head: [ 0.17666592  0.43902877 -0.24750058  0.1760914  -0.0160051  -0.452466960.36169243  0.20897985  0.2373922  -0.20034151]

5、BGE模型FlagEmbedding

5.1 FlagEmbedding

智库发布最强开源可商用中英文语义向量模型BGE(BAAI General Embedding),在中英文语义检索精度与整体语义表征能力均超越了社区所有同类级别的模型,如openai 的text embedding 002等。此外,BGE保持了同等参数量级别模型中的最小向量维度,使用成本更低。

5.2 例子

from FlagEmbedding import FlagModel
sentences = ["样例数据-1", "样例数据-2"]
model = FlagModel('BAAI/bge-large-zh-v1.5', query_instruction_for_retrieval="为这个句子生成表示以用于检索相关文章:",use_fp16=True) # 设置use_fp16为True可以加快计算,效果会稍有下降
embeddings_1 = model.encode(sentences)
embeddings_2 = model.encode(sentences)
similarity = embeddings_1 @ embeddings_2.T
print(similarity)# 对于短查询到长文档的检索任务,请对查询使用 encode_queries() 函数,其会自动为每个查询加上指令
# 由于候选文本不需要添加指令,检索中的候选集依然使用 encode() 或 encode_corpus() 函数
queries = ['query_1', 'query_2']
passages = ["样例文档-1", "样例文档-2"]
q_embeddings = model.encode_queries(queries)
p_embeddings = model.encode(passages)
scores = q_embeddings @ p_embeddings.T

这篇关于AI系统性学习04—文本嵌入模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/823088

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

Java操作xls替换文本或图片的功能实现

《Java操作xls替换文本或图片的功能实现》这篇文章主要给大家介绍了关于Java操作xls替换文本或图片功能实现的相关资料,文中通过示例代码讲解了文件上传、文件处理和Excel文件生成,需要的朋友可... 目录准备xls模板文件:template.xls准备需要替换的图片和数据功能实现包声明与导入类声明与

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行