내 프로젝트의 일환으로 작업 기반 음성 대화 시스템을 구현하고자합니다. 시스템을위한 NLU (Natural Language Understanding) 단위를 구축하기가 어렵다는 것을 알고 있습니다. 이것은 사용자가 말 (발음)을 시스템에서 "이해하여"특정 동작으로 말을 매핑하는 부분입니다. 복잡한 과정이지만, 대화하는 대화 시스템을 만드는 데 실제 경험이있는 사람이라면 어떻게 시작해야하는지에 대한 아이디어는 많이 감사 할 것입니다. 감사합니다.음성 대화 시스템에 대한 자연어 이해
답변
매우 광범위한 주제이지만,이 분야의 조사가 새롭기 때문에 내가 배운 것을 공유하겠습니다.
일반적으로 첫 번째 단계는 문장의 문법 구조 (특히 단어 사이의 종속 관계)를 구문 분석하는 것입니다. http://nlp.stanford.edu/software/lex-parser.shtml#Sample
나는이 파이썬 래퍼를 사용하여 스탠포드 파서에 인터페이스입니다 : 이것은 당신에게이 같은 출력을 줄 것이다 https://github.com/dasmith/stanford-corenlp-python
두 번째 단계는, 일반적으로는 "감각"에 각 단어를지도하는 것입니다, Word-Sense Disambiguation (WSD)를 수행합니다.
각 단어의 의미와 단어 간의 관계를 알고 나면 문장을 이해하고 원하는 작업을 실행할 수 있어야합니다.
일반적인 문장에 대해 기본적으로 모든 것을 수행 할 수있는 개방적이고 자유로운 시스템은 없습니다. 이것은 특히 말하기가 어렵습니다.
예를 들어 Stanford Parser와 같은 문법 파서는 일반적으로 신문 기사의 텍스트 유형에 대해 교육 된 언어 모델을 제공합니다. 이는 언어와 구별되는 경향이 있습니다. 당신이 당신의 시스템에서 기대하는 문장의 유형 인 "treebank"를 훈련에 추가하는 새로운 언어 모델을 훈련시키고 싶어 할 것입니다. (Stanford Parser는 그러한 모델 트레이너 응용 프로그램을 제공합니다).
불행히도 Word-Sense Disambiguation (WSD)을 작성하는 좋은 범용 소프트웨어 라이브러리는 없습니다. 주된 이유는 단어 "감각"에 대한 실용적인 언급이 아직 없다는 것입니다. 이 분야의 사실상의 표준은 여전히 WordNet이지만 분명히 사람도 단어와 "synset"간의 매핑에 동의하지 않습니다. 즉, WordNet의 의미는 너무 세밀하여 신뢰할 수있는 매핑을 제공하지 못합니다.
자주 (종종 나무로 구조화 된) 의미에 대한 자신 만의 데이터베이스를 구축하여 응용 프로그램에 실용적 일 정도로 거칠게 만듭니다. 단어를 그런 거친 나뭇결의 의미로 매핑하는 데는 여러 가지 방법이 있습니다. 가장 간단한 방법 중 하나이지만 여전히 효과적인 방법은 좋은 오래된 순진한 베이 즈 분류 자입니다. 아직 시도하지 않은 또 다른 접근법은 "단어 프레임"에 대한 정보를 사용하는 것입니다 (즉, 특정 단어의 특정 의미는 단어와 특정 관계를 갖게됩니다).
어쨌든, 현실은 그것이 열린 문제라는 것입니다. 처음에는 특정 하위 도메인에 대한 문제 해결에 집중해야합니다.
응용 프로그램이 음성 인식이 아닌 NLU를 효과적으로 필요로합니까? – mjv
예. 나는 ASR (Automatic Speech Recognition)을 끝 마쳤다. –
@Themach 하나의 질문에 대해 너무 큰 주제입니다. 주제에 관한 유용한 문헌을 확인 했습니까? – Qnan