I love to eat chicken.
Today I went running, swimming and played basketball.
我的目标是仅通过分析这两个句子来返回FOOD和SPORTS 。你怎么能那样做?
我熟悉 NLP 和 Wordnet。但是有没有更高级/实用/现代的技术?
有没有什么东西可以自动为你分类单词,分成“级别”?
更重要的是,这个过程的技术术语是什么?
这个问题很难从程序上解决,但最近在该领域取得了很大进展。
大多数自然语言处理都是从语法开始的(可能是也可能不是上下文无关的)。它是一组构造规则,说明了更一般的事物是如何由更具体的事物组成的。
上下文无关语法示例:
Sentence ::= NounPhrase VerbPhrase
NounPhrase ::= ["The"] [Adjective] Noun
Adjective ::= "big" | "small" | "red" | "green"
Noun ::= "cat" | "man" | "house"
VerbPhrase ::= "fell over"
这显然过于简单化了,但是制定完整的语法来定义所有英语的任务是巨大的,并且大多数实际系统只定义了适用于问题域的一部分子集。
一旦定义了语法(或使用只有 Google 之类的公司才知道的复杂算法学习),就会根据语法解析称为“示例”的字符串。它用词性标记每个单词。非常复杂的语法不仅包含您在学校学到的词性,还包含诸如“网站”“老人姓名”和“成分”之类的类别。
这些类别可以由人类费力地构建到语法中,也可以使用类比建模或支持向量机之类的东西来推断。在每一个中,诸如“鸡”、“足球”、“烧烤”和“板球”之类的东西将被定义为一个非常高维空间中的点,以及数百万个其他点,然后聚类算法将定义组基于这些点相对于彼此的位置。然后可能会尝试从示例文本中推断组的名称。
链接文本 这个 Google 搜索列出了 NLP 中使用的几种技术,你可以从中学到很多东西。
编辑只是为了解决这个问题,人们可能会在网上抓取“ _是一个_ ”形式的句子,以建立一个项目-类别关系的数据库。然后你像上面一样解析一个字符串,并在数据库中查找已知项目的单词
您提出的问题是一个称为主题文本分类的整个研究领域。Fabrizio Sebastiani 的 ACM Computing Surveys 中的“自动文本分类中的机器学习”是对技术的一个很好的概述。. 最简单的技术之一(尽管不一定是性能最好的)是在每个类别中拥有大量(数百个)句子示例,然后在这些示例句子上训练一个朴素贝叶斯分类器。NLTK 在模块中包含一个朴素贝叶斯分类器nltk.classify.naivebayes
。
Google Sets做了一些这样的事情,并且有一些讨论提到了超集。但是,我还没有真正看到那里的任何技术细节,只是想法和讨论。
也许这至少可以帮助你的研究......
你可以看看来自 FBK 的人的WordNet Domains资源。它是 WordNet 的扩展,旨在用于文本分类和词义消歧。它允许不同程度的粒度。
将其应用于您的任务的一种可能方法可能是从您的句子中取出 NP 块,获取它们的中心词并从中获取来自 WordNet 域的类别。
Tenqyu使用 Python 和机器学习解决了这个问题。
更详细的过程在这里: https ://hackernoon.com/how-to-better-classify-coachella-with-machine-learning-part-1-dc84c53d1a9c