如何计算文本之间的相似度?余弦相似度详解!带例子,嘎嘎通俗易懂~

计算公式

  • cos⁡(θ)=A⃗⋅B⃗∣∣A⃗∣∣×∣∣B⃗∣∣\cos (\theta) = \frac{\vec{A} \cdot \vec{B}}{||\vec{A}|| \times ||\vec{B}||}cos(θ)=∣∣A ∣∣×∣∣B ∣∣A B
  • 其中 θ\thetaθ余弦相似度.
  • cos⁡(θ)\cos (\theta)cos(θ)越靠近1,则表示向量A和向量B在向量空间中的夹角越靠近0,意味着它们之间更相似。
  • 夹角等于0,则表示这俩向量相等。

例子

  • 假如要计算两段文本之间的相似性,总共可以分成以下五个步骤:

    1. 分词
    2. 作出语料库
    3. 计算词频
    4. 将原句转为词频向量
    5. 计算余弦相似性
  • A:今天天气真好,明天天气也一样。

  • B:今天天气不差,明天也一样。

  1. 分词
    今天/天气/真好,明天/天气/也/一样。
    今天/天气/不差,明天/也/一样。
  2. 语料库
    今天,天气,真好,明天,也,一样,不差
  3. 计算词频
    A:今天1,天气2,真好1,明天1,也1,一样1,不差0
    B:今天1,天气1,真好0,明天1,也1,一样1,不差1
  4. 词频向量
    A⃗=[1211110]\vec{A} = \begin{bmatrix} 1\\2\\1\\1\\1\\1\\0 \end{bmatrix}
在Python中,我们可以使用`sklearn`库中的`cosine_similarity`函数来计算两个文本向量之间余弦相似度。如果你有三个文本,你需要先将它们转换成向量表示,例如通过词袋模型(Bag of Words)或者TF-IDF(Term Frequency-Inverse Document Frequency)。以下是步骤: 1. 安装必要的库(如果尚未安装): ```bash pip install scikit-learn nltk ``` 2. 导入所需的模块: ```python from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity import nltk nltk.download('stopwords') ``` 3. 对文本进行预处理(例如去除停用词、分词等): ```python def preprocess(text): stop_words = set(nltk.corpus.stopwords.words('english')) tokens = nltk.word_tokenize(text) filtered_tokens = [token.lower() for token in tokens if token.isalnum() and token not in stop_words] return ' '.join(filtered_tokens) texts = ['text1', 'text2', 'text3'] # 这里假设你已经有了三个文本 preprocessed_texts = [preprocess(text) for text in texts] ``` 4. 使用TfidfVectorizer创建文本向量: ```python vectorizer = TfidfVectorizer() tfidf_matrix = vectorizer.fit_transform(preprocessed_texts) ``` 5. 计算余弦相似度矩阵: ```python similarity_matrix = cosine_similarity(tfidf_matrix) ``` 6. 你可以访问相似度矩阵的对角线外元素来获取任意两个文本之间相似度,例如`similarity_matrix[i][j]`就是第i行(第一个文本)和第j列(第二个文本)的相似度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值