识别语法正确的无意义句子

Identifying Grammatically Correct Nonsense Sentences

我有两个文件 file1.csvfile2.csvfile1.csv 每行包含一个 stupid 句子。 file2.csv识别是哪一列(type0对应0type1对应1)。我想做一个 NLP 分类任务,我通常知道怎么做。但是在这种情况下我有点困惑,不知道如何安排和组织我的数据集,以便我可以训练我的句子和标签。如果有人给我一个进步的提示,我将不胜感激。

file1.csv格式如下,

id,type0,type1
0,He married to a dinosaur.,He married to a women.
1,She drinks a beer.,She drinks a banana.
2,He lifted a 500 tons.,He lifted a 50kg.

file2.csv 格式如下。

id,stupid
0,0
1,1
2,0

我的目的是对愚蠢的句子进行分类。

也许您不仅可以考虑一元语法(将每个单词单独视为一个变量),还可以考虑使用二元语法。这有助于识别无意义的单词组合。 (首先从停用词中清除文本..)

所以你会有诸如 "married dinosaur" 或 "drink bear" 之类的变量,而不是单独的每个单词。

我会使用 tidytext(对于 R),但如果您在 Python 中寻找类似的东西,您可以查看这个

https://github.com/michelleful/TidyTextMining-Python

假设在 100% 的情况下,一个句子在语义上是正确的,而另一个不是,您可以将 type0type1 句子分成 2 个不同的示例并将它们单独分类,例如:

id,type0,type1
0,He married to a dinosaur.,He married to a women.
1,She drinks a beer.,She drinks a banana.
2,He lifted a 500 tons.,He lifted a 50kg.

变为:

id,sentence
0,He married to a dinosaur
1,He married to a women.
2,She drinks a beer.
3,She drinks a banana.
4,He lifted a 500 tons.
5,He lifted a 50kg.

但是,如果您的数据包含一个句子比另一个句子稍微不那么愚蠢的记录,这将不起作用,即实际需要比较两个句子。

我认为在这种情况下使用二元语法会很有用。即同时考虑两个词。

二元语法对此不起作用 - "a dinosaur" 和 "married a" 是普通的二元语法。

您可以做的最简单的事情就是记录令牌搭配。将文档分成句子,并记录 "dinosaur" 和 "married"(或其他)在同一个句子中出现的次数。然后,您应该能够在标记的句子上训练 classifier 以 classify 它们。直观上,这与二元语法的工作原理相同,但它捕获了更多的远程关系。

一种更复杂的方法是class确定主谓宾集是合理的还是不合理的。使用依赖解析得到(主语、动词、宾语)三元组,然后将它们标记为合理或不合理,使用词向量作为输入,并训练一个 classifier。如果你这样做那么你的模型应该能够告诉 "She married a dinosaur" 比 "She married a plumber" 更奇怪,因为 "plumber" 比向量 space 更接近 "man" 而不是 "dinosaur"是。

我也会避免 class单独验证您的示例,如果它们总是成对出现的话。您可以训练一个适用于单个实例的二进制 class 化器,但比较两者之间无意义 class 的可能性并选择 "more nonsensical" 一个。这样你就可以很容易地强制执行约束,即只有一个是无意义的。

听起来是个有趣的项目,祝你好运!它不一样,但您可能对 class 来自语言学的 Winograd Schemas, and some of the approaches to solving that might be helpful to you. The concept of "selection" 的逻辑问题也很相关。