中文embedding模型比较
时间: 2025-05-02 11:07:24 浏览: 28
### 中文 Embedding 模型的比较
#### Word2Vec
Word2Vec 是一种流行的词嵌入技术,通过预测上下文中单词的概率分布来捕捉语义信息。对于中文而言,Word2Vec 可以很好地理解词语间的线性关系并发现同义词。
优点:
- 计算效率高,适合大规模语料库训练。
- 能够有效地表达词汇之间的类比关系。
缺点:
- 对于低频次的新颖词汇效果不佳。
- 难以处理多义词问题,因为每个词只有一个固定向量表示[^1]。
```python
from gensim.models import word2vec
sentences = [["cat", "say", "meow"], ["dog", "bark"]]
model = word2vec.Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
```
#### FastText
FastText 扩展了传统 Word2Vec 的思路,不仅考虑整个单词的信息还关注字符级别的 n-gram 特征。这使得 FastText 更加擅长应对未登录词(OOV),即那些未曾见过但在测试集中出现过的字串组合形式。
优点:
- 支持子词(subword)级别建模,提高了对未知或罕见词汇的理解能力。
- 较好地解决了 OOV 问题。
缺点:
- 相较于其他模型参数更多,可能导致过拟合风险增加。
- 存储开销较大由于引入了大量的n元语法结构作为额外输入单元。
```python
import fastText
model = fastText.train_unsupervised('data.txt', model='skipgram')
print(model.get_word_vector("hello"))
```
#### BERT (Bidirectional Encoder Representations from Transformers)
BERT 使用双向 Transformer 编码器架构预训练语言表征,能够获取更加丰富的上下文感知特征。针对特定下游任务微调后的 BERT 表现优异,在多种自然语言处理评测基准上取得领先成绩。
优点:
- 创新性的采用了掩蔽机制(masked language modeling),允许模型同时利用左侧和右侧上下文信息构建更好的文本表示。
- 开源社区活跃,提供了多个版本供研究者们基于不同需求定制开发。
缺点:
- 参数规模庞大,计算资源消耗严重。
- 推理速度相对较慢,部署成本较高[^2]。
```python
from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertModel.from_pretrained("bert-base-chinese")
text = "[CLS] Who was Jim Henson ? [SEP]"
tokenized_text = tokenizer.tokenize(text)
indexed_tokens = tokenizer.convert_tokens_to_ids(tokenized_text)
segments_ids = [0]*len(indexed_tokens)
tokens_tensor = torch.tensor([indexed_tokens])
segments_tensors = torch.tensor([segments_ids])
with torch.no_grad():
outputs = model(tokens_tensor, token_type_ids=segments_tensors)
last_hidden_states = outputs[0]
```
#### ERNIE (Enhanced Representation through kNowledge Integration)
ERNIE 结合百度的知识图谱增强版 transformer 架构,旨在解决现有预训练模型无法充分挖掘知识的问题。相较于原始 BERT ,ERNIE 加入了实体识别模块,并采用更复杂的损失函数设计来加强常识推理能力和跨领域迁移泛化力。
优点:
- 整合外部知识库,增强了对命名实体的认知水平。
- 提升了在问答系统、对话机器人等领域中的表现。
缺点:
- 同样面临较大的内存占用和技术门槛挑战。
- 当前主要由企业内部维护更新频率不定[^3]。
```python
from paddlenlp.transformers import ErnieForSequenceClassification,ErnieTokenizer
tokenizer = ErnieTokenizer.from_pretrained('ernie-1.0')
model = ErnieForSequenceClassification.from_pretrained('ernie-1.0', num_classes=2)
inputs = tokenizer("这是个很好的机会", return_tensors="pt")
outputs = model(**inputs)
logits = outputs.logits
```
阅读全文
相关推荐

















