git 项目大瘦身

This commit is contained in:
jiangzhonglian
2019-10-11 16:48:36 +08:00
commit 81abcb3f3a
169 changed files with 35021 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
# 自然语言处理介绍
* 语言是知识和思维的载体
* 自然语言处理 (Natural Language Processing, NLP) 是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。
## NLP相关的技术
| 中文 | 英文 | 描述 |
| --- | --- | --- |
| 分词 | Word Segmentation | 将连续的自然语言文本,切分成具有语义合理性和完整性的词汇序列 |
| 命名实体识别 | Named Entity Recognition | 识别自然语言文本中具有特定意义的实体(人、地、机构、时间、作品等) |
| 词性标注 | Part-Speech Tagging | 为自然语言文本中的每个词汇赋予一个词性(名词、动词、形容词等) |
| 依存句法分析 | Dependency Parsing | 自动分析句子中的句法成分(主语、谓语、宾语、定语、状语和补语等成分) |
| 词向量与语义相似度 | Word Embedding & Semantic Similarity | 依托全网海量数据和深度神经网络技术,实现了对词汇的向量化表示,并据此实现了词汇的语义相似度计算 |
| 文本语义相似度 | Text Semantic Similarity | 依托全网海量数据和深度神经网络技术,实现文本间的语义相似度计算的能力 |
| 篇章分析 | Document Analysis | 分析篇章级文本的内在结构,进而分析文本情感倾向,提取评论性观点,并生成反映文本关键信息的标签与摘要 |
| 机器翻译技术 | Machine Translating | 基于互联网大数据,融合深度神经网络、统计、规则多种翻译方法,帮助用户跨越语言鸿沟,与世界自由沟通 |
## 场景案例
### 案例1解决交叉歧义
**分词Word Segmentation** :将连续的自然语言文本,切分成具有语义合理性和完整性的词汇序列
例句:致毕业和尚未毕业的同学。
分词:
1. `致` `毕业` `和` `尚未` `毕业` `的` `同学`
2. `致` `毕业` `和尚` `未` `毕业` `的` `同学`
推荐:
1. 校友 和 老师 给 尚未 毕业 同学 的 一 封 信
2. 本科 未 毕业 可以 当 和尚 吗
### 案例2从粒度整合未登录体词
**命名实体识别Named Entity Recognition**:识别自然语言文本中具有特定意义的实体(人、地、机构、时间、作品等)
例句:天使爱美丽在线观看
分词:`天使` `爱` `美丽` `在线` `观看`
实体: 天使爱美丽 -> 电影
推荐:
1. 网页:天使爱美丽 土豆 高清视频
2. 网页:在线直播爱美丽的天使
### 案例3结构歧义问题
**词性标注Part-Speech Tagging** 为自然语言文本中的每个词汇赋予一个词性(名词、动词、形容词等)
**依存句法分析Dependency Parsing**:自动分析句子中的句法成分(主语、谓语、宾语、定语、状语和补语等成分)
评论:房间里还可以欣赏日出
歧义:
1. 房间还可以
2. 可以欣赏日出
词性:(???)
房间里:主语
还可以:谓语
欣赏日出: 动宾短语
### 案例4词汇语言相似度
**词向量与语义相似度Word Embedding & Semantic Similarity**:对词汇进行向量化表示,并据此实现词汇的语义相似度计算。
例如:西瓜 与 (呆瓜/草莓),哪个更接近?
向量化表示: 西瓜(0.1222, 0.22333, .. )
相似度计算: 呆瓜0.115 草莓0.325
向量化表示:(-0.333, 0.1223 .. ) (0.333 0.3333, .. )
### 案例5文本语义相似度
**文本语义相似度Text Semantic Similarity**:依托全网海量数据和深度神经网络技术,实现文本间的语义相似度计算的能力
例如:车头如何防止车牌 与 (前牌照怎么装/如何办理北京牌照),哪个更接近?
向量化表示: 车头如何防止车牌(0.1222, 0.22333, .. )
相似度计算: 前牌照怎么装0.762 如何办理北京牌照0.486
向量化表示: (-0.333, 0.1223 .. ) (0.333 0.3333, .. )

