识别语法正确的废话句子



我有两个文件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

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

假设在

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.

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

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

因此,您将拥有诸如"已婚恐龙"或"喝熊"之类的变量,而不是单独的每个单词。

我会使用tidytext(对于R(,但是如果您正在Python中寻找类似的东西,您可以查看此内容

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

我认为在这种情况下使用双字母会很有用。那就是一次考虑两个词。

Bigram 不适用于此 - "恐龙"和"已婚"是正常的 Bigram。

您可以做的最简单的事情是记录令牌搭配。将文档分解成句子,并记录"恐龙"和"已婚"(或其他(在同一句子中出现的次数。然后,您应该能够在标记的句子上训练分类器以对其进行分类。直观地说,这与双字母相同,但它捕获了更多的长期关系。

更复杂的方法是将主语-动词-宾语集分类为合理或不合理。使用依赖关系解析获取(主语、动词、宾语(三元组,然后将它们标记为合理或不合理,使用词向量作为输入,并训练分类器。如果你这样做,那么你的模型应该能够分辨出"她嫁给了一只恐龙"比"她嫁给了水管工"更奇怪,因为"水管工"在向量空间中比"恐龙"更接近"人"。

如果它们总是成对出现,我也会避免单独对您的示例进行分类。您可以训练一个适用于单个实例的二元分类器,但比较两者之间无意义类的可能性并选择"更无意义"的类。这样,您可以轻松地强制执行约束,即只有一个是无稽之谈。

听起来像是一个有趣的项目,祝你好运!它不一样,但你可能对Winograd模式的经典问题感兴趣,以及一些可能对你有帮助的解决方法。语言学中的"选择"概念也是相关的。

最新更新