DOI QR코드

DOI QR Code

A Study on the Document Topic Extraction System Based on Big Data

빅데이터 기반 문서 토픽 추출 시스템 연구

  • 황승연 (안양대학교 컴퓨터공학과) ;
  • 안윤빈 (한국산업기술대학교 컴퓨터공학과) ;
  • 신동진 (안양대학교 컴퓨터공학과) ;
  • 오재곤 ((주)진우산전) ;
  • 문진용 (강동대학교 방송영상미디어과) ;
  • 김정준 (안양대학교 ICT융합학부 소프트웨어전공)
  • Received : 2020.07.23
  • Accepted : 2020.10.09
  • Published : 2020.10.31

Abstract

Nowadays, the use of smart phones and various electronic devices is increasing, the Internet and SNS are activated, and we live in the flood of information. The amount of information has grown exponentially, making it difficult to look at a lot of information, and more and more people want to see only key keywords in a document, and the importance of research to extract topics that are the core of information is increasing. In addition, it is also an important issue to extract the topic and compare it with the past to infer the current trend. Topic modeling techniques can be used to extract topics from a large volume of documents, and these extracted topics can be used in various fields such as trend prediction and data analysis. In this paper, we inquire the topic of the three-year papers of 2016, 2017, and 2018 in the field of computing using the LDA algorithm, one of Probabilistic Topic Model Techniques, in order to analyze the rapidly changing trends and keep pace with the times. Then we analyze trends and flows of research.

요즘 스마트폰, 각종 전자기기 등의 사용이 늘고, 인터넷과 SNS가 활성화되며 우리는 정보의 홍수 속에 살고 있다. 정보의 양이 기하급수적으로 증가하며 많은 정보를 다 살펴보는 것이 어려워졌고, 문서에서 핵심 키워드만 보기를 원하는 사람이 늘어나며 정보의 핵심이 되는 토픽을 추출하는 연구의 중요성이 증가하고 있다. 또한, 토픽을 추출하여 과거와 비교 분석하여 현재의 트렌드를 유추해내는 것도 최근 중요한 이슈이다. 토픽 모델링 기법을 이용하여 대량의 문서에서 토픽을 추출해낼 수 있으며, 이렇게 추출된 토픽은 트렌드 예측, 데이터 분석 등 다양한 분야에서 쓰일 수 있다. 본 논문에서는 빠르게 변하는 트렌드를 분석하여 시대의 흐름에 맞춰가기 위해 확률적 토픽 모델 기법의 하나인 LDA 알고리즘을 활용하였으며, 문서에서 컴퓨팅 분야의 2016, 2017, 2018년도 3개년 논문의 주제를 알아보고, 연구의 동향과 흐름을 분석한다.

Keywords

Ⅰ. 서론

최근 IT 트렌드를 주도하고 있는 사물인터넷(Internet of Things), 핀 테크(FinTech), 인공지능(Artificial Intelligence) 등 최신 IT 기술들의 공통점은 방대하게 생성된 데이터를 핵심 기반으로 하는 서비스라는 점이다. 이처럼 빅데이터의 활용은 기업은 물론 공공, 통신, 금융, 의료, 유통 등 다양한 산업 분야로 빠르게 확산되고 있으며 최신 기술들이 빠르게 성장할수록 빅데이터 시장도 확대되고 있다[1]. 빅데이터는 방대한 데이터 자체만을 의미하는 것이 아니라 데이터 간의 의미 있는 값을 추출하는 것으로 대량의 고속의 다양한 정보이다[2].

하지만 이러한 빅데이터 관련 기술은 데이터 과학자라고 불리는 일부 전문가들밖에 다룰 수 없다. 이를 극복하기 위해서는 데이터에 대한 통찰력을 지닌 비전문가가 빅데이터 분석 과정을 쉽게 접근할 수 있는 기반이 마련되어야 한다[3]. 이에 대해 실제 활용 측면으로 살펴본 2016년 글로벌 기업의 빅데이터 활용 조사 결과, 글로벌 기업의 약 29%가 빅데이터를 활용하고 있으나 한국 기업의 경우 5% 정도만 빅데이터를 활용하는 것으로 나타났다[4]. 본 논문에서는 전문가의 데이터과학 지식 없이 사용하기 쉬운 빅데이터 도구 기술의 도움으로 데이터를 분석하기 위한 시스템 과정을 제안한다.

대표적 토픽 모델링 기법인 잠재 디리클레 할당(Latent Dirichlet Allocation, LDA)을 통해 토픽을 추출하고 결과 해석에 용이하도록 웹 시각화를 한다. 이때 토픽은 출현 단어빈도의 확률분포로 표현이 되기 때문에 정량적 크기로 토픽의 중요도를 나타낼 수 있다[5]. LDA 모델의 구현에는 대표적 데이터 분석언어인 R을 사용하여 정확하고 효율적으로 데이터 분석 결과를 도출하였다[6]. R은 통계 계산과 소프트웨어 개발을 위한 환경이 필요한 통계학자와 연구자들뿐만 아니라 행렬 계산을 위한 도구로도 사용될 수 있으며, Windows, Mac OS 및 리눅스를 포함한 UNIX 플랫폼에서 이용할 수 있다[7].

2016년부터 2018년까지 컴퓨팅 분야 논문의 키워드를 수집하여 토픽 모델링 분석 방법 중 하나인 LDA 기법을 기반으로 컴퓨팅 관련 연구 토픽들을 도출하고 각 연구 토픽들의 향후 동향에 관해 분석하였다. 이를 통해, 학술적 관점에서는 컴퓨팅 분야에 대한 향후 연구 방향 수립에 기여할 것으로 기대된다[8]. 본 논문에서 2장에서는 LDA 기법에 대해 설명하고 3장에서는 토픽 추출 시스템 구조 및 상세 프로세스에 대해 설명한다. 4장에서는 결론을 맺는다.

Ⅱ. LDA

1. LDA의 개념

LDA(Latent Dirichlet Allocation)는 대표적인 토픽 모델링 기법으로 문서들이 하나 상의 토픽을 포함하고 있다 가정한다. 단어의 순서는 중요하지 않고 출현 빈도만으로 토픽을 추출하며 미리 알고 있는 토픽별 단어 수 분포를 바탕으로, 주어진 문서에서 발견된 단어 수 분포를 분석하여 해당 문서가 어떤 토픽들을 가지고 있을지를 예측하는 기법이다. 베이즈 추론을 이용한 깁스 샘플링 방법을 이용하여 토픽을 할당한다[10].

2. LDA의 핵심 가정

LDA에서 토픽은 고정된 단어의 분포이며 토픽의 수는 보통 연구자가 결정한다. 토픽의 단어 분포와 문서의 토픽 분포의 결합으로 문서 내 단어들이 생성된다고 가정한다. 실제 관찰 가능한 문서 내의 단어로 토픽의 단어 분포와 문서의 토픽분포를 추정한다.

3. 깁스 샘플링

LDA 알고리즘에서는 깁스 샘플링을 이용하여 토픽을 할당한다. 깁스 샘플링에서는 각 단어에 임의의 토픽이 할당된 후 문서별로 토픽과 단어(Word)의 분포가 결정된다. 모든 문서들은 토픽을 갖고, 모든 토픽은 단어의 분포를 가진다. 이러한 문서들에 K개의 토픽들 중 하나를 랜덤하게 할당한 뒤, 각 토픽에 대해 다음 두 가지를 계산한다[9].

가. P(topic t | document d)

그림 1은 문서에 있는 단어들 중 토픽에 해당하는 단어들의 비율을 계산하는 방법을 나타낸다. 문서에 들어있는 단어들이 할당된 토픽에 얼마나 포함되는지 계산하여 문서의 단어와 토픽의 단어가 일치하는 비율이 높은 토픽을, 그 문서의 토픽으로 지정하기 위한 과정이다.

OTNBBE_2020_v20n5_207_f0001.png 이미지

그림 1. P(topic t | document d)에 대한 설명

Fig. 1. Description of P(topic t | document d)

나. P(word w | topic t)

그림 2는 한 단어가 속한 토픽 안에 있는 각 단어 분포를 계산하는 과정을 나타낸다. 이는 토픽이 문서들의 단어를 대표할 만큼 올바른 토픽인지 확인하기 위한 과정이다. 이후 P(topic t | document d) * P(word w | topic t)에 따라 토픽을 새로 선정한다. (토픽과 문서의 타당성) * (단어와 토픽의 타당성)이 낮은 비율을 보이면 적절하지 않은 토픽으로 간주하고 새로운 토픽을 선정한다. 위의 과정을 반복해 토픽을 선정한다.

