eubinecto/politely

False `르` 불규칙 by positive 해결하기

eubinecto opened this issue · 4 comments

Why?

#53 이전에도 있었지만, 이후에도 다음과 같은 테스트 에러가 뜬다
image

What is the cause?

아마도 아래와 같은 불규칙으로 잘못 판단 (False by positive) 했기 때문일 것으로 추측
image
실제로 출력을 확인해보니 그렇게 나옴
image

이르렀, 일렀을 모두 정답이라고 간주한다.

하지만 내가 정답이 여러개인 경우, 가장 짧은 것을 선택하도록 해놓았으므로...
image

결과적으로는 일렀어요가 최종 출력으로 나오게되는 것.

어떻게 고치지?

이것도 맥락에 해당하는건가...?

이르 + 어가 합쳐질 때.

일러 (러 불규칙)가 되어야 하는가 이르러 (르 불규칙)가 되어야 하는가? 규칙을 정하기가 힘들다.

이건 맥락이 필요한 부분아닌가? 예를 들어,

  • 지금 하기에는 이르 + 어 + 요 -> 지금 하기에는 일러요.
  • 반란을 일으키는 지경에 이르 + 어 + 요 -> 반란을 일으키는 지경에 이르러요.
  • 하지말라고 이르 + 었 + 다 -> 하지말라고 일렀다.
  • 정상에 이르 + 었 + 다 -> 정상에 이르렀다.

로 비뀌게 되는데.

이를 해결하기 위해서는... 음.. 맥락에 대한 이해 없이는 규칙을 정의할수가 없다.
이 활용은 규칙기반 모델이 해결할 수 없는 부분이다.

바로 이런 애매모호함 (ambiguity) 때문에 soynlp 라이브러리의 conjugate 함수의 출력이 str이 아니라 set인 것일수도.

그럼 해결책은?

맥락에 대한 고려없이, 단순히 leftright를 입력으로 받는 경우, 규칙으로 해결하는 것은 불가능하다.

음... 아니, 가능할수도 있다. 우리에게는 지금 pos라는 정보가 존재한다. 이 정보를 사용한다면 해결할 수 있지 않을까?

아니다... 둘은 아쉽게도 품사가 동일하게 분석이된다
image

결국엔 규칙만으로는 방법이 없다. 맥락이 필요하다.
이래서 예측기반 모델을 많이들 쓰나보다.

그렇다면 이건 내 잘못이 아니라 어쩔 수 없는거다

오직 규칙만을 사용하기로 한 이상, 이 친구는 테스트에서 제거하고, unittest.skip 로 기록해두자.

일단은 이렇게 두고.. .나중에 돌아옵시다
image

나름 가능할 것 같은 방법?

BERT를 쓰는건 속도때문에 옵션이 아니고. Word2Vec 룩업 테이블을 만들어서, 앞 맥락의 단어 중 쓸만한 단어 (아마도 명사?)
의 벡터표현과 candidates속의 벡터표현사이의 유사도를 따져서 candidates에서 pop하는 방식도 고려해볼 수 있을 것 같다.

일단 지금은 이슈를 닫는다.