1、前言自然语言处理 (Natural Language Processing, NLP) 是人工智能(Artificial Intelligence, AI)的一个子领域。NLP 的主要研究方向主要包括:信息抽取、文本生成、问答系统、对话系统、文本挖掘、语音识别、语音合成、舆情分析、机器翻译等。在本文中将介绍NLP的一般流程以及列举出每个流程节点中业界常用的工具(这里会给出工具的简介,工具如何使用会给出其官网的教程链接)。2、获取语料获取方法包括:公开数据集、爬虫、社交工具埋点、数据库。2.1 公开数据集分享- Daily Dialog英文对话经典benchmark数据集;Paper:https:///abs/1710.03957 ;数据集地址:http:///dailydialog.html;
- WMT-1x翻译数据集,官网:http://www./wmt18/translation-task.html;
- 50万中文闲聊数据:https://drive.google.com/file/d/1nEuew_KNpTMbyy7BO4c8bXMXN351RCPp/view?usp=sharing;
- 日常闲聊数据:https://github.com/codemayq/chinese_chatbot_corpus;
- 中国古诗词数据集,数据集地址:https://github.com/congcong0806;
2.2 爬虫- 请求库:爬虫请求库可以理解为能模拟浏览器向服务器发送请求的工具。常用请求库有:urllib、requests、Selenium;
- 框架:爬虫框架具有效率高、方便开发和功能强大的特点。常用框架有Scrapy、pyspider;
- 解析库:解析库用来处理爬取后的网页数据,它帮助我们准确定位网页上想要的内容。常用解析库有:lxml、Beautiful Soup、pyquery;
- 存储库:常用存储库有:MongoDB、MySQL、Redis等。
3、数据预处理1)语料清洗:保留有用的数据,删除噪音数据,常见的清洗方式有:人工去重、对齐、删除、标注等。2)分词:将文本分成词语,比如通过基于规则的、基于统计的分词方法进行分词。分词常用工具有:jieba、nltk、SnowNLP、LTP、HanLP等。- jieba:http://github.com/fxsjy/jieba
- SnowNLP:http://github.com/isnowfy/snownlp
- LTP:http://github.com/HIT-SCIR/ltp
- HanLP:http://github.com/hankcs/HanLP
3)词性标注:给词语标上词类标签,比如名词、动词、形容词等,常用的词性标注方法有基于规则的、基于统计的算法,比如:最大熵词性标注、HMM 词性标注等。词性标注工具:jieba、nltk、SnowNLP、LTP、HanLP、PkuSeg、THULAC、pyhanlp、FoolNLTK、Stanford CoreNLP等。- jieba:http://github.com/fxsjy/jieba
- SnowNLP:http://github.com/isnowfy/snownlp
- LTP:http://github.com/HIT-SCIR/ltp
- HanLP:http://github.com/hankcs/HanLP
- PkuSeg:http://github.com/lancopku/pkuseg-python
- THULAC:http://github.com/thunlp/THULAC-Python
- pyhanlp:http://github.com/hankcs/pyhanlp
- FoolNLTK:http://github.com/rockyzhengwu/FoolNLTK
- Stanford CoreNLP:http://stanfordnlp./CoreNLP/
4)去停用词:去掉对文本特征没有任何贡献作用的字词,比如:标点符号、语气、“的”等。常见停用词表、使用方式参考链接。4、特征工程这一步主要的工作是将分词表示成计算机识别的计算类型,一般为向量,常用的表示模型有:词袋模型(Bag of Word, BOW),比如:TF-IDF 算法;词向量,比如 one-hot 算法、word2vec 算法等。这里计算TF-IDF和one-hot推荐使用Scikit-learn的TfidfTransformer和OneHotEncoder,计算word2vec推荐使用Gensim。- TfidfTransformer:http:///stable/modules/generated/sklearn.feature_extraction.text.TfidfTransformer.html
- OneHotEncoder:http:///stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
- Gensim:http:///gensim/models/word2vec.html
5、特征选择特征选择主要是基于第4部特征工程得到的特征,选择合适的、表达能力强的特征,常见的特征选择方法有:DF、MI、IG、WFO 等。6、模型选择当选择好特征后,需要进行模型选择,选择什么样的模型进行训练。常用的有机器学习模型,比如:KNN、SVM、Naive Bayes、决策树、K-means等,想快速建模传统机器学习算法,推荐使用Scikit-learn,简直太好用了;深度学习模型,比如:RNN、CNN、LSTM、Seq2Seq、FastText、TextCNN 等,实现深度学习模型推荐给大家TensorFlow和PyTorch。- Scikit-learn:http:///stable/modules/classes.html
- TensorFlow:http://www./api_docs/python/tf%3Fhl%3Dzh-cn
- PyTorch:http://pytorch.org/docs/stable/index.html
7、模型训练当选择好模型后,则进行模型训练,其中包括了模型微调等。在模型训练的过程中要注意由于在训练集上表现很好,但在测试集上表现很差的过拟合问题以及模型不能很好地拟合数据的欠拟合问题。8、模型评估模型的评价指标主要有:准确率、精准率、召回率、F1 值、ROC 曲线、AUC 曲线等。这些评价算法不需要自己手动实现,Scikit-learn中早已为你备好,直接调用相应的包即可(点击评价指标超链接就是其对应的官方教程)。准确率:https:///stable/modules/generated/sklearn.metrics.accuracy_score.html#sklearn.metrics.accuracy_score 精准率:http:///stable/modules/generated/sklearn.metrics.precision_score.html 召回率:http:///stable/modules/generated/sklearn.metrics.recall_score.html F1 值:http:///stable/modules/generated/sklearn.metrics.f1_score.html ROC 曲线:http:///stable/modules/generated/sklearn.metrics.roc_curve.html AUC 曲线:http:///stable/modules/generated/sklearn.metrics.auc.html
9、投产上线一种是线下训练模型,然后将模型进行线上部署提供服务;另一种是在线训练模型,在线训练完成后将模型 pickle 持久化,提供对外服务。
|