Como aumentar uma lista de palavras relacionadas com base nas palavras-chave iniciais?

19

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:

  1. Recupere a lista de palavras fornecidas no Freebase;
  2. Encontre seus "denominadores comuns" e construa uma métrica de distância com base nisso;
  3. Classifique outros conceitos com base na "distância" das palavras-chave originais;
  4. 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?
nassimhddd
fonte
Meu palpite é que isso se baseia em tópicos de aprendizagem em um grande corpus.
tchakravarty
Se você quiser encontrar a explicação deles, acredito que houve um artigo sobre o método subjacente chamado Google Sets.
Jamesmf #
1
Esse problema é chamado de "expansão de consulta".
Emre

Respostas:

15

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.

joews
fonte
5

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:

Classifique outros conceitos com base na "distância" das palavras-chave originais;

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

Charlie Greenbacker
fonte
3

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:

  • Use fontes de palavras relacionadas conhecidas (por exemplo, boas categorias antigas da Wikipedia) para obter positivos
  • A maior parte da palavra não conhecida como relacionada não está relacionada.

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.

DaL
fonte