CODENAVY
[데이터셋 구축] Distant Supervision 본문
NLP 쪽 일을 하다보면 데이터셋 구축의 필요성과 자주 마주하게 된다. 그러나 많은 양의 데이터셋을 구축하기 위해서는 사람의 시간과 노력이 많이 필요하기 때문에, 이번에 DS(Distant Supervision) 방법을 통해 데이터셋을 구축하게 되었다.
Distant Supervision이란?
DS는 문장에 포함된 엔티티(개체)들 간의 관계가 무엇인지 알아내야 하는데, 이를 일일이 손으로 태깅할 수 없는 경우 사용할 수 있는 방법이다. deepdive.stanford.edu에서는 아래와 같이 설명하고 있다.
In distant supervision, we make use of an already existing database, such as Freebase or a domain-specific database, to collect examples for the relation we want to extract. We then use these examples to automatically generate our training data. For example, Freebase contains the fact that Barack Obama and Michelle Obama are married. We take this fact, and then label each pair of "Barack Obama" and "Michelle Obama" that appear in the same sentence as a positive example for our marriage relation. This way we can easily generate a large amount of (possibly noisy) training data. Applying distant supervision to get positive examples for a particular relation is easy, but generating negative examples is more of an art than a sciece.
Source | http://deepdive.stanford.edu/distant_supervision
즉, 다시 말하자면 사람이 일일이 2개 엔티티 간의 relation을 태깅할 수 없으므로, Freebase와 같은 기존에 구축되어 있는 database에 정의된 relation에 따라 해당 문장을 태깅한다는 것이다. 물론, 이러한 자동화 태깅 방식은 잘못된 relation 태그를 부여할 가능성도 있다. 예를 들어, '김다미는 영화 <기생충>에 출연하지 않았다'라는 문장이 있을 때, '김다미(Person)'와 '<기생충>(Movie)'라는 엔티티를 성공적으로 추출했다고 가정하자. 기존에 (Person)--[STARRED_IN]--(Movie)라는 관계가 database에 정의되어 있었다면, DS는 실제로 '김다미'가 <기생충>에 출연하지 않았음에도 불구하고 (Person {"name":김다미})--[STARRED_IN]--(Movie {"name":기생충}) 이라는 관계로 해당 문장을 정의해버릴 것이다. 따라서, 이러한 noise를 어떻게 처리할 것인지에 대해서도 고려가 이루어져야 한다.
다시 한 번 정리해보자면,
DS를 사용하기 위한 조건
1) 특정 task를 위해 특정 문장 내에 포함된 2개 이상의 엔티티들 간의 관계가 무엇인지 정의해야 하는 경우 사용할 수 있다.
2) Freebase와 같이 이미 entity들 간의 관계가 정의된 database를 사용할 수 있다.
DS를 사용하는 방법
1) input sentence에서 타겟으로 삼고자 하는 엔티티를 찾는다. (entity recognition)
2) Database에서 엔티티 간의 관계를 어떻게 정의하고 있는지 검색한다.
3) 해당 sentence의 relation label에 해당 관계를 부여한다.
라고 할 수 있겠다.