是否存在一种算法来帮助检测英语句子的“主要主题”?

Posted

技术标签:

【中文标题】是否存在一种算法来帮助检测英语句子的“主要主题”?【英文标题】:Does an algorithm exist to help detect the "primary topic" of an English sentence? 【发布时间】:2011-07-29 12:07:10 【问题描述】:

我正在尝试找出是否存在可以检测句子“关键概念”的已知算法。

用例如下:

    用户输入一个句子作为查询(鸡肉尝起来像火鸡吗?) 我们的系统识别句子的概念(鸡、火鸡) 它会搜索我们的语料库内容

我们缺乏的领域是确定句子的核心“主题”到底是什么。句子“Does chicken taste like turkey”的主要话题是“chicken”,因为用户询问的是鸡肉的味道。而“土耳其”是一个不太重要的辅助主题。

所以...我正在尝试找出是否有一种算法可以帮助我识别句子的主要主题...如果您知道,请告诉我!!!

【问题讨论】:

语言是严格的英语吗? 水果像香蕉一样飞来飞去。 @Porges 有多少不同的含义? @belisarius 只有一个有意义。 @biziclop:关键是这两种含义都具有语法意义。 Porges 的评论很好地证明了句子的语法结构不能仅使用语法规则来推断:要做到这一点需要(大量)领域知识。如果连一个句子的语法结构都不能确定,你有什么希望确定它的意思呢? 【参考方案1】:

“关键概念”在语言学中不是一个定义明确的术语,但这可能是一个起点:parse 句子,在你得到的解析树或依存结构中找到主语。 (这并不总是有效;例如,“下雨了吗?”的主题是“它”,而关键概念可能是“雨”。此外,“意大利面和千层面是否是同一件事”中的关键概念是什么?”)

这类问题(NLP + 搜索)用LSA等方法处理比较合适,但这是一个相当高级的话题。

【讨论】:

@rockit:我不是与另一个问题相关联的人。看来你想要的在某种程度上是可行的。 非常有趣,但我没有处理一组文档——只有查询! 该死的,“下雨了吗?”是我想写的第一个例子。 (与“我刚刚看过 2012 年。”/“有趣吗?”/“不是真的。)但我会抛出我的第二个,这是非常恰当的:“你怎么敢?” @biziclop, @rockit:可以通过过滤“it”之类的词并选择主要动词的宾语,甚至动词本身作为“关键概念”来避免“空”主语。 @rockit - FWIW - 你不会为此找到一个简单的解决方案。这些技术中的大多数都依赖于拥有训练数据的语料库。【参考方案2】:

“主要主题”是指句子的主语

可以通过自然语言处理理解句子来识别主题。

这个问题的答案与How to determine subject, object and other words? 的答案相同——这是一个当前未解决的问题。

【讨论】:

这个问题已经非常接近解决了,从某种意义上说,对于经过充分研究的语言来说,解析器与专业的语言学家是不相上下的。 可能。但是您链接到的问题更加笼统,并且只有指导提问者进行更多研究的答案。 一个句子的语法主语肯定和它的主题不一样。【参考方案3】:

简单的解决方案是使用词性标记器(例如来自 Python 的NLTK 库)标记您的句子,然后找到与一些预定义的词性模式的匹配项,其中很明显句子的主要主题在哪里

【讨论】:

我怀疑 POS 标签上的一组分块模式能够可靠地找到句子的主题。此外,还可以使用可以执行此操作的解析器。 我的句子在语法上被标记为 OpenNLP - 但不是句子的主题【参考方案4】:

您的大多数基本 NLP 解析技术将能够提取句子的基本方面 - 即,鸡和火鸡是 NP,它们通过形容词“like”等链接。将这些内容归为“主题”或“概念”更难

潜在语义分析等技术及其许多衍生技术将这些信息转换为向量(有些方法可以在某些部分保留词性之间的层次/关系),然后将它们与现有的(通常按概念预先分类)进行比较, 向量。请参阅http://en.wikipedia.org/wiki/Latent_semantic_analysis 以开始使用。

编辑这是一个示例 LSA 应用程序,您可以试一试,看看您是否想进一步研究它。 http://lsi.research.telcordia.com/lsi/demos.html

【讨论】:

+1 用于 LSA,即使它不能直接解决 OP 的问题。 LSA - 只有真正有助于在查询中找到更独特的单词。因此,如果“chicken”出现在比“turkey”更多的文档中,“turkey”将更有可能出现在顶部结果中...... @rockit - LSA 确实与查询中的唯一词没有太大关系。我认为您将向量的创建与 LSA 混淆了。事实上,一些 LSA 变体甚至不保留单词的数量,只保留它的存在。 演示链接已损坏。 Here 是一个有效的 LSA。 gensim 有更多的 LSA 工具【参考方案5】:

一个选择是首先研究这样的事情:

http://www.abisource.com/projects/link-grammar/

但是如何从这些链接中得出主题本身就是另一个问题。但由于 Abiword 正在尝试检测语法问题,您可能能够使用它来确定主题。

【讨论】:

【参考方案6】:

在最基本的层面上,英语问题通常采用<verb> <subject> ... ?<pronoun> <verb> <subject> ... ? 的形式。这绝不是一个好的算法,特别是考虑到主题可能跨越多个单词,但根据您需要的解决方案的复杂程度,它可能是一个有用的起点。

如果您需要精确,请忽略此答案。

【讨论】:

“鲸鱼真的是哺乳动物吗?” :p @larsmans 在最基本的层面上......问题是,我们不知道 OP 所考虑的精度是多少。虽然这道题的主语真的是“it”,指的是复合句的后半部分。 其实英语中的“最基本的水平”相对于其他语言来说真的是非常基础的,所以这对于RL问题可能没有多大帮助 @Voo 我也不抱太大希望,更多的是为了展示不同复杂性和效率的完整选择范围。这种方法在该范围内的排名很低。【参考方案7】:

如果您愿意花钱,http://www.connexor.com/ 应该能够对包括英语在内的多种语言进行此类语义分析。我从未直接使用过他们的产品,因此无法评论它的效果。

【讨论】:

【参考方案8】:

我实际上为此做了一个研究项目,并赢得了两项比赛,并且正在参加全国比赛。

该方法有两个步骤

    上下文无关语法解析句子 在生成的解析树中,找到所有仅从属于名词短语类成分的名词

例如,“I ate pie”有 2 个名词:“I”和“pie”。查看解析树,“pie”在动词短语的内部,所以它不能是主语。然而,“我”只在类似 NP 的成分中。作为唯一的学科候选人,它是学科。在http://www.candlemind.com 上查找该程序的早期副本。注意,词汇仅限于基本单数词,没有动词变位,所以有“man”没有“men”,有“eat”没有“ate”。另外,我使用的CFG是手工制作的限量版。我很快就会更新这个程序。

无论如何,这个程序有限制。我的导师指出,在当前状态下,它无法识别带有“真实” NP(语法实际上称为 NP)的句子。例如,“月亮是平的不再是争论”。主题实际上是“月亮是平的”。但是,该程序会将“月亮”识别为主题。我会尽快解决这个问题。

无论如何,这对于大多数句子来说已经足够了......

我的研究论文也可以在那里找到。去它的第 11 页阅读方法。

希望这会有所帮助。

【讨论】:

一个句子的语法主语与其主题不同。例如,在你回答的中间你说:我很快就会更新这个程序。鉴于它的上下文,这句话的主题是这个程序,因为这是句子陈述了关于的内容。但是,语法主语是I【参考方案9】:

本月 MIT Computational Linguistics 杂志上有一篇关于 Parsing Noun Phrases 的文章:http://www.mitpressjournals.org/doi/pdf/10.1162/COLI_a_00076

【讨论】:

这与提取主题有什么关系?【参考方案10】:

复合句或复合句可能有多个句子的关键概念。

您可以使用 stanfordNLP 或 MaltParser,它们可以给出句子的依存结构。它还给出了词性标注,包括主语、动词、宾语等。

我认为大多数时候宾语将是句子的关键概念。

【讨论】:

【参考方案11】:

对于许多较长的句子,很难说出一个主题到底是什么,而且可能不止一个。

获得近似答案的一种方法是

1.) 首先使用 openNLP、stanford Parser 或任何一个标记句子。 2.) 然后从句子中删除所有停用词。 3.) 选择名词(专有名词、单数和复数)。

另一种方法是

1.) 任何解析器将句子放入短语中。 2)拿起所有的名词短语。 3.) 删除小时候没有名词的名词短语。 4.) 只保留形容词和名词,从剩余的名词短语中删除所有单词。

这可能会给出大约。猜测。

【讨论】:

【参考方案12】:

您应该查看 Google 的 Cloud Natural Language API。这是他们的 NLP 服务。

https://cloud.google.com/natural-language/

【讨论】:

以上是关于是否存在一种算法来帮助检测英语句子的“主要主题”?的主要内容,如果未能解决你的问题,请参考以下文章

是否有检测 .NET 探查器存在的 API?

算法实现将输入的英语句子反过来输出

Python中一个句子怎么样找出所有的长度最长的单词?

如何使用 nltk 找出英语中是不是存在单词

大学英语三级作文常用短语有哪些?

检测图中是不是存在负循环的最快算法