OTNBBE_2020_v20n5_207_f0002.png 이미지

그림 2. P(word w | topic t)에 대한 설명

Fig. 2. Description of P(word w | topic t)

4. LDA의 과정

우선, 사용자가 토픽의 개수를 k개라고 가정한다. LDA는 토픽의 개수 k를 입력받으면, k개의 토픽이 M개의 전체 문서에 걸쳐 분포되어 있다고 가정한다. 두 번째로 문서에서 추출한 모든 단어를 k개 중 하나의 토픽에할당한다. 모든 문서의 모든 단어에 대해서 k개 중 하나의 토픽을 랜덤으로 할당하며 이 작업이 끝난 뒤, 각 문서는 토픽을 가지며 토픽은 단어 분포를 가지는 상태가 된다. 토픽을 무작위로 할당했기 때문에 이 결과는 전부 틀린 상태이다. 만약 한 단어가 한 문서에서 2회 이상 등장하였다면, 각 단어는 서로 다른 토픽에 할당되었을 수 있다. 세 번째로 모든 문서의 모든 단어에 대해 아래의 사항을 반복하여 진행한다. 어떤 문서의 각 단어 w는 자신은 잘못된 토픽에 할당되어 있지만, 다른 단어들은 전부 올바른 토픽에 할당된 상태라고 가정한다. 이에 따라 단어 w는 문서 d의 단어들 중 토픽 t에 해당하는 단어들의 비율인 p(topic t | document d)과 단어 w를 갖는 모든 문서 중 토픽 t가 할당된 비율인 p(word w | topic t) 두 가지 기준에 따라서 토픽이 다시 할당된다. 이 과정을 반복하면, 모든 할당이 완료된 수렴 상태가 된다.

Ⅲ. 시스템 구조 및 상세 프로세스

빅데이터 기반 문서 토픽 추출 시스템은 그림 3과 같이 빅데이터 처리 프로세스, 빅데이터 분석 프로세스, 웹 시각화 프로세스 3가지로 구성된다. 각 프로세스의 구현에는 빅데이터 분석·처리 언어 중 R을 이용하였다.

OTNBBE_2020_v20n5_207_f0003.png 이미지

그림 3. 빅데이터 기반 문서 토픽 추출 시스템 개념도

Fig. 3. Data-based Document Topic Extraction System

1. 빅데이터 처리 프로세스

빅데이터 처리 프로세스는 수집된 문서를 분석 프로세스에서 사용할 수 있도록 처리했으며, 데이터 처리에 사용한 R 코드를 설명한다.

그림 4는 수집한 논문 텍스트 파일을 불러와 리스트로 저장하는 코드이다.

OTNBBE_2020_v20n5_207_f0004.png 이미지

그림 4. 논문 데이터 삽입

Fig. 4. insert paper data

1) 수집한 논문 파일을 R로 불러오기 위해 파일 경로를 file.path로 지정한다. 수집된 논문 파일을 불러와서 list로 저장한다. 2) 각 리스트 목록에 원래 파일명을 이름으로 설정한 뒤, 데이터 필드의 구분을 “ ”로 지정한다.

그림 5는 수집한 논문 파일의 일부로, 컴퓨팅 분야를 다루는 ACM Digital Library 해외사이트에서 몇 개의 저널을 선택해 2016, 2017, 2018년도 논문의 키워드들을 따로 모아 텍스트 파일로 저장하였다.

OTNBBE_2020_v20n5_207_f0005.png 이미지

그림 5. 논문 데이터 샘플

Fig. 5. Paper data sample

그림 6은 불용어 처리 목록을 가져온 뒤, 논문을 저장한 리스트에서 단어를 추출하기 위해 데이터를 정제하는 코드이다.

OTNBBE_2020_v20n5_207_f0006.png 이미지

그림6. 논문 데이터 정제

Fig. 6. Paper data purification

1) 리스트에 저장된 논문들의 불용어 및 불필요한 부분을 필터링하기 위해 라이브러리를 사용하여 불용어 처리 목록을 가져온다. 2) gsub 함수를 이용해 불용어 및 불필요한 숫자들을 제거한 뒤, 논문 내용 중 대문자를 소문자로 바꾼다.

그림 7은 문서에서 추출한 단어들을 출현 빈도수와 함께 테이블로 변환하여 저장하는 코드이다.

OTNBBE_2020_v20n5_207_f0007.png 이미지

그림 7. 자료구조 변환

Fig. 7. Data structure conversion

1) 정제한 단어들을 “ ”로 구분한 뒤, 단어 출현 빈도 수와 함께 테이블에 저장한다. 이후에 테이블을 내림차순으로 정렬한다. 2) 테이블에서 5회 미만으로 출현한 단어들을 제거한다.

그림 8은 그림 7의 코드 실행 결과로 생성된 테이블의 일부로, 정제된 단어와 단어의 출현 빈도수가 저장되어있다. 이 테이블을 분석 프로세스에서 사용한다.

OTNBBE_2020_v20n5_207_f0008.png 이미지

그림 8. 단어와 출현빈도수가 저장된 테이블 샘플

Fig. 8. Table that stores words and frequency of occurrence smple

2. 빅데이터 분석 프로세스

빅데이터 분석 프로세스는 전처리한 문서 데이터의 토픽을 분류한 뒤, 데이터셋과 관련된 일부 통계를 계산해 그 결과를 이용하여 텍스트 마이닝을 수행한다.

그림 9는 데이터 분석을 위한 LDA 모델을 생성하는 코드이다.

OTNBBE_2020_v20n5_207_f0009.png 이미지

그림 9. LDA 모델 생성

Fig. 9. Create an LDA Model

1) 정제된 단어가 저장된 리스트에서 인덱스를 반환한 뒤, 결측치를 제외하여 인덱스 번호를 매겨 각 인덱스의 길이와 결합하는 함수를 만든다. 2) 이전에 정제된 단어 리스트에 함수를 적용한다.

그림 10은 LDA 분석에 활용되는 통계를 계산하고, 변수를 지정해주는 코드이다.

OTNBBE_2020_v20n5_207_f0010.png 이미지

그림 10. 통계 계산 및 변수 지정

Fig. 10. Statistical calculations and variable assignment

논문 파일의 수, 논문에 등장한 단어의 개수, 논문 파일 하나당 몇 개의 단가 등장했는지, 데이터 안에 있는 토큰들의 총 개수, 말뭉치(corpus)가 출현한 빈도수를 계산한 후, LDA를 적용하는데 필요한 토픽의 수, 반복횟수와 alpha, beta 값을 지정한다.

그림 11은 R에 있는 깁스 샘플링을 이용해 토픽을 할당하는 LDA 라이브러리를 활용한 LDA 분석 코드이다.

OTNBBE_2020_v20n5_207_f0011.png 이미지

그림 11. LDA 분석

Fig. 11. LDA analysis

1) LDA 분석에 활용되는 단어와 빈도수, 토픽 수 등의 변수를 지정해준다. documents는 문서, k는 토픽의 수, vocab은 단어, num.iterations는 반복횟수를 의미한다. alpha는 문헌 집합 중 토픽분포 생성을 위한 파라미터로, 문서별 주제가 생성될 확률이며 beta는 주제별로 특정 단어가 생성될 확률이다. initail은 단어에 대한 초기 주제 지정 목록으로 NULL 값을 지정하면 샘플러는 무작위 할당으로 초기화된다. burnin은 gibbs의 수를 나타내는 스칼라 정수이며 comp.log.likelihood는 TRUE 변수에 대한 각 교체 이후에 샘플러가 단어의 로그 우도 (상수 계수 내에서)를 계산하게 하는 스칼라 논리이다. 2) p(topic t | document d)를 계산하여 행렬로 저장한다. 3) p(word w | topic t)를 계산하여 행렬로 저장한다.

3. 웹 시각화 프로세스

웹 시각화 프로세스는 시각화된 데이터를 웹서버를 통해 웹 애플리케이션으로 전송한 뒤, 수신된 시각화 데이터를 웹 애플리케이션에 출력한다.

그림 12는 LDA 결과를 웹에서 시각화하기 위한 UI를 구성하는 코드이다.

OTNBBE_2020_v20n5_207_f0012.png 이미지

그림 12. 웹 시각화를 위한 UI 구성

Fig. 12. UI configuration for web visualization

1) result라는 리스트를 만들어 각 변수들에 이전에 지정한 값을 저장한다. 2) shinyUI로 UI를 정의하고 fluidPage 함수를 이용해 shinyUI 함수에 전달할 수 있는 UI를 정의한다. sliderInput으로 슬라이더 바를 생성하고 입력 값을 server함수에서 사용할 수 있도록 inputId와 label 값을 입력한 뒤 최솟값, 최댓값, 구간값을 지정해준다. visOutput 함수로 출력값을 정한다.

그림 13은 웹에서 시각화할 정보를 서버로 전송하는 코드이다. 1) shinyServer함수를 이용해 애플리케이션의 서버 기능을 호출한다. output 인자에 이전에 설정한 출력값을 지정하고 input에 시각화를 위해 계산한 값들을 넣어준다. 2) shinyApp 함수를 이해 ui 값과 server 값을 지정한 뒤 앱 어플리케이션을 실행한다.

OTNBBE_2020_v20n5_207_f0013.png 이미지

그림 13. 웹 시각 정보 전송

Fig. 13. Web visual information transmission

그림 14는 LDA 알고리즘을 이용하여 2016년도 논문의 키워드를 토픽 추출 후 웹 시각화를 한 결과이다.

OTNBBE_2020_v20n5_207_f0014.png 이미지

그림 14. 2016년도 논문 웹 시각화 결과

Fig. 14. 2016 Paper Web Visualization Results

이 코드에서는 토픽의 개수를 3으로 정했기 때문에 3개의 원이 성되었으며, 토픽에서 단어가 발생할 확률 벡터인 P(w | t)에 데이터의 분산을 최대한 보존하면서 서로 직교하는 새 기저(축)를 찾아, 고차원 공간의 표본들을 선형 연관성이 없는 저차원 공간으로 변환하는 기법인 Principal Component Analysis(PCA)를 적용하여 2차원의 벡터로 압축한 것이다. 각 원은 하나의 토픽을 나타내며 각 원의 넓이는 코퍼스 내에서 3개의 전체 토큰들에 대한 비율이다. 토픽을 선택하지 않았을 때는 코퍼스 내에서 가장 출현 빈도수가 높은 단어들을 오른쪽에 출력한다. ë는 토픽에서 단어의 확률에 주어진 가중치를 결정한다. 전체 키워드 중에서 detection, mining, graph, data, analysis, learning, social의 출현 빈도 수가 높게 나왔다.

표 1은 LDA 알고리즘을 이용하여 2016년도 논문의 키워드를 토픽 추출 후 웹 시각화를 한 결과를 각 토픽별로 정리한 것이다. 전체 키워드로 2016년 동안 논문의 키워드로 어떤 것이 많이 쓰였나 알아볼 수 있으며, 각 토픽에 할당된 키워드를 통해 각 토픽의 주제를 추측할 수 있다.

표 1. 2016년도 웹 시각화 결과표

Table 1. 2016 Web Visualization Results Table

OTNBBE_2020_v20n5_207_t0001.png 이미지

그림 15는 LDA 알고리즘을 이용하여 2017년도 논문의 키워드를 토픽 추출 후 웹 시각화를 한 결과이다. 전체 키워드에서 data, database, information, query, graph, model, systems, mining, analysis, quality의 출현 빈도수가 높게 나왔다.

OTNBBE_2020_v20n5_207_f0015.png 이미지

그림 15. 2017년도 논문 웹 시각화 결과

Fig. 15. 2017 Paper Web Visualization Reults

표 2는 LDA 알고리즘을 이용하여 2017년도 논문의 키워드를 토픽 추출 후 웹 시각화를 한 결과를 각 토픽별로 정리한 것이다.

표 2. 2017년도 웹 시각화 결과표

Table 2. 2017 Web Visualization Results Table

OTNBBE_2020_v20n5_207_t0002.png 이미지

그림 16은 LDA 알고리즘을 이용하여 2018년도 논문의 키워드를 토픽 추출 후 웹 시각화를 한 결과이다. 전체 키워드에서 data, database, information, query, graph, model, systems, mining, analysis, quality의 출현 빈도수가 높게 나왔다.

OTNBBE_2020_v20n5_207_f0016.png 이미지

그림 16. 2018년도 논문 웹 시각화 결과

Fig. 16. 2018 Paper Web Visualization Results

