当前位置: 首页 > article >正文

机器学习·NLP中的文本分类

前言

本文介绍自然语言处理(英语:Natural Language Processing,缩写作 NLP)中的文本分类应用,包括中英文分词方法、文本特征提取和假新闻分类任务。


一、中文分词方法

方法原理优缺点
正向最大匹配(MM)从左向右取最长词匹配词典,匹配失败则减1字继续匹配简单快速,但无法处理未登录词,依赖词典质量
逆向最大匹配(RMM)从右向左取最长词匹配词典对偏正结构处理更好,但同样依赖词典
双向最大匹配(BMM)结合正向和逆向结果,选择切分次数少的作为最终结果提高准确性,但计算复杂度较高
统计分词基于语料库统计词共现概率,利用隐马尔可夫模型(HMM)或条件随机场(CRF)能处理未登录词,但需要大量标注数据,计算复杂度高

二、结巴分词工具

  • 分词模式

    • 精确模式jieba.cut(text),适合文本分析。

    • 全模式jieba.cut(text, cut_all=True),输出所有可能成词的组合。

    • 搜索引擎模式jieba.cut_for_search(text),对长词再次切分,提高召回率。

  • 自定义词典

    jieba.add_word("机器学习")  # 添加新词
    jieba.load_userdict("user_dict.txt")  # 加载自定义词典

三、英文文本分词

  • 特点:天然以空格分隔,无需复杂分词算法。

  • 处理标点

    import string
    text = "Hello, world! This is an example."
    words = text.translate(str.maketrans('', '', string.punctuation)).split()
    # 输出:['Hello', 'world', 'This', 'is', 'an', 'example']

四、文本特征提取方法

方法原理应用场景工具
词袋模型(BoW)统计词频生成向量,忽略词序和语法简单文本分类,基线模型sklearn.feature_extraction.CountVectorizer
TF-IDF词频(TF)×逆文档频率(IDF),突出重要词信息检索,文本分类sklearn.feature_extraction.TfidfVectorizer
Word2Vec将词映射为低维稠密向量,捕捉语义相似性语义分析,深度学习模型输入gensim.models.Word2Vec
  • TF-IDF 公式
    \( \text{TF-IDF}(t,d) = \text{TF}(t,d) \times \log\left(\frac{N}{\text{DF}(t) + 1}\right) \)

    • \( \text{TF}(t,d) \):词 \( t \) 在文档 \( d \) 中的频率。

    • \( \text{DF}(t) \):包含词 \( t \) 的文档数。

    • \( N \):总文档数。

  • Word2Vec 训练示例

    from gensim.models import Word2Vec
    sentences = [["自然", "语言", "处理"], ["深度", "学习", "实战"]]
    model = Word2Vec(sentences, vector_size=100, window=5, min_count=1)
    print(model.wv["自然"])  # 输出词向量

五、假新闻分类实战步骤

1. 数据预处理
  • 合并文本列

    df['title_zh'] = df['title1_zh'] + df['title2_zh']
  • 加载停用词

    def load_stopwords(file_path):
        with open(file_path, 'r') as f:
            return [line.strip() for line in f]
    stopwords = load_stopwords('stopwords.txt')
2. 分词与清洗
  • 结巴分词 + 去停用词

    import jieba
    corpus = []
    for text in df['title_zh']:
        words = [word for word in jieba.cut(text) if word not in stopwords]
        corpus.append(words)
3. 特征提取(Word2Vec)
  • 训练词向量

    model = Word2Vec(corpus, vector_size=100, window=5, min_count=1)
  • 文本向量化(词向量求和)

    import numpy as np
    def text_to_vec(words):
        vec = np.zeros(100)
        for word in words:
            if word in model.wv:
                vec += model.wv[word]
        return vec
    X = np.array([text_to_vec(words) for words in corpus])
4. 模型训练与评估
  • 划分数据集

    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, df['label'], test_size=0.2)
  • 随机森林分类

    from sklearn.ensemble import RandomForestClassifier
    clf = RandomForestClassifier()
    clf.fit(X_train, y_train)
    print("Accuracy:", clf.score(X_test, y_test))

六、常见问题与优化方向

  1. 分词不准确

    • 添加专业词典(如 jieba.load_userdict())。

    • 调整结巴分词的 HMM 参数(jieba.cut(use_hmm=True))。

  2. 特征提取效果差

    • 使用预训练词向量(如腾讯词向量、Google News 词向量)。

    • 尝试其他文本表示方法(如 BERT 嵌入)。

  3. 模型准确率低

    • 增加数据量或数据增强。

    • 使用更复杂的模型(如 LSTM、Transformer)。


七、参考工具与资源

  • 分词工具

    • 结巴分词 GitHub

  • 预训练词向量

    • 腾讯词向量

    • Google News 词向量

  • 深度学习框架

    • TensorFlow

    • PyTorch


http://www.kler.cn/a/577970.html

相关文章:

  • Python定时任务管理器
  • 微博热点信息爬虫
  • Java链接redis
  • tomcat的安装与配置(包含在idea中配置tomcat)
  • 景联文科技:以精准数据标注赋能AI进化,构筑智能时代数据基石
  • RAG技术的PDF智能问答系统
  • 【图像阈值分割、区域分割、边缘分割】
  • 计算机毕业设计SpringBoot+Vue.js高校专业实习管理系统(源码+文档+PPT+讲解)
  • CentOS Docker 安装指南
  • mounted() 钩子函数
  • 大数据学习(58)-DolphinScheduler使用DataX实现数据同步
  • 如何在DigitalOcean的H100 GPU服务器上运行DeepSeek R1 模型
  • leetcode日记(85)验证二叉搜索树
  • 深度学习驱动的跨行业智能化革命:技术突破与实践创新
  • 鸿蒙Next-应用检测、安装以及企业内部商店的实现
  • 常见的算法题python
  • SecureCRT 文件上传下载操作指南
  • PyTorch系列教程:Tensor.view() 方法详解
  • <script setup>和export default { setup() { ... } }区别
  • 计算机网络-服务器模型