您当前的位置:首页 > 产品说明

NLP自然语言处理相关技术说明及样例(附源码)

发布时间:2019-01-11 03:54:23 编辑: 浏览次数: 打印此文

  3.1.1 这里主要介绍中文分词的实现,实现中文分词的方法有许多种,例如StandfordCore NLP(具体实现参见【NLP】使用 Stanford NLP 进行中文分词),jieba分词,这里使用哈工大的语言技术平台LTP(包括后面的词性标注,句法分析)。具体步骤如下:

  下载完解压缩后的文件包为ltp4j-master,相应的jar包就在output文件夹下的jar文件夹中。

  3.3.1 这里介绍如何通过ltp实现对中文句子的句法分析,核心方法int size = Parser.parse(words,tags,heads,deprels),其中,words[]表示待分析的词序列,tags[]表示待分析的词的词性序列,heads[]表示结果依存弧,heads[i]代表第i个节点的父节点编号(其中第0个表示根节点root),deprels[]表示依存弧的关系类型,size表示返回结果中词的个数。实现代码如下:

  信息检索(Information Retrieval)是用户进行信息查询和获取的主要方式,是查找信息的方法和手段。狭义的信息检索仅指信息查询(Information Search)。即用户根据需要,采用一定的方法,借助检索工具,从信息集合中找出所需要信息的查找过程。实现参见移动易实现全文搜索。

  首先介绍N-gram模型,N-gram模型是自然语言处理中一个非常重要的概念,通常,在NLP中,基于一定的语料库, 可以通过N-gram来预计或者评估一个句子是否合理。对于一个句子T,假设T由词序列w1,w2,w3...wn组成,那么T出现的概率

  此概率在参数巨大的情况下显然不容易计算,因此引入了马尔可夫链(即每个词出现的概率仅仅与它的前后几个词相关),这样可以大幅度缩小计算的长度,即

  当n=1时,即每一个词出现的概率只由该词的词频决定,称为一元模型(unigram-model):

  当n=2时,即每一个词出现的概率只由该词的前一个词以及后一个词决定,称为二元模型(bigram-model):

  接着介绍如何通过Lucene提供的spellChecker(拼写校正)模块实现中文字词的纠错,首先创建语料词库,如下所示:

  这里主要介绍中文语言模型的训练,中文语言模型的训练主要基于N-gram算法,目前开源的语言模型训练的工具主要有SRILM、KenLM、 berkeleylm 等几种,KenLm较SRILM性能上要好一些,用C++编写,支持单机大数据的训练。berkeleylm是用java写。本文主要介绍如何通过berkelylm实现中文语言模型的训练。

  然后准备训练的语料库,首先通过ltp将每一句文本分词,然后将分完词的语句写入txt文件,如下所示:

  接着就是对语料库的训练,首先要读取分完词的文本,然后就是对每个词计算在给定上下文中出现的概率,这里的概率是对10取对数后计算得到的,最后将结果按照给定的格式存储,可以按照.arpa或者二进制.bin文件存储。文件格式如下:

  这里使用哈工大提供的同义词词林,词林提供三层编码,第一级大类用大写英文字母表示,第二级中类用小写字母表示,第三级小类用二位十进制整数表示,第四级词群用大写英文字母表示,第五级原子词群用二位十进制整数表示。编码表如下所示:

  第八位的标记有三种,分别是“=“、”#“、”@“,=代表相等、同义,#代表不等、同类,@代表自我封闭、独立,它在词典中既没有同义词,也没有相关词。通过同义词词林可以比较两词的相似程度,代码实现如下:

  词向量顾名思义,就是用一个向量的形式表示一个词。为什么这么做?自然语言理解问题转化为机器学习问题的第一步都是通过一种方法把这些符号数学化。词向量具有良好的语义特性,是表示词语特征的常用方式。词向量的每一维的值代表一个具有一定的语义和语法上解释的特征。

  Word2vec是Google公司在2013年开放的一款用于训练词向量的软件工具。它根据给定的语料库,通过优化后的训练模型快速有效的将一个词语表达成向量形式,其核心架构包括CBOW和Skip-gram。Word2vec包含两种训练模型,分别是CBOW和Skip_gram(输入层、发射层、输出层),如下图所示:

  每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。