it-swarm-pt.tech

Existe um algoritmo que diz a semelhança semântica de duas frases

entrada: frase 1, frase 2

output: valor de similaridade semântica (entre 0 e 1) ou a probabilidade de essas duas frases estarem falando a mesma coisa

62
btw0

Você pode conferir este documento:

Semelhança de sentenças com base em redes semânticas e estatísticas de corpus (PDF)

Eu implementei o algoritmo descrito. Nosso contexto era muito geral (efetivamente duas frases em inglês) e descobrimos que a abordagem adotada era muito lenta e os resultados, embora promissores, não eram bons o suficiente (ou provavelmente seriam sem esforço considerável e extra).

Você não dá muito contexto, então não posso recomendar isso necessariamente, mas a leitura do artigo pode ser útil para você entender como lidar com o problema.

Saudações,

Matt.

42
Matt Mower

Há uma resposta curta e longa para isso.

A resposta curta:

Use o pacote WordNet :: Similarity Perl . Se o Perl não for o seu idioma preferido, verifique o página de projeto do WordNet em Princeton ou procure uma biblioteca de wrappers no google.

A resposta longa:

Determinar a semelhança das palavras é uma questão complicada e a pesquisa ainda é muito quente nessa área. Para calcular a similaridade, você precisa de uma representação apropriada do significado de uma Palavra. Mas o que seria uma representação do significado de, digamos, 'cadeira'? De fato, qual é o significado exato de 'cadeira'? Se você pensar muito sobre isso, isso vai mudar de idéia, você ficará um pouco louco e finalmente seguirá uma carreira de pesquisa em Filosofia ou Linguística Computacional para encontrar a verdade ™. Filósofos e linguistas tentaram encontrar uma resposta há literalmente milhares de anos, e não há fim à vista.

Portanto, se você estiver interessado em explorar esse problema um pouco mais profundamente, recomendo ler o Capítulo 20.7 em Processamento de fala e linguagem de Jurafsky e Martin, alguns dos quais estão disponíveis em Google Livros . Ele fornece uma visão geral muito boa do estado da arte dos métodos distributivos, que usam estatísticas de co-ocorrência do Word para definir uma medida de similaridade do Word. No entanto, não é provável que você encontre bibliotecas implementando essas.

32
nfelger

Convém verificar o projeto WordNet na Universidade de Princeton. Uma abordagem possível para isso seria executar primeiro cada frase por meio de uma lista stop-Word (para remover palavras "comuns", como "a", "to", "the" etc.). Depois, para cada uma das palavras restantes em cada frase, você pode calcular a "semelhança" semântica entre cada uma das palavras da outra frase usando uma medida de distância baseada no WordNet. A medida da distância pode ser algo como: o número de arcos pelos quais você precisa passar no WordNet para passar do Word1 para o Word2.

Desculpe, isso é de alto nível. Eu obviamente nunca tentei isso. Apenas um pensamento rápido.

7
Chuck Wooters

Para qualquer um que venha a isso, sugiro dar uma olhada no SEMILAR - http://www.semanticsimilarity.org/ . Eles implementam muitos métodos modernos de pesquisa para calcular a semelhança de palavras e frases. Está escrito em Java.

A API SEMILAR vem com vários métodos de similaridade baseados em Wordnet, Análise Semântica Latente (LSA), Alocação de Dirichlet Latente (LDA), BLEU, Meteoro, Informação Mútua Pointwise (PMI), Métodos baseados em Dependência, Métodos Baseados em Dependência, Métodos Otimizados Baseados em Atribuição Quadrática, etc. os métodos de similaridade funcionam em diferentes granularidades - palavra para palavra, sentença para sentença ou textos maiores.

5
kyrenia

Eu pesquisaria a indexação semântica latente para isso. Acredito que você pode criar algo semelhante a um índice de pesquisa de espaço vetorial, mas com termos semanticamente relacionados mais próximos, ou seja, com um ângulo menor entre eles. Se eu aprender mais, postarei aqui.

5
jonfm

Desculpe desenterrar uma pergunta de 6 anos de idade, mas como acabei de encontrar este post hoje, darei uma resposta no caso de alguém procurar algo semelhante.

o cortical.io desenvolveu um processo para calcular a semelhança semântica de duas expressões e elas têm um demonstração disso em seu site . Eles oferecem um API gratuita que fornece acesso à funcionalidade , para que você possa usá-lo em seu próprio aplicativo sem precisar implementar o algoritmo.

3
Hybrid System

Uma solução simples é usar o produto escalar de vetores de caracteres n-gram. Isso é robusto em relação às alterações de pedidos (que muitas das métricas de distância de edição não são) e captura muitos problemas em relação ao surgimento. Também evita o problema completo da IA ​​do entendimento semântico completo.

Para calcular o vetor n-grama, basta escolher um valor de n (por exemplo, 3) e misturar todas as seqüências de 3 palavras da frase em um vetor. Normalize o vetor para o comprimento da unidade e, em seguida, pegue o produto escalar de diferentes vetores para detectar a similaridade.

Essa abordagem foi descrita em J. Mitchell e M. Lapata, "Composição em modelos distributivos de semântica", Cognitive Science, vol. 34, n. 8, pp. 1388-1429, novembro de 2010., DOI 10.1111/j.1551-6709.2010.01106.x

3
Jonathan Betz

Experimente SimService , que fornece um serviço para calcular as principais palavras semelhantes e a similaridade de frases.

2
Lushan Han

Eu daria uma olhada nas técnicas estatísticas que levam em consideração a probabilidade de cada palavra aparecer em uma frase. Isso permitirá que você dê menos importância a palavras populares como 'e', ​​'ou', 'the' e dê mais importância a palavras que parecem menos regulares e, portanto, são um fator discriminatório melhor. Por exemplo, se você tiver duas frases:

1) O algoritmo smith-waterman fornece uma medida de similaridade entre duas strings. 2) Revisamos o algoritmo smith-waterman e achamos que ele é bom o suficiente para o nosso projeto.

O fato de as duas frases compartilharem as palavras "smith-waterman" e as palavras "algoritmos" (que não são tão comuns quanto 'e', ​​'ou' etc.) permitirá que você diga que as duas frases podem de fato estar falando sobre o mesmo tópico.

Resumindo, eu sugiro que você dê uma olhada em: 1) Medidas de similaridade de string; 2) métodos estatísticos;

Espero que isto ajude.

2
Gia

Isso requer que seu algoritmo realmente saiba do que está falando. Isso pode ser feito de alguma forma rudimentar, apenas comparando palavras e procurando sinônimos etc., mas qualquer tipo de resultado preciso exigiria alguma forma de inteligência.

1
Rik

Dê uma olhada em http://mkusner.github.io/publications/WMD.pdf Este artigo descreve um algoritmo chamado distância do Word Mover que tenta descobrir semelhança semântica. Ele se baseia nas pontuações de similaridade ditadas pelo Word2vec. Integrar isso ao GoogleNews-vectors-negative300 produz resultados desejáveis.

0
Anonymous