自然语言处理中的二值化

时间:2009-02-23 20:31:56

标签: machine-learning nlp classification libsvm

二值化是将实体的彩色特征转换为数字向量的行为,通常是二进制向量,以便为分类器算法提供良好的示例。

如果我们将句子二进制化为“猫吃狗”,我们可以先为每个单词分配一个ID(例如cat-1,ate-2,the-3,dog-4),然后简单地替换由它给出向量< 3,1,2,3,4>的ID的单词。

鉴于这些ID,我们还可以通过给每个字四个可能的槽创建二进制向量,并将对应于特定单词的槽设置为1,给出向量< 0,0,1,0,1,0 ,0,0,0,1,0,0,0,0,0,1取代。据我所知,后一种方法通常被称为词袋方法。

现在我的问题是,当描述一般的自然语言处理功能和基于转换的依赖性解析时,最佳二值化方法是什么(与Nivres一起使用)算法)特别?

在这种情况下,我们不想编码整个句子,而是编码解析的当前状态,例如堆栈中的顶部字和输入队列中的第一个字。由于订单具有高度相关性,因此排除了词袋方法。

使用 best ,我指的是使数据对分类器最容易理解的方法,而不会占用不必要的内存。例如,如果只有2%的双子星实际存在,我不想要一个单词bigram来使用4亿个特征来获得20000个独特的单词。

由于答案也取决于特定的分类器,我最感兴趣的是最大熵模型(liblinear),支持向量机(libsvm)和感知器,但是也欢迎适用于其他模型的答案。

3 个答案:

答案 0 :(得分:4)

这实际上是一个非常复杂的问题。你必须做出的第一个决定是lemmatize你的输入令牌(你的话)。如果你这样做,你会大大减少你的类型数量,并且你的语法分析变得复杂得多。但是,将令牌变为lemmatize需要大量的工作。现在,在计算机语言中,这项任务大大减少了,因为大多数语言将关键字或变量名称与明确定义的符号集分开,如空格或句点或诸如此类。

第二个关键决定是你将如何处理事后数据。你所呈现的二进制形式的“词袋”方法忽略了单词顺序,如果你正在进行summarization of a text或者你不在乎的谷歌式搜索,那就完全没问题了。 其中单词出现,只要它们出现。另一方面,如果你正在构建类似编译器或解析器的东西,那么顺序非常重要。您可以使用令牌向量方法(如第二段中所述),或者您可以扩展词袋方法,使得词袋向量中的每个非零条目都包含令牌的线性索引位置在短语中。

最后,如果您要构建parse trees,有明显的原因可以解决为什么您需要使用令牌向量方法,因为为每个人维护子短语ID都是一个很大的麻烦单词袋矢量中的单词,但很容易在令牌矢量中制作“子矢量”。实际上,Eric Brill为他的part-of-speech tagger使用了一个令牌ID序列,这真的很整洁。

你介意我问你正在做什么具体的任务吗?

答案 1 :(得分:3)

  

二元化是一种行为   改变绚丽多彩的特征   一个实体成为数字的向量,   通常是二进制矢量   分类器的好例子   算法

我主要遇到的数字功能在 01之间取值(不是你描述的二进制),表示向量中特定要素的相关性(介于0%和100%之间,其中1代表100%)。一个常见的例子是tf-idf向量:在表示文档(或句子)的向量中,您有一个整个词汇表中每个术语的值,表示该术语与所表示文档的相关性。

正如迈克已经在his reply中所说,这是一个广泛领域的复杂问题。除了他的指针之外,您可能会发现查看information retrievalvector space modelvector space classificationlatent semantic indexing种技术作为起点非常有用。此外,word sense disambiguation字段与NLP中的feature表示问题有很大关系。

答案 2 :(得分:0)

[不是一个直接的答案]这一切都取决于你试图解析然后处理的内容,但对于一般的短人类短语处理(例如IVT),另一种方法是使用神经网络来学习模式。这对于小小的vocubularies非常精确