문장에서 정보 추출


11

간단한 챗봇을 만들고 있습니다. 사용자 응답에서 정보를 얻고 싶습니다. 시나리오 예 :

Bot : Hi, what is your name?
User: My name is Edwin.

문장에서 Edwin이라는 이름을 추출하고 싶습니다. 그러나 사용자는 다음과 같은 다른 방식으로 응답 할 수 있습니다.

User: Edwin is my name.
User: I am Edwin.
User: Edwin. 

단어 간의 종속성 관계에 의존하려고했지만 결과가 좋지 않습니다.

이 문제를 해결하기 위해 어떤 기술을 사용할 수 있습니까?

[업데이트 됨]

음성 태거 및 파서의 일부와 함께 명명 된 엔터티 인식으로 테스트했습니다. 나는 대부분의 모델이 사람 이름이나 고유 명사의 엔티티의 첫 번째 문자가 대문자 여야하는 방식으로 훈련된다는 것을 알았습니다. 이것은 일반적인 문서에는 해당되지만 챗봇에는 관련이 없습니다. 예 :

User: my name is edwin.

대부분의 NER는 이것을 인식하지 못했습니다.


이것은 현대식 채팅 봇이 어떻게 구축되는지 설명하지만 간단하지는 않습니다. "질문 답변"을 검색하면 자세한 내용을 알 수 있습니다.
Emre

나는 사람들이 질문을하고 답변을받는 것이 어떻게 대답을 받아 들일만한 답변으로 표시 하는지를 좋아합니다. : P
chewpakabra

답변:


7

명명 된 엔터티 인식 및 구문 분석의 조합을 사용할 수 있습니다. Edwin 이라는 단어 가 확실히 등장하고 있지만 이름이 Edward Philip Martel 인 상황을 상상해보십시오 . NER는 각 단어를 개별 엔티티 (따라서 3 개의 다른 엔티티)로 감지하므로 어떤 논리에 따라 함께 묶어야합니다. 또한 여러 이름이 존재하는 경우 명확 해지기가 더 어려워 질 수 있습니다 (예 : John & Ramsey는 Winterfell에서 식사 ).

문장 구문 분석도 도움이됩니다 (최종 사용자가 상대적으로 일관성 있고 적절한 문장을 입력한다고 가정 할 경우, 속어와 짧은 형식의 텍스트를 사용하는 경우 Stanford NLP조차도 어느 정도 도움이 될 수 있습니다).

구문 분석 / 구문 분석 및 NER를 활용하는 한 가지 방법은 다음 예에 있습니다.

 1. User: Edwin is my name.
 2. User: I am Edwin.
 3. User: My name is Edwin.

각각의 경우에서 (일반적으로 마찬가지로) 엔티티 이름 (적명 / 명사)은 동사와 밀접한 관련이 있습니다. 따라서 먼저 문장을 구문 분석하여 동사를 결정한 다음 주변 (+/- 1 또는 2) 단어에 NER를 적용하면 문제를 해결하는 비교적 적절한 방법이있을 수 있습니다. 이 솔루션은 동사 주변의 창뿐만 아니라 NER를 식별하기 위해 생성하는 구문 규칙에 주로 의존합니다.


2
'비결정론 적 유한 오토마타'를 구현할 수 있습니다. 여기서 각 문장은 패턴이 받아들이는 응답입니다. 일부 문법은 이와 같은 방식으로 구현됩니다. (NLP / 문법). 당신은 프레임 워크에서이, 모양을 어떻게해야하는 경우 stanfordnlp.github.io/CoreNLP
Intruso


4

이것은 CRF 로 쉽게 수행 할 수 있습니다 . BIO 인코딩을 사용 하여 문장에 태그를 지정할 수 있습니다. 그런 다음 CRF에 전달하십시오. 다음과 같이 훈련 목적으로 몇 가지 태그 문장을 작성해야합니다.

 I am Edwin.
 O O  B-NAME

 You can call me Alfred
 O   O    O    O B-NAME

 My name is  Edwin   thomas
 O  O     O  B-NAME  I-NAME

CRFsuiteCRF ++ 는 좋은 구현 중 일부입니다. CRFsuite라는 파이썬 래퍼가 pycrfsuite 아주 쉽게 구현하는 것입니다. NER의 엔드 투 엔드 구현에 대해서는 이 ipython 노트북 또는 github의이 코드 스 니펫을 확인하십시오 .

파이썬으로 작성된 NER 및 의도 분류로 github 에서이 오픈 소스 채팅 봇 프로젝트 를 확인하십시오 . 문장에서 정보를 추출하도록 봇을 훈련시킬 수있는 사용하기 쉬운 훈련 UI가 있습니다.


0

이러한 작업을 매우 정확하게 수행하려면 word2vec를 사용하여 단어 임베딩을 사용하여 LSTM 모델을 작성하는 것이 좋습니다. LSTM은 문장에서 정보를 검색하고 문장에 단어 집합이 이미있는 경우 다음 문자 나 단어를 예측하는 데 도움을 줄 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.