표 3은 LDA 알고리즘을 이하여 2018년도 논문의 키워드를 토픽 추출 후 웹 시각화를 한 결과를 각 토픽별로 정리한 것이다.

표 3. 2018년도 웹 시각화 결과표

Table 3. 2018 Web Visualization Results Table

OTNBBE_2020_v20n5_207_t0003.png 이미지

Ⅳ. 결론

본 논문에서는 LDA 알고리즘을 이용하여 컴퓨팅 분야의 논문의 키워드들로 3개년 동안의 연구 동향을 파악해보았다. 분석한 연구 동향 및 흐름을 바탕으로 이와 관련된 분야를 연구하고자 하는 연구자들이 앞으로의 연구 방향성을 확립할 수 있을 것이라 예상된다. 또한, 본 연구에서 쓰인 토픽 추출 시스템을 이용하여 기업은 기술 동향 파악을 통해 앞으로 선도할 기술에 대한 전망을 파악할 수 있을 것이라 예상된다.

References

  1. So-Jin Lee, Chae-Eun Jin, Min-Ji Jeon, Jo-Eun Lee, Su-Jeong Kim, Sang-Hyun Lee, "De-identification Policy Comparison and Activation Plan for Big Data Industry", The Journal of the Convergence Culture Technology, Vol. 2, No. 4, pp.71-76, November 30, 2016. DOI: http://dx.doi.org/10.17703/JCCT.2016.2.4.71
  2. Sejong Oh, Sunghun Ahn, Jungmin Byun, "A Big Data Study on Viewers' Response and Success Factors in the D2C Era Focused on tvN's Web-real Variety 'SinSeoYuGi' and Naver TV Cast Programming", International Journal of Advanced Culture Technology, Vol.4, No.2, pp7-18, 2016. DOI: http://dx.doi.org/10.17703/IJACT.2016.4.2.7
  3. Jae-Young Chang, "Bigdata Prediction Support Service for Citizen Data Scientists", The Journal of The Institute of Internet, Broadcasting and Communication, Vol. 19, No. 2, pp.151-159, Apr. 30, 2019. DOI: https://doi.org/10.7236/JIIBC.2019.19.2.151
  4. Seung-Hee Kim, "Risk Factors Identification and Priority Analysis of Bigdata Project", The Journal of The Institute of Internet, Broadcasting and Communication, Vol. 19, No. 2, pp.25-40, Apr. 30, 2019. DOI: https://doi.org/10.7236/JIIBC.2019.19.2.25
  5. Seungju Nam, Hyun Cheol Lee, "Airline Passenger Characterizations Using LDA Topic Modeling", The Korean Operations Research and Management Science Society, Vol. 36, No. 3, pp.67-85, sep, 2019. DOI: https://doi.org/10.7737/KMSR.2019.36.3.067
  6. Seung-Yeon Hwang, Jin-Yong Moon, Jeong-Joon Kim, "Relationship Analysis between Fine Dust and Traffic in Seoul using R", The Journal of The Institute of Internet, Broadcasting and Communication, Vol. 19, No. 4, pp.139-149, Aug. 31, 2019. DOI: https://doi.org/10.7236/JIIBC.2019.19.4.139
  7. Seung-Yeon Hwang, Dong-Jin Shin, Kwang-Jin Kwak, Jeong-Joon Kim, Jeong-Min Park, "Real-time Processing of Manufacturing Facility Data based on Big Data for Smart-Factory", The Journal of The Institute of Internet, Broadcasting and Communication, Vol. 19, No. 5, pp.219-227, Oct. 31, 2019. DOI: https://doi.org/10.7236/JIIBC.2019.19.5.219
  8. Seung-Hee Kim, "Risk Factors Identification and Priority Analysis of Bigdata Project", The Journal of The Institute of Internet, Broadcasting and Communication, Vol. 19, No. 2, pp.25-40, Apr. 30, 2019. DOI: https://doi.org/10.7236/JIIBC.2019.19.2.25
  9. Krestel, R., "Latent dirichlet allocation for tag recommendation", In Proceeding of the third ACM conference on Recommender systems, pp. 61-68, Oct 2009
  10. Blei, D., A. Ng, and M. Jordan, "Latent Dirichlet Allocation.", Journal of Machine Learning Research, Vol. 3, pp. 993-102, 2003.