文本相似度计算 python实现
时间: 2024-09-30 13:04:03 浏览: 42
文本相似度计算在Python中通常通过多种方法实现,包括基于词袋模型的统计方法(如TF-IDF、Jaccard相似度),以及深度学习方法(如Word2Vec、BERT等)。以下是几种常见的方法:
1. **基于词频(TF-IDF)**:
- 使用`sklearn`库中的`TfidfVectorizer`可以将文本转化为数值向量,然后计算余弦相似度或欧几里得距离。
```python
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
texts = ['这是一个句子', '这是另一个句子']
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(texts)
similarity = cosine_similarity(tfidf_matrix[0], tfidf_matrix[1])
```
2. **词嵌入(Word Embeddings)**:
- `gensim`库的`Word2Vec`或`FastText`可以训练词向量模型,将文本转换为稠密向量,再用余弦相似度或其他内积函数比较。
```python
from gensim.models import Word2Vec
model = Word2Vec(sentences=texts)
sentence1_vec = model[texts[0]]
sentence2_vec = model[texts[1]]
similarity = sentence1_vec.similarity(sentence2_vec)
```
3. **预训练模型**:
- 对于大规模的文本数据,可以直接利用预训练的模型,比如Hugging Face的transformers库中的BERT、RoBERTa等,通过`transform`函数获取文本的向量表示,然后计算相似度。
```python
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained('bert-base-chinese')
model = AutoModel.from_pretrained('bert-base-chinese')
inputs = tokenizer(texts, padding=True, truncation=True)
outputs = model(**inputs).pooler_output
similarity = torch.nn.CosineSimilarity(dim=1)(outputs[0], outputs[1]).item()
```
阅读全文