웹 과학, 복잡계를 만나다

Topics/Semantic Web 2012. 6. 13. 23:52 posted by Minery

2011년 3회 Network Theory 국제 워크샵에서 생긴 일

월드와이드웹을 공부하는 사람이라면 한번쯤은 들어봤음직한 이름의 인물 ‘팀 버너스리’, 그는 2006년에 자신의 글을 통해 많은 웹 과학의 과학자들이 그들의 연구 범위를 컴퓨터를 포함하여, 경제, 정부, 법, 심리학 같은 분야까지 넓히려고 노력해왔다고 했다. 물론 웹과 관련된 분야에 종사하고 있는 사람이 순수하게 웹만 연구하거나 개발하지 않고 있다는 것은 자명한 사실이다. 웹은 그 자체로 학문이기도 하지만 여러 분야에 접목하여 사용할 수 있는 도구적 측면이 있기 때문이리라. 필자 역시 웹과 시맨틱 웹을 다양한 분야에 접목시키기 위한 노력을 해오기도 했다.

한편, 네트워크 과학은 그 출발이 물리학에서 시작되었는데 한국에서는 ‘복잡계 네트워크’라는 이름으로 더 잘 알려져 있다. 네트워크 과학은 웹 과학을 포함하여 신경망, 소셜 네트워크, 단백질 네트워크 등 네트워크의 특징을 탐구하는데 그 목적이 있다. 필자가 복잡계 네트워크라는 단어를 듣게 된 것은 공교롭게도 필자의 친형에게서이다.
필자의 친형은 물리학과 박사과정이고 현재 복잡계를 연구하고 있는 중이다. 평소 가깝게 지내는 편은 아니지만 설날, 추석에 한번 씩 만나 자신의 연구 주제에 대해 설명하곤 하는데 2011년 추석에, 형과 연구주제에 대한 대화를 하다가 서로의 주제가 엇비슷하게 맞물러 가고 있다는 것을 알게 되었다. 웹을 연구하는 나에겐 취약한 이론적 근거나 메서드를 복잡계에서 가져다 쓸 수 있겠다 싶어서 급격한 관심이 생길 수밖에 없었고 반대로 복잡계를 연구하는 형에겐 아주 특수한 형태의 네트워크만을 다뤄오다가 웹 및 소셜 네트워크는 새로운 방대한 소스를 발견하게 되어 기쁠 수밖에 없었던 것이다.
인간의 생각이란게 거의 비슷하게 돌아가긴 하나보다. 2011년 5월에 네트워크 이론이라는 국제 워크샵에서 웹 과학자 그룹과 네트워크 과학자 그룹이 처음으로 만난 사건이 일어났고 나와 형의 놀라움과 마찬가지로 이들도 서로의 존재에 대해 상당히 놀라왔던 것으로 보인다. 워크샵에 모인 학자들은 서로의 연구주제에 대해 토의하면서 웹이 복잡계의 일부냐 복잡계가 웹의 일부냐로 약간의 논쟁이 있었던 것으로 생각되지만 서로의 존재를 발견한 기쁨은 여러 곳에서 엿볼 수 있다.

웹 사이언스에서 트러스트 분야의 유명한 학자인 사우스 햄턴 대학교의 Hall 교수는 다음과 같이 발언했다.

웹과학이 네트워크의 일부냐 아니면 그 반대냐의 질문에 대한 답은 아무런 상관이 없다.

지금으로부터 불과 1년 전 웹 과학과 복잡계 네트워크 과학이 만나기 시작했다는 것이 중요하다. 평행한 시기에 서로 다른 주제로 연구를 해오다가 이들이 공통의 토픽을 만났을 때 어떤 시너지 효과가 일어날 것인가? 우리는 이 질문에 좀 더 많은 신경을 쏟아야 할 것이다. 그리고 이 글을 읽으시는 여러분이 주인공이 되어 보시는건 어떨까? 물론, 이 글을 쓰고 있는 필자를 포함해서.

링크: http://cacm.acm.org/magazines/2011/5/107690-web-science-meets-network-science/fulltext




손 종 수 (mis026@korea.ac.kr)


0.
들어가며
본 자료는 글을 쓰는 본인이 경험적으로 체득한 것을 정리한 것으로써 교과서적 정리와는 근본적으로 다르다. 따라서 sparQL과 Linked data를 빠르게 접하고 체험하기에는 적합할지 모르나 이론적 원리를 이해함에 있어서는 부족함이 있다. 또한 설명하는 부분에서 필자 스스로에게 이해가 쉬운 어휘와 표현을 사용하고 있으므로 추후 sparQL의 스펙문서와 Linked data 관련 논문들을 찾아 읽어서 부족한 부분을 채우시길 부탁 드린다.

1. SparQL Overview
sparQL은 크게 PREFIX, {SELECT, ASK, DESCRIBE, CONSTRUCT}, WHERE로 구성된다.

PREFIX는 일반 데이터베이스에서 데이터베이스 선택과 비슷한 의미로써 일반적으로 사용할 데이터 셑을 지정할 때 사용한다.

SELECT는 탐색할 대상을 지정할 때 사용하며 변수를 사용할 수 있다. 변수는 '?변수'의 형식으로 사용하며 전체를 탐색할 때는 ' * '을 사용한다.

WHERE는 조건절이다. 중괄호로 묶어 여러 줄을 사용할 수 있다.

그 외에 ORDER BY 등 질의의 마지막 부분에 정렬순서 등을 지정할 수 있다.

2. 간단한 예제

PREFIX : <http://abbs.purl.org/music#>

SELECT ?instrument

WHERE {        :andrew :playInstrument ?intrument .    }


위 문장은 <http://abbs.purl.org/music#>이라는 데이터 셑에서 instrument를 찾을건데 앤드류(주어)가 'playInstrument'라는 술어를 갖는 어떤 목적어 instrument를 찾겠다는 것이다.

WHERE절에서 한 문장의 끝은 마침표( . )로 구분한다.


3. 조금 더 복잡한 예제

PREFIX : <http://aabs.purl.org/ont/journal#>
SELECT ?notes

WHERE {

    ?e a :JournalEntry .

    ?e :notes ?notes .

    ?e :date ?date .

}

ORDER BY ?date

LIMIT 5

OFFSET 150

SELECT절 – ?notes를 출력할 것이다.

WHERE절 –
a는 rdfs:type의 약자이다. 즉, ?e a :JournalEntry는 rdfs:type이 JournalEntry인 어떤 변수 e를 찾는다라는 뜻이다.
?e :notes ?notes 는 ?e의 notes를 가져와서 ?notes로 사용하겠다라는 뜻이다.

?e :date ?date 는 ?e의 date를 가져와서 ?date로 사용하겠다라는 뜻이다.

notes 와 date를 가져와서 사용하겠다는 것은 달리 말해 notes와 date가 있는 데이터를 가져와서 사용하겠다는 것과 같다. 따라서 세 줄을 합쳐서 생각하면 모든 JournalEntry 타입을 갖는 데이터를 가져오는데(?e라는 변수로 통칭) 그 중에서 notes와 date 라는 항목을 결과집합으로 쓰겠다는 것이다.

ORDER BY 이하 절 – ORDER BY는 정렬순서이고 LIMIT은 출력 결과 개수 제한, OFFSET은 결과가 만들어 지기 전에 150개가 넘는 결과를 받아오면 그 순간 결과를 받지 않겠다는 것이다.


4. Dbpedia의 Linked data

Dbpedia는 wikipedia의 자료들에 의미적 주석을 달아서 다른 웹 사이트나 프로그램에서 사용할 수 있도록 가공하여 제공해주는 사이트이다. Linked data 분야에서 Dbpedia는 중요한 역할을 수행하고 있으며 상대적으로 많은 양의 자료를 가지고 있어 활용성이 높다.

<Dbpedia 홈페이지 – http://www.dbpedia.org>

