短文本相似度计算

本文详细介绍了一种短文本相似度计算的方法,包括分词、建模和模型预测三个主要步骤。通过使用jieba进行分词,去除停用词,然后建立词袋模型,并利用TF-IDF模型计算文档间的相似度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

短文本相似度计算

引用优快云**经典的一句话:调试的错误就是编程给你最好的东西,因为在每个错误上面都标志着前进的一步。
文本相似度计算步骤如下:

  1. 分词;
 def tokenization(self, line):
        result = []
        words = jieba.lcut(line)
        for word in words:
            if word not in self.stop_word_list('../data/stopwords.txt'):
                result.append(word)
        return result

2.建模;

 def train_text(self, train_data_path):
        corpus = self.read_data_from_text(train_data_path)
        # 首先用dictionary方法获取词袋
        self.dictionary = corpora.Dictionary(corpus)
        # print('dictionary:',self.dictionary)
        # dictionary.keys()#词袋中用数字对所有词进行了编号
        # print(self.dictionary.token2id)#编号与词之间的对应关系
        # 使用doc2bow制作语料库,语料库是一组向量,向量中的元素是一个二元组(编号、频次数),对应分词后的文档中的每一个词
        doc_vectors = [self.dictionary.doc2bow(text) for text in corpus]
        # print('doc_vectors:',doc_vectors)
        return doc_vectors

3.模型预测;

 # TF-IDF模型得到的相似度
    def sim_cal_tfidf(self, doc_vector=None, input_file=""):
        """
        :param doc_vector: doc vector
        :param input_file:
        :return:
        """
        # 使用TF-IDF模型对语料库建模
        tfidf = models.TfidfModel(doc_vector)
        tfidf.save('../model/tfidf_model.pkl')
        tfidf.load('../model/tfidf_model.pkl')

        # 获取测试文档中,每个词的TF-IDF值
        tfidf_vectors = tfidf[doc_vector]
        # print('tfidf_vectors:', tfidf_vectors)
        # print('tfidf_vectors[0]:', tfidf_vectors[0])
        query = self.tokenization(input_file)
        query_bow = self.dictionary.doc2bow(query)
        # print('query_bow:', query_bow)
        index = similarities.MatrixSimilarity(tfidf_vectors)
        sims = index[query_bow]
        return list(enumerate(sims)), tfidf_vectors

参考文章:

https://blog.youkuaiyun.com/xc_zhou/article/details/80952460
https://blog.youkuaiyun.com/kevinelstri/article/details/70139797

Spark可以使用余弦相似度计算短文本相似度。余弦相似度是一种度量两个非零向量之间的夹角的方法,它的取值范围在-1到1之间,值越接近1表示两个向量越相似,值越接近-1表示两个向量越不相似。 下面是一个使用Spark计算短文本相似度的示例代码: ```python from pyspark.ml.feature import HashingTF, IDF, Tokenizer from pyspark.ml.feature import VectorAssembler from pyspark.ml.linalg import DenseVector # 创建SparkSession spark = SparkSession.builder.appName("Short Text Similarity").getOrCreate() # 加载数据集,数据集格式为id,text1,text2 data = spark.read.csv("data.csv", header=True) # 分词 tokenizer = Tokenizer(inputCol="text", outputCol="words") data = tokenizer.transform(data) # 计算TF-IDF值 hashingTF = HashingTF(inputCol="words", outputCol="rawFeatures", numFeatures=100) idf = IDF(inputCol="rawFeatures", outputCol="features") idfModel = idf.fit(hashingTF.transform(data)) data = idfModel.transform(hashingTF.transform(data)) # 合并特征向量 assembler = VectorAssembler(inputCols=["features1", "features2"], outputCol="features") data = assembler.transform(data) # 计算余弦相似度 dot_udf = udf(lambda x, y: float(x.dot(y)), DoubleType()) similarity = data.withColumn("similarity", dot_udf(col("features1"), col("features2"))) ``` 这个示例代码中使用了HashingTF和IDF来计算TF-IDF值,然后使用VectorAssembler将两个特征向量合并为一个,最后使用udf计算余弦相似度。这个示例中使用的数据集格式为id,text1,text2,你需要根据实际情况修改代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值