版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
工程架构
- 配置 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
- 有监督模型 supervised
- 深度学习 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
- 过滤
- 停词
- 低频词
- 替换(或离散化)
- 数量词:时间、长度、重量……
- 实体统一:公司名、地名……
- 近义词(如:舒适=舒适度)
- 筛选
- 按词性
- 按长度
文本切割
分句
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 - 统计思维
-
实战中并不需要那么多高级方法,用最多的还是
频数统计
基于统计,寻找语料特征,快速理解语料,完善语料 - 模型选择与优化
-
优先使用简单的模型,然后逐步优化
优先使用有监督模型 - 数据才是王道
-
不断完善语料库(词库+带标签语料)
词库要求精准;带标签的数据量要求精准且量大
数据增强 - 个人积累
-
除了
积累算法,还要
积累数据(词库、带标签语料、结构化数据)
优先积累通用的数据:停词、情感词、地区+经纬度… - 词库整理技巧
-
必须
人工,但要利用
算法和
可视化技术辅助人工
网上下载或购买别人整理的语料,然后修正 - 常用可视化技术
-
文本可视化:关键词高亮
数据可视化:条形图