专业 靠谱 的软件研发伙伴

您的位置:首页 > 新闻动态 > 略见一斑:从预处理模块聊聊自然语言处理

发布日期:2020-05-21

略见一斑:从预处理模块聊聊自然语言处理


自然语言处理(Natural Language Processing)用得真的很多的,只要你网上冲浪,你就离不开NLP。从搜索引擎到智能客服助理,都有NLP的存在。那么NLP到底帮我们做了什么呢?NLP很难吗?我该从哪里入手?

NLP的典型处理过程

其实,NLP一点也不难,它并不是一门玄学。一个典型的中文NLP处理过程可以描述为以下:

原始数据 -> 分词 -> 清洗(去停词)-> 正规化(词干) -> 特征提取 -> 模型化

比如一遍文章我们要让计算机可以处理它,比较简单的方式就是把文章拆解为一个一个的词组,有了词组之后我们就能很好的测量不同文章的相似度(比如搜索引擎做关键词检索)。

一个简单的例子:现在有A,B,C三篇文章存在于我们的搜索引擎里面

A文章:小明毕业后留在清华大学深造

B文章:微软从18年开始为windows系统重新设计图标

C文章:清华大学和万科集团合作成立生命健康学院,为抗击疫情做出重要贡献。

我们将A,B 和C文章进行分词,并且去停词,那么我们将会得到以下的词组:

A 文章:["小明", "毕业", "清华大学","深造"]

B 文章:["微软", "18年", "开始", "windows系统", "重新", "设计", "图标"]

C 文章:["清华大学", "万科集团", "合作", "成立", "生命", "健康","学院", "抗击", "疫情","贡献"]

这里提到了分词和停词的概念,我来下一个定义:

分词:因为中文不像英文一样天然具有空格作为分词标志,所以中文要拆分成为一个一个具有实际意义的词组。英文:For most of history, anonymous was a woman.中文:小明毕业后留在清华大学深造去停词:停词指的是不具有实际意义的词组或者在当前处理内容领域内不具有实际价值的词组

经过这样处理之后的结果就很好使用这三篇文章了,两个显而易见的好处:

现在想要根据“清华大学”这个关键字来检索对应文章,A 和 C两篇文章就可以比较好的检索出来因为A和C 具有更多的重合词素,所以A和C 具有更高的相似度,但是B 就会被排除在外预处理

上面举了一个简单实用的例子,通过这个例子可以看出预处理过程在自然语言分析领域的重要作用。万丈高楼平地起,我并不想一上来就聊上面精准度,召回率,F- measurement。这些概念看似唬人,但是只要从头了解了NLP的典型任务其实并不难。

现在着重聊聊上面提到的两个预处理过程

分词:现在常用的分词工具太多了,信手拈来一大把,比如:Jieba, SnowNLP, THULACTHU, NLPIR, Stanford CoreNLP。因为我平常写C和Java比较多,所以用Stanford CoreNLP频率较高。每个工具各有高下,哪个好?见仁见智。

停词表:和分词工具一样,停词表太多了,懒的话可以直接网上扒一个改改就可以用。想效果好一点,特别是在领域聚类任务的时候,建议自己构建听词表,方法也不难,比较简单的方法有:基于词频,基于信息熵,当然神经网络之类的方法也不错。还是见仁见智。

先聊这么多,之后有时间聊一下中文情感分析,知识图谱和内容智能生成。先给自己挖一个坑


推荐阅读: