티스토리 뷰
지난 글에서 개념화를 통해 논문, 저자, 분류 관계를 표현하여 명시적으로 표현하였습니다. 생성된 지식그래프는 그래프 형태이기 때문에 네트워크 분석에서 활용이 가능합니다. 이번 글에서는 그래프 형태로 구성되어 있는 데이터로부터 필요한 정보를 구성하고 이를 네트워크 분석에 활용하는 과정을 다루어 보겠습니다.
구축되어 있는 데이터를 그대로 활용하면 좋겠지만 때로는 기존의 데이터에 일부 추가적인 작업이 필요할 때가 있습니다. 이번 예에서는 논문과 분류 데이터를 활용할 것입니다. 물론 논문과 분류는 개념적인 내용이고 실제로 논문이라는 데이터에는 실제 논문들이 존재합니다. 분류도 마찬가지 입니다.
이번 글에서 분석하고자 하는 내용은 분류라는 데이터가 얼마나 중심성을 가지고 있는지를 분석해보고자 합니다. 이는 논문과 분류 데이터를 통해 특정 논문이 2개 이상의 분류에 속하는 경우 그 분류들 간에 "동시 발생" 이라는 관계를 생성하고 이를 분석에 활용합니다.
모든 논문을 대상으로 위와 같은 "동시 발생"이라는 새로운 관계를 생성하게 되면, 동시발생 빈도수가 1인 관계가 상당히 많이 생성될 수 있기 때문에 여기서는 동시 발생 빈도수가 2 이상으로 제한하도록 하겠습니다.
위의 그림은 논문1과 논문2에서 각각 분류1과 분류2에 속하기 때문에 분류1과 분류2는 동시발생 빈도수 2가 되는 것이고, 분류2와 분류3은 논문3만 속하는 분류이기 때문에 동시발생 빈도수 1이 되는 예시입니다. 따라서 "동시 발생" 이라는 관계는 분류1과 분류2 간에서만 생성됩니다.
이러한 내용이 적용된 데이터는 쿼리를 통해 손쉽게 추출이 가능합니다. 물론 필요에 따라 명시적인 관계를 생성하여 저장소에 업데이트도 가능합니다. 하지만 여기서는 SELECT 질의를 통해 필요한 데이터를 조회하도록 하겠습니다. 실제 질의 쿼리는 아래와 같습니다.
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select (SAMPLE(?c1Label)as ?label1) (SAMPLE(?c2Label) as ?label2) (count(?article) as ?weight)
where{
GRAPH <arxiv> {
?article a <http://localhost/ontology/Article> .
?article <http://localhost/ontology/belongs> ?c1 .
?c1 rdfs:label ?c1Label .
?article <http://localhost/ontology/belongs> ?c2 .
?c2 rdfs:label ?c2Label .
FILTER(?c1!=?c2) }
} GROUP BY ?c1 ?c2
HAVING (count(?article) > 1)
동시 발생 부분은 weigt 라는 빈도수로 추출하였습니다. 그리고 그 빈도수는 2 이상이 경우에만 추출하도록 하였습니다.
결과 보니 전체 112개의 동시 발생 관계와 각각의 빈도수를 조회되었습니다. 그럼 이를 시각화 시켜 보면 아래와 같습니다.
동그란 노드로 표현된 것들은 "분류" 에 해당하고 노드들 간의 엣지는 "동시 발생" 관계입니다. 그리고 엣지의 굵기는 동시발생 빈도수를 의미합니다.
그럼 여기서 서두에 밝힌 분류라는 데이터가 얼마나 중심성을 가지고 있는지를 분석하기 위해 노드 중심성 계산을 적용할 수 있습니다. 중심성이란 주어진 네트워크 상에서 어떤 노드가 더 중요한지를 나타내는 척도를 뜻합니다. 중심성을 측정하는 알고리즘은 다양하게 존재하며, 각각의 알고리즘마다 중요도에 대한 정의와 측정방법이 다르기 때문에 결과도 다르게 나타납니다. 따라서 각 알고리즘의 특징과 측정하고자 하는 데이터, 목적에 맞추어 알고리즘을 선택하여 분석을 시행할 수 있습니다.
주요 알고리즘으로는 중심성 기준이 다른 노드와 연결되어 있는 정도에 따라서 "연결 중심성", "고유벡터 중심성", "Katz 중심성", "PageRank" 등이 있고, 중심성 기준이 최단 경로 계산을 통한 것에 따라 "중간 중심성", "근접 중심성", "조화 중심성" 등이 있습니다.
다양한 중심성 알고리즘에 대한 설명은 다른 블로그에서 많이 설명을 하고 있기 때문에 여기서는 각각의 알고리즘을 비교해볼 수 있도록 페이지를 구성하여, 위의 데이터를 통해 살펴보도록 하겠습니다.
아래의 페이지에 접근하면 다양한 알고리즘이 적용된 시각화를 보실 수 있습니다.
https://joyhong85.github.io/network/centrality.html
이번 글에서는 지식그래프로 구성된 데이터를 네트워크 분석에서 활용하는 것을 간단히 살펴보았습니다. 다음에는 네트워크 분석 중 커뮤니티 탐지에 대해 적용하는 법을 살펴보겠습니다.
끝.
'KnowledgeGraph' 카테고리의 다른 글
지식그래프 (0) | 2023.04.07 |
---|---|
[지식그래프] #6. 지식그래프와 커뮤니티 탐지 (0) | 2022.09.27 |
[지식그래프] #4. 계층적인 구성이 용이한 지식 그래프 (0) | 2022.08.28 |
[지식그래프] #3. 데이터 통합이 용이한 지식 그래프 (0) | 2022.08.27 |
[지식그래프] #2. 개념화를 적용한 지식 그래프 (0) | 2022.08.26 |
- Total
- Today
- Yesterday
- RDF 변환
- TDB
- sparql
- Knowledge Graph
- django
- TopBraid Composer
- Thymeleaf
- 지식 그래프
- 사이퍼
- pyvis
- stardog
- 온톨로지
- Linked Data
- 트리플
- Neo4j
- LOD
- networkx
- 트리플 변환
- Ontology
- cypher
- 그래프 데이터베이스
- 지식그래프
- 스프링부트
- RDF
- neosemantics
- rdfox
- 타임리프
- property graph
- 장고
- TBC
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |