Pergunta

Eu gostaria de usar o reconhecimento de entidade nomeada (NER) para encontrar as tags adequadas para textos em um banco de dados.

Eu sei que há um artigo da Wikipedia sobre isso e muitas outras páginas descrevendo NER, gostaria de preferência ouvir algo sobre este tópico de você:

  • Que experiências você fez com os vários algoritmos?
  • Qual algoritmo que você recomendaria?
  • Qual algoritmo é o mais fácil de implementar (PHP / Python)?
  • Como o algoritmos de trabalho? formação manual é necessária?

Exemplo:

"No ano passado, eu estava em Londres, onde eu vi Barack Obama." => Tags: londres, Barack Obama

Eu espero que você possa me ajudar. Muito obrigado antecipadamente!

Foi útil?

Solução

Para começar com check-out http://www.nltk.org/ Se você planeja trabalhar com python embora tanto quanto eu sei o código não é "força industrial", mas irá ajudar a começar.

Verifique a seção 7.5 de http://nltk.googlecode.com /svn/trunk/doc/book/ch07.html mas para entender os algoritmos que você provavelmente terá que ler através de uma grande parte do livro.

Além disso, verifique este para fora http://nlp.stanford.edu/software/CRF- NER.shtml. É feito com java,

NER não é um assunto fácil e, provavelmente, ninguém vai dizer "este é o melhor algoritmo", a maioria deles têm seus / contras pro.

Meu 0,05 de um dólar.

Cheers,

Outras dicas

Depende se você quer:

Para saber mais sobre NER : Um excelente lugar para começar é com NLTK e o associado livro .

Para implementar a melhor solução : Aqui você vai necessidade de olhar para o estado da arte. Ter um olhar para publicações em TREC . Uma reunião mais especializada é Biocreative (um bom exemplo de NER aplicado a um estreito campo) .

Para implementar a solução mais fácil : Neste caso, você basicamente só quero fazer a marcação simples, e retirar as palavras com tag como substantivos. Você poderia usar um pegador de nltk, ou mesmo apenas olhar para cima cada palavra em PyWordnet e tag-lo com o mais comum wordsense.


A maioria dos algoritmos necessário algum tipo de formação, e têm melhor desempenho quando eles são treinados no conteúdo que representa o que você vai estar se perguntando-lo para tag.

Há algumas ferramentas e API está lá fora.

Há uma ferramenta construída em cima de DBPedia chamado DBPedia Spotlight ( https: // github. com / DBpedia-refletor / DBpedia-refletor / wiki ). Você pode usar sua interface REST ou fazer o download e instalar seu próprio servidor. A grande coisa é ele mapeia entidades à sua presença DBPedia, o que significa que você pode extrair dados ligados interessantes.

AlchemyAPI (www.alchemyapi.com) tem uma API que vai fazer isso via descansar também, e eles usam um modelo freemium.

Eu acho que a maioria das técnicas de contar com um pouco de PNL para encontrar entidades, em seguida, usar um banco de dados subjacente, como Wikipedia, DBPedia, Freebase, etc fazer disambiguation e relevância (assim, por exemplo, tentando decidir se um artigo que menciona a Apple é sobre a fruta ou a empresa ... que iria escolher a empresa se o artigo inclui outras entidades que estão ligadas à Apple a empresa).

Você pode querer tentar mais recente sistema Ligando entidade rápido do Yahoo Research - o documento também atualiza as referências a novas abordagens para NER usando embeddings baseados na rede neural:

https://research.yahoo.com / publicações / 8810 / leve-multilingual-entidade de extração e de ligação

Pode-se usar redes neurais artificiais para executar reconhecimento de entidade mencionada.

Aqui é uma implementação de um bi-direcional LSTM + CRF rede no TensorFlow (python) para executar reconhecimento de entidade mencionada: https://github.com/Franck-Dernoncourt/NeuroNER (funciona em Linux / Mac / Windows).

Ela dá state-of-the-art resultados (ou perto disso) em vários conjuntos de dados reconhecimento de entidade mencionada. Como Ale menciona, cada algoritmo reconhecimento de entidade mencionada tem suas próprias desvantagens e upsides.

ANN arquitetura:

enter descrição da imagem aqui

Como visto no TensorBoard:

enter descrição da imagem aqui

Eu realmente não sei sobre NER, mas a julgar por esse exemplo, você poderia fazer um algoritmo que procurou letras maiúsculas nas palavras ou algo parecido. Para que eu recomendaria regex como o mais fácil de implementar solução Se você é pensar pequeno.

Outra opção é comparar os textos com um banco de dados, wich yould corresponder seqüência de pré-identificados como Etiquetas de interesse.

meus 5 centavos.

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