NLP入门(九)词义消岐(WSD)的简介与实现
词义消岐简介
词义消岐,英文名称为Word Sense Disambiguation,英语缩写为WSD,是自然语言处理(NLP)中一个非常有趣的基本任务。
那么,什么是词义消岐呢?通常,在我们的自然语言中,不管是英语,还是中文,都有多义词存在。这些多义词的存在,会让人对句子的意思产生混淆,但人通过学习又是可以正确地区分出来的。
以“小米”这个词为例,如果仅仅只是说“小米”这个词语,你并不知道它实际指的到底是小米科技公司还是谷物。但当我们把词语置于某个特定的语境中,我们能很好地区分出这个词语的意思。比如,
雷军是小米的创始人。
在这个句子中,我们知道这个“小米”指的是小米科技公司。比如
我今天早上喝了一碗小米粥。
在这个句子中,“小米”指的是谷物、农作物。
所谓词义消岐,指的是在特定的语境中,识别出某个歧义词的正确含义。
那么,词义消岐有什么作用呢?词义消岐可以很好地服务于语言翻译和智能问答领域,当然,还有许多应用有待开发~
词义消岐实现
在目前的词义消岐算法中,有不少原创算法,有些实现起来比较简单,有些想法较为复杂,但实现的效果普遍都不是很好。比较经典的词义消岐的算法为Lesk算法,该算法的想法很简单,通过对某个歧义词构建不同含义的语料及待判别句子中该词语与语料的重合程度来实现,具体的算法原理可参考网址:https://en.wikipedia.org/wiki/Lesk_algorithm .
在下面的部分中,笔者将会介绍自己想的一种实现词义消岐的算法,仅仅是一个想法,仅供参考。
我们以词语“火箭”为例,选取其中的两个义项(同一个词语的不同含义):NBA球队名 和 燃气推进装置 ,如下:
获取语料
首先,我们利用爬虫爬取这两个义项的百度百科网页,以句子为单位,只要句子中出现该词语,则把这句话加入到这个义项的预料中。爬虫的完整Python代码如下:
1 |
|
利用这个爬虫,我们爬取了“火箭”这个词语的两个义项的语料,生成了火箭_燃气推进装置.txt文件和火箭_NBA球队名.txt文件,这两个文件分别含有361和171个句子。以火箭_燃气推进装置.txt文件为例,前10个句子如下:
火箭技术的飞速发展,不仅可提供更加完善的各类导弹和推动相关科学的发展,还将使开发空间资源、建立空间产业、空间基地及星际航行等成为可能。 火箭技术是一项十分复杂的综合性技术,主要包括火箭推进技术、总体设计技术、火箭结构技术、控制和制导技术、计划管理技术、可靠性和质量控制技术、试验技术,对导弹来说还有弹头制导和控制、 1903年,俄国的К.E.齐奥尔科夫斯基提出了制造大型液体火箭的设想和设计原理。 火箭有很多种,原始的火箭是用引火物附在弓箭头上,然后射到敌人身上引起焚烧的一种箭矢。 “长征三号丙”火箭是在 “长征三号乙”火箭的基础上, 减少了两个助推器并取消了助推器上的尾翼。 火箭与导弹有什么区别 为了能够在未来大规模的将人类送入太空,不可能依赖传统的火箭和飞船。 火箭V2火箭 探测高层大气的物理特征(如气压、温度、湿度等)和现象的探空火箭。 可一次发射一发至数十发火箭弹。
实现算法
我们以句子为单位进行词义消岐,即输入一句话,识别出该句子中某个歧义词的含义。笔者使用的算法比较简单,是以TF-IDF为权重的频数判别。以句子
赛季初的时候,火箭是众望所归的西部决赛球队。
为例,对该句子分词后,去掉停用词(stopwords),然后分别统计除了“火箭”这个词以外的TF-IDF值,累加起来,比较在两个义项下这个值的大小即可。
实现这个算法的完整Python代码如下:
1 |
|
输出结果如下:
1 |
|
测试
接着,我们对上面的算法和程序进行更多的测试。
输入句子为:
三十多年前,战士们在戈壁滩白手起家,建起了我国的火箭发射基地。
输出结果为:
1 |
|
输入句子为:
对于马刺这样级别的球队,常规赛只有屈指可数的几次交锋具有真正的意义,今天对火箭一役是其中之一。
输出结果为:
1 |
|
输入句子为:
姚明是火箭队的主要得分手之一。
输出结果为:
1 |
|
输入的句子为:
从1992年开始研制的长征二号F型火箭,是中国航天史上技术最复杂、可靠性和安全性指标最高的运载火箭。
输出结果为:
1 |
|
输入句子为:
到目前为止火箭已经在休斯顿进行了电视宣传,并在大街小巷竖起广告栏。
输出结果为:
1 |
|
总结
对于笔者的这个算法,虽然有一定的效果,但是也不总是识别正确。比如,对于最后一个测试的句子,识别的结果就是错误的,其实“休斯顿”才是识别该词语义项的关键词,但很遗憾,在笔者的算法中,“休斯顿”的权重并不高。
对于词义消岐算法,如果还是笔者的这个思路,那么有以下几方面需要改进:
语料大小及丰富程度;
停用词的扩充;
更好的算法。
笔者的这篇文章仅作为词义消岐的简介以及简单实现,希望能对读者有所启发~
欢迎关注我的知识星球“自然语言处理奇幻之旅”,笔者正在努力构建自己的技术社区。