Dbpedia에서 제공하는 자료/자원은 고유의 웹 페이지 주소를 가지며 고유의 URI 또한 가진다. 늘 웹 페이지 주소와 URI 주소가 같은 자료를 보여주지는 않으나 Dbpedia에서는 URI주소를 찾아 들어가면 다음 그림과 같은 웹 페이지를 출력해준다. 아래 그림은 The_Beatles의 URI를 웹 브라우저의 주소창에 입력하고 찾아갔을 때의 화면이다.


<Dbpedia에서 제공하는 The_Beatles의 URI와 웹 페이지>

그리고 위 웹 페이지의 가장 하단을 보면 아래 그림과 같이 데이터 포맷을 선택해서 출력하거나 다운받을 수 있다.

<Dbpedia의 다양한 데이터 포맷>

Dbpedia에서는 Dbpedia의 모든 자료에 대해 검색할 수 있는 웹 기반 sparQL Endpoint를 제공하고 있다. Dbpedia의 sparQL Endpoint의 주소는 http://dbpedia.org/sparql 이다.


5. Dbpedia에서의 실전 예제 (1)

http://dbpedia.org/sparql 에 들어가서 일단 아래 질의를 입력한 후 'Run Query'를 클릭해보도록 하자.

SELECT ?uri ?name ?page ?nick
WHERE{

   ?uri a foaf:Person ;

   foaf:name ?name;

   foaf:page ?page;

   foaf:nick ?nick.

}
LIMIT 100

Dbpedia에서는 기본적으로 PREFIX가 많이 되어있으므로 쓰지 않아도 된다.

첫 번째 줄에서 ?uri, ?name, ?page, ?nick은 이 네 개의 항목을 가져오겠다는 것이다.

세 번째 줄에서 ?uri a foaf:Person; 은 foaf:Person이라는 type을 가진 모든 항목을 ?uri라는 변수로 사용하겠다는 명령이다. (a == rdfs:typeOf)

네 번째 줄에서 foaf:name ?name 은 ?uri로 선택된 항목의 foaf:name을 ?name이라는 변수에 넣겠다는 명령이다.

다섯 번째 줄과 여섯 번째 줄도 같은 의미이다. 그리고 마지막 줄에서 LIMIT 100은 최대 100개 가져오겠다는 명령이다.

요약하자면, foaf:Person이라는 타입을 가진 모든 자원에서 foaf:name, foaf:page, foaf:nick의 데이터를 각각 ?name, ?page, ?nick이라는 변수에 넣어서 출력하겠다는 것이다.

다음 그림은 위 질의에 대한 결과화면이다. 결과화면은 html로 출력 선택을 하여 웹 페이지 형식으로 보이며 xml, RDF/XML, JSON 등 다양한 형태로 전송 받을 수 있다.



<예제 질의를 실행한 결과 화면>



6. Dbpedia에서의 실전 예제 (2)


위 예제와 유사한 예제를 하나만 더 해보도록 한다. 일단 예제 질의를 보기 전에 다음 화면을 먼저 확인해보자.

<Dbpedia에서 Terry_Holbrook의 정보>

위 화면은 Terry_Holbrook 이라는 축구 심판의 URI 주소와 Dbpedia의 자료 화면이다. 이 화면에서 보면 dbpprop:countryofbirth 와 같은 형식의 다양한 속성명을 확인할 수 있다. 우리는 이 자료를 통해 '사람 클래스'를 Dbpedia에서 어떻게 표현해주는지 알 수 있다. 따라서 이를 활용하여 질의를 만들어 볼 수 있다.

다음 예제는 Dbpedia의 자료들 중에서 사람이름, 태어난 나라, 직업만을 골라서 출력해주는 예제이다.


SELECT ?name ?birth ?role
WHERE{

   ?x a foaf:Person ;

   dbpprop:fullname ?name;

   dbpprop:countryofbirth ?birth;

   dbpprop:role ?role.

}
LIMIT 100

첫 번째 줄은 ?name, ?birth, ?role을 출력하겠다는 것이다.

세 번째 줄은 foaf:Person이라는 타입을 가진 모든 항목 ?x를 설정한다.
네 번째 줄은 그 ?x의 dbpprop:fullname 속성에 해당하는 데이터를 ?name으로 지정한다.
다섯 번째와 여섯 번째 줄은 네 번째 줄과 동일하다.

세미콜론은 4~6번줄 모두 주어가 ?x 이기 때문에 문장의 끝이 아님을 구분하기 위해서이다. 위 예제를 개념적으로 다시 설명하면..

(주어 - ?x) + (술어 - dbpprop:fullname) + (목적어 - ?name)
(주어 - ?x) + (술어 - dbpprop:countryofbirth) + (목적어 - ?birth)
(주어 - ?x) + (술어 - dbpprop:role) + (목적어 - ?role)

이 세 문장을 묶어서

(주어 - ?x) +
[
   { (술어 - dbpprop:fullname) + (목적어 - ?name) }

   { (술어 - dbpprop:countryofbirth) + (목적어 - ?birth) }

   { (술어 - dbpprop:role) + (목적어 - ?role) }

]

이렇게 만들었다고 생각하면 간단하다. 다음 화면은 결과화면이다.

<결과 화면>

위 결과를 보면 이름, 태어난 나라, 직업이 출력된걸 확인할 수 있다. 그럼 이제 태어난 곳이 England 인 사람의 이름과 직업만을 출력하고 싶다면 어떻게 하면 될까? 답은 FILTER를 사용하면 된다. 아래 예제 질의를 보자.


SELECT ?name ?birth ?role
WHERE{

?x a foaf:Person ;

dbpprop:fullname ?name;

dbpprop:countryofbirth ?birth;

dbpprop:role ?role.


FILTER regex(?birth, "land$").

FILTER regex(?birth, "^Eng").
FILTER regex(?birth, "England").

}
LIMIT 100

위 질의문을 보면 FILTER라는 조건이 붙은걸 볼 수 있다. FILTER는 결과로 받아온 데이터들을 걸러주는 역할을 한다. 예제 질의에는 FILTER 를 세 개 붙여 놓았다. 물론 한 개만 붙여도 되며 더 늘려도 괜찮다. sparQL의 정규표현식은 기본적으로 XML - XPATH의 정규식을 따른다고 한다. 따라서 FILTER에 정교한 필터링이 필요한 경우 XPATH의 정규표현식을 공부하면 된다.
첫 번째 FILTER 예제는 ?birth의 결과물 중에서 'land'로 끝나는 것을 선택하라는 것이다.
두 번째 FILTER 예제는 'Eng'로 시작하는 것을 선택하라는 것이다.

세 번째 FILTER 예제는 'England'와 일치하는 것을 선택하라는 것이다.

세 문장을 우리는 한 질의에 모두 넣었으므로 결과적으로 ?birth가 'England'인 사람만 출력이 될 것이다. 아래는 그 결과화면이다.


<결과 화면>

 

 

 


barbara Carminati, et al. (2010.01)

Abstract 번역

현존하는 (개인정보를 제공하고 있는) 온라인 소셜네트워크 서비스는 온라인 커뮤니티를 통한 마케팅 등 흥미로운 도전과제를 제시하고 있다. 한편, 보안과 프라이버시는 이와 같은 응용에서 좀 더 많은 연구를 요하고 있다. 소셜네트워크 접근 통제 (social network access control) 시스템을 개선하기 위하여 온라인 소셜 네트워크의 개인정보 및 보안 문제를 해결하는 것이 첫 번째로 요구된다. 이 문제를 해결하기 위하여 저자는 시맨틱 추론 기반의 방법을 제안하며 실증적 소셜 네트워크를 사용하여 검증하였다.

본 논문의 동기 및 내용
온라인 소셜 네트워크에서 사용자가 다른 사용자에게 친구관계, knows 등의 관계를 맺기 위하여 상대 사용자의 개인정보를 취득하게 된다. 따라서 어쩔 수 없이 개인 정보의 유출을 막을 수 없다.
개인정보 유출을 우려하는 사용자들은 개인정보를 감춰놓는데 이는 소셜네트워크의 확장을 방해하는 요인이 된다.
=> 따라서 시맨틱 추론 기반의 접근제한 시스템을 제안

