NLPJob

标签热度

机器学习 coursera 斯坦福大学 公开课 斯坦福 深度学习 自然语言处理 python 数据科学 andrew ng 数学 nlp 数据分析 数据挖掘 神经网络 大数据 计算机科学 英语 deep learning 统计学 算法 课件 数据可视化 机器学习公开课 机器学习笔记 google 机器学习视频 计算机 商业 推荐系统 数据结构 r语言 java 密码学 udacity 金融 免费电子书 电子书 公开课笔记 计算机视觉 商务英语 学术英语 python数据可视化 机器学习课程 机器人 ted 文本挖掘 r 视频 领导力 java编程 回归模型 excel 深度学习课程 mysql cousera公开课 统计 大数据公开课 ted公开课 ted演讲 线性回归 mit 概率图模型 金融市场 tensorflow 学习英语 物联网 大数据专项课程 python入门 大数据课程 英语写作 英语学习 算法课程 强化学习 高级机器学习 kaggle 文本分析 机器学习资料 函数式编程 scala 游戏设计 cousera 机器学习系统 机器人公开课 开源代码 人工智能 普林斯顿大学 machine learning 线性代数 代价函数 软件工程 javascript 伯克利 管理 市场营销 财务会计 沃顿商学院 网页开发 网站开发 web开发 网络安全 python数据科学 商业分析 非对称密码学 对称密码学 应用密码学 大规模数据科学 英语听说 概率 机器学习基石 python机器学习 算法公开课 源代码 数学思维 社交网络分析 微积分公开课 杜克大学 机器学习公开课视频 公开课视频 coursera公开课视频 coursera公开课 贝叶斯 信息论 离散数学 宾夕法尼亚大学 neural networks 伯克利大学 密歇根大学 成本函数 梯度下降 云计算 编译器 自动机 cs101 daphne koller spark 软件 会计 英语交流 商业策略 风险管理 资产管理 地理信息系统 gis 卷积神经网络 面向对象编程 序列模型 移动应用开发 数据库 计算机通信 敏捷开发 高级商务分析 商务分析 商务英语课程 c语言 数据管理 投资 计算原理 计算基础 推荐系统导论 学术英语写作 android应用开发 android开发 android 机器人课程 机器人学 数据科学竞赛 yandex 深度学习公开课 深度学习书籍 数据集 机器学习资源 分布式 微积分 大规模机器学习系统 统计推断 数据科学公开课 游戏 数学思维公开课 机器学习课件 数学公开课 微积分公开课视频 微积分公开课下载 mit微积分 mit公开课 龙星计划 神经网络公开课 coursera视频 斯坦福公开课 windows ios udacity公开课 无人驾驶汽车 人机交互公开课 人机交互 正则化 过拟合 逻辑回归 模型思维 网易公开课 acl net 逻辑 cmu 情感分析 我爱公开课 引言 普林斯顿 经济 saas 52opencourse 逻辑导引 图模型 chirs manning dan jurafsky ppt 时间序列 go语言课程 go语言 工程师 语法 区块链基础 区块链 软件开发 商务基础 运营管理 商务 机器学习实战 数据系统 投资管理 swift 计算机安全与系统管理 系统管理 计算机安全 seo策略 seo工具 seo 组织领导力 css3 html5 会计基础 c sharp 英语沟通 并发 并行 全栈开发 数据仓库 商业智能 投资策略 金融基础 数据工程 python零基础 安全系统 现代密码学 硬件安全 软件安全 网络安全基础 递归神经网络 信息检索 云计算网络 云计算应用 云计算基础 云计算概念 分组交换网络 局域网 创意写作 写作 数学基础 台湾大学 基因序列 生物信息学 斯坦福算法课程 软件架构 软件设计 java程序设计 r语言基础 图论 组合数学 python数据表示 python基础 深度学习专项课程 游戏设计与开发 游戏开发 游戏设计概念 游戏设计艺术 angular 恐龙古生物学 恐龙 古生物学 推荐系统评价 jquery 英语语法 c# 高级算法 算法专项 iot python专项课程 python入门课程 商务英语交流技巧 商务英语交流 python社交网络分析 python文本挖掘 机器学习专项 金融价值 金融决策 金融公开课 数据结构与算法 大数据机器学习 大数据分析 商业与金融建模 金融建模 c++ 学术英语听说 数据分析工具 编程入门 编程 编程基础 算法思维 计算机基础 秘钥管理 hdfs 数据工程师 hive 3d交互设计 3d建模 虚拟现实 vr 洛桑联邦理工学院 函数式编程入门 数据科学课程 数据科学专项课程 学术英语课程 学术英语写作课程 斯坦福算法专项课程 斯坦福算法 python数据分析 英文简历 英文面试 英文写作 贝叶斯方法 商业分析技术 大数据建模 数据获取 数据清洗 文本挖掘课程 聚类分析 python公开课 python课程 主成分分析 深度学习资料 词意消歧 词义消歧 推荐系统入门 python书籍 机器学习算法 数据结构课程 图像处理 贝叶斯方法实战 深度学习源代码 sibyl p2p 机器学习书籍 数据结构资料 凸优化 推荐系统入门资料 数据科学导论 可视化 机器学习开源工具包 jane mcgonigal 公开课社区 挖课 courseminer 文本情感分析 多变量微积分 社会计算 数学分析公开课 概率图模型公开课 百度 吴恩达 香港科技大学 函数式语言 scala公开课 class2go coursera无法连接 coursera打不开 keith devlin 数学思维简介 社交网络 余凯 张潼 机器人视频 robert sedgewick 算法上 多伦多大学 莱斯大学 华盛顿大学 佐治亚理工学院 神经网络视频 矩阵 coursera在线视频

