1. 为什么需要文本聚类?
想象一下你手头有几千篇客户反馈,或者几万条社交媒体评论。人工阅读分类?那简直是噩梦。文本聚类技术就是来解决这个痛点的——它能自动把意思相近的文本归到同一组。比如电商平台可以用它自动整理用户评价,把"物流快"、"送货及时"归到物流好评类;新闻网站可以用它自动归类相似报道。
传统方法主要基于词频(TF-IDF)或主题模型(LDA),但这些方法有个致命伤:它们处理不了同义词和语义关联。比如"手机"和"智能手机"明明意思相近,传统方法却可能把它们分到不同组。这就是为什么我们需要语义向量——它能捕捉词语背后的真实含义。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. BERT如何生成语义向量?
2.1 BERT的魔法:从文字到数字
BERT就像个超级翻译官,能把文字转换成富含语义的数字向量。举个例子:
- "我喜欢吃苹果" → [0.21, -0.33, ..., 0.87](768维向量)
- "苹果手机很好用" → [0.19, -0.31, ..., -0.12]
这两个"苹果"虽然字面相同,但BERT生成的向量会差异明显,因为它能理解上下文。实际操作时,我们常用[CLS]位置的向量代表整句语义(虽然更精确的做法是取所有token向量的平均值):
python复制from transformers import BertTokenizer, BertModel
import torch
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertModel.from_pretrained('bert-base-chinese')
inputs = tokenizer("今天天气真好", return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
sentence_vector = outputs.last_hidden_state[:, 0, :] # 取[CLS]向量
2.2 中文处理的特殊技巧
处理中文文本时要注意:
- BERT中文版是以单字为分词单位,所以不需要额外分词
- 长文本需要截断(通常取前512个字