View File

@@ -0,0 +1,30 @@
# 篇章分析-内容概述
## 篇章分析变迁
1. 内容生态: 新浪 -> 百家号、今日头条(自媒体)
2. 用户成为信息的生产中心: web 1.0 -> 百度贴吧、新浪微博、团购网站(用户评论,富有个人情感和用户观点的信息)
3. 移动、无屏: 显示屏 -> 手机、Siri展示的终端
## 篇章分析场景
篇章分析重要性:让人们最平等`便捷``获取信息``找到所求`
1. 个性化信息获取(搜索引擎的理解和推荐):从搜索的角度来看,通过对内容的深入理解,我们能够精准地对内容进行分析,然后将内容推荐给需要的用户,达到不搜即得。
2. 便捷咨询阅读(头条的热门推荐):从资讯阅读的角度来看,我们通过对内容进行概括总结、形成摘要,就能搞让用户更快捷地浏览信息、获取知识。
3. 信息直接满足:更进一步说,对用户的问题,我们可以基于内容理解,直接给出答案,从而满足用户的需求。
`总之`:通过篇章分析,我们能够进行内容理解,从而更好地服务用户。
## 篇章分析概述
`篇章是形式上互相衔接、语义上前后连贯的句子序列。`
有以下3种
* 1.文章:新闻稿、博客、微博
* 2.评论O2O服务的用户评论、豆瓣的影评、微博上的动态
* 3.对话:话题上是相互衔接的、语义上也是连贯的一个对话序列
## 篇章分析任务
![篇章分析任务/img/NLP/3.1.篇章分析-内容标签/篇章分析任务.jpg)

View File

