Aprendizado não supervisionado de recursos para NER

11

Eu implementei o sistema NER com o uso do algoritmo CRF com meus recursos artesanais que deram bons resultados. O fato é que eu usei muitos recursos diferentes, incluindo tags POS e lemas.

Agora eu quero fazer o mesmo NER para um idioma diferente. O problema aqui é que não posso usar tags e lemas de PDV. Comecei a ler artigos sobre aprendizado profundo e aprendizado não supervisionado de recursos.

Minha pergunta é:

É possível usar métodos para o aprendizado não supervisionado de recursos com o algoritmo CRF? Alguém tentou isso e obteve algum bom resultado? Existe algum artigo ou tutorial sobre esse assunto?

Ainda não entendo completamente esse modo de criação de recursos, por isso não quero gastar muito tempo com algo que não funcionará. Portanto, qualquer informação seria realmente útil. Criar um sistema NER completo com base em aprendizado profundo é um pouco demais por enquanto.

MaticDiba
fonte

Respostas:

5

Sim, é inteiramente possível combinar aprendizado não supervisionado com o modelo CRF. Em particular, eu recomendaria que você explorasse a possibilidade de usar os recursos do word2vec como entradas para o seu CRF.

O Word2vec treina a para distinguir entre palavras apropriadas para um determinado contexto e palavras selecionadas aleatoriamente. Pesos selecionados do modelo podem ser interpretados como uma representação vetorial densa de uma determinada palavra.

Esses vetores densos têm a propriedade atraente de que palavras que são semanticamente ou sintaticamente semelhantes têm representações vetoriais semelhantes. A aritmética básica do vetor revela algumas relações interessantes aprendidas entre as palavras.
Por exemplo, vetor ("Paris") - vetor ("França") + vetor ("Itália") produz um vetor bastante semelhante ao vetor ("Roma").

Em um nível alto, você pode pensar nas representações do word2vec como sendo similares às representações LDA ou LSA, no sentido de poder converter um vetor de entrada esparso em um vetor de saída denso que contém informações de similaridade de palavras.

Nesse sentido, LDA e LSA também são opções válidas para o aprendizado não supervisionado de recursos - ambos tentam representar palavras como combinações de "tópicos" e geram representações densas de palavras.

Para texto em inglês, o Google distribui modelos word2vec pré-treinados em um enorme conjunto de dados do Google Notícias com 100 bilhões de palavras, mas para outros idiomas, você precisará treinar seu próprio modelo.

Madison May
fonte
Ei, punho, quero agradecer sua resposta. Eu tenho mais uma pergunta. Os vetores de palavras retornados do algoritmo word2vec têm valores flutuantes; portanto, palavras como grande e maior terão vetores próximos do espaço vetorial, mas os valores dos vetores podem ser completamente diferentes. Por exemplo, grande = [0,1, 0,2, 0,3] e maior = [0,11, 0,21, 0,31]. Isso não é um problema para o algoritmo CRF, porque esse algoritmo os trataria como não semelhantes? Existe algum processamento adicional que deve ser feito antes do uso desses vetores de palavras no CRF? Espero que minha pergunta seja clara o suficiente.
MaticDiba
4

Neste artigo de 2014 ( GitHub ), os autores compararam várias estratégias de incorporação de incorporação de palavras em um sistema NER baseado em CRF, incluindo incorporação densa, incorporação binerizada, incorporação de cluster e um novo método de protótipo . Usar vetores densos diretamente, conforme sugerido por vlad, é a maneira mais direta, mas também a menos eficaz em várias avaliações.

Eu implementei a ideia do protótipo no meu projeto NER específico do domínio e funciona muito bem para mim.

user2404894
fonte
3

Estou com apenas cinco meses de atraso, mas com o CRFSuite você pode realmente usar esses recursos flutuantes como números, não como seqüências de caracteres. Para isso, você só precisa inventar um rótulo exclusivo para cada dimensão e, em seguida, adicionar um ":" seguido pelo valor.

Por exemplo, uma palavra "selva" é representada em 5 dimensões: 0,1 0,4 0,8 0,2 0,2 ​​0,9

O CRFSuite usaria essa palavra + recurso como:

ETIQUETA f1: 0.1 f2: 0.4 f3: 0.8 f4: 0.2 f5: 0.9

onde é claro que você substitui `` LABEL '' por uma string real e separa todos os espaços com guias (esse é o formato do CRFSuite).

Não tenho certeza, porém, de outros pacotes.

vlad
fonte