SyntaxNet의 결과를 머신 러닝으로 통해 어떻게 만들었을까... 분석하려는 사람들은 먼저 tensorflow를 공부해야 하지않을까 생각이 드네요.
그래서, 여기에서는 syntaxnet의 결과를 어떻게 이해해야하는지 고민 해봤습니다.
아래와 같이 실행을 시키면
echo 'I have something to tell you' | syntaxnet/demo.sh
아래와 같은 결과가 나옵니다.
Input: I have something to tell you
Parse:
have VBP ROOT
+-- I PRP nsubj
+-- something NN dobj
+-- tell VB infmod
+-- to TO aux
+-- you PRP dobj
VBP,PRP,NN,VB,....
ROOT,nsubj,dobj,infmod,aux.... 등이 나오는데 이게 뭔지 한참 고민해봤습니다.
http://universaldependencies.org/ 여기에서 그답을 찾을 수 있습니다. 이하 UD
VBP,PRP,NN 등은 POS(part-of-speech) tag라고 합니다.
Morphology 형태소 우리가 일반적으로 말하는 말하는 명사, 동사, 형용사와 같은 품사를 말합니다. 하지만 좀더 많습니다.
그렇지만 UD에 있는 POS tag와 google POS tag가 일치하지는 않습니다.
예를들어 UD POS tag 에서 명사는 NOUN 표시하고 있지만, syntaxnet에서는 NN으로 표시하고있습니다. 상위 예제에서는 something이 되겠네요.
그리고 ROOT,nsubj 이런것은 문장 성분이라고 합니다. 우리가 배워왔던 주어, 술어, 목적어... UD 의 dependency항목에서 찾아볼 수 있습니다.
dobj 는 직접 목적어, nsubj 명사주어, infmod ... 이건 뒤져도 안나오는데 아시는 분있으면 제보 좀 해주세요.
universal dependencies 말고 stanford dependencies 도 있습니다.
http://nlp.stanford.edu/software/dependencies_manual.pdf
http://nlp.stanford.edu/software/nndep.shtml
이걸로 뭘할 수 있을까...
어떤 자연어가 주어지면 컴퓨터가 뭐래는거야 parser를 돌리게 되죠.
root부터 분석해보면 have 가진다... 뭘가지지? dobj를 찾게되죠.. something 아하 무언가를 가지게 되군, 누가 가진다는 말이지 궁금하면 nsubj 를 찾아서 보면 되죠 I 음 말하는 사람이 어떤걸 가진다는 말이군,,, 이런식으로 처리가 될겁니다.
이걸 번역에도 이용할 수 있습니다. 해당되는 언어의 뜻의 말을 어순으로 다시 나타내면 번역이 되는 겁니다.
작성자가 댓글을 삭제했습니다.
답글삭제http://nlp.stanford.edu/software/dependencies_manual.pdf
답글삭제infmod was remode as a relation. It has been generalized as a case of vmod.
partmod was remode as a relation. It has been generalized as a case of vmod.
vmod has been introduced as a relation generalizing over non-finite verbal modifiers that are participial
in form (formerly partmod) or infinitival (formerly infmod).
thanks
답글삭제안녕하세요 저도 지금 비슷한 공부를 하고 있는데요. 논문을 보다가 궁금한 점이 생겨서 찾아보다 들르게 되었습니다! Dependency tree를 구하는 기준이 그냥 문장 성분이 트리의 부모, 자식 노드가 결정되고 문장을 형태소 분석해서 성분의 종류에 따라서 자식들을 채워나가는 건가요?
답글삭제말이 이상하게 됐네요 쓰고 보니깐.. 정리하면 문장성분(주어, 술어, 간목, 직목 등등)에 따라 자식, 부모가 결정되고(이미 트리 구조가 갖추어진 상태) sentence를 형태소 분석해서 sentence의 성분을 앞의 구조를 기준으로 트리를 구하게 되는? 빌드 기준을 가지는건가요?
삭제질문의 요지를 정확하게 모르겠고 저도 공부하는 입장이라 ㅎㅎ, 적어도SyntaxNet에서 tree를 만들어 내는 방법은 학습에 의해 구현된 내용을 바탕으로 tree를 만들어 내는데 해당 tree는 사람들이 수작업으로 만들어진 treebank를 이용하여 얼마나 정확한가를 판단한다고 합니다. 반대로 학습시에도 treebank를 이용하지 않나 생각됩니다.
삭제그렇지만 질문의 요지는 stanford 구분 분석기에 대해 말하는 부분가 반대로 tree 를 보는 방법에 대한 부분이 아닌가 생각이 되는데요.. 혹시 좋은 정보나 알게되는 링크라도 공유 해주시면 감사하겠습니다.