@@ -0,0 +1,82 @@
# 篇章分析-内容标签
`标签`: 这种种的`单词``词组`都是一种标签的形式
1. 新闻稿,打出关于该报道的各种各样的标签,来表示其关键信息
2. 论文中,我们也会表明一些文章的`领域分类`以及`关键词`等标签
3. 微博用#代表一个话题,这是典型的社会化标签
## 标签用途
1. 关键信息展示
* 用户可以大致了解文章的主要信息,从而决定要不要对信息进行进一步深入地浏览
2. 频道划分
* 在很多的媒体网站,经常会有频道划分,使用了就是文章的分类标签
3. 话题聚合
* 标签也可以用来做话题聚合(例如:#人民的名义# 集合所有关于这个话题的信息,让用户更深入的了解信息)
## 应用:个性化推荐
* 标签可以用来建立用户的画像
比如对对于用户搜索过的Query还有他浏览过的文章都可以通过标签的技术。提取出主要的兴趣点从而也就建立了用户的画像
* 标签可以对内容进行建模
通过标签技术,我们能够提取文章中的关键信息标签。这样来看标签就作为了用户和内容的一个共同表示。
* 推荐的时候,我们通过对用户画像的标签和内容模型的标签进行匹配,就能够对用户进行一个精准的个性化推荐
## 百度内容标签
![百度内容标签/img/NLP/3.2.篇章分析-内容标签/百度内容标签.jpg)
## 标签体系:面向推荐的标签图谱
* 标签图谱刻画了用户的兴趣点,以及兴趣点之间的关联关系。
* 节点表示了用户的兴趣点,而边表示了兴趣点之间的关联关系(边是带有权重的,表示关联强度)。
* 包括3种节点主题标签-绿色,话题标签-紫色,实体标签-蓝色。
* 有了关联关系,我们可以进行一定程度的探索和泛化。(例如:无人驾驶和人工智能关联很强,如果有人看了无人驾驶,我们就给他推荐人工智能)
![面向推荐的标签图谱/img/NLP/3.2.篇章分析-内容标签/面向推荐的标签图谱.jpg)
## 标签体系:基于大数据分析的图谱构建
* 用户信息来源:贴吧、微博
* 标签的相关性分析通过关联规则发现2个标签总同时出现我们觉得这是高相关的。
![基于大数据分析的图谱构建/img/NLP/3.2.篇章分析-内容标签/基于大数据分析的图谱构建.jpg)
## 标签计算
> 主题分类
* 主题标签的计算是一种很典型的文本分类问题传统的朴素贝叶斯、最大熵、SVM 等解决方案。
* 当前我们主要采用的是:基于神经网络的方法(可以看右侧的示意图)
* 整个网络分成3层次
* 第一层 原始特征层:抽取简单的原始特征,例如说文章出现的单词、词组 等等
* 第二层 表示层:通过一些 embedding的算法、CNN、LSTM的方法
* 第三层 排序层:计算文章与主题之间的相似度,具体会计算每个主题与文章的相似度,并将相似度作为最终的一个主题分类的结果。这种计算的好处能够天然的支持多标记,也就是一篇文章可以同时计算出多个主题标签。
![主题分类/img/NLP/3.2.篇章分析-内容标签/主题分类.jpg)
> 通用标签
* 通用标签主要是计算内容中的实体和话题,我们综合了两种策略。
* 第一种策略: 针对比较热门的高频标签
* 这种标签我们主要通过一些预测的方法得到,预测的方法:基于相似度计算得到的---这种方法并不要求标签一定在文章中出现
* 例如:美国大选这种标签,如果一篇文章出现了 `希拉里` `特朗普` `辩论` 等一些词,即使没有出现美国大选,我们通过语义相似度的方法也能把这个标签计算出来。
* 第二种策略: 面向中低频的标签
* 这种标签相关的信息,不是那么丰富,所以我们计算的时候更多依赖的是标签在文章中的信息
* 比如:这个标签在文章中出现的频率 或 出现的位置;如果出现在标题,那么它可能就会比较重要。
* 通过融合这2种策略形成我们通用标签的结果。
![通用标签/img/NLP/3.2.篇章分析-内容标签/通用标签.jpg)
## 内容标签在Feed流中的应用
1. 标签可以用来话题聚合:比如表示人工智能的标签全部都会集合到同一个话题下面。这样用户可以对人工智能这个话题进行非常充分的浏览。
2. 话题频道划分比如我们在手机百度上面就可以看到Feed流上面有多个栏目用户可以点击 `体育` `时尚`等频道
![内容标签在Feed流中的应用/img/NLP/3.2.篇章分析-内容标签/内容标签在Feed流中的应用.jpg)

View File

@@ -0,0 +1,45 @@
# 篇章分析-情感分类
## 用户评论剧增
`服务评论` `商品评论` `社交评论`
## 情感分析应用
`消费决策` `舆情分析`
> 情感分类 和 观点挖掘
* 对(文本的)观点、情感、情绪和评论进行分析计算
![情感分类和观点挖掘/img/NLP/3.3.篇章分析-情感分类/情感分类和观点挖掘.jpg)
> 情感分类
* 给定一个文本判断其情感的极性,包括积极、中性、消极。
* LSTM 对文本进行语义表示,进而基于语义表示进行情感分类。
![情感分类/img/NLP/3.3.篇章分析-情感分类/情感分类.jpg)
> 观点挖掘
* 观点聚类:主要目标是对大量的评论数据进行聚类,将相同的观点抽取出来,并形成一个情感搭配词典(算法是:搭配抽取、词法分析、聚类归一,从而获得一个情感搭配。我们就可以进行观点抽取)
* 观点抽取:就是对输入的文本进行计算,将其中的情感标签抽取出来,这里的标签,都是来自于情感搭配词典的,也就是观点聚类获得的词典。
* 观点抽取一种简单的做法是直接通过标签匹配的方式得到,比如:服务不错这个情感搭配,恰好在文本中出现,我们就可以把它抽取出来。
* 但是这种简单的抽取方法,其实上只能从字面上抽取情感搭配,而无法解决字面不一致的,但是意思一样的情感搭配抽取,因此我们还引入了语义相似度的方法。这种方法主要是通过神经网络进行计算的。它能解决这种字面不一致,语义一样的抽取问题。
![观点挖掘/img/NLP/3.3.篇章分析-情感分类/观点挖掘.jpg)
> 观点摘要
综合了情感分类和观点挖掘的一些技术,而获得的一个整体的应用技术
![观点摘要/img/NLP/3.3.篇章分析-情感分类/观点摘要.jpg)
## 百度应用:评论观点
![百度应用评论观点/img/NLP/3.3.篇章分析-情感分类/百度应用评论观点.jpg)
## 百度应用:推荐理由
![百度应用推荐理由/img/NLP/3.3.篇章分析-情感分类/百度应用推荐理由.jpg)

View File

@@ -0,0 +1,62 @@
# 篇章分析-自动摘要
## 信息爆炸与移动化
![信息爆炸与移动化/img/NLP/3.4.篇章分析-自动摘要/信息爆炸与移动化.jpg)
## 自动摘要应用
* 便捷信息浏览
* 我们可以为每个新闻抽取摘要,用户可以通过摘要快速了解新闻概况。
* 进而决定是否要进一步细致地浏览。
* 而更进一步说:摘要还可以直接进行信息满足。
* 信息满足
* 传统搜索得到一大批网页信息
* 现在通过问答技术我们能够将网页中最核心的片段摘要提取出来。
* 用户通过阅读片段,就可以直接得到满足,而不需要打开页面。
## 自动摘要
* 对海量内容进行提炼与总结
* 以简洁、直观的摘要来概括用户所关注的主要内容
* 方便用户快速了解与浏览海量内容
![摘要系统/img/NLP/3.4.篇章分析-自动摘要/摘要系统.jpg)
* 自动摘要分类
![自动摘要分类/img/NLP/3.4.篇章分析-自动摘要/自动摘要分类.jpg)
* 典型摘要计算流程
![典型摘要计算流程/img/NLP/3.4.篇章分析-自动摘要/典型摘要计算流程.jpg)
> 基于篇章信息的通用新闻摘要
![基于篇章信息的通用新闻摘要/img/NLP/3.4.篇章分析-自动摘要/基于篇章信息的通用新闻摘要.jpg)
> 篇章主题摘要
![篇章主题摘要/img/NLP/3.4.篇章分析-自动摘要/篇章主题摘要.jpg)
> 问答摘要
![问答摘要/img/NLP/3.4.篇章分析-自动摘要/问答摘要.jpg)
## 百度应用
> 文本和语言摘要
![百度应用文本和语言摘要/img/NLP/3.4.篇章分析-自动摘要/百度应用文本和语言摘要.jpg)
> 问答摘要
![百度应用问答摘要/img/NLP/3.4.篇章分析-自动摘要/百度应用问答摘要.jpg)
> 搜索播报摘要和图像摘要
![百度应用搜索播报摘要和图像摘要/img/NLP/3.4.篇章分析-自动摘要/百度应用搜索播报摘要和图像摘要.jpg)
## 总结
![总结/img/NLP/3.4.篇章分析-自动摘要/总结.jpg)

105
docs/nlp/README.md Normal file
View File

@@ -0,0 +1,105 @@
# 【入门须知】必须了解
* **【入门须知】必须了解**: <https://github.com/apachecn/AiLearning/tree/master/docs/nlp>
* **【入门教程】强烈推荐: PyTorch 自然语言处理**: <https://github.com/apachecn/NLP-with-PyTorch>
* Python 自然语言处理 第二版: <https://usyiyi.github.io/nlp-py-2e-zh>
* 推荐一个[liuhuanyong大佬](https://github.com/liuhuanyong)整理的nlp全面知识体系: <https://liuhuanyong.github.io>
## nlp 学习书籍和工具:
* 百度搜索Python自然语言处理
* 读书笔记https://wnma3mz.github.io/hexo_blog/2018/05/13/《Python自然语言处理》阅读笔记
* Python自然语言处理工具汇总: <https://blog.csdn.net/sa14023053/article/details/51823122>
## nlp 全局介绍视频:(简单做了解就行)
地址链接: http://bit.baidu.com/Course/detail/id/56.html
1. 自然语言处理知识入门
2. 百度机器翻译
3. 篇章分析
4. UNIT语言理解与交互技术
## 中文 NLP
> 开源 - 词向量库集合
* <https://github.com/Embedding/Chinese-Word-Vectors>
* <https://github.com/brightmart/nlp_chinese_corpus>
* <https://github.com/codemayq/chinese_chatbot_corpus>
* <https://github.com/candlewill/Dialog_Corpus>
> 深度学习必学
1. [反向传递](/docs/dl/反向传递.md): https://www.cnblogs.com/charlotte77/p/5629865.html
2. [CNN原理](/docs/dl/CNN原理.md): http://www.cnblogs.com/charlotte77/p/7759802.html
3. [RNN原理](/docs/dl/RNN原理.md): https://blog.csdn.net/qq_39422642/article/details/78676567
4. [LSTM原理](/docs/dl/LSTM原理.md): https://blog.csdn.net/weixin_42111770/article/details/80900575
> [Word2Vec 原理](/docs/nlp/Word2Vec.md):
1. 负采样
介绍:
自然语言处理领域中判断两个单词是不是一对上下文词context与目标词target如果是一对则是正样本如果不是一对则是负样本。
采样得到一个上下文词和一个目标词生成一个正样本positive example生成一个负样本negative example则是用与正样本相同的上下文词再在字典中随机选择一个单词这就是负采样negative sampling
案例:
比如给定一句话“这是去上学的班车”,则对这句话进行正采样,得到上下文“上”和目标词“学”,则这两个字就是正样本。
负样本的采样需要选定同样的“上”,然后在训练的字典中任意取另一个字,如“我”、“梦”、“目”,这一对就构成负样本。
训练需要正样本和负样本同时存在。
优势:
负采样的本质:每次让一个训练样本只更新部分权重,其他权重全部固定;减少计算量;(一定程度上还可以增加随机性)
## nlp 操作流程
[本项目](https://pytorch.apachecn.org/docs/1.0/#/char_rnn_classification_tutorial) 试图通过名字分类问题给大家描述一个基础的深度学习中自然语言处理模型同时也向大家展示了Pytorch的基本玩法。 其实对于大部分基础的NLP工作都是类似的套路
1. 收集数据
2. 清洗数据
3. 为数据建立字母表或词表vocabulary或者叫look-up table
4. 根据字母表或者词表把数据向量化
5. 搭建神经网络深度学习中一般以LSTM或者GRU为主按照需求结合各种其他的工具包括embedding注意力机制双向RNN等等常见算法。
6. 输入数据,按需求得到输出,比如分类模型根据类别数来得到输出,生成模型根据指定的长度或者结束标志符来得到输出等等。
7. 把输出的结果进行处理,得到最终想要的数据。常需要把向量化的结果根据字母表或者词表变回文本数据。
8. 评估模型。
如果真的想要对自然语言处理或者序列模型有更加全面的了解,建议大家去网易云课堂看一看吴恩达深度学习微专业中的序列模型这一板块,可以说是讲的非常清楚了。 此外极力推荐两个blog
1. 讲述RNN循环神经网络在深度学习中的各种应用场景。http://karpathy.github.io/2015/05/21/rnn-effectiveness/
2. 讲述LSTM的来龙去脉。http://colah.github.io/posts/2015-08-Understanding-LSTMs/
最后,本文参考整合了:
* Pytorch中文文档https://pytorch.apachecn.org
* Pytorch官方文档http://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html
* Ngarneau小哥的博文https://github.com/ngarneau/understanding-pytorch-batching-lstm
* 另外本项目搭配Sung Kim的Pytorch Zero To All的第13讲rnn_classification会更加方便食用喔视频可以在油管和b站中找到。
## nlp - 比赛链接
* https://competitions.codalab.org/competitions/12731
* https://sites.ualberta.ca/%7Emiyoung2/COLIEE2018/
* https://visualdialog.org/challenge/2018
+ 人机对话 NLP
- http://jddc.jd.com
+ 司法数据文本的 NLP
- http://cail.cipsc.org.cn
+ “达观杯” 文本智能处理挑战赛
- http://www.dcjingsai.com/common/cmpt/“达观杯”文本智能处理挑战赛_竞赛信息.html
+ 中文论文摘要数据
- https://biendata.com/competition/smpetst2018
+ 中文问答任务
- https://biendata.com/competition/CCKS2018_4/
+ 第二届讯飞杯中文机器阅读理解评测
- http://www.hfl-tek.com/cmrc2018
+ 2018机器阅读理解技术竞赛 这也是结束了的 NLP
- http://mrc2018.cipsc.org.cn
+ 句子文本相似度计算
- https://www.kaggle.com/c/quora-question-pairs
* * *
【比赛收集平台】: https://github.com/iphysresearch/DataSciComp

48
docs/nlp/Word2Vec.md Normal file
View File

@@ -0,0 +1,48 @@
# Word2Vec 讲解
## 介绍
**需要复习** 手写 Word2Vec 源码https://blog.csdn.net/u014595019/article/details/51943428
* 2013年Google开源了一款用于词向量计算的工具—— `word2vec`,引起了工业界和学术界的关注。
* `word2vec` 算法或模型的时候,其实指的是其背后用于计算 **word vector**`CBoW` 模型和 `Skip-gram` 模型
* 很多人以为 `word2vec` 指的是一个算法或模型,这也是一种谬误。
* 因此通过 Word2Vec 技术 输出的词向量可以被用来做很多NLP相关的工作比如聚类、找同义词、词性分析等等.
> 适用场景
1. cbow适用于小规模或者主题比较散的语料毕竟他的向量产生只跟临近的字有关系更远的语料并没有被采用。
2. 而相反的skip-gram可以处理基于相同语义义群的一大批语料。
## CBoW 模型Continuous Bag-of-Words Model
* 连续词袋模型CBOW常用于NLP深度学习。
* 这是一种模式,它试图根据目标词 `之前``之后` 几个单词的背景来预测单词CBOW不是顺序
* CBOW 模型: 能够根据输入周围n-1个词来预测出这个词本身.
* 也就是说CBOW模型的输入是某个词A周围的n个单词的词向量之和输出是词A本身的词向量.
![CBoW 模型/img/NLP/Word2Vce/CBoW.png)
## Skip-gram 模型
* skip-gram与CBOW相比只有细微的不同。skip-gram的输入是当前词的词向量而输出是周围词的词向量。
* Skip-gram 模型: 能够根据词本身来预测周围有哪些词.
* 也就是说Skip-gram模型的输入是词A本身输出是词A周围的n个单词的词向量.
![Skip-gram 模型/img/NLP/Word2Vce/Skip-gram.png)
明天看看这个案例https://blog.csdn.net/lyb3b3b/article/details/72897952
## 补充NPLM - Ngram 模型
* n-gram 模型是一种近似策略,作了一个马尔可夫假设:认为目标词的条件概率只与其之前的 n 个词有关
* NPLM基于 n-gram, 相当于目标词只有上文。
* * *
参考资料:
1. https://www.cnblogs.com/iloveai/p/word2vec.html