12

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

如果我们在哪里对句子“The cat ate the dog”进行二值化,我们可以首先为每个单词分配一个 ID(例如 cat-1、ate-2、the-3、dog-4),然后简单地将单词替换为它的 ID 给出了向量 <3,1,2,3,4>。

给定这些 ID,我们还可以通过为每个单词提供四个可能的槽位并将与特定单词对应的槽位设置为 1 来创建二进制向量,从而使向量 <0,0,1,0,1,0,0,0 ,0,1,0,0,0,0,0,1>。据我所知,后一种方法通常被称为词袋法。

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

在这种情况下,我们不想对整个句子进行编码,而是要对解析的当前状态进行编码,例如堆栈上的顶部单词和输入队列中的第一个单词。由于顺序是高度相关的,这排除了词袋方法。

best,我指的是使数据对分类器最易理解的方法,而不会占用不必要的内存。例如,我不希望一个单词 bigram 对 20000 个唯一单词使用 4 亿个特征,如果实际上只有 2% 的 bigrams 存在的话。

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

4

3 回答 3

5

这实际上是一个非常复杂的问题。您必须做出的第一个决定是是否对您的输入标记(您的单词)进行词形还原。如果你这样做,你会大大减少你的类型计数,并且你的语法解析会变得不那么复杂。但是,要对令牌进行词形还原需要做很多工作。现在,在计算机语言中,这项任务大大减少了,因为大多数语言使用一组明确定义的符号来分隔关键字或变量名,例如空格或句点或诸如此类。

第二个关键决定是您将在事后处理数据。您提供的二进制形式的“词袋”方法会忽略词序,如果您正在对文本进行摘要,或者您不关心在哪里进行谷歌风格的搜索,这完全可以词出现,只要它们出现。另一方面,如果您正在构建诸如编译器或解析器之类的东西,那么顺序非常重要。您可以使用标记向量方法(如第二段中所述),或者您可以扩展词袋方法,以便词袋向量中的每个非零条目都包含标记的线性索引位置在短语中。

最后,如果您要构建解析树,有明显的理由表明您想要使用标记向量方法,因为为袋子中的每个单词维护子短语 ID 是一个很大的麻烦。 -words 向量,但很容易在标记向量中创建“子向量”。事实上,Eric Brill 为他的词性标注器使用了一个 token-id 序列,这非常简洁。

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

于 2009-02-25T18:32:52.460 回答
4

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

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

正如迈克在他的回复中已经说过的,这是一个广泛领域的复杂问题。除了他的建议之外,您可能会发现研究一些信息检索技术(如向量空间模型向量空间分类潜在语义索引)作为起点很有用。此外,词义消歧领域在 NLP 中处理了很多特征表示问题。

于 2009-03-02T01:19:20.407 回答
0

[不是直接答案] 这完全取决于您尝试解析和处理的内容,但对于一般的短人类短语处理(例如 IVT),另一种方法是使用神经网络来学习模式。这对于小的词汇量非常准确

于 2009-02-26T12:30:00.530 回答