自然语言处理

															——小小科普与遐想

什么是NLP?

人与计算机沟通的桥梁。
让机器具备像人一样的理解能力。

“语言理解是人工智能领域皇冠上的明珠”
——比尔·盖茨

桥梁:自然语言理解(NLU)及自然语言生成(NLG)。
人工智能:随便说一句话,机器都有相应切正确的操作

NLP运用场景

搜索、问答、风控、信息提取、推理、预测
https://www.zhihu.com/question/264459321

Text2SQL:
https://www.bilibili.com/video/av379474021/

存在的问题

语音输入的多字少字,噪音等
语言规律错综复杂、随意性、上下文理解(一词多义)、语言多样性、知识依赖(需要一定的知识才能理解一句话) 等等
https://blog.csdn.net/conglu1891/article/details/100311192

遐想

可实现的
看看航班,下周二出发去纽约的
识别出:
意图:订机票
时间:下周二
目的地:纽约
暂未实现的
可以通过随身携带耳机一样大小的东西,来实现实时的交互,包括聊天的情感分析结果、推荐用语用词、有问必答、记录与提醒、日程安排

分词

字典树

几种字典树:https://segmentfault.com/a/1190000008877595
1.经典Trie树:不适用中文、空间消耗大
2.基于链表的Trie树:查询效率降低
3.基于Hash的Trie树:hash计算耗时、以及哈希表占用空间
4.双数组树:速度和空间得以优化,新增词可能导致全树重构

分词原理

1.根据词库构建字典树
2.遍历句子获取每个字的前缀词,构成有向无环图(DAG)
3.利用动态规划求出最大概率路径
参考:
https://blog.csdn.net/sinat_26811377/article/details/100692140

jieba支持四种分词模式
- 精确模式:试图将句子最精确地切开,只输出最大概率组合;
- 搜索引擎模式:在精确模式基础上,对长词再次切分,提高召回率,适用于搜索引擎分词;
- 全模式:把句子中所有的可以成词的词语都扫描出来;
- paddle模式,利用PaddlePaddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词。同时支持词性标注。

隐马尔可夫模型

参考:https://www.cnblogs.com/fulcra/p/11065474.html

熵:
任何一种能量在空间中分布的均匀程度,能量分布得越均匀,熵就越大
例:一滴墨水滴在清水中,部成了一杯淡蓝色溶液
热水晾在空气中,热量会传到空气中,最后使得温度一致

以前理解的是越混乱,熵就越大

1.马尔可夫模型
宝宝吃、玩、睡 三种状态转换会构成一个矩阵,矩阵元素Aij 表示从i -> j状态变换的概率
矩阵为状态转移矩阵

2.隐马尔可夫
天气的例子中,天气有三种状态,有三种水藻,水藻和天气的转变之间也存在某种影响,水藻状态变成不同的状态,出现不同天气有相应的概率。
三种水藻状态变换构成状态转移矩阵,水藻状态对应某种天气的概率发射概率矩阵
记录每一天水藻的变化状态,记为隐含状态序列,观测天气的变化状态,记为观测状态序列

他们之间的关系:隐含状态 <输出概率> 可见状态

隐马尔可夫模型用于解决三类问题
骰子的例子
1).(运用于分词)我有三个骰子,六面骰,四面骰,八面骰。我也知道我掷了十次的结果(1 6 3 5 2 7 3 5 2 4),我不知道每次用了那种骰子,我想知道最有可能的骰子序列。
	Viterbi 算法求解
	逐一计算出最大的概率就可以求出总结果的概率序列
	
2).拿到三个骰子以及观测结果,求每个结果的概率。根据结果的概率检验已知模型是否正确

3).只知道几种骰子,不知道转换概率,根据观测需求,求每种筛子类型

3.Viterbi 维特比算法源码
https://zhuanlan.zhihu.com/p/40549950

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