Algoritmos para reconhecimento de entidades mencionadas
-
06-07-2019 - |
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!
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:
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:
Como visto no TensorBoard:
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.