机器学习 —— NLP

本文探讨了自然语言处理(NLP)中的文本相似度分析技术,尤其关注马蜂窝评论造假事件中如何利用NLP识别伪造评论。通过分词、去除停用词、制作词袋模型等步骤将文本转化为机器可理解的形式,并使用TF-IDF算法计算文本相似度。

NLP ——Natural Language Prrocessing 自然语言处理
一. NLP 文本相似度分析

马蜂窝评论造假事件
马蜂窝发现很多评论是通过机器写入的造假评论
在这里插入图片描述
在这里插入图片描述

那么是怎么发现的? ———— 采用NLP 的文本相似度分析

文本相似度分析: 从海量的数据(文章,评论)中,把相似的数据挑选出来
步骤

  1. 把评论翻译成机器能够看的懂的语言
  2. 使用机器看得懂的算法轮回去比较每一条和所有评论的相似度
  3. 把相似的评论挑出来

(一)把评论翻译成机器能够看懂的语言
步骤:

  1. 分词: 把句子拆分成词语

     import jieba
    
     # 抽取关键字的包
     import jieba.analyse
     
     jieba.load_userdict('./mytext')
     text = "故宫有很多历史悠久的建筑,比如说乾清宫,午门。其中的黄琉璃瓦非常好看。啊"
     seg_list = jieba.cut(text, cut_all=False)
     # print("全模式:", "/".join(seg_list))
     
     # 提取关键字
     tags = jieba.analyse.extract_tags(text, topK=6)
     # topK = 5 : 提取5个关键字
     print("关键字:")
     print(" ".join(tags))
     
     # 除去停用词
     stopwords = ["的", "包括", "等", "是", "啊"]
     # final:空的字符串
     final = ''
     
     for seg in seg_list:
         if seg not in stopwords:
             final += seg
     print("final:", final)
    

运行结果:
在这里插入图片描述

  1. 制作词袋模型(bag-of-word ): 可以理解成装着所有词的袋子
  2. 用词袋模型制作语料库(corpus): 把每个句子都用词袋表示
  3. 把评论变成词向量

eg:

import jieba
text = "我来到北京大学"
seg_list = jieba.cut(text,cut_all = True)
print("全模式:","/".join(seg_list))


seg_list = jieba.cut(text,cut_all = False)
print("精确模式:","/".join(seg_list))

seg_list = jieba.cut_for_search(text)
print("搜索引擎模式:","/".join(seg_list))

运行结果为:
在这里插入图片描述

(二) 使用机器看得懂的算法轮回去比较每一条和所有评论的相似度(TF-IDF)
1. 如何寻找TF-IDF 的关键字

1)不考虑停用词(没有什么意义的词语 eg:啊, 的,了。。)找出一句话中出现次数最多的单词,来代表这句话,这个就叫是词频(TF-Term-Frequency),相对应 的权重就会增高
2) 如果一个词在所有句子都出现过,那么这个词就能代表某句话,这个就叫做逆文本频率(IDF-Inverse Document Frequency)相应的权重值就会下降
3) TF-IDF = TF*IDF

2. TF公式:
在这里插入图片描述
其中ni ,j 是该词在一份文件 (或者评论)中出现的次数
分母是一份文件(或者评论)中所有词汇出现的次数总和
即: 在这里插入图片描述

3. IDF公式:
在这里插入图片描述
其中 |D|是语料库中的文件总数。 |{j:t_i∈ⅆ_j }|表示包含词语ti的文件数目。如果该词语不在语料库中,就会导致分母为0,因此一般情况下使用1+ |{j:t_i∈ⅆ_j }|
即:

在这里插入图片描述
分母加1 ,是为了避免分母为0

词类转换总结

假设我们有两句话,分别是

  1. a b c
  2. b c d

那么,这两句话的字典就是
dictionary: 0:a 1:b 2:c 3:d
其中key值表示索引,value表示对应的词语;
而且,词语不会重复

通过应用生成好的字典,我们可以重写两句话

  1. 0:1 1:1 2:1 3:0
    (第0位是a,在这句话中出现了一次,就表示成0:1,以此类推)
  2. 0:0 1:1 2:1 3:1

然后把这两句话改成列表(list)类型,就变成以下格式
[[{0:1}, {1:1}, {2:1}, {3:0}],
[{0:0}, {1:1}, {2:1}, {3:1}]]
把list中的字典转换成元组,这就是我们在代码里得到的语料库
[[(0,1), (1,1), (2:1), (3:0)],
[(0:0), (1:1), (2:1), (3:1)]]

语料库的两种表现形式

1.第一种: String类型
[“a b c”,
“b c d”]

2.第二种,词袋类型
[[(0,1), (1,1), (2,1), (3,0)],
[(0,0), (1,1), (2,1), (3,1)]]

如果新得到一组数据,可以把它用两种形式加入到语料库中

  1. String类型
    “c d e”,
  2. 词袋类型
    [(0,0), (1,0),(2,1),(3,1),(unknow,1)]
### 机器学习在新闻文本分类中的应用与实现 新闻文本分类是自然语言处理(NLP)领域的重要任务之一,通过机器学习技术可以实现对新闻内容的自动化分类。以下是实现新闻文本分类的主要方法和技术栈: #### 1. 数据预处理 在进行新闻文本分类之前,需要对原始数据进行清洗和预处理。这一步骤包括但不限于去除停用词、标点符号、数字以及对文本进行分词等操作。此外,还需要将文本转换为数值表示形式以便后续建模使用。常见的文本表示方法包括 One-Hot 编码、Bag of Words(词袋模型)、N-gram 和 TF-IDF 等[^4]。 #### 2. 特征提取 特征提取是新闻文本分类的关键步骤之一。通过从新闻文本中提取关键词、短语和语义模式等特征,可以有效提升模型的分类性能。常用的特征提取方法包括词频统计、TF-IDF 加权以及基于词嵌入的表示方法(如 Word2Vec 或 GloVe)。这些方法能够捕捉到文本中的重要信息,并将其转化为机器学习模型可理解的形式[^3]。 #### 3. 模型选择与训练 在完成数据预处理和特征提取后,可以选择合适的机器学习算法进行模型训练。传统的机器学习算法如朴素贝叶斯(Naive Bayes)、支持向量机(SVM)、随机森林(Random Forest)等均可用于新闻文本分类任务。此外,深度学习模型如卷积神经网络(CNN)、循环神经网络(RNN)及其变体(如 LSTM 和 GRU)也被广泛应用于该领域。模型训练过程中需要使用标注好的数据集,并通过交叉验证等方式优化超参数以提高分类效果[^2]。 #### 4. 模型评估与部署 模型训练完成后,需要对其进行严格的评估以确保其在实际应用场景中的表现。常用的评估指标包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)和 F1 值等。当模型达到预期性能后,可以将其部署到生产环境中,为用户提供实时的新闻文本分类服务。整个系统的开发过程不仅能够推动人工智能技术的发展,还能有效提升信息管理效率[^1]。 ```python # 示例代码:基于 TF-IDF 和 RidgeClassifier 的新闻文本分类 from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.linear_model import RidgeClassifier from sklearn.pipeline import make_pipeline from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report # 假设 news_data 是包含新闻文本和标签的数据集 X, y = news_data['text'], news_data['label'] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 构建管道:TF-IDF 向量化 + RidgeClassifier 分类器 model = make_pipeline(TfidfVectorizer(), RidgeClassifier()) # 训练模型 model.fit(X_train, y_train) # 预测并评估模型 y_pred = model.predict(X_test) print(classification_report(y_test, y_pred)) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值