Text Summarization

Keyword Extraction

Text Processing

Word Similarity

Best Coursera Course

+11 投票

一、课程介绍

斯坦福大学于2012年3月在Coursera启动了在线自然语言处理课程,由NLP领域大牛Dan Jurafsky 和 Chirs Manning教授授课:
https://class.coursera.org/nlp/

以下是本课程的学习笔记,以课程PPT/PDF为主,其他参考资料为辅,融入个人拓展、注解,抛砖引玉,欢迎大家在“我爱公开课”上一起探讨学习。

课件汇总下载地址:斯坦福大学自然语言处理公开课课件汇总

二、拼写纠错(Spelling Correction)

1)任务定义

拼写纠错(Spelling Correction),又称拼写检查(Spelling Checker),往往被用于字处理软件、输入法和搜索引擎中,如下所示:

拼写纠错一般可以拆分成两个子任务:

  • Spelling Error Detection:按照错误类型不同,分为Non-word Errors和Real-word Errors。前者指那些拼写错误后的词本身就不合法,如错误的将“giraffe”写成“graffe”;后者指那些拼写错误后的词仍然是合法的情况,如将“there”错误拼写为“three”(形近),将“peace”错误拼写为“piece”(同音),将“two”错误拼写为“too”(同音)。
  • Spelling Error Correction:自动纠错,如把“hte”自动校正为“the”,或者给出一个最可能的拼写建议,甚至一个拼写建议列表。

2)Non-word拼写错误

  • Spelling error detection:任何不被词典所包含的word均被当作spelling error,识别准确率依赖词典的规模和质量。
  • Spelling error correction:查找词典中与error最近似的word,常见的方法有Shortest weighted edit distance和Highest noisy channel probability。

3)Real-word拼写错误

  • Spelling error detection:每个word都作为spelling error candidate。
  • Spelling error correction:从发音和拼写等角度,查找与word最近似的words集合作为拼写建议,常见的方法有Highest noisy channel probability和Classifier。

4)基于Noisy Channel Model的拼写纠错

