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