TensorFlow自然语言处理》—3.2 学习单词表示的经典方法

网友投稿 660 2022-05-30

3.2 学习单词表示的经典方法

《TensorFlow自然语言处理》—3.2 学习单词表示的经典方法

在本节中,我们将讨论用数字表示单词的一些经典方法。这些方法主要可以分为两类:使用外部资源表示单词的方法和不使用外部资源的方法。首先,我们将讨论WordNet:一种基于外部资源表示单词的最流行的方法。然后,我们会讨论更多的本地化方法(即不依赖外部资源的方法),例如,单热编码和词频率-逆文档频率(TF-IDF)。

3.2.1 WordNet—使用外部词汇知识库来学习单词表示

WordNet是处理单词表示的最流行的经典方法或统计NLP方法之一。它依赖于外部词汇知识库,该知识库对给定单词的定义、同义词、祖先、派生词等信息进行编码。WordNet允许用户推断给定单词的各种信息,比如前一句中讨论的单词的各种信息和两个单词之间的相似性。

3.2.1.1 回顾WordNet

如前所述,WordNet是一个词汇数据库,用于对单词之间的词性标签关系(包括名词、动词、形容词和副词)进行编码。WordNet由美国普林斯顿大学心理学系首创,目前由普林斯顿大学计算机科学系负责。WordNet考虑单词之间的同义性来评估单词之间的关系。用于英语的WordNet目前拥有超过150?000个单词和超过100?000个同义词组(即synsets)。此外,WordNet不仅限于英语。自成立以来,已经建立了许多不同的WordNet,在http://globalwordnet.org/wordnets-in-the-world/上可以查看。

为了理解如何用WordNet,需要对WordNet中使用的术语有坚实的基础。首先,WordNet使用术语synset来表示一群或一组同义词。接下来,每个synset都有一个def?inition,用于解释synset表示的内容。synset中包含的同义词称为lemmas。

在WordNet中,单词表示是分层建模的,它在给定的synset与另一个synset之间进行关联形成一个复杂的图。有两种不同类别的关联方式:is-a关系或is-made-of关系。首先,我们将讨论is-a关系。

对于给定的synset,存在两类关系:上位词和下位词。synset的上位词是所考虑的synset的一般(更高一层)含义的同义词。例如,vehicle是同义词car的上位词。接下来,下位词是比相应的同义词组更具体的同义词。例如,Toyota car是同义词car的下位词。

现在让我们讨论一个synset的is-made-of关系。一个synset的整体词是可以表示所考虑的这个synset的全部实体的synset。例如,tires的整体词是cars。部分词是is-made-of类别的关系,是整体词的反义词,部分词是组成相应synset的一部分或子部分,我们可以在图3.2中看到它们。

图3.2 一个synset的不同关联

NLTK库是一个Python自然语言处理库,我们可以用它理解WordNet及其机制。完整示例可在ch3文件夹中的ch3_wordnet.ipynb文件中找到。

安装NLTK库

可以用以下python pip命令安装NLTK库:

或者,可以使用IDE(例如PyCharm)通过图形用户界面(GUI)安装库。可以在http://www.nltk.org/install.html找到更详细的说明。

要将NLTK导入Python并下载WordNet语料库,请首先导入nltk库:

然后可以运行以下命令下载WorldNet语料:

安装并导入nltk库后,我们需要使用以下命令导入WordNet语料库:

然后我们按照以下方式查询WordNet:

在运行这个示例之后,结果如下:

我们还可以通过以下方式获得两个同义词之间的相似性。在NLTK中实现了几种不同的相似性度量,你可以在官方网站(www.nltk.org/howto/wordnet.html)上看到它们的实际应用。在这里,我们使用Wu-Palmer相似性,它根据两个synset在同义词的层次结构中的深度来测量它们之间的相似性:

3.2.1.2 WordNet的问题

虽然WordNet是一个令人惊叹的资源,任何人都可以在NLP任务中用它学习单词的含义,但使用WordNet有很多不足之处。

如下所示:

缺少细微差别是WordNet中的一个关键问题。WordNet在理论上和实际应用中都有不可行的原因。从理论的角度来看,对两个实体之间微妙差异的定义进行建模并不恰当或直接。实际上,定义细微差别是主观的。例如,单词want和need具有相似的含义,但其中一个(need)更具有主张性,这被认为是一种细微差别。

接下来,WordNet本身就是主观的,因为WordNet是由一个相对较小的社区设计的。因此,取决于你要解决的问题,WordNet可能是合适的,或者你可以通过更宽松的单词定义来提高性能。

维护WordNet也存在问题,这是非常需要人力的。维护和添加新的synsets、def?ini-tions、lemmas等可能非常昂贵。这会对WordNet的可扩展性产生负面影响,因为人力对更新WordNet至关重要。

为其他语言开发WordNet成本可能很高。有一些人努力为其他语言构建WordNet并将其与英语WordNet链接为MultiWordNet(MWN),但它们尚未完成。

接下来,我们将讨论几种不依赖外部资源的单词表示技术。

自然语言处理基础 TensorFlow

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:升级至Zabbix 5.2指南,又快又简单!
下一篇:像福尔摩斯一样侦破Wireshark中的问题
相关文章