常用中文开源embedding模型应用

以下为你介绍几种常用的中文开源 Embedding 模型,以及它们的输入输出调用方式和代码示例。

1. Sentence Transformers(包含中文预训练模型)

  • 简介:Sentence Transformers 是一个用于生成句子嵌入的 Python 库,提供了多种预训练模型,其中有适用于中文的模型,能够将句子转换为固定长度的向量,方便进行语义相似度计算等任务。
  • 输入输出
    • 输入:字符串形式的单个句子或者句子列表。
    • 输出:与输入句子对应的向量表示,输出为 Numpy 数组或者 PyTorch 张量。
  • 代码示例
from sentence_transformers import SentenceTransformer
import numpy as np

# 加载中文预训练模型
model = SentenceTransformer('shibing624/text2vec-base-chinese')

# 输入句子
sentences = ["这是一个测试句子", "另一个测试句子"]

# 生成句子嵌入
embeddings = model.encode(sentences)

# 打印结果
for sentence, embedding in zip(sentences, embeddings):
    print(f"句子: {sentence}")
    print(f"嵌入向量: {embedding[:5]}...(长度: {len(embedding)})")
    print()

2. ERNIE(百度)

  • 简介:ERNIE(Enhanced Representation through Knowledge Integration)是百度研发的预训练模型,它在大规模语料上进行预训练,融合了大量的知识信息,在中文自然语言处理任务中表现出色。可以用于生成文本的 Embedding 表示。
  • 输入输出
    • 输入:中文文本,使用分词器处理后的词元列表。
    • 输出:每个词元对应的向量表示,或者经过池化后的句子向量表示。
  • 代码示例
from transformers import AutoTokenizer, AutoModel
import torch

# 加载 ERNIE 分词器和模型
tokenizer = AutoTokenizer.from_pretrained("ernie-1.0")
model = AutoModel.from_pretrained("ernie-1.0")

# 输入中文文本
text = "这是一段中文文本。"

# 分词
inputs = tokenizer(text, return_tensors='pt')

# 模型推理
with torch.no_grad():
    outputs = model(**inputs)

# 获取词元的嵌入向量
last_hidden_states = outputs.last_hidden_state
print("词元嵌入向量形状:", last_hidden_states.shape)

# 简单的池化操作获取句子向量(这里使用 [CLS] 标记的向量)
sentence_embedding = last_hidden_states[:, 0, :]
print("句子嵌入向量形状:", sentence_embedding.shape)

3. BERT - 中文预训练模型

  • 简介:BERT 是 Google 提出的预训练语言模型,Hugging Face 提供了中文预训练的 BERT 模型,能够捕捉中文文本的语义信息,生成高质量的词元嵌入和句子嵌入。
  • 输入输出
    • 输入:中文文本,经过分词器处理后添加特殊标记(如 [CLS][SEP])。
    • 输出:每个词元对应的向量表示,以及经过池化后的句子向量表示。
  • 代码示例
from transformers import BertTokenizer, BertModel
import torch

# 加载中文 BERT 分词器和模型
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertModel.from_pretrained('bert-base-chinese')

# 输入中文文本
text = "这是一个中文测试。"

# 分词并添加特殊标记
inputs = tokenizer(text, return_tensors='pt')

# 模型推理
with torch.no_grad():
    outputs = model(**inputs)

# 获取词元的嵌入向量
last_hidden_states = outputs.last_hidden_state
print("词元嵌入向量形状:", last_hidden_states.shape)

# 简单的池化操作获取句子向量(这里使用 [CLS] 标记的向量)
sentence_embedding = last_hidden_states[:, 0, :]
print("句子嵌入向量形状:", sentence_embedding.shape)

4. XLM - RoBERTa(支持中文)

  • 简介:XLM - RoBERTa 是一种多语言预训练模型,支持包括中文在内的多种语言,能够生成高质量的文本嵌入,适用于跨语言和单语言的自然语言处理任务。
  • 输入输出
    • 输入:中文文本,经过分词器处理后添加特殊标记。
    • 输出:每个词元对应的向量表示,以及经过池化后的句子向量表示。
  • 代码示例
from transformers import XLMRobertaTokenizer, XLMRobertaModel
import torch

# 加载 XLM - RoBERTa 分词器和模型
tokenizer = XLMRobertaTokenizer.from_pretrained('xlm - roberta - base')
model = XLMRobertaModel.from_pretrained('xlm - roberta - base')

# 输入中文文本
text = "中文文本处理示例。"

# 分词并添加特殊标记
inputs = tokenizer(text, return_tensors='pt')

# 模型推理
with torch.no_grad():
    outputs = model(**inputs)

# 获取词元的嵌入向量
last_hidden_states = outputs.last_hidden_state
print("词元嵌入向量形状:", last_hidden_states.shape)

# 简单的池化操作获取句子向量(这里使用 [CLS] 标记的向量)
sentence_embedding = last_hidden_states[:, 0, :]
print("句子嵌入向量形状:", sentence_embedding.shape)

在运行上述代码之前,需要确保已经安装了相应的库,如 transformerssentence - transformers 等,可以使用 pip install 命令进行安装。同时,部分模型需要从 Hugging Face 的模型库中下载,可能需要一定的网络环境支持。

### 国内常用Embedding模型列表及介绍 #### 1. Word2Vec Word2Vec 是一种流行的词向量表示方法,通过神经网络模型将词语映射到连续的向量空间中。该技术在中国的应用非常广泛,尤其是在中文语料库上的应用效果良好。阿里云提供了预训练好的中文 Word2Vec 模型供开发者使用[^1]。 #### 2. BERT (Bidirectional Encoder Representations from Transformers) BERT 是由 Google 提出的一种双向 Transformer 编码器结构的语言表征模型,在多个 NLP 任务上取得了显著的效果改进。国内多家机构已经针对中文环境优化了 BERT 模型,并发布了多种变体版本,如ERNIE(百度)、MacBERT 和 RoFormer-Sim 等。 #### 3. FastText FastText 是 Facebook AI Research 开发的一个高效学习单词表示和句子分类工具包。它不仅能够捕捉字符级别的特征,还能有效处理稀疏词汇问题。腾讯开源了适用于中文场景下的 fastText 实现,支持多标签分类等功能。 #### 4. GPT系列(Generative Pre-trained Transformer) 虽然最初是由 OpenAI 发布的大规模无监督预训练语言模型,但是国内也有不少团队基于此进行了本地化适配工作。例如华为云推出了鹏城实验室联合开发的支持超大规模参数量的盘古α架构;阿里达摩院也构建了自己的通义万相大模型体系[^2]。 #### 5. ERNIE (Enhanced Representation through kNowledge Integration) 这是百度推出的一款增强版预训练语言理解框架,特别强调融合百科全书式的知识图谱来提升下游任务的表现力。除了标准版外还有专门面向特定领域定制化的子型号可供选择,比如医疗健康方向的 MedCLP 或者法律咨询方面的 Legal-BERT。 ```python import paddlehub as hub module = hub.Module(name="ernie_tiny") # 加载ERNIE tiny模型 texts = ["今天天气真好", "明天会更好"] results = module.get_embedding(texts=texts, use_gpu=False) for result in results: print(result.shape) # 输出每条文本对应的embedding维度 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值