NLP
两大流派:
1.知识图谱: 将特定领域的知识通过三元组地形式结构化,如果能够造出在子领域内地知识图谱, 那么就将领域内的全部实体概念囊括,从而通过点到点的学习进而实现自主学习的目的。三元组可以最大程度获得自然世界中的联系,从而模拟人类学习的过程。
2.深度学习: 利用机器提取特征表达数据,深度学习网络自动提取信息的能力,提取出来的特征通过非线性映射得到结果。
主要发展方向:如何更加高效地抽取出文本中地特征。
NLP未来的发展方向:
1.pretrain+ finetune
pretrain: 大语料、无监督、深模型获得语义表示
微调:在下游任务中添加具体的语义信息实现任务
2.强化学习
通过动作(反馈)训练(重点:获得环境对动作的反馈)
genism:词向量库 如word2vec
collections:统计处理数据库 (处理list、 tuple、 set等特殊操作)
json: 格式化的操作数据
json有何优势?
json在读取添加方面有优势,其与python中的dict数据类型一致(python中的dict查找,插入都是O(1)比list快很多)
获得数据--->数据预处理---> 语义表示---->特征抽样与非线性映射
词向量 CNN
onehot RNN
tf-idf CRNN
预训练模型微调 GNN
python字符串有两种类型: str、bytes
中文编码
str
中文最好的编码方式Unicode(python3默认)
python2默认为gbk、gb1203,可以指定 若python2不知用的什么格式,那就先解码为unicode再编码为需要的格式,如utf-8,gbk(比较麻烦)
bytes
linux默认utf-8
windows默认gbk
若编码不是utf-8,gbk,不能写入中文,也不能读取中文。python2有时无法读取,无法用gbk读取其他编码
爬虫:
urllib: 通过请求获取html文件
re及bs4: 用来处理html
selenium:自动化测试(虚拟浏览器)
描述头文件,用代理池等反爬
重定位: 从html,css文件中找到
分词:
jieba: 优秀的中文分词第三方词库
---中文文本需要通过分词获得单个词语
---需要额外安装
原理: 通过词图扫描,生成所有词情况所构成的有向无环图,维特比解码,得到概率最大的分词方法
FMM:中文名:最大正则匹配,实际项目中,某些领域分词工具的效果不是很好,那就基于规则实现
作业:根据伪代码实现, (腾讯面试题,如何改进/*/)
特点:速度较慢
辅助手段:
人工校订:专业领域名词,力求精准,如每年网络新词 每一环节精准一点点,可以提升巨大 1.01的365次方
面试题:为何需要人工校订 (/*/)
什么叫作OOV数据?
未登录词(Out-of-vocabulary)就是训练时未出现,测试时出现了的单词。在自然语言处理或者文本处理的时候,我们通常会有一个字词库(vocabulary)。这个vocabulary要么是提前加载的,或者是自己定义的,或者是从当前数据集提取的。假设之后你有了另一个的数据集,这个数据集中有一些词并不在你现有的vocabulary里,我们就说这些词汇是Out-of-vocabulary,简称OOV。