请问一下各位,想要找一个计算文本相似度的算法,我的数据是纯英文文本,大概有两千多万条没有标注的文本,有没有推荐的算法呀。目前在考虑SBERT下的预训练模型,主要包括SimCSE、all-mpnet-base-v2、all-MiniLM-L6-v2这三类代表性模型。
6条回答 默认 最新
阿里嘎多学长 2025-09-16 11:19关注阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
文本相似度算法推荐
您需要计算两千多万条英文文本的相似度,考虑使用预训练模型是正确的选择,特别是SBERT下面的模型。以下是一些推荐:
- SimCSE: 这是SimCSE模型的一种特定预训练方案,使用contrastive学习方案对文本语义表示进行训练,可以在保持好语义表示的同时,提高文本的稀疏化。
- all-mpnet-base-v2: 这基于MPNet预训练模型,MPNet模型的优势在于它采用全局自注意力机制(Global Attention)来捕捉长距依赖关系,相比BERT等模型它对长句子处理更好,有条件的情况下可以考虑使用。
- 其他选项: 还有不少其他的模型和算法可以使用,如FastText, Tfidf等,具体选用哪个模型最好,建议在实验中进行验证,并且可以结合您的评估指标来优化模型。
- 数据准备: 需要注意的是您的数据量非常大,数据处理和分词需要考虑使用分布式处理来提高效率。
- 算法评估: 在模型选择后,还需要评估这些模型的表现,您可以使用准确率、F1等指标来评估这些模型的结果。
# 简单的示例,用于计算两个文本的相似度 import torch from transformers import AutoModel, AutoTokenizer import numpy as np def text_similar(text1, text2, model_name): # 加载预训练模型和分词器 model = AutoModel.from_pretrained(model_name) tokenizer = AutoTokenizer.from_pretrained(model_name) # 对文本进行分词 encoding = tokenizer.encode_plus( text1, text2, add_special_tokens=True, max_length=512, return_attention_mask=True, return_tensors='pt' ) # 获取模型输出的向量表示 outputs = model(**encoding) # 计算两个向量的余弦相似度 sim = torch.cosine_similarity(outputs.last_hidden_state[:, 0], outputs.last_hidden_state[:, 1]) return sim.item() # example model_name = "sentence-bert/simcse-sbert-base-nli-mean-tokens" text1 = "这是一个例子文本" text2 = "这是另一个例子文本" sim = text_similar(text1, text2, model_name) print(f"文本相似度:{sim}")解决 无用评论 打赏 举报