这里主要集中讲述,作者在NLP(自然语言处理)方面相关的工作和结果。有关NLP相关的定义、文章、成果均可以在网上找到,这里不再赘述。作者所讲述的内容将分成几个部分,如需要展开的部分作者将单独写文章予以补充。
在本章节中,作者主要是探讨NLP中非常基础的一个问题:词频统计(Term Frequency)。这个问题是很多NLP分析和处理的基础。弄清楚这个问题,有助于了解NLP处理中的问题和难点。
在本章节中,作者要介绍的是断句算法。断句算法的主要目的,就是将输入数据库的段落语料,切分成合理的完整的句子。整个处理过程需要保持句子的相对完整性。
基于词频统计分析的方法,起步阶段,最常见的算法就是N-Gram算法。其实质上,就是全连通的词频统计分析,进而更具统计来确定词语之间的相互关系。作者在网上查阅了有关N-Gram算法的资料时,突然有了一点“灵感”。于是就围绕这点灵感开始了一些研究工作,进而将这些灵感记录下来。
本篇文章的主要目的就是要介绍基于CLR C#的编程与开发。这里不会从基础知识讲起,而是告诉各位读者如何搭建快速有效的开发通道,避免反复实验导致浪费很多精力和时间。至于为什么选择SQLServer,新来的读者可以参考《我的NLP(自然语言处理)历程(1)——工作平台》中的相关解释。
本章将介绍将原始语料导入到SQLServer的基本方法。这个也是实施自然语言处理所需要进行的第一个基础步骤。
语料在导入到正式表以后,在进行自然语言处理之前需要做适当的语料清洗。清洗后的语料将会变得更加“干净”并有利于后期分析。这些均由C#函数来实现。
对原始语料库进行字频统计,是自然语言处理中最简单的一个基础步骤。不过作者觉得不应称其为“字频统计”,应该称之为符号频次统计。所有这些符号组成了原始语料库,这些符号的来源很多,其中包含了可识别的中文字符。
本章主要讲述词典数据的导入与词典数据的初步分析。作者从网络上找到了很多公开的词典库,尽力搜罗并整合入库。
本文将对相关系数的定义、性质等方面做重新叙述。之前作者编写过《我的NLP(自然语言处理)历程(4)——相关系数》,里面对相关系数进行了详细的叙述。但是作者之前的知乎账号存在问题,导致原来的文章已经无法操作和重新编辑。之前的文章里面存在一些问题和不完备的地方。在本篇文章中,将做出修正和调整。不过两篇文章的基本核心思路是一致的。
本章将介绍C#多任务在数据统计分析上的应用。另外,作者从一个侧面表达一下:NLP中的计算量是相当“恐怖”的。
本章要介绍的是基于相关系数 � 的分词算法。在之前的文章《我的NLP(自然语言处理)历程(10)》的结尾部分,初步提点了基于相关系数 � 的分词算法的一些理论要求。本章所需要介绍的就是实际操作环节。这个基于相关系数 � 的分词算法到底会带来什么样的惊喜和问题?
本章主要介绍有关断句的算法。即:从原始语料中,如何提取相对完整的句子(注意:不是无标点符号的短句)。这个算法不是中文处理中的重要算法。不过对于一些比较偏执于句子的人来说,就显得比较重要。
作者最近一直在研究分词算法,对词性标注部分也关注了一下。之前作者也写过关于分词算法(《我的NLP(自然语言处理)历程(12)——分词算法》和相关系数(《我的NLP(自然语言处理)历程(10)——相关系数》)的文章。经过一定的思考和尝试,还是决定重新将注意力集中在分词算法上。
作者开始尝试在词性方面的研究和探索。这次是利用相关系数去检测词汇的词性。
在进行自然语言处理的时候,数量词也是需要经常面对的一个问题。数量词相对于名词,特征明显,一般来说是较为容易提取的一类词汇。特别是基于阿拉伯数字的数量词,特征很明显,易于区别。对于基于中文数字的数量词则稍微麻烦一些,主要是因为数量词也充当一些词汇的具体成分。
例如:“一五一十”。这本是个习惯用语。如果按照简单的提取方法,这个字符串会被当做普通数词做处理。
信息熵本不是作者打算研究的重点。在受到相关系数分词算法的启发之后,也打算用信息熵测试一下分词的效果。结果其效果与前面提到的算法效果相似,存在的问题也相似。这里仅将这一思路写下来供大家参考。
在分词过程比较困扰的是:无论采取什么算法,总有“漏网之鱼”。总有那么一些情况下,经过算法分词的结果不符合预期。就像之前文章(《我的NLP(自然语言处理)历程(14)——基于相关系数的分词算法》)中谈到的问题:其实分词算法早已经能得到比较好的结果,只是没有比较好的评判标准,程序最终不知道如何选择哪一个结果。
作者之前对词性检测写过一篇文章《我的NLP(自然语言处理)历程(15)——相关系数与词性检测》。当时,只是试探性地做了一些工作,并不深入。本文将对词性检测的相关问题来一次系统性的梳理。