随着计算机记录的文字资料越来多,尤其是伴随着互联网发展,文字资料与日俱增。如何让计算机自动处理这些文字资料甚至是理解这些文字呢?计算机专家们为此开始了几十年的研究。
我根据自己的认识来总结以下自然语言处理这些年都干了些什么,有哪些好的应用。
一、基础研究
(1)词、分词
统一一下文本里面的词频,看看哪些词是提及最多的等等。
英文,词与词之间是用空格分开的,统计词很简单。最多加上stemming算法,就是同一个词的不同时态、单复数等处理。
中文,词与词之间没有空隙,最多在句子之间有标点符号。要统计中文词汇,首先要做个分词的步骤,业内术语叫做“中文分词”。做分词研究是中文自然语言处理的第一步,方法有很多种,无非是词典和机器学习。
(a)基于词典的方法
搞一个汉语词典,以一定的数据结构存储方便查找。其中一种叫做“Trie Tree”的数据结构很合适。词典的持续更新很重要,词典里面没有的新词就只能被分成单字。基于词典的有点就是一个字:快!
字典的持续更新是可以做到的,爬虫每天爬虫新闻、微博的内容,用新词发现算法从中发现新词更新到词典中。
新词发现算法,是一直统计算法,在一堆语料中通过统计计算字与字之间的粘合度、左右邻居的信息熵就可以把其中的词找出来,效果很好。
(b)机器学习
早些年的机器学习方法有HMM(隐马尔可夫模型),CRF(条件随机场),效果都不错,在封闭训练集上等达到百分之九十几的准确率。这些机器学习的方法能在一定程度上识别新词,但仅仅是一定程度上。
最近几年深度学习发展很快,有些研究者把它用到分词上也达到了很好的效果。不过,总感觉这是杀鸡用牛刀。
实际应用中,都是字典加机器学习的方法结合来用的。
(2)词性标注(POS)
词性是人类语言文字中的一个规则,而这个规则又比较松散,一个词有多个词性,位置不同词性不同,人类自己识别起来都很费劲。词性标注,就是让计算机通过一定的算法把一句话里面的每个词分成不同的词性。
词性标注,一般都是用机器学习的方法来做。通过人工事先标注好的语料来进行机器学习得到一个模型,计算机程序使用这个模型再来对其它文本进行标注。早期的机器学习方法有HMM,CRF等。这些年也可以上深度学习来做。
(3)命名实体识别(NER)
命名实体,就是代表一个实体的词汇,比如,人名、地名、机构名。这个一般的做法是规则+机器学习的方法。CRF同样在这里有用武之地。
(4)句法分析
让计算机来把一句话的主谓宾、定状补给分析出来。这也是一项挑战。同样,它也可以通过CRF来实现。
以上过程,分词、词性标注、命名实体识别、依存句法分析都可以用CRF来实现。从原理上,他们有相同的特点,都是最字或词的一种标注。
CRF分词是由字组词的过程,训练语料把每个字标记成词的开头、中间、结尾等标记。训练过程是学习这些字、标记的上下文关系;分词过程是根据学习的关系给字打上标记,再根据这些标记组成词。
CRF词性标注、命名实体识别、句法分析是同样的道理,但他们标注的都是词、词性等关系。
(5)语音处理
以上谈及的都是对文本内容的研究,语言的另一种形式——语音也是多年来计算机研究的一个领域。
这里的语音处理主要是跟自然语言处理相关的,最主要的是语音转文本,其它还有文本转语音,唤醒词识别。
唤醒词识别,值得特别介绍一下。现在智能设备很多,智能语音助手、智能音响等具有语音交互功能的软硬件产品,基本上都有一个“语音唤醒功能”。比如你给你的智能音响或机器人起了个名字叫“小白”,你叫它“小白”以后,它就开始和你交互了;如果你叫它“小黑”,它就不搭理你。这个“小白”就是它的唤醒词,每个人对自己的产品都可以用不同的唤醒词。唤醒词识别做的就是如何训练一个特定词汇的识别模型,甚至还包括个人音色特征(别人叫它小白也不行)。
以上就是自然语言处理做的基础研究内容,这些基础研究有什么应用能让我们的生活更美好呢?