初阶NLP总结

本文详细介绍了自然语言处理项目的架构、流程与实践技巧,包括工程配置、语料库构建、词库创建、数据清洗、特征工程、模型训练及应用案例,强调数据处理与模型选择的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工程架构

  • 配置 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
      • 向量化 vectorization
        • TF-IDF tfidf
        • 词向量 word2vector
    • 深度学习 deep_learning
      • 卷积神经网络 cnn
      • 循环神经网络 rnn
  • 应用 application
    • 命名实体识别 ner
    • 文本分类 classification
    • 统计分析 statistic
配 置
语料
数据处理
模型
应用

项目流程

语料库构建

词库构建

  • 词库获取
    • 通用词库:jieba、nltk
    • 公司内部数据库:各种专用名词、字段名…
    • 网上整理:科技、农业、体育、政治…
    • 功能词库(停词、情感词、量词…)
    • 爬虫或网购:行政区划、电影名、公司名…
  • 新词
  • 词分类
    • 按领域:医药、汽车、电影、体育、政治、农业、建筑…
    • 按词性:名、动、形、副、介、连…
    • 按情感:欢、悲、褒、贬、爱、恨、恐惧…
    • 按清洗:停词、数量词、时间词、特殊符号
    • 使用算法:Word2Vector、分类模型(朴素贝叶斯)、LDA

训练数据

  • 内部数据
    • 数据库、日志文件
    • 工作报告(PPT、WORD、EXCEL)
  • 外部数据
    • 购买
    • 爬虫获取
    • 网络资源
  • 数据增强
    • 统计语言模型生成
    • 短文本生成(基于统计)
  • 标注
    • 自带标注
    • 人工标注
    • 算法标注

数据处理

清洗

  • 特殊符号处理
def replace_punctuation(text):
    """替换标点(英→中)"""
    text = text.replace('(', '(').replace(')', ')')  # 圆括号
    text = text.replace('【', '(').replace('】', ')')  # 方括号(之后用于关键词高亮)
    text = replace_empty_bracket(text)  # 空括号
    text = re.sub('[;;]+', ';', text)  # 分号
    text = re.sub('[!!]+', '!', text)  # 叹号
    text = re.sub('[??]+', '?', text)  # 问号
    text = re.sub('[.]{3,}|,{3,}|。{3,}|,{3,}|…+', '…', text)  # 省略号
    text = text.replace("'", '"')  # 引号
    text = re.sub('(?<=[\u4e00-\u9fa5]),(?=[\u4e00-\u9fa5])', ',', text)  # 逗号
    text = re.sub('(?<=[\u4e00-\u9fa5])[.](?=[\u4e00-\u9fa5])', '。', text)  # 句号
    return text.strip().lower()  # 转小写

def replace_space(text):
    """清除连续空白"""
    text = re.sub('\s*\n\s*', '\n', text.strip())
    text = re.sub('[ \f\r\t ]+', ' ', text)
    text = re.sub('([\u4e00-\u9fa5]) ([^\u4e00-\u9fa5])', lambda x: x.group(1)+x.group(2), text)
    text = re.sub('([^\u4e00-\u9fa5]) ([\u4e00-\u9fa5])', lambda x: x.group(1)+x.group(2), text)
    return text
  • 过滤
    • 停词
    • 低频词(减少维度 以 提高程序效率)
  • 替换(或离散化)
    • 数量词:时间、长度、重量……
    • 实体统一:公司名、地名……
    • 近义词(如:番茄≈西红柿)
  • 筛选
    • 按词性
    • 按长度

文本切割

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

切句

sep10 = re.compile('[\n。…;;]+|(?<=[\u4e00-\u9fa5])[.]+(?=[\u4e00-\u9fa5])').split
sep15 = re.compile('[\n。…;;!!??]+|(?<=[a-z\u4e00-\u9fa5])[.]+(?=[a-z\u4e00-\u9fa5])', re.I).split
sep20 = re.compile('[!!??]+').split
sep30 = re.compile('[,,::]+').split
sep40 = re.compile('\W+').split  # 非中英文数字下划线
sep45 = re.compile('[^a-zA-Z\u4e00-\u9fa5]+').split  # 非中英文

分词

jiaba、nltk、ltp、foolnltk……

特征工程

模型

  • 机器学习
    • 朴素贝叶斯(超快)
    • 逻辑回归(快而准,常用)
  • 深度学习
    • CNN+Embedding
    • RNN+Word2Vector
    • 双向RNN+…
  • 其它
    • 基于规则,如:业务规则、统计学、经济学…
    • LDA
    • 知识图谱

极简常用示例代码

TF-IDF向量化+逻辑回归

from jieba import cut
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import TfidfVectorizer

"""语料"""
texts = [
    '三个只有一个是新鲜的,其它两个都坏了,买得最差的一次水果',
    '京东,才发现你是个骗子,服务更是一样的烂',
    '火龙果很小,而且还有一个烂了,发霉了',
    '物流慢,收到时有两个底部已开始腐烂',
    '屏幕清晰度不高,而且运行速度巨慢',
    '贝质量很好,款式时尚,大小合适,做工精致,穿着舒服,服务很好',
    '质量很好的,款式也不错,看起来高档大气,卖家服务还好,不错',
    '裤子收到了,质量不错,价格便宜,穿着舒服,下次我还会来买的',
    '宝贝收到了,试了一下,穿上挺舒服的,是正品,综合给好评',
    '裤子挺好看,质量也不错,老公搭配衣服挺好看也很喜欢穿',
]
y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]

"""向量转换器"""
vectorizer = TfidfVectorizer(tokenizer=cut, stop_words=set('的在了是和也有为就都说等与才这,'))
X = vectorizer.fit_transform(texts)

"""分类模型"""
clf = LogisticRegression()
clf.fit(X, y)
print(clf.score(X, y))

应用

  • 文本分类(篇章级、句级、实体级)
  • 文本聚类(篇章级、实体级)
    • 新主题抽取及归类
  • 信息抽取
    • 关键词抽取、专名识别
      • 公司名、人名、医学名词……
    • 关系抽取
      • 投资关系、词组搭配关系
    • 文本摘要
  • 统计分析
    • 词频、词组频

经验总结

项目思维
评估项目难度:跑一个简单模型,看看差多少
模型选择:优先使用 简单模型有监督模型,然后逐步优化
常用方法如 频数统计逻辑回归等;基于统计,寻找语料特征,迭代语料
尽快了解业务,公司数据库本身就已经存在很多重要语料了
数据才是王道
词库要求精准;带标签的数据要求精准且足量
快速迭代词库和语料:必须 人工+业务,并利用 算法可视化辅助
数据清洗占据大量时间,Pycharm的正则表达式功能非常好用!
常用可视化技术
文本可视化: 关键词高亮
数据可视化:条形图(简单直接)
个人积累
除了积累算法,还要 积累数据(词库、正则表达式、带标签语料、结构化数据)
优先积累通用的体量小的数据:停词、情感词、地区+经纬度、文本清洗正则表达式…
NLP与业务高度挂钩,选择一个自己喜欢的业务,深入学下去
测试
功能测试、性能测试、数据校验(数据量、准确率、缺失率…)
数据量过大时
Spark
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值