如何解决自然语言处理中的词汇歧义?

人工智能 自然语言处理 词汇识别
2021-10-31 02:09:18

我有兴趣实现一个自然语言处理程序(又名ELIZA)。

假设我已经存储了单词及其强度之间的语义-词汇连接。

处理具有非常不同含义的单词的方法是什么?

几个例子:

  • “我们在同一页上吗?”

    在这种情况下,“页面”不是文档页面,而是短语的一部分。

  • “我住在雷丁。”

    “阅读”是一个城市(名词),所以它不是动词。否则没有任何意义。检查大写字母在该特定示例中有效,但不适用于其他示例(例如“make”可以是动词或名词)。

  • “我在 Facebook 墙上读到了一些东西,你想知道什么吗?”

    “Facebook 墙”与墙完全无关。

一般来说,算法应该如何区分词义并识别上下文中的词?

例如:

  • 检测不同类型语音的单词,因此它应该识别它是动词还是名词。
  • 检测单词是否是短语的一部分。
  • 检测多个含义的单词。

为了通过上下文识别单词的正确含义,有哪些可能的方法来解决该问题?

2个回答

一般来说,算法应该如何区分词义并识别上下文中的词?

对于一般情况,我认为没有人知道如何回答这个问题。如果他们这样做了,他们基本上就解决了 AGI。但我们当然可以谈论在那里获得部分成功的技术,以及可行的方法。

我会考虑尝试的一件事(我不知道是否有人尝试过这种确切的方法)是将每个单词的消歧建模为贝叶斯信念网络的离散问题,其中您的先验(对于任何给定的单词)基于存储的“知识”以及(句子|段落|文档|无论)中先前遇到的单词。因此,例如,如果您“知道”“雷丁是英国的一座城市”并且“地名通常大写”,那么您的网络应该强烈倾向于将“雷丁”解释为城市,因为单词中没有任何内容句子中的位置与此强烈矛盾。

当然,我这么说是在绕开一些棘手的问题,因为知识表示也不是一个完全可以解决的问题。但至少有一些你可以使用的方法。例如,您可以使用语义 Web世界中的基于RDF /三元组的方法。找到一种将这些东西与贝叶斯框架合并的好方法可能会产生一些有趣的结果。

已经有一些关于“概率 RDF”的研究,您可以将其用作起点。例如:

http://om.umiacs.umd.edu/material/papers/prdf.pdf

http://ceur-ws.org/Vol-173/pos_paper5.pdf

https://www.w3.org/2005/03/07-yoshio-UMBC/

http://ebiquity.umbc.edu/paper/html/id/271/BayesOWL-Uncertainty-Modeling-in-Semantic-Web-Ontologies

http://www.pr-owl.org/

使用类似 Word2Vec 的东西。如果一个特定的节点有两条彼此相距很远的边,除了有问题的节点,将该节点拆分为 word(1) 和 word(2) 节点。