LingPipe深度剖析

Plingpipealias公司开发的一款自然语言处理软件包。提供了文本分类,命名体识别、情感分类、中文分词、词性标注、拼写检查、聚类等一系列的NLP算法接口,最近工作也需要用到这个工具,于是深入调研了一把,下面是一些本人的总结。

一、          命名体识别:

1、  原理

有监督的统计模型和一些更简单直接的方法,比如词典匹配基于规则的正则匹配

该模型需要注意两点:第一,lingpipe要求训练语料必须标出所有的实体和类型信息,第二,训练语料和测试语料应该是同一类型的数据。如果训练数据数微博文本,测试语料是新闻语料,测试效果可能就不好。

1)  基于规则的命名体识别

主要通过正则表达式匹配的方式(邮件的匹配),在lingpipe中不仅提供了训练接口,还提供了测试接口

输入:

2)  基于精确词典匹配的命名体识别:只要是词典中出现的全部识别成命名体,在lingpipe中专门有一个开关来控制该功能是否被激活

3)  基于模糊词典匹配的命名体识别:But when it is run, it doesn't just look for exact matches, but forall matches within a fixed weighted edit distance threshold. 在lingpipe中专门有一个开关来控制该功能是否被激活

4)  训练:传模型的存放位置

TokenizerFactoryfactory= IndoEuropeanTokenizerFactory.INSTANCE;

    HmmCharLmEstimator hmmEstimator

= newHmmCharLmEstimator(MAX_N_GRAM,NUM_CHARS,LM_INTERPOLATION);

   CharLmHmmChunker chunkerEstimator

      = newCharLmHmmChunker(factory,hmmEstimator);

 

    System.out.println("Setting up DataParser");

   GeneTagParser parser = new GeneTagParser();

   parser.setHandler(chunkerEstimator);

2、  Running a Statistical Named Entity Recognizer

1)  First-Best Named Entity Chunking:只输出一种结果,就是程序程序认为最好的结果

2)  N-Best Named Entity Chunking:输出多种结果,而且结果的按联合概率从大到小排序后输出

3)  Confidence Named Entity Chunking:也是输出多种结果,而且还输出confidence值(有多大的自信心认为结果是正确的)

二、           聚类

1、  原理

(1)计算文本之间的编辑距离(Edit-distance)

(2)用二叉树表示文本的编辑距离

(3)确定文本被聚为哪些类(切分二叉树)

方法一:设定一个类高度的阈值,在划分类时保证每一类的子树高度小于或等于这个阈值,最后子树的数量就是聚类的数量

方法二:循环从最高的一棵二叉子树开始切分,直到子树的数量达到某一个阈值,

2、Lingpipe提供的两个重要类

1)基本的不相交分类(Simple Disjoint Clustering)

提供了一个简单的分类接口,其中E是传入的待聚类的文本的类型

interface Clusterer<E> {

    Set<Set<E>> cluster(Set<? extendsE> elements);

}

 

2)层次聚类和聚类分析(HierarchicalClustering and Dendrograms)

HierarchicalClustering接口继承了Simple Disjoint接口,该接口下有一个hierarchicalCluster方法,返回的是Dendrogram类行的集合。Dendrogram类集合里存放的是每一篇文本的二叉树表示文本。

 

interface HierarchicalClusterer<E> extends Clusterer<E> {
    Dendrogram<E> hierarchicalCluster(Set<? extends E> elements);
}

 

 

三、            词性标注

算法原理:基于大规模标注好的语料训练出来的模型进行标注

 

进行测试的时候有三种机制:

First-BestResults:只输出一种结果,概率最高的结果

N-best Results:输出N中结果

Confidence-Based Results:输出结果的同时还输出自信度


 

 

四、            情感分类

算法原理:语言模型,默认的元数是8,先把主观句子提取出来,然后再从主观句中提取出正面的和负面的。

 

用了两套情感词表:主观和客观词表,正面和负面词表

 

 

五、            句子检测

从文档中检测出所有完整的句子

提供了一个句子模型接口SentenceModel Interface,检测句子,输入的是文本,输出的是句子列表

The SentenceModel interfacespecifies a means of doing sentence segmentation from arrays of tokens andwhitespaces.

该接口提供了两个方法:

1、int[] boundaryIndices(String[] tokens,
                      String[] whitespaces)
返回句子的结束字符的位置,tokens是字符列表,whitespace是空格列表,这两个参数在初始化语料时调用TOKENIZER_FACTORY.tokenizer()方法得到
2、void boundaryIndices(String[] tokens,
                     String[] whitespaces,
                     int start,
                     int end,
                     Collection<Integer> indices)
 
 
 
 

六、            拼写检测(spellingcorrection)

纠正拼写错误、自动给没有空格分割的文本加空格、删除自动插入的连接符、替换PDF转换后自动生成的连体字母

算法原理:噪声信道模型(noisy channel model,或称信源信道模型,这是一个普适性的模型,被用于语音识别、拼写纠错、机器翻译、中文分词、词性标注、音字转换等众多应用领域。其形式很简单,如下图所示:

算法流程:(http://blog.csdn.net/fkyyly/article/details/42933281)

1、  通过词典匹配容易确定为“Non-wordspelling error”;

2、  然后通过计算最小编辑距离获取最相似的candidate correction,此时,我们希望选择概率最大的w作为最终的拼写建议,基于噪声信道模型思想,需要进一步计算P(w)和P(x|w)。

 

 

七、           字符串匹配

1、用途:计算两个字符串的相似度,重复数据删除、记录链接到术语的提取、拼写检查、K近邻分类

2、算法原理:两个字符串的距离越近,它们的相似度越高,两个字符串的接近度越高,它们也越相似,所以lingpipe提供了两个重要的接口:

public interface Distance<E> {
    public double distance(E e1, E e2);
}//计算e1和e2的距离
public interface Proximity<E> {
    public double proximity(E e1, E e2);
}//计算e1和e2的接近度

 

3、两个字符串的距离有很多种:SimpleEdit Distance、Weighted Edit Distance、Jaccard Distance、Jaro-Winkler Distance、TF/IDF Distance

3.1  SimpleEdit Distance

Simple Edit Distance又叫做Damerau-LevensteinDistance(拉文斯坦距离)

这个距离由Damerau和Levenstein提出的,就是把一个字符串A通过一些列变换(插入、删除、替换,不包括交换)得到字符串B的最少步骤

例如:‘Bobe’“Bode”的拉文斯坦距离是1

两个字符串的接近度proximity(x,y) = -distance(x,y)

3.2 Weighted Edit Distance

3.3 Jaccard Distance

Eg:

S1:我喜欢吃苹果

S2:我喜欢吃香蕉

Jaccard Distance(s1,s2) = 4

 

八、            Significant Phrases(关键词抽取)

Collections(词集合):Collocations are phrases which are seen together more than you wouldexpect given an estimate of how frequent each token is and how often they areseen together.

. For example, 'Los Angeles' has a higherscore than 'Tie Breaker' because we see 'Los' 67 times, 'Angeles' 67 times and'Los Angeles' 67 times. So 'Los' and 'Angeles' always occurs with the largerphrase--a high correlation. On the other hand 'Tie' occurs 15 times, 'Breaker'8 times and 'Tie Breaker' 8 times, so Tie only occurs with the larger phrasehalf the time, less of a correlation.

新词发现: finding phrases that occur significantly more often in theforeground corpus than they would be expected to from the background corpus

九、       数据库文挖掘(Database Text Mining

主要实现了根据需求从数据库查询数据,主要分为三个步骤,没有用到算法,都是数据库的操作。

§ Loading MEDLINE data into the database,using the LingMed MEDLINE parser and the JDBC API to access a RDBMS.

§ Using the LingPipe API to annotate textdata in the database, and to store the annotations back into the database.

§ SQL database queries over the annotateddata.

 

十、Hyphenation & SyllabificationTutorial(断字识音

两种方法,:基于规则和基于噪声信道模型

 

十二、语言种类识别

这是是预处理操作,Languageidentification is the problem of classifying a sample of characters based onits language.

十三、词义排歧(Word Sense Disambiguation)

确定多义词在文本中的语义

在有监督的情况下:词义排歧问题变成一个分类问题,需要借助其他的类似本体和词典来辅助词义排歧

在无监督的情况下,词义排歧问题变成一个聚类问题,分层聚类在这里就起到作用

十四、奇异值分解

 ......还在研究中,待更新

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值