Noisy Channel Model即噪声信道模型,或称信源信道模型,这是一个普适性的模型,被用于语音识别、拼写纠错、机器翻译、中文分词、词性标注、音字转换等众多应用领域。其形式很简单,如下图所示:

噪声信道试图通过带噪声的输出信号恢复输入信号,形式化定义为:

应用于拼写纠错任务的流程如下:

noisy word(即splling error)被看作original word通过noisy channel转换得到,现在已知noisy word(用x表示)如何求得最大可能的original word(用w表示),公式如下:

P(w)为先验概率,P(x|w)为转移概率,二者可以基于训练语料库建立语言模型和转移矩阵(又称error model,channel model)得到。

下面通过一个Non-word spelling error correction的例子加以解释:

给定拼写错误“acress”,首先通过词典匹配容易确定为“Non-word spelling error”;然后通过计算最小编辑距离获取最相似的candidate correction,需要特别说明的是,这里的最小编辑距离涉及四种操作:

据统计,80%的拼写错误编辑距离为1,几乎所有的拼写错误编辑距离小于等于2,基于此,可以减少大量不必要的计算。

通过计算最小编辑距离获取拼写建议候选集(candidate w),此时,我们希望选择概率最大的w作为最终的拼写建议,基于噪声信道模型思想,需要进一步计算P(w)和P(x|w)。

通过对语料库计数、平滑等处理可以很容易建立语言模型,即可得到P(w),如下表所示,计算Unigram Prior Probability(word总数:404,253,213)

接下来,可以基于大量<misspelled word x=x1 x2 x3 ... xm, correct word w=w1 w2 w3 ... wn>pair计算del、ins、sub和trans四种转移矩阵,然后求得转移概率P(x|w):

计算P("acress"|w)如下:

计算P(w)P(“acress”|w)如下:

“across”相比其他candidate可能性更大。

上面建立语言模型时采用了unigram,也可以推广到bigram,甚至更高阶,以较好的融入上下文信息。

如句子“a stellar and versatile acress whose combination of sass and glamour…”,计算bigram为:

P(actress|versatile)=.000021   P(whose|actress) = .0010

P(across|versatile) =.000021   P(whose|across) = .000006

则联合概率为:

P(“versatile actress whose”) = .000021*.0010 = 210 x10-10

P(“versatile across whose”)  = .000021*.000006 = 1 x10-10

“actress”相比“across”可能性更大。

5)Real-word拼写纠错

Kukich(1992)指出有25%~40%的拼写错误都属于Real-word类型,与Non-word类型相比,纠错难度更大,因为句子中的每个word都被当作待纠错对象。通常,解决方法分两步:

例如,给定句子S=w1,w2,w3,…,wn,为每个wi生成candidate set,如下:

  • Candidate(w1) = {w1, w’1 , w’’1 , w’’’1 ,…}
  • Candidate(w2) = {w2, w’2 , w’’2 , w’’’2 ,…}
  • ... ...
  • Candidate(wn) = {wn, w’n , w’’n , w’’’n ,…}

最后,选择概率最大的序列W为自动纠错后的句子,与中文分词、音字转换等应用相同,可以表示成词网格形式,转化为HMM的解码过程:

为了简化起见,一般规定一个句子中最多有一个word存在splling error(事实上,所出现的情况也的确如此)。

6)应用

实际的拼写纠错系统一般会遵守如下HCI(Human Computer Interface)准则:

根据应用场景不同(Domain Sensitivity),需要对语言模型进行特别的处理,如:

除了字面上的拼写错误,还有可能同音导致,所以,有些系统将“error model”转化为“Phonetic error model”解决拼写纠错问题。

另外,键盘上临近的按键更容易引入spelling error pair,据此可以对转移矩阵进行加权。

我们还可以将拼写纠错问题转化为分类问题,通过构建训练语料库,抽取features,训练分类模型,预测新实例等一系列过程解决,如下:

三、参考资料

  1. Lecture Slides: Spelling Correction
  2. http://en.wikipedia.org
  3. Kukich, Karen. 1992. Techniques for automatically correcting words in textACM Computing Surveys 24(4):377-437.
分类:自然语言处理 | 用户: (2.4k 分)
修改于 用户:

推荐:

 

抛几个问题供大家讨论:

  1. 搜索引擎中如何判断当前query是否存在拼写错误?
  2. 文中主要介绍了英文拼写纠错,请问中文拼写纠错与其有何不同?如何设计中文拼写纠错算法?
  3. Query Correction和Query Suggestion之间的区别?如何设计算法?
ngram?
同问中文拼错的问题

句式?词错误?字错误?

没看明白p(x|w)是怎么算出来的。

可以基于大量<misspelled word x=x1 x2 x3 ... xm, correct word w=w1 w2 w3 ... wn>pair,计算del、ins、sub和trans四种转移矩阵,然后求得转移概率P(x|w)

<misspelled,correct word> misspelled是怎么得到的?

<misspelled,correct word>是训练语料

hi,想问下,如果有<misspelled,correct word>是训练语料

为什么不直接算P(W|X),要通过P(X|W)*P(W)来算呢?

1个回答

0 投票

以下整理自微博上昊奋的回答:

抛砖引玉。英文和中文的区别在于,英文没有输入法,最小处理单元是一个词(相对于中文的字),而中文处理的最小单元其实是词。英文拼写纠错主要针对的是一 个word中有部分字母拼写错误,而中文的纠错主要是针对词,多数由于输入法联想得到的词和我们希望的词不同导致,或因前后鼻音等南方人拼音问题导致

所以中文的纠错主要是针对词,相当于英语的phrase。面对word的纠错无法直接应用于中文。中文的纠错会根据词到拼音的转换,得到具有同样拼音的其 他的词或具有前后鼻音的会混淆的拼音对应的其他的词。这里切得的词可以基于分词算法也可以基于n-gram来得到词,并需要分析词之间的关联或单个词的出 现概率等

一般需要挑选和其他词关联明显小,或给定词本身出现概率相比同拼音其他词出现概率小的进行所谓的纠正。为了做到这点,需要有对应的转换词库以及对应的同音 词的出现频率以及和其他词的co-occurrence等计算所得的概率。这里也可以应用同样适用于英文纠错的near duplicated的query log进行推荐。

query correction应该是query suggestion的子类。前者主要在于纠正拼写或输入错误,而后者还可以关联搜索的推荐,类似related search,以及根据结果的反馈的查询扩展等。前者关注查询本身,主要利用大corpus得到的简单的统计出现和共现模型以及词典,而后者还会依赖 query log和搜索结果对输入的修正

王利锋Fandy:回复@昊奋:补充一个,中文中还会混杂拼音

恩,对于混淆拼音或英文等字符的话,即可按照之前对英文的来处理。之前主要写出和基于unigram的基于编辑距离等的引文纠错的区别,在不考虑分词和纠错的联合模型的情况下,可直接转换为图网,找出和其他相连节点关联度弱且出现概率低的词并纠正。

我刚刚的评论仅仅写了如果是我,打算怎么做。原则是:利用词和拼音转换得到候选词,充分利用大corpus的威力(类似google和Microsoft提供的n-gram library)估计词出现频率和贡献概率,建模(词网或图)获得top-k可被替换的词组合。

用户: (3.2k 分)
进一步补充一下:上面提到了一个通用的框架,并没有涉及到学习算法。大部分是通过简单的概率计算和建模,借助基于图的语言模型做的非监督的方法。当然在选择top-k(往往一个词进行纠错,这和英文中一个句子中只有一个word有speling error是类似的),可以将问题也看作是一个序列标注问题,对于输入的查询,其输出是区分无需纠正(标为0)和需要纠正的那些词(标为1)的序列。也可以应用结构化学习方法,输出排序列表,这样可以进行top-k的控制。
...