NLP总结:文本分类(持续更新)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Yellow_python/article/details/98224389

工程架构

  • 配置 congfig
    • 常量 constant
    • 计时器 timer
    • 数据可视化 visualize
    • 日志 log
  • 语料库 corpora
    • 训练数据 train_data
    • 词库 dictionary
  • 文本处理 processing
    • 清洗 clean
    • 文本切割 cutter
      • 分句 clause
      • 分词 word
      • 词性标注 flag
  • 模型 model
    • 专家系统 expert_system
    • 机器学习 machine_learning
      • 有监督模型 supervised
        • 逻辑回归 logistic_regression
        • 朴素贝叶斯 naive_bayes
      • 其它 unsupervised
        • TF-IDF tfidf
        • 词向量 word2vector
    • 深度学习 deep_learning
      • 卷积神经网络 cnn
      • 循环神经网络 rnn
  • 应用 application
    • 命名实体识别 ner
    • 文本分类(实体级、篇章级) classification、sentiment_analysis
    • 统计分析 statistic
配 置
语料
数据处理
模型
应用

项目流程

语料库构建

词库构建

  • 词库获取
    • 通用词库:jieba、nltk
    • 网上整理:科技、农业、体育、政治……
    • 功能词库(停词、情感词、量词……)
    • 爬虫或淘宝购买:电影名、公司名、地名……
  • 新词
    • 新词探索算法
    • 组合词生成(基于统计语言模型或规则)
  • 词分类
    • 按领域:农业、医药、汽车、电影、体育、政治……
    • 按词性:名、动、形、副、介、连……
    • 按情感:欢、悲、褒、贬、爱、恨、恐惧……
    • 按清洗:停词、数量词、时间词、特殊符号
    • 使用算法:Word2Vector、分类模型(朴素贝叶斯)、LDA……

训练数据

  • 内部数据
    • 数据库
    • 工作报告(PPT、WORD、EXCEL)
  • 外部数据
    • 购买(from客户、淘宝等)
    • 爬虫获取(要带标注的)
    • 网上下载(要带标注的)
  • 数据增强
    • 统计语言模型生成
    • 短文本生成(基于统计)
  • 标注
    • 自带标注
    • 人工标注
    • 算法标注

数据处理

清洗

  • 特殊符号处理
def replace_punctuation(text):
    """替换标点(英→中)"""
    text = text.strip().lower()  # 转小写
    text = text.replace(',', ',')  # 逗号
    text = text.replace(';', ';')  # 分号
    text = text.replace('(', '(').replace(')', ')')  # 括号
    text = re.sub('[!!]+', '!', text)  # 叹号
    text = re.sub('[??]+', '?', text)  # 问号
    text = re.sub('\.{3,}', '…', text)  # 省略号
    text = re.sub('''['"‘’“”]+''', '‘', text)  # 引号
    text = re.sub('(?<!\d)\.', '。', text)  # 句号
    return text
  • 过滤
    • 停词
    • 低频词
  • 替换(或离散化)
    • 数量词:时间、长度、重量……
    • 实体统一:公司名、地名……
    • 近义词(如:舒适=舒适度)
  • 筛选
    • 按词性
    • 按长度

文本切割

分句
分子句
分词组
分词
分词
分词
分词
篇章级
texts
句级
sentences
子句级
clauses
词组级
phrases
实体级
words

分句

lambda text: re.split('[\n。…;;]|(?<!\d)\.', text)

分子句

lambda sentence: re.split('[,,!!??::]', sentence)

分词组

lambda clause: re.split('[^a-zA-Z\u4e00-\u9fa5]+', clause)

分词

jiaba、nltk、ltp、foolnltk……

特征工程

  • 词性
    • 通用词性(jieba词性)
    • 领域属性:公司名、电影名、地名……
    • 功能属性:情感词、程度词、否定词、数量词、词根……
    • 拼音特征
  • 文本向量化
    • TF-IDF、textrank权重
    • word2vector
    • Glove: Global Vectors for Word Representation
    • 共现矩阵+SVD
  • 句子特征
    • 词周边特征
    • 句法树
    • 编辑距离、余弦距离
  • 统计特征
    • 语言模型(频数、概率):unigram、bigram……
    • 文本长度:众数、平均数、最值、标准差、分位数……
  • 其它
    • LDA
    • 知识图谱

模型

  • 机器学习
    • 朴素贝叶斯(超级快)
    • 逻辑回归(快而准)
  • 深度学习
    • CNN+Embedding
    • RNN+Word2Vector
    • 双向RNN+…
  • 专家系统
    • 处理ML和DL解决不了的问题

应用

  • 文本分类(篇章级、句级、实体级)
    • 新闻分类、邮件分类
    • 情感分析
  • 文本聚类(篇章级、实体级)
    • 新主题抽取及归类
  • 信息抽取
    • 关键词提取
    • 文本摘要
  • 命名实体识别
    • 公司名、人名、医学名词……
  • 关系抽取
    • 投资关系
  • 统计分析

思想

预算
评估项目难度,慎接投出产出比低的项目(如:无监督任务)
评估方法:跑一个简单模型,看看差多少
工程思维
小project:先跑一个简全模型,然后逐渐模块化
大project:先搭建完整架构,然后分发任务
NLP项目多是面向过程的小project
统计思维
实战中并不需要那么多高级方法,用最多的还是 频数统计
基于统计,寻找语料特征,快速理解语料,完善语料
模型选择与优化
优先使用简单的模型,然后逐步优化
优先使用有监督模型
数据才是王道
不断完善语料库(词库+带标签语料)
词库要求精准;带标签的数据量要求精准且量大
数据增强
个人积累
除了 积累算法,还要 积累数据(词库、带标签语料、结构化数据)
优先积累通用的数据:停词、情感词、地区+经纬度…
词库整理技巧
必须 人工,但要利用 算法可视化技术辅助人工
网上下载或购买别人整理的语料,然后修正
常用可视化技术
文本可视化:关键词高亮
数据可视化:条形图

猜你喜欢

转载自blog.csdn.net/Yellow_python/article/details/98224389
今日推荐