【实战技能】自然语言处理(NLP)的案例三:使用VSM实现词义消歧

自然语言处理,前面和大家说了

  • 【新手上路常见问答】关于自然语言处理(NLP)
  • 【实战技能】自然语言处理(NLP)的案例一:依赖解析
  • 【实战技能】自然语言处理(NLP)的案例二:语言建模和词性标注

词义消歧

词义消歧(Word Sense Disambiguation WSD)是确定在特定上下文中歧义词的具体意义。 这个问题的解决方案影响其他NLP相关的问题,如机器翻译和文档检索。本文聊聊如何消除先前选择的目标词的小样本的出现,也就是词法样本。词义消歧(WSD)的算法包括基于字典的方法,半监督方法,监督方法和无监督方法。基于感知标记语料库的监督方法是用于消除歧义的最好的方法。但是这种标记的数据是昂贵和有限的。相比之下,基于字典的方法和无监督的方法不需要标记的文本,并且更高效,但准确性较低。

模型:矢量空间模型

矢量空间模型(Vector Space Model VSM)是NLP中广泛使用的模型。基本思想是将歧义词的每个实例表示为根据一些规则提取其特征(属性)的向量。通常使用分类或聚类方法来解决问题。词义消歧的监督方法可以基于向量空间模型。算法如下:

1.对于语料库中单词w的每个实例wi,计算上下文向量。 在上下文中通过词w的意义标记每个向量的类别。

2.使用这些标记过的上下文向量训练分类器。

3.通过用训练的分类器预测令牌t的类别来消除w的特定令牌t。

基于词典的词义消歧算法Lesk

Lesk算法是一种基于词典的词义消歧算法。它基于这样的假设:在文本中一起使用的词彼此相关,并且可以在词的定义和词义中观察到该关系。通过在其字典定义中找到具有最大单词重叠的词义对,来消除两个(或更多个)单词的歧义。算法的具体方法大家可以查询此处资料Lesk Algorithm

词汇数据库和开源机器学习库

WordNet是一个词汇数据库(最初是为英语开发的),包含关于单词、单词词义以及它们之间的关系的信息。具有多重意义的词被称为多义词。具有多个词的词义被称为“同义词集”(同义词集)。同义词可用不同的方式彼此相关,例如,“cat”是“lion”的上位词(更一般的概念)。

我们使用scikit-learn(http://scikit-learn.org/stable/)这个Python的开源机器语言学习库来完成机器学习的任务,scikit-learn具有各种分类、回归和聚类算法,包括支持向量机,k-最近邻居法,逻辑回归,朴素贝叶斯,随机森林,梯度增强,k均值和DBSCAN。使用scikit-learn中的方法可以用训练集训练模型,并且根据模型预测数据的输出值。

实现词义消歧

我们用向量空间模型实现监督算法。

A.使用基于VSM的两种监督算法实现基本的词义消歧系统

首先计算每个单词示例的上下文矢量,然后我们用上下文向量训练一个分类器,使用scikit-learn来做分类,我们选取KNN(最近邻居法)和 SVM线性支持向量机这两种分类器。分别用KNN和SVM分类器对文件中的每个测试实例执行消歧。根据SVM分类器的输出,我们可以得到消歧结果。

B.使用特征提取方法增强WSD系统

比较不同功能和分类器的性能,找到最佳组合。同时使用能给出较好结果的分类器。

尝试提取更好的特征,而不仅仅是采取所有单词,然后重做分类。 可以尝试以下方法(不一定是添加其中一个将改善系统),也可以尝试使用不同的组合:

  1. 添加并列特征,例如:周围词w-2,w-1,wo w1,w2和词性标签POS-2,POS-1,POS0 POS1,POS2。
  2. 删除停用词,删除标点,做词干等。
  3. 通过在WordNet中获得词的同义词,下位词和上位词来添加更多的特征;您应该尝试这些功能的不同组合,而不是组合所有这些。例如,您可以仅添加hyponyms,同义词和上位词,或组合所有这些功能。
  4. 尝试良好的特征选择方法。例如Chi-square卡方或pointwise mutual information (PMI) 点互信息。

数据量大不一定能为系统带来好的性能。 选择较多的特征可能对数据添加噪声,这可能影响分类算法的性能 - 特别是具有允许一点不确定性的参数的SVM。 数据太嘈杂,可能将很多点放入模糊区域并将其错误分类。

欢迎大家留言,和我一起交流自然语言处理。

你可能感兴趣的:(学习方法,学习资源,自然语言处理)