二值化是将实体的彩色特征转换为数字向量(通常是二进制向量)的行为,以便为分类器算法提供良好的示例。
如果我们在哪里对句子“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)和感知器,但也欢迎适用于其他模型的答案。