본 논문의 해결 방법
0. 시맨틱 추론 기반의 접근제한 시스템을 구축하기 위하여 사용자를 모델링
1. 개인정보 필터링 정책 수립
2. 보안 룰 설정 (1)친구요청 평가, (2)접근 요청 평가
3. RDF 데이터저장소 / 추론기

검증
소셜 네트워크 트러스트 평가 지표 (LTO, TVO, VTH)사용하여 평가

이 논문을 읽은 나의 인상
 - 온라인 소셜 네트워크에서 접근 관리를 위한 시스템을 구상하겠다는 아이디어 굿
 - 그러나 사용자 모델링이 너무 단순하지 않는가? - 실제로는 좀 더 복잡할 텐데
 - 범용적인 시스템인지 평가하기가 어려움 - 실험적 연구로 끝날 수도 있음
 - 쓸만한 레퍼런스 발견 (D-FOAF, Trust measurement)


논문 원본 :
http://linkinghub.elsevier.com/retrieve/pii/S0167404810000799


작성자   손 종 수( mis026@korea.ac.kr ), 작성일   2011.01.10

본 발표자료는 온톨로지 기반 연구노트 시스템에서 ID3알고리즘을 이용해 중요도 높은 지식을 찾아내는 방법에 대한 자료이다. 이 자료를 만든 것은 우리 연구실에 전자연구노트를 도입하기 위하여 기초조사를 한 바탕을 통해 고안되었으며 시맨틱 웹을 하는 연구실 답게 온톨로지 기반의 시스템을 고안하여 작성하였다. 그리고 ID3알고리즘을 이용하여 가장 중요도가 높은 지식을 찾아내고 활용할 수 있도록 고안하였다.
본 시스템을 처음 고안하던 당시의 (세상을 바꿀 수 있을 것 같았던!) 큰 꿈은 시스템을 고안하면서 점차 작아지게 되었는데 이는 역시 본인의 능력부족에 기인한다고 생각한다.
전자연구노트의 가치는 시간이 갈 수록 중요해지고 있고 웹 기술을 날이 갈 수록 발전하고 있으므로 여유가 된다면 언젠가 다시 한번 '팬시'한 시스템으로 재설계해보고 싶다.

본 논문은 RFID 환경을 갖춘 박물관에서 온톨로지를 이용하여 박물관 이용자들에게 지능형 서비스를 제공하기 위한 방법을 제시한 논문이다. 박물관 이용자들이 지능형 서비스를 받기 위하여 RFID 태그 및 리더를 이용한 상황인지 기술이 필요한데 이 논문에서는 2*3CM이라는 콘텍스트 모델을 사용하여 해결하였다.

* 이 자료는 본인이 찾아 읽은 논문을 리뷰한 것일 뿐 저자가 아닙니다.


본 레포트는 온톨로지를 표현하기 위한 언어들에 대한 조사 보고서이다. 첨부된 파일에는  SGML, HTML, XML, RDF, OIL, DAML, DAML+OIL, OWL 등의 언어에 대해 기술되어있으며 각 언어별로 예제 온톨로지가 작성되어있다.



온톨로지란 분산 컴퓨팅 환경에서 공유되는 데이터들을 개념화한 형식적으로 명백한 규정이다. 다시 말해, 특정 분야에서 사용되는 표준 어휘의 모임이라고도 할 수 있다. 어느 도메인에서 에이전트의 수행을 위한 문장을 만들고, 질의어를 이용한 정보검색을 위해서는 도메인의 개념화를 사용해야하는데 여기서의 도메인의 개념화를 위해 도메인에 관한 지식을 표현하고 의사소통하기 위한 단어를 제공한다.
온톨로지가 처음 제기될 때에는 단순히 지식의 공유와 재사용을 위해서 개발되었다. 최근, 온톨로지의 개념이 지능적인 정보시스템의 통합, 지능형 정보검색 분야로 확대되면서 시맨틱 웹, 시맨틱 웹서비스의 핵심 구성 요소로 각광 받고 있다. 또한 유비쿼터스 컴퓨팅 환경이 인류의 실생활과 점차 가까워지면서 쏟아지는 방대한 양의 자료를 자동적으로 처리하기 위한 대안 기술로 주목되고 있다.