1.什么是NLP
NLP,即Natural Language Processing,中文为自然语言处理,是人工智能领域的一个重要方向,也是公认为最难的方向。自然语言处理是一门融语言学、心理学、计算机科学、数学等于一体的科学。
今天我们的生活离不开NLP,日常中的输入法,搜索,语音指令控制,新闻阅读推荐,广告等都在应用NLP技术。
1.1常见NLP任务
- 文本分类:将文本对象(文档或句子)映射到事先定义好的类别体系的技术。常见的应用包括:垃圾邮件识别,新闻主题分类,情感分析,搜索类目导航等。
- 文本匹配 / 相似度(Text Matching / Similarity):通过匹配文本对象找到相似体。它的主要应用有:自动拼写修正,重复数据删除,以及基因组分析等等。相似度通常采用的方法就是计算样本间的 “距离”(Distance)。常见计算相似度的方法有余弦相似度、编辑距离( 将一个字符串转换为另一个字符串时,所需的最小编辑次数。可允许的编辑操作有插入,删除,或者替换)、KL散度(概率分布之间的距离)等。
- 指代消解(Coreference Resolution):指代消解是一个在句子里寻找单词(或短语)之间关系连接的过程。通常是计算句子中的“他“、“她”、“它”、“这里”、“那里”等所指代的具体实体。指代消解常被用于文件摘要,问答系统,以及信息提取等。
- 文本摘要:给出一个文本文章或段落,自动对它做总结,并根据重要性、相关性的程度,按次序输出句子(依次输出最重要并最相关的句子)。
- 机器翻译:通过处理语法、语义学以及真实世界的信息,自动将一个文本的语言翻译为另外一个语言的文本。
- 视觉字符识别:给出一打印后的文本图,识别与之对应的文本。
- 文档信息化:对文档(网站、文件、pdf和图片)里的文本数据进行语法分析,将它们处理为干净、可分析的格式。
2. 怎么学习NLP
- 分类:监督学习。常用分类算法:
- 决策树分类
- 朴素贝叶斯分类算法(naive Bayesian classifier)
- SVM
- 神经网络法
- k-最近邻法(k-nearest neighbor,kNN)
- 模糊分类法
- 等等
- 聚类:把相似的东西分到一组, 无监督学习。常用聚类方法:
- K均值(K-means clustering)聚类是最典型的聚类算法
- 属于划分法的K-MEDOIDS算法、CLARANS算法;
- 属于层次法的BIRCH算法、CURE算法、CHAMELEON算法等;
- 基于密度的DBSCAN算法、OPTICS算法、DENCLUE算法等;
- 基于网格的STING算法、CLIQUE算法、WAVE-CLUSTER算法;
- 基于模型的方法
- 等等
- 监督学习
- 提供数据训练模型,NLP中模型的概念,可以理解成一个函数f,给定一个文本,给出相应的输出。如,f(“鸡蛋汤洒了”) = “餐品洒了”。特征就是将“鸡蛋汤洒了”量化成一些我们需要的数值,比如一个很简单的方式(不局限于这一种):量化后的输入只包含两维,第一维表示”是否包含菜品名“,第二维表示”是否包含洒这个动词“,那这句的输入为x1=1;x2=1(1表示是,0表示不是)。训练数据中,“鸡蛋汤洒了”是“餐品洒了”的意图;通过模型训练,他学到“鸡蛋汤”和“冬瓜汤”是类似的语义,“xxx洒了”可能是“餐品洒了”的意图;那遇到“冬瓜汤洒了”时,尽管没见过,他也可能会准确判断出意图。
- 无监督学习
- 喂给机器很多特征数据(输入值),是希望机器通过学习找到输入数据中是不是存在某种共性特征、结构(比如都像猫),或者数据特征值之间是不是存在某种关联。而不是像监督学习那样希望预测输出结果。无监督机器学习主要涉及两个问题,一个是句子的语义表示,另一个就是如何做知识聚类。
- 句子语义表示
- 在无标签语料上训练句子表示学习模型,基本思想都是在【无标签训练数据上】设计【监督学习任务】进行学习,因此这里所说的【无监督语义表示学习】着重于训练数据是无标签的.
- 一种比较简单的设计方式是,让机器根据前文内容,去预测下一个出现的词。一段文本,每个位置的下一个词是已知的,不需要额外标注;这个已知的词就是当前任务的标准答案。可以看出,这是把无监督任务很好地转换成了有监督学习。通过这样一种方式,可以学到一个比较好的语义表示。
- 知识聚类
- 如上图所示,图(a)表达了初始的数据集,假设k=2(即我们需要将所有的样本聚成两类)。在图(b)中,我们随机选择了两个类别所对应的质心,即图中的红色质心和蓝色质心。然后如图©所示,分别求样本中所有点到这两个质心的距离,离哪个质心近就认为该样本是哪个类别,这是第一轮迭代。此时如图(d)所示,我们对当前标记为红色和蓝色的点分别求其新的质心,新的红色质心和蓝色质心的位置已经发生了变动。图(e)和图(f)重复了我们在图©和图(d)的
- 句子语义表示
- 喂给机器很多特征数据(输入值),是希望机器通过学习找到输入数据中是不是存在某种共性特征、结构(比如都像猫),或者数据特征值之间是不是存在某种关联。而不是像监督学习那样希望预测输出结果。无监督机器学习主要涉及两个问题,一个是句子的语义表示,另一个就是如何做知识聚类。