Pergunta

Eu estou olhando para usar uma biblioteca de análise de linguagem natural para um simples bot chat. Eu posso obter as peças de marcas de fala, mas eu sempre me pergunto. O que você faz com o POS. Se eu sei que as partes do discurso, o que então?

Eu acho que ele iria ajudar com as respostas. Mas o que estruturas de dados e arquitetura que eu poderia usar.

Foi útil?

Solução

Uma parte-do-discurso atribui tagger rótulos para as palavras do texto de entrada. Por exemplo, o popular tagset Penn Treebank tem cerca de 40 rótulos, como "substantivo plural", "adjetivo comparativa", "tempo verbal passado", etc. O tagger também resolve alguma ambiguidade. Por exemplo, muitas formas de palavras inglesas podem ser tanto substantivos ou verbos, mas no contexto de outras palavras, a sua parte do discurso é inequívoca. Então, depois de ter anotado o seu texto com marcas POS você pode responder a perguntas como:. Quantos nomes que eu tenho ?, quantas sentenças não contêm um verbo ?, ??etc

Para uma chatbot, você obviamente precisa de muito mais do que isso. Você precisa descobrir os sujeitos e objetos no texto, e que verbo (predicado) que atribuem; você precisa anáfora resolver (que indivíduo faz um ele ou que ponto a), qual é o alcance da negação e quantificadores (por exemplo, todas , mais de 3 ), etc.

Idealmente, você precisa mapear você texto de entrada em alguma representação lógica (como lógica de primeira ordem), que iria deixá-lo trazer raciocínio para determinar se duas frases são equivalentes em significado, ou em um relacionamento vinculação, etc.

Enquanto um POS-tagger iria mapear a frase

Mary likes no man who owns a cat.

para tal estrutura um

Mary/NNP likes/VBZ no/DT man/NN who/WP owns/VBZ a/DT cat/NN ./.

você preferiria precisa de algo como isto:

SubClassOf(
   ObjectIntersectionOf(
      Class(:man)
      ObjectSomeValuesFrom(
         ObjectProperty(:own)
         Class(:cat)
      )
   )
   ObjectComplementOf(
      ObjectSomeValuesFrom(
         ObjectInverseOf(ObjectProperty(:like))
         ObjectOneOf(
            NamedIndividual(:Mary)
         )
      )
   )
)

É claro que, enquanto POS-pichadores obter valores de precisão e recall de perto de 100%, o processamento automático mais complexo terá um desempenho muito pior.

Uma boa biblioteca Java para PNL é LingPipe . Não se trata, no entanto, vão muito além do POS-tagging, chunking e reconhecimento de entidades mencionadas.

Outras dicas

processamento de linguagem natural é largo e profundo, com raízes que remontam pelo menos a década de 60. Você pode começar lendo sobre Linguística Computacional em geral, linguagem natural geração , generativa gramáticas , cadeias de Markov , chatterbots e assim por diante.

Wikipedia tem um pequena lista de bibliotecas que eu suponho que você pode ter visto. Java não tem uma longa tradição em PNL, embora eu não olhei para as bibliotecas da Universidade de Stanford.

Eu duvido que você vai obter resultados muito impressionantes sem mergulhar muito profundamente em linguística e gramática. Não sujeito escola favorito de todos (ou assim que eu ouvi relatado - loved'em meself).

eu vou pular muito muitos detalhes e manter este simples. Partes do discurso marcação ajudá-lo a criar um href="http://en.wikipedia.org/wiki/Parse_tree" rel="nofollow noreferrer"> parse árvore fora de uma frase. Uma vez que você tem isso, você tenta fazer um significado que de forma inequívoca possível. O resultado dessa etapa de análise vai ajudá-lo muito para enquadrar uma resposta adequada para você chatterbot.

Depois de ter parte de etiquetas de voz pode extrair, por exemplo, todos os substantivos, assim que você sabe mais ou menos o que as coisas ou objetos alguém está falando.

Para lhe dar um exemplo:

Alguém diz " você pode abrir uma nova janela. " Quando você tem as marcas POS você sabe que eles não estão falando de um pode (como no recipiente , jar , etc., o que ainda faz sentido no contexto de open ), mas um janela . Você também vai saber que open é um verbo.

Com esta informação, o bot do bate-papo pode gerar uma muito melhor responder que não terá nada a ver com o abridores de lata etc.

Nota: Você não precisa de um analisador para obter marcas POS. Um tagger simples POS é suficiente. Um analisador lhe dará ainda mais informações (por exemplo, qual é o assunto, o que o objeto da frase?)

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