1. NLP定义
NLP(自然语言处理)= NLU(自然语言理解)+ NLG(自然语言生成)。
自然语言理解(Natural Language Understanding)是使计算机理解自然语言(人类语言文字)等,重在理解(难道NLG就不需要理解语言了吗?)。具体来说,就是理解语言、文本等,提取出有用的信息(很像是数据挖掘),用于下游的任务。它可以是使自然语言结构化,比如分词、词性标注、句法分析等;也可以是表征学习,字、词、句子的向量表示(Embedding),构建文本表示的文本分类;还可以是信息提取,如信息检索(包括个性化搜索和语义搜索,文本匹配等),又如信息抽取(命名实体提取、关系抽取、事件抽取等)。
自然语言生成(Natural Language Generation): 提供结构化的数据、文本、图表、音频、视频等,生成人类可以理解的自然语言形式的文本(输入又是什么呢?如果是所述的seq to seq,是容易理解的,但是假设我想生成一篇新闻稿,那需要的输入又是什么呢?)。NLG又可以分为三大类,文本到文本(text-to-text),如翻译、摘要等、文本到其他(text-to-other),如文本生成图片、其他到文本(other-to-text),如视频生成文本。
NLP面临很多的挑战,其中比较显著的两个问题是:相同的意思具有不同的表达方式、一词多义(需要根据上下文判断具体的含义)。
2. 机器翻译
2.1 主要内容
最简单的方法就是把机器翻译的sequence to sequence问题经过分词后转换成word to word的问题。如果用最简单的方式来实现的话,就是使用哈希表来做。但这样一来,虽然效率很高,但是每个词只能指定一种意思(如频率出现最高的词),而且也可能翻译出来的句子语法不通顺。那我们能否在以上系统的基础上进行改进,从而使得语法变得通顺。
我们以中翻英为例,假设要翻译的句子为今晚的课程有意思,经过分词后则为:今晚 / 的 / 课程 / 有意思。通过逐词的翻译得到:tonight,of,course,interesting(翻译模型)。
由于逐词翻译忽略了语法,所以如果要想让翻译结果变得通顺,可以对翻译结果进行排列枚举,求出概率最大的排列(语言模型),具体排列如下所示:
- tonight,the course,interesting,of
- tonight,interesting,of,the course
- of,the course,tonight,interesting
- of,tonight,interesting,the course
- of,interesting,the course,tonight
- the course,of,interesting,tonight
- the course,of,tonight,interesting 概率最大
- the course,tonight,of,interesting
- the course,interesting,tonight,of
- the course,interesting,of,tonight
如果有n个单词,排列总个数为n!,时间复杂度为O(2^n)(NP hard的问题)。
如果把上述提到的Translation Model和Language Model结合到一起,也称作是Decoding Algorithm(Vertible Algorithm,主要采用了DP算法),即能直接求出。
中翻英的数学描述是:把中文记为,把英文记为,翻译的目标就是求在给定中文的条件下,求出英文的最大概率对应的序列:
根据贝叶斯概率公式可知:
对于给定的来说,是个常量,所以可以不予考虑。则。
2.2 总结
其中维特比算法是把时间复杂度从降低到。其中上图有一些错误。
最让人疑惑的点在于,为什么翻译模型对应的是,不是给定中文翻译成英文单词吗?
https://www.quora.com/What-are-the-major-open-problems-in-natural-language-understanding