Vi recentemente um recurso interessante que já estava disponível no Planilhas Google: você começa escrevendo algumas palavras-chave relacionadas em células consecutivas, diga: "azul", "verde", "amarelo" e gera automaticamente palavras-chave semelhantes (neste caso , outras cores). Veja mais exemplos neste vídeo do YouTube .
Eu gostaria de reproduzir isso no meu próprio programa. Estou pensando em usar o Freebase, e funcionaria assim intuitivamente:
- Recupere a lista de palavras fornecidas no Freebase;
- Encontre seus "denominadores comuns" e construa uma métrica de distância com base nisso;
- Classifique outros conceitos com base na "distância" das palavras-chave originais;
- Exiba os próximos conceitos mais próximos.
Como não estou familiarizado com esta área, minhas perguntas são:
- Existe uma maneira melhor de fazer isso?
- Quais ferramentas estão disponíveis para cada etapa?
nlp
text-mining
freebase
nassimhddd
fonte
fonte
Respostas:
O algoritmo word2vec pode ser uma boa maneira de recuperar mais elementos para uma lista de palavras semelhantes. É um algoritmo de "aprendizado profundo" não supervisionado que foi demonstrado anteriormente com dados de treinamento baseados na Wikipedia (scripts auxiliares são fornecidos na página de códigos do Google).
Atualmente, existem implementações em C e Python . Este tutorial de Radim Řehůřek , autor da biblioteca de modelagem de tópicos Gensim , é um excelente ponto de partida.
A demonstração de "tópico único" no tutorial é um bom exemplo de como recuperar palavras semelhantes a um único termo (tente pesquisar em 'vermelho' ou 'amarelo'). Deve ser possível estender essa técnica para encontrar as palavras que têm a maior semelhança geral com um conjunto de palavras de entrada.
fonte
Você considerou uma abordagem baseada em frequência que explora a co-ocorrência simples de palavras em corpora? Pelo menos, é o que eu vi a maioria das pessoas usar para isso. Eu acho que pode ser abordado brevemente no livro de Manning e Schütze, e eu me lembro de algo assim como uma tarefa de casa na pós-graduação ...
Mais informações aqui: http://nlp.stanford.edu/IR-book/html/htmledition/automatic-thesaurus-generation-1.html
Para esta etapa:
Existem várias métricas de similaridade semântica que você pode analisar. Aqui está um link para alguns slides que reuni para um projeto de classe usando algumas dessas métricas de similaridade no WordNet: http://www.eecis.udel.edu/~trnka/CISC889-11S/lectures/greenbacker-WordNet-Similarity. pdf
fonte
Esse é um dos bons problemas em que o escopo pode variar de uma tarefa de casa a um projeto de tamanho do Google.
De fato, você pode começar com a coocorrência das palavras (por exemplo, probabilidade condicional). Você descobrirá rapidamente que obtém a lista de palavras de parada relacionadas com a maioria das palavras, simplesmente porque elas são muito populares. O uso da elevação da probabilidade condicional cuidará das palavras de parada, mas tornará a relação propensa a erros em pequeno número (na maioria dos casos). Você pode experimentar o Jacard, mas, como é simétrico, haverá muitas relações que não encontrará.
Em seguida, considere as relações que aparecem apenas a uma curta distância da palavra base. Você pode (e deve) considerar as relações baseadas em corpus gerais (por exemplo, Wikipedia) e específicos do usuário (por exemplo, seus e-mails).
Muito em breve, você terá várias medidas de relacionamento, quando todas forem boas e tiverem alguma vantagem sobre as outras.
Para combinar essas medidas, gosto de reduzir o problema a um problema de classificação.
Você deve criar um conjunto de dados de palavras e rotular como "relacionado". Para criar um grande conjunto de dados rotulado, você pode:
Em seguida, use todas as medidas que você possui como características dos pares. Agora você está no domínio do problema de classificação supervisionada. Crie um classificador no conjunto de dados, avaliado de acordo com suas necessidades e obtenha uma medida de similaridade que atenda às suas necessidades.
fonte