自然语言处理项目的想法?

时间:2009-11-24 22:54:04

标签: parsing nlp ocaml

我必须为我的计算语言学课做最后的项目。我们一直在使用OCaml,但我也熟悉Java。我们研究了形态学,FSM,收集解析树,CYK解析,尝试,下推自动机,正则表达式,形式语言理论,一些语义等。

以下是我提出的一些想法。你有什么想法会很酷吗?

  1. 一个脚本,扫描Facebook线程是否有令人讨厌的*评论,并默默地用JS隐藏它们(这显然会在用户同意的情况下运行)

  2. 使用语义,语法,标点符号用法和其他指标对一篇文章进行分析,试图“指纹”作者。它可用于确定两个作品是否可能由同一作者编写。或者,有人可以随着时间的推移完成一堆写作,并了解他的风格如何变化。

  3. 聊天机器人(不太有趣/原创)

  4. 我可能被允许使用预先存在的库来执行此操作。 OCaml有没有?没有库/工具包,上述三个想法可能是不可行的,除非我将其限制在一个非常具体的领域。

    较低层次的想法:

    1. 有限状态机上的操作 - 最小化,组成传感器,证明FSM处于最小可能状态。我对图论非常感兴趣,因此任何与FSM的重叠都可能是一个很好的探索场所。 (我还可以用FSM做什么?)

    2. 正则表达式有点酷吗?

    3. CYK有什么好玩的吗?

    4. 还有其他人有什么好主意吗?

      *令人讨厌的定义为具有以下特定初中生的典型模式。这个词的含糊不是一个问题;为了这个功劳,我可以定义任何我想要的东西,并以此为目标。

9 个答案:

答案 0 :(得分:16)

  1. 令人讨厌的语言过滤 - 我认为这会减少到与垃圾邮件过滤非常相似的过程。也就是说,计算一组或多或少“令人讨厌”的词的频率。除非您还使用其他信息来源(例如,发件人和收件人之间共享的社交链接的结构,否则听起来不会让您做任何特别聪明的事情)。另一方面,在线欺凌是一个非常严重的事情,你可以打赌Facebook / Myspace和其他社交网站关心解决它。

  2. 文体分析 - 已经以各种形式对此进行了一些工作,通常是在作者名称分析的名称下。 Shlomo Argamon在这方面做了很多工作,你可能会从他的论文中的参考资料中发现更多。描述作者的最佳方式之一是学习他们使用一组停用词(也就是功能词)的分布,例如'和','但','if'等等。我认为还有很多在这方面做一些新的和有趣的事情 - 对互联网数据的作者分析是一个难题 - 但也有更多的失败范围。

  3. 聊天机器人 - 你是对的,这是一个非常标准的项目。衡量成功/失败也很困难。我认为如果它是一个具有某种目的的聊天机器人,比如在有限的领域回答问题,那么该项目将更具吸引力,但这是很难做到的。

  4. 其余部分实在太模糊,无法发表评论,抱歉。

    在OCaml中我没有任何NLP库,它只是一种特别流行的编程语言。但是,我确实知道Ocaml中的机器学习库,名为MEGAM,由Hal Daume编写,他是一位非常优秀的NLP研究员,已用于NLP任务。然而,我觉得找出MEGAM并用它做一些NLP任务可能是一个太大的项目。

    其他一些想法:

    • Sentiment Analysis - 一个非常时髦的研究领域。您可以根据需要轻松或艰难地完成此任务,将文档评分为正/负,以及提取特定主题并为每个主题生成情绪分数。
    • Coreference/Anaphora resolution - 一项艰巨的任务,但非常重要。有些方法使用图形表示(每个提及的是一个节点,如果它们共同引用,它们之间有边缘)来强制执行诸如传递性之类的东西。
    • Document Classification - 您可以尝试在StackOverflow data set上学习系统,为给定问题提供标签。这是一个相当着名的问题,有一些已建立的技术,但它是一个有趣的数据集,并具有明显和有用的现实世界的应用程序。您还可以查看是否可以找到问题的特定功能(单词选择,长度,格式,标点符号等),使其得到高度评价。
    • Haiku Generation - 有点傻,但我一直认为这是一个有趣的想法。可以使用CMU pronouncing dictionary完成音节计数。如果不是特别有用,应该会很有趣。

答案 1 :(得分:3)

只是想说我喜欢你的第二个想法。看起来它与NLP有关。这对我来说似乎很有趣。 IMO,我肯定会选择这个。但是你也应该考虑那个吸引你的人而不仅仅是他人的意见。

至于选择的语言,我认为你应该选择一个你更熟悉的语言。我不熟悉库,但我已经看到很多用Python和Java完成的NLP 事情

答案 2 :(得分:2)

使用twitter API从社交对话中提取所有推文,然后将内容组合\摘要\发布为论文\ article \ blog \ etc,以便有人可以一起阅读。关联概念和想法,扩展参考,改进语法。有点像bettween.com,但加强了NLP。

答案 3 :(得分:2)

1 - 对我来说最好的是当你复习学术论文时我需要知道哪部分工作是:   - 完全原创  什么是纯粹的复制/粘贴  什么是纯粹的释义   - 与先前的参考完全相反。 理想情况下,它会检查论文中的参考文献+作者之前的所有工作(并且可以检查citeseer以寻找可能被遗漏的参考文献 - 自愿 - )。 这将非常有用。

2-我想要一个工具检查SO中的所有问题,通过一堆响应查找相同类型的问题并生成可能足够的响应。

答案 4 :(得分:0)

1a上。扫描facebook的脚本...... 你如何计划定义'讨厌'。听起来很难。

2a上。相似。语法和语义,以及其他'linguisticy'的东西听起来很难。人们已经用其他更多的数值方法做了这种事情,但取得了巨大的成功,例如使用奇异值分解。我认为这种方法也已被纳入用于检查剽窃的软件中。这种方法通常也被称为潜在语义分析或潜在语义映射。

svdlibc: http://tedlab.mit.edu/~dr/svdlibc/

1b中。 fsm的东西。我不确定你的意思是'证明换能器是最小的'。这是一个非常标准的操作,几乎包含在您可能遇到的任何工具包中。如果您对fsms感兴趣,请查看

AT& T工具包: http://www2.research.att.com/~fsmtools/fsm/

或 OpenFST工具包: http://www.openfst.org/

作为进行语音识别的原则统一方法,fsms越来越受欢迎。我的研究生课程专注于这个课程,而且确实非常有趣。

如何构建基于hmm的解析器或chunker,或简单的viterbi解码器?如果你把一个体面的训练集(你必须自己开始标记),你可以近似一个简单版本的'令人讨厌的评论'标记并使用它,可能用某种分类器来'审查'或删除令人讨厌的评论。

答案 5 :(得分:0)

我建议您研究编程语言Prolog.它是一种声明性逻辑编程语言,其自然语言处理是其早期目标之一。大约一半的Wiki页面是一个如何将其用作语言解析器的示例。您可以轻松生成数千个语法正确的句子和短语。这是一个非常强大的工具。我认为使用它会非常有趣。

答案 6 :(得分:0)

我建议不要使用Java,除非你有一个迫切需要的库。我曾经在Java中完成了一个NLP最终项目,发现它缺乏经常需要的很多灵活性(严格的类型系统,没有匿名函数等)。不幸的是,我不知道OCaml,但是如果您了解Python,可以使用很多NLP库,例如,非常全面且积极开发的NLTK。

答案 7 :(得分:0)

1)取一段文字并将“她”的所有引用转换为“他”或“他的”。基本上,this question from SO,这似乎是一个整洁的项目。

2)我假设你已经研究了树的转换语法方法(X-bar理论等)。还有另外一种称为头驱动短语结构语法(HPSG)的句法理论,它不是使用“层次结构”来描述语法,但也使用属性值矩阵。

使用此系统的一个优点是,您可以将语法描述为有向非循环图,而不是树。您的教授可能会为您指出更多/更好的资源,但this page(含糊地)解释了这个想法。不幸的是,我的经验是网上的HPSG资源非常缺乏。

但是,一旦您对HPSG特征结构有所了解,就可以搜索文献中的人(语言学家和计算语言学家),他们想出了将图形表示用于有趣事物的方法。

也许你可以创建一个转换树到HPSG图转换器? (您必须知道“提升”,“控制”,“钝化”等内容将如何转化为HPSG的“SLASH”,“REL”等。)

答案 8 :(得分:0)

我不知道你班上的很多课程对问题1或2都有用。针对这些问题的一些更好的技巧非常简单的语言学习(比如词性标注,只需删除停用词,查看双字母组和三元组),并且有一个机器学习文本分类组件,它本身并不太复杂(Naive Bayesian等标准技术)分类器,最大熵分类器,支持向量机几乎是算法方面的黑盒子并且表现良好。查看关于topical text classificationauthorship detection调查论文,了解您可以从哪里开始。

更适合您所描述的课程的东西可能是为您熟悉的外语构建形态分析器,或构建词干分析器 (一个形态分析器的穷人版本),它将形态相关的术语映射到索引中的相同条目 - 这可以被搜索引擎使用。

如果您不需要为您的课程提供 new 技术(例如,如果您是本科生),那么您可以实施大量标准NLP任务在OCaml中,例如在Penn Treebank上训练的解析器,一些其他语法形式的解析器,一个词性标记器,或者几十个其他应用程序。