ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [cs224n] 5강 의존성 파싱 (2/4, 의존성 문법과 구조 (dependency grammar and structure))
    AI 2021. 1. 27. 15:35

    그것으로 하고 싶은 전체적인 것은 이 의존성 문법입니다. 의존성 문법을 좀 보여줬는데요. 우리가 의존성 문법에 대해 좀 동기부여되길 바랬습니다. 의존성 문법은 무엇이 구문적 구조인지, 그것이 렉시컬 (lexical) 항목들간의 관계인지를 상정합니다. 여기서 우리가 화살표로 그린 바이너리 대칭적 관계인지에 대해서도요. 그들은 바이너리이고 대칭적이니까요. 우리는 그걸 의존성이라고 부르죠. 여기 2개의 방식이 있습니다. 그것들을 작성하는 흔히 사용되는 방식이죠. 하나의 방식은 여러분이 단어를 한 줄로 나열하고 그걸 만드는 겁니다. 여기 전체 문장을 보죠. 여러분은 그 위에 일종의 루핑 (looping)하는 화살표를 그리는 거죠. 다른 방식은 그걸 트리처럼 표현하는 겁니다. 거기서 여러분은 전체 문장의 헤드 (head)인 submitted를 제일 위에 두고 submitted의 의존성은 Bils, were, Brownback이라고 하는 거죠. 그 다음 여러분은 그 각각의 의존성을 Bills은 ports와 immigration 위에 있고, Bills와 were의 의존성은 submitted죠. 여러분은 이런 종류의 트리를 만들 수 있습니다.

    우리는 흔히 한 화살표에 추가적으로 그들 사이의 문법적 관계를 말해주는 타입도 적을 수 있죠. 이게 문장의 주어인가요? 이게 동사의 목적어인가요? 이게 접속사인지 등등을 적을 수 있습니다. 우리는 의존성 레이블 체계를 가지고 있는데, 유니버설 의존성 (universal dependency) 사이트가 있으니 보세요. 우리는 수업에선 이 레이블을 사용하지 않을 거고, 화살표만 사용할 겁니다. 화살표로 여러분은 전치사구 같은 것을 해석할 수 있어야 합니다. 그들이 뭘 한정하는 지, 그 전치사 구가 어디에 연결되어 있는지, 그게 맞는 지 틀린 지에 대해서요.

    그래서 형식적으로, 우리가 이런 의존성 문법을 가지고 있을 때, 우리는 이런 화살표를 그리고 이 끝에 있는 것을 의존성 헤드라고 부릅니다. 그리고 여기 있는 것 (Bills)을 의존성의 디펜던트 (dependent)라고 합니다. 이 예처럼, 일반적인 기대 사항과 우리의 정책이 바라는 것은 의존성이 트리 (tree)를 형성하는 겁니다. 그것은 결국은 연결된 비순환, 하나의 루트가 있는 그래프죠. 의존성 문법은 엄청나게 긴 역사가 있습니다.

    인류가 아는 유명한 첫 언어학자는 파니니 (Panini)인데요. 기원전 5세기에 산스크리트어의 구조를 설명하려고 글을 썼죠. 파니니가 연구한 것은 산스크리트어의 비유가 많은데, 지금은 그걸 다루지 않을 겁니다. 그 이상으로, 그는 산스크리트어의 구조를 설명하려고 했습니다.

    노테이션 (notation)은 다르지만, 본질적으로, 그가 산스크리트 구조를 설명하기 위해 사용한 메카니즘 (mechanism)은 의존성이죠. 한정사에서 아규먼트 (argument)가 뭔지, 우리가 봤던 관계는 어떤지등등에 대해서 썼습니다.

    인류의 역사를 보면 인간의 언어 구조를 이해하려는 노력의 대부분은 본질적으로는 의존성 문법입니다. 첫번째 천년 (millenium) 뒤에 아랍어 문법학자의 엄청난 연구가 있었고 본질적으로 그들이 사용했던 것은 사실 의존성 문법이었습니다. 그에 비교해서 문맥없는 문법과 구문 구조 문법 아이디는 매우 새로운 것입니다. 처음으로 이 콘스티튜언트 (constituent)와 구문 구조 문법을 제안한 사람은 1947년의 웰스 (Wells)죠. 그 이후 그건 촘스키 (Chomsky)의 연구를 거치면서 엄청 유명해져요. 그를 좋아하든 싫어하든 최고로 유명한 언어학자이고 다양하게 컴퓨터 과학에도 공헌했죠. 촘스키의 위계질서에서 헤드는 누구죠? 103에서 기억나나요? 촘스키 하이어러키는 컴퓨터 과학을 시작하는 학생을 괴롭히기위해 만들어 진게 아니죠. 그건 촘스키가 인간 언어의 복잡성에 대해 주장을 하고 싶어서죠 . 현대 연구에서는 루시 테즈니어 (Tesniere)가 일종의 의존성 문법을 정형화했습니다. 그건 긴 시간 동안 컴퓨터 언어학에 영향을 미쳤죠. 미국 컴퓨터 언어학에서 초기의 파싱 연구는 의존성 문법을 사용했습니다.

    여기서 봐야할 것이 2개가 있는데, 만약 여러분이 의존성 문법이 있는 다른 논문을 보기 시작한다면, 저자들은 화살표가 어느 방향을 일관적으로 사용하지 않습니다. 여기엔 2가지 종류의 생각이 있는데, 헤드에서 시작해 디펜던트 (dependent)를 가리키겠다 혹은 디펜던트에서 시작해 뭐가 헤드인지 가리키겠다는 거죠. 둘 다 볼 수 있는데, 우리가 수업에서 하는 것은 테즈니에가 한 방식으로 헤드에서 시작해 디펜던트를 가리키는 거죠. 일반적으로 이게 편리합니다. 문장에 가짜 루트 노드를 추가해서 문장 전체의 헤드를 가리키는 거죠. 그것도 쓸 겁니다. 의존성 파서를 만드는 것은 혹은 어떤 종류의 인간 언어 구조 파인더를 만드는 것은, 컨스티튜언시 문법 파서를 포함해서, 최근 연구에서 중심적인 도구입니다.

    지난 25년 간의 최근 연구는 이 트리뱅크 (treebank) 아이디어 였습니다. 트리뱅크의 아이디어에 대해 말하자면, 사람들을 둘러 앉게 해서 문장에 대해 문법적 구조를 얹게 하는 겁니다. 여기 유니버설 의존성으로부터의 예가 있는데요. Miramar가 유명한 염소 훈련사였던 것 같네요. 어떤 사람이 앉아서 이 문장과 나머지에 의존성 구조를 얹었죠. 여담인데, 유니버설 의존성이라는 프로젝트는, 제가 강력히 관여했는데, 그 프로젝트의 목표는, 어떤 인간의 언어에도 사용될 수 있는 의존성 설명 (description)의 일관적이고 병렬적인 시스템 (uniform parallel system)이었죠. 유니버설 의존성 웹사이트에 가 보면, 영어에 관한 것만이 아니라 불어에 대한 유니버설 의존성 분석을 볼 수 있습니다. 독일어, 핀란드어 , 카작, 인도네시아어 등 많은 언어를 볼 수 있죠. 물론 훨씬 많은 언어가 유니버설 의존성 분석이 없습니다. 만약 여러분이 큰 소명이 있다면, 스와힐리어 유니버설 의존성과 트리뱅크를 만들겠다면 연락하세요. 이게 트리뱅크 아이디어입니다. 역사적으로 보면 사람들이 즉각적으로 생각해 낸 것이 아닙니다. 이 아이디어를 개발하는 데는 많은 시간이 걸렸죠 . 사람들은 언어의 문법에 대해 생각하기 시작했습니다. 현대에도, 50년대에도 생각했고 사람들은 1960년대 초반에서야 언어에 대한 파서를 만들기 시작했습니다. 60, 70, 80년대 연구에는 트리뱅크가 없었습니다. 사람들이 이 연구를 하는 방식은 문법을 작성하는 것이었는데, 그 방식은 제가 컨스티튜언시에 대해서 설명했던 방식이죠. 명사구는 한정사, 선택적 형용사, 명사이고, 명사는 동일한 종류의 문법과 의존성 포맷이죠. 그들은 손으로 이 문법을 만들어서 이 문장을 파싱할 수 있는 파서를 만들었죠. 더 들어가 보면, 사람에게 문법을 작성하라고 하는게 더 효율적이죠. 왜냐면 여러분이 명사구는 한정사, 선택적 형용사, 명사 같은 규칙(rule)을 쓰면, 그건 엄청나게 많은 구문을 설명합니다. 혹은 무한개의 문장을 설명하죠. 이건 the cat, the dog, cat, dog, large dog 등 우리가 처음에 봤던 모든 것들의 구조죠. 하나의 규칙으로 많은 것을 잡아 낼 수 있다는 것은 효율적이죠. 근데 사실은 실제로는 그게 좋은 아이디어가 아니라고 밝혀졌죠. 훨신 좋은 것은 이런 종류의 문장에 대한 구조를 서포팅 (supporting)하는 트리뱅크를 가지는 거라고 밝혀졌죠.

    왜 그런지는 좀 모호한데, 왜냐면 트리뱅크를 만드는 건 꽤 하찮은 일 같았거든요. 어떤 면에선 그렇습니다. 그러나 결국 유용한 것으로 밝혀졌죠. 엄청난 이득 중 하나는 트리뱅크가 재사용가능하다는 겁니다. 사실상 60, 70, 80년대에 여러 사람들이 파서 만들기를 시작하고 문법 규칙을 위해 각자의 노테이션을 만들었죠. 그건 점점 더 복잡해져서, 그건 그 파서에서만 썼고 다른 파서들은 안썼습니다. 사람에 의한 연구결과가 공유되거나 재사용되지 않았죠. 트리뱅크를 일단 가지면, 모든 목적에 재사용할 수 있어서 많은 사람들이 파서 포맷을 만들었습니다. 또한 많은 사람들이 그걸 사용했죠. 언어학자는 트리뱅크를 사용해서 여러 컨스트럭션 (construction)의 예를 찾습니다. 그러나 그 이상으로, 머신 러닝을 하고 싶어지면서 이게 필요해졌죠. 머신 러닝을 하려면, 모델을 만들 데이타가 있어야 합니다. 특히 머신 러닝 모델이 이용하는 것은 여러 구조가 얼마나 흔한가를 이용합니다. 우리는 흔한 것들 (commoners)과 그 빈도에 대해 알고 싶습니다. 트리뱅크가 또 커다란 것을 제공하는데요. 많은 문장들이 사실 모호성을 갖고있습니다. 우리가 하고 싶은 것은 문장에 대한 올바른 구조를 찾는 모델을 만드는 것인데요. 문법만 가지고 있으면, 애매한 문장에 대한 올바른 구조가 뭔지 알 방법이 없습니다. 여러분이 할 수 있는 건 그 문장은 4개의 전치사구로 되었다고 말하는 겁니다. 앞에서 본대로, 그건 14개의 다른 파서가 있습니다. 트리뱅크 예제를 가지면, 이것이 문맥상 이 문장의 올바른 구조라고 할 수 있죠. 그래서 여러분은 머신 러닝 모델을 만들 거고 그 구조를 복구할 수 있을 겁니다.

    어떻게 의존성 파서 (parser)를 만들 수 있을까요? 어떤 식으로든 우린 뭐가 제대로 된 파싱인지 잡아낼 수 있는 모델을 원합니다. 추상적으로 생각해 보면, 여기 우리가 주목해야할 것들이 있는데, 주목해야 할 것은 바로 단어들입니다. 'Discussions of issues'라는 구는 합리적인 거죠. 그래서 discussion의 디펜던트로 issue를 가지는 건 합리적으로 보입니다. 'discussions of outstanding'은 이상하죠. 그 의존성을 원하지 않을 겁니다. 얼마나 단어들이 서로 멀리 떨어져 있나에 관한 질문이 있는데, 대부분의 의존성은 꽤 짧은 거리죠. 전부다는 아니지만요. 그 사이엔 뭐가 있냐는 질문이 있는데, 세미콜론이 있다면, 그 사이에 아마도 의존성이 있겠죠. 다른 이슈는 얼마나 많은 논항 (argument)이 필요한가 입니다. 여기 'was completed'가 있죠. 'was completed'를 보면, 여러분은 'was completed'앞에 주어가 있을 거라고 기대할 겁니다. 없다면 잘못된거죠. 그 쪽에 논항을 기대하고 있는거죠. 반대편엔 그 뒤엔 목적어가 없죠. 여러분은 'the discussion was completed the gut.'이라고 말하지 않죠. 그건 좋은 문장이 아닙니다. 우리는 우리의 의존성 파서가 그 구조를 이용할 수 있기를 바랍니다.

    사실 우리가 의존성 파서를 만들 때 하는 작업은 각각의 단어에 대해 어떤 단어나 루트에 의존하고 있다고 말하는 것입니다. 여기 give가 사실 문장의 헤드죠. 루트의 디펜던트이구요. talk는 give의 디펜던트죠. I'll도 talk의 디펜던트고요. 각각의 단어에 대해 우리는 뭐가 의존적인지 선택할 수 있고, 우리는 의존성이 트리를 구성할 수 있도록 하고 싶습니다. 그 말은 사이클 (cycle)이 있다면 좋지 않다라는 겁니다. 만약 우리가 bootstrapping이 talk의 디펜던트라고 한다면, 그리고 on이 bootstrapping의 디펜던트, 다시 talk가 on의 디펜던트... 이런 식으로 사이클이 생기는 걸 원하지 않고 트리를 갖길 원합니다. 마지막 이슈는 우리가 의존성이 교차되는 걸 원하는지에 관한 것입니다. 이게 그 예인데, 대부분의 경우 의존성은 교차하지 않습니다. 그러나 가끔 교차하죠. give a talk를 보면 talk가 목적어고, 언제냐면 내일이구요. 그런데 talk가 한정사를 갖는데 그건 on bootstrapping이죠. 그리고 우리는 사실 다른 의존성이 있는데, 그건 의존성이 교차하죠. (토크→온 부트스트래핑) 이건 흔하지 않습니다. 영어에서 많이 발생하지 않아요. 이런 구조에서만 발생합니다. 우리는 만약 교차하는 의존성이 없다면 프로젝티브 (projective)라고 합니다. 만약 교차하는 의존성이 있다면 넌프로젝티브 (non-projective)라고 합니다. 문장을 파싱하면 대부분의 경우 영어는 프로젝티브고 가끔 아닙니다. 넌프로젝티브일 때, 이렇게 문장 끝으로 밀어진 컨스티튜언트가 있는 경우입니다. 'I'll give a talk on bootstrapping tomorrow'라고 말할 수도 있었죠. 그럼 그건 프로젝티브 파싱이고, 만약 그 추가적인 한정사를 뒤로 밀면, I'll give a talk tomorrow on bootstrapping이라고 말하면 그럼 파스 (parse)가 넌프로젝티브가 되죠.

    다양한 의존성 파싱하는 방법이 있는데, 기본적으로 오늘 얘기할 건 전이 기반 (transition-based) 혹은 결정 의존성 (deterministic dependency) 파싱입니다. 이건 실용적인 파싱 배포에 엄청나게 영향이 컸죠. 구글이 모든 웹 페이지를 파싱할 때, 그들이 사용한 게 전이 기반 파서죠.

    댓글

Designed by Tistory.