企业如何 建设好自己的网站,南宁网站建设接单,博物馆网站 微信 微博 建设,公司网络搭建文本嵌入#xff08;text embedding#xff09;是自然语言中的一项重要技术#xff0c;是将文本转换了固定长度的低密度集向量的表示。 文章目录 1、文本嵌入介绍1.1 介绍1.2 文本嵌入与文本向量1.3 应用场景1.4 常用的文本嵌入模型 2、M3E文本嵌入模型2.1 模型介绍2.2 模型…文本嵌入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模型FlagEmbedding5.1 FlagEmbedding5.2 例子 1、文本嵌入介绍
1.1 介绍
文本嵌入text embedding是自然语言中的一个中重要概念它的目标是将文本的词表示成固定长度的稠密向量也称为词向量word vector。 例如Girl和BoyQueen和KingSport和Game这三对词都有相近的意思所以他们文本向量的几何距离都比较接近。操作中文本嵌入可以通过神经网络模型进行无监督学习得到比如word2vec中的CBOW、SKIP-GRAM模型、GloVe等。这些模型通过大规模文本的统计信息来学习每个词的向量表示。
1.2 文本嵌入与文本向量
通过文本嵌入模型embedding可以计算出文本的特征向量在文本嵌入中每个词或短语被赋予一个向量。这些向量可以组成文本的向量表示从而表示整个文本的含义也叫文本特征向量因为这些向量可以表示文本的语义信息等关键特征信息。会得到一个长度为768的浮点数数组。
1.3 应用场景
文本嵌入可以用于各种NLP任务如下所示
文本相似度搜索文本分类任务情感分析垃圾邮件过滤文本推荐自动翻译实体识别问答系统
1.4 常用的文本嵌入模型
以下是一些流行的文本嵌入模型
Word2Vec一种基于神经网络的模型用于生成单词的向量表示。Glove一种基于共现矩阵的模型用于生成单词的向量表示。FastTextFacebook开发的一种基于字符级别的文本嵌入模型可以为单词和短语生成向量表示。BERT一种基于Transfomer的语言模型可以生成单词、短语甚至是整个句子的向量表示。M3EMoka 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 ndcgm3e-small24M512是否是否否是优0.58340.7262m3e-base110M768是是是是否是优0.61570.8004Text2Vec110M768是否是否否是优0.57550.6346openai-ada-002未知1536是是是是否是优0.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_keyREPLACE BY YOUR API KEY)
r client.embeddings.create(modeltext-embedding-ada-002,input人工智能真好玩儿)print(r.data)4、Text2Vec文本嵌入模型
4.1 定义
Text2Vectext to vector,get sentence embeddings,文本向量化把文本包括词、句子、段落计算为特征向量。 text2vec实现了Word2Vec、RankBM25、BERT、Sentence-BERT、CoSENT等多种文本表征、文本相似度计算模型并在文本语义匹配相似度计算任务上比较了各模型效果。
4.2 安装
pip install torch
pip install -U text2vec4.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
智库发布最强开源可商用中英文语义向量模型BGEBAAI 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_fp16True) # 设置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