人工智能之自然语言处理是干什么的?
自然语言处理(NLP, Nature Language Processing),对一般人来说是个陌生的概念。但是,作为人类,每天都在处理着自然语言。
这里的自然语言,是相对于计算机语言说的,就是人们平常说的话,汉语、英语、法语等等人类创造并使用的语言就是自然语言,是人类发展过程中“自然”产生的。
计算机语言是计算机被发明后,人类为了更好的使用计算机、与计算机沟通而编制的语言,相较于自然语言,它更简单更规则化。
自然语言处理,也是在计算机领域才被提及的,是计算机应用的一个分支,是让计算机处理人类的语言,并试图理解人类的语言。其实,我们每个人每天的说话、读书、写字都是在处理着自然语言,但不能说每个人都是弄自然语言处理的。
世界上绝大多数的人类语言都有文字,人类历史很长很长的时间(在留声机发明之前)都是通过文字记载历史、传承知识的。那些没有文字的语言基本上都消亡了吧。
在计算机时间里,文字被二进制化存储在硬盘、光盘等存储介质里面。通常我们使用电脑时说的“文本”(比如,你正在对的这篇文章)就是计算机记录的自然语言——文字。
另外,自然语言也可以被计算机记录为另外一种形式——语音。文本是看的,语音是听的。不过文字的信息密度要比语音高很多,你可以体会一下微信聊天。别人发给你的消息,文本的话几秒钟就看完了,同样的信息量可能要听一分钟的语音才能获得。这也是好多人聊天时不喜欢对方发语音的缘故。
人类的语言很多,对应的文字也就很多。计算机要存储这些不同的语言文字就要对各种文字进行编码。这就是计算机字符编码。
英文最简单,26个英文字母就搞定,最多再加上10个阿拉伯数字,和一些标点符号,再区分一下大小写,所有加起来不超过128个(2的8次方,计算机的二进制对2的n次方浑然天成)。编码很容易,形成了ascii编码,占用一个字节,从0开始排到127足够。
欧洲有些国家的文字就不止是26个英文字母了,还有其它字母,比如法语、俄语等。还好他们还都是字母文字,再往后排就是了。
但是到了亚洲,尤其是中国,中文汉子一下子就多了起来,有几万个啦,这下一个字节是装不下了。开始用更多字节进行编码。
计算机发展一开始,就只有ascii编码。后来各个国家为了在计算机上存储自己国家的文字就自己搞了自己的文字编码。中国汉字最初是GB-2312,这个国家标准用两个字节来表示一个汉字,按道理两个字节最多可以有2的16次方也就是65536个汉字,但是这个标准只编码进去6000多个汉字。这个标准的直接后果是,早期很多稍微不常用的字在计算机中就无法使用,比如朱镕基的“镕”字就不包含在里面。这也导致公安的计算机系统登记人名时常常用其它字代替的后果。
这样下去可不行,就有搞了个GBK、GB18030扩展了GB-2312,把更多的汉字(包括繁体字)也包括进去了。从此在计算机上使用汉字的效果基本很好了。
同样其它亚洲国家,比如日本最初也自己搞了自己日文的编码。
各国国家自己搞编码自己用,也无大碍,毕竟国家与国家之间的计算机文本交换很少。当互联网发展起来时,各自编码的方式就严重阻碍了信息交流。比如早起上网的人经常遇到网页乱码的问题。
各自编码之后,两个世界组织ISO和unicode.org试图分别搞个统一的编码,后来他们合并了,经过几十年的努力,现在的Unicode几乎完美了,它囊括了世界上各种语言文字的字符,还包括emoji字符,比如这个笑脸:?
—————– 以上都是扯淡,回顾一下计算机记录自然语言的方式和历史 —————
随着计算机记录的文字资料越来多,尤其是伴随着互联网发展,文字资料与日俱增。如何让计算机自动处理这些文字资料甚至是理解这些文字呢?计算机专家们为此开始了几十年的研究。
我根据自己的认识来总结以下自然语言处理这些年都干了些什么,有哪些好的应用。
一、基础研究
(1)词、分词
统一一下文本里面的词频,看看哪些词是提及最多的等等。
英文,词与词之间是用空格分开的,统计词很简单。最多加上stemming算法,就是同一个词的不同时态、单复数等处理。
中文,词与词之间没有空隙,最多在句子之间有标点符号。要统计中文词汇,首先要做个分词的步骤,业内术语叫做“中文分词”。做分词研究是中文自然语言处理的第一步,方法有很多种,无非是词典和机器学习。
(a)基于词典的方法
搞一个汉语词典,以一定的数据结构存储方便查找。其中一种叫做“Trie Tree”的数据结构很合适。词典的持续更新很重要,词典里面没有的新词就只能被分成单字。基于词典的有点就是一个字:快!
字典的持续更新是可以做到的,爬虫每天爬虫新闻、微博的内容,用新词发现算法从中发现新词更新到词典中。
新词发现算法,是一直统计算法,在一堆语料中通过统计计算字与字之间的粘合度、左右邻居的信息熵就可以把其中的词找出来,效果很好。
(b)机器学习
早些年的机器学习方法有HMM(隐马尔可夫模型),CRF(条件随机场),效果都不错,在封闭训练集上等达到百分之九十几的准确率。这些机器学习的方法能在一定程度上识别新词,但仅仅是一定程度上。
最近几年深度学习发展很快,有些研究者把它用到分词上也达到了很好的效果。不过,总感觉这是杀鸡用牛刀。
实际应用中,都是字典加机器学习的方法结合来用的。
(2)词性标注(POS)
词性是人类语言文字中的一个规则,而这个规则又比较松散,一个词有多个词性,位置不同词性不同,人类自己识别起来都很费劲。词性标注,就是让计算机通过一定的算法把一句话里面的每个词分成不同的词性。
词性标注,一般都是用机器学习的方法来做。通过人工事先标注好的语料来进行机器学习得到一个模型,计算机程序使用这个模型再来对其它文本进行标注。早期的机器学习方法有HMM,CRF等。这些年也可以上深度学习来做。
(3)命名实体识别(NER)
命名实体,就是代表一个实体的词汇,比如,人名、地名、机构名。这个一般的做法是规则+机器学习的方法。CRF同样在这里有用武之地。
(4)句法分析
让计算机来把一句话的主谓宾、定状补给分析出来。这也是一项挑战。同样,它也可以通过CRF来实现。
以上过程,分词、词性标注、命名实体识别、依存句法分析都可以用CRF来实现。从原理上,他们有相同的特点,都是最字或词的一种标注。
CRF分词是由字组词的过程,训练语料把每个字标记成词的开头、中间、结尾等标记。训练过程是学习这些字、标记的上下文关系;分词过程是根据学习的关系给字打上标记,再根据这些标记组成词。
CRF词性标注、命名实体识别、句法分析是同样的道理,但他们标注的都是词、词性等关系。
(5)语音处理
以上谈及的都是对文本内容的研究,语言的另一种形式——语音也是多年来计算机研究的一个领域。
这里的语音处理主要是跟自然语言处理相关的,最主要的是语音转文本,其它还有文本转语音,唤醒词识别。
唤醒词识别,值得特别介绍一下。现在智能设备很多,智能语音助手、智能音响等具有语音交互功能的软硬件产品,基本上都有一个“语音唤醒功能”。比如你给你的智能音响或机器人起了个名字叫“小白”,你叫它“小白”以后,它就开始和你交互了;如果你叫它“小黑”,它就不搭理你。这个“小白”就是它的唤醒词,每个人对自己的产品都可以用不同的唤醒词。唤醒词识别做的就是如何训练一个特定词汇的识别模型,甚至还包括个人音色特征(别人叫它小白也不行)。
以上就是自然语言处理做的基础研究内容,这些基础研究有什么应用能让我们的生活更美好呢?
文章来源于:猿人学网站的python教程。
版权申明:若没有特殊说明,文章皆是猿人学原创,没有猿人学授权,请勿以任何形式转载。
- 点赞
- 收藏
- 关注作者
评论(0)