Pergunta

Binarization é o ato de transformar características coloridas de de uma entidade em vetores de números, na maioria das vezes vetores binários, para fazer bons exemplos para algoritmos classificadores.

Se nós onde binarize a frase "O gato comeu o cachorro", poderíamos começar atribuindo cada palavra uma identificação (por exemplo, cat-1, comeu-2, o-3, cão-4) e, em seguida, simplesmente substituir a palavra por ele é ID dando o vector <3,1,2,3,4>.

Tendo em conta estes IDs também poderíamos criar um vetor binário, dando a cada palavra quatro possíveis fendas, e definindo o slot correspondente a uma palavra específica com a um, dando o vector <0,0,1,0,1,0, 0,0,0,1,0,0,0,0,0,1>. O último método é, tanto quanto eu sei, é comumente referido como o método do saco-de-palavras.

Agora a minha pergunta, o que é o melhor método de binarização quando se trata de descrever os recursos para processamento de linguagem natural em geral, e de transição à base de dependência parsing (com Nivres algoritmo) em particular?

Neste contexto, não queremos para codificar a frase inteira, mas sim o estado atual da análise, por exemplo, a palavra do topo da pilha en a primeira palavra na fila de entrada. Desde ordem é altamente relevante, isto exclui a palavras-método do saco-de-.

com melhor , refiro-me ao método que torna os dados mais inteligível para o classificador, sem usar a memória desnecessária. Por exemplo, eu não quero uma palavra bigram usar 400 milhões de recursos para 20000 palavras únicas, se realmente existem apenas 2% dos bigramas.

Uma vez que a resposta também está de acordo com o classificador específico, estou interessado principalmente em modelos de entropia máxima (liblinear), máquinas de vetor de suporte (LIBSVM) e perceptrons, mas as respostas que se aplicam a outros modelos também são bem vindos.

Foi útil?

Solução

Esta é realmente uma pergunta muito complexa. A primeira decisão que você tem que fazer é se lemmatize seus tokens de entrada (suas palavras). Se você fizer isso, você diminui drasticamente a sua contagem tipo e sua análise sintática fica muito menos complicado. No entanto, é preciso muito trabalho para lemmatize um token. Agora, em uma linguagem de computador, esta tarefa fica muito reduzida, como a maioria das línguas separar palavras-chave ou nomes de variáveis ??com um conjunto bem definido de símbolos, como espaços em branco ou um período ou outros enfeites.

A segunda decisão crucial é o que você vai fazer com os dados post-facto. O método de "bag-of-words", na forma binária que você apresentou, ignora a ordem das palavras, o que é completamente bem se você está fazendo resumo de um texto ou talvez uma busca em estilo Google, onde você não se importa , onde aparecem as palavras, contanto que eles aparecem. Se, por outro lado, você está construindo algo como um compilador ou analisador, a ordem é muito importante. Você pode usar a abordagem de token-vector (como no seu segundo parágrafo), ou você pode estender o bag-of-words aproximar de tal forma que cada um diferente de zero de entrada nas palavras saco-de-vector contém a posição de índice linear do token na frase.

Finalmente, se você estiver indo para estar construindo parse árvores , existem razões óbvias por que você gostaria de ir com a abordagem token-vector, como é um grande aborrecimento para manter a sub-frase ids para cada palavra no vector bag-of-palavras, mas muito fácil de fazer "sub-vectores" em um símbolo -vetor. Na verdade, Eric Brill usado uma seqüência token-id para a sua part-of-speech tagger , que é realmente puro.

Você se importa se eu perguntar o que tarefa específica que você está trabalhando?

Outras dicas

Binarization é o ato de transformando características coloridas de uma entidade em vectores de números, a maioria dos vetores frequentemente binários, para fazer bons exemplos para classificador algoritmos.

Eu vim principalmente através de recursos numéricos que têm valores entre 0 e 1 (não binária como você descreve), representando a relevância da característica particular no vetor (entre 0% e 100%, onde 1 representa 100%). Um exemplo comum para isso são tf-idf vetores:. no vector representando um documento (ou frase), você tem um valor para cada termo em todo o vocabulário que indica a relevância desse termo para o documento representado

Como Mike já disse em sua resposta , esta é uma problema complexo em um campo de largura. Além de seus ponteiros, você pode achar que é útil para olhar para alguns técnicas de recuperação de informação como o vector modelo de espaço , espaço vetorial classificação e latente indexação semântica como pontos de partida. Além disso, o campo de palavra sentido disambiguation lida muito com recurso questões de representação em PNL.

[Não é uma resposta direta] Tudo depende do que você está tentar analisar e depois processo, mas para a frase processamento curto humana em geral (por exemplo IVT) outro método é usar redes neurais para aprender os padrões. Isto pode ser muito acurate para pequeno vocubularies

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top