NLP文本相似度

NLP文本相似度

相似度度量:计算个体间相似程度

  • jieba:Python的第三方库,用于自然语言处理,对文本进行分词。
  • gensim:利用 TF-IDF 算法来进行文本相似度计算。

处理思路: jieba 进行分词,整理为指定格式,利用 gensim 库将要对比的文档通过 doc2bow 转换成稀疏向量,再通过 models 中的 TF-IDF 将语料库进行处理,特征值和稀疏矩阵相似度建立索引,来得到最后的相似结果。

余弦相似度、向量空间模型

  • 最常用:余弦相似度,向量空间中两个向量夹角的余弦值作为衡量两个个体间的差异大小
  • 文字中向量属于n维度,将词频向量化。

两个句子的相似度计算

  1. 通过中文分词,把完整句子根据分词算法分为独立的词集合
  2. 求出两个词集合的并集
  3. 计算各自词集的词频并把词频向量化
  4. 带入向量计算模型来求出文本相似度

处理文本相似度流程是

  1. 找出文章的关键词
  2. 求出两个词集和的并集
  3. 计算每篇文章对于集合中的词的词频
  4. 计算两篇文章各自的词频向量
  5. 计算两个向量的余弦相似度,值越大表示越相似

TF-IDF

TF-词频

TF——词频:一个词在文章问出现的次数

  • 假设:如果一个词很重要,应该在文章中多次出现
  • 注意停用词: 像‘的’、‘好’这种词被列为停用词,被列为黑名单
  • 停用词对结果没有作用,过滤掉停用词
  • 反假设:如果某个词较少出现,但是在文章中出现多次出现,它很可能反应这篇文章的特性,正是关键词。

IDF-反文档频率

在词频的基础上,赋予每个词的权重,体现改词的重要性。

  • 常见的词,给予最小的权重
  • 较常见的词,给予较小的权重
  • 较少见的词

TFIDF 相乘,就得到一个词的 TF-IDF 值,某个词对文章的重要性越高,该值就越大,排在前面的词语,就是这篇文章的关键词。
**注意:**实际中,还要考虑词的词性,动词、名次、形容词的刻画能力也是有差别的。

计算步骤

  • 词频(TF):某个词在文章出现的次数,两种计算方式。
  1. TF=(某词在文章出现总次数/文章的总词数) 得出词汇较小,不便于分析。
  2. TF=(某词在文章中出现的次数/文中出现次数最多的词的次数) 标准更适用,因为能够使词频的值相对大点,便于分析。
  • 反文档词频(IDF):log(语料库的文档总数/包含改词的文档数+1)
  1. 分母+1,为了防止分母为0的情况。
  2. log函数是单调递增,求log是为了归一化,保证反文档频率不会过大。
### 关于自然语言处理 (NLP) 中文本相似度的实例与代码 #### 基础概念 文本相似度是指衡量两个文档或字符串之间的语义接近程度的一种方法。常见的算法包括余弦相似度、Jaccard相似度以及皮尔逊相关系数等[^1]。 #### 余弦相似度实现 以下是基于 Python 的余弦相似度计算示例,适用于英文和经过分词后的中文数据: ```python from sklearn.feature_extraction.text import CountVectorizer from sklearn.metrics.pairwise import cosine_similarity def compute_cosine_similarity(texts): vectorizer = CountVectorizer().fit_transform(texts) vectors = vectorizer.toarray() similarity_matrix = cosine_similarity(vectors) return similarity_matrix texts = ["我喜欢吃苹果", "苹果是一种水果"] similarity = compute_cosine_similarity(texts) print(similarity) ``` 上述代码展示了如何利用 `CountVectorizer` 将文本转换为向量形式,并通过 `cosine_similarity` 函数计算两者的相似度矩阵[^2]。 #### 使用 Jieba 进行中文分词并计算相似度 对于中文文本,通常需要先进行分词操作再计算其相似度: ```python import jieba from sklearn.feature_extraction.text import TfidfVectorizer def preprocess_text(text): words = jieba.lcut(text) return ' '.join(words) text1 = "我喜欢吃苹果" text2 = "苹果是一种水果" processed_texts = [preprocess_text(text1), preprocess_text(text2)] vectorizer = TfidfVectorizer().fit_transform(processed_texts) vectors = vectorizer.toarray() cos_sim = lambda a, b: sum(a * b) / ((sum(a ** 2) ** 0.5) * (sum(b ** 2) ** 0.5)) result = cos_sim(vectors[0], vectors[1]) print(f"Cosine Similarity: {result}") ``` 这里引入了 TF-IDF 向量化工具来增强模型的表现力[^4]。 #### 应用场景扩展 除了基础的技术实现外,了解应用场景同样重要。例如,在搜索引擎中用于查询推荐;在客服机器人领域帮助理解用户意图;或者是在抄袭检测系统里判断内容重复率等问题上都有广泛用途[^3]。 #### 局限性和未来方向 尽管这些传统方法已经非常成熟,但在面对复杂情境时仍存在不足之处。比如无法很好地捕捉同义词关系或是上下文中隐含的信息等内容。因此研究者们正在探索更先进的解决方案如BERT预训练模型等方式提升效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值