티스토리 뷰
자연 언어 란?
- 몇만년건 인류는 흩어져 살게되고, 나름대로 문화를 발전시켜 왔고, 빈약한 통신 수단의 이유로 긴 세월동안 지역별로 다양하게 발전됨
- 오늘날 200가지가 넘는 언어 존재
- 이 중 40가지 정도가 글을 가지고 있음. ==> 자연언어
인공언어 란?
- 컴퓨터 프로그래밍을 위하여 특별히 개발된 포트란, 파스칼, C 종류의 언어
형식 언어 이론
- 자연언어 - 문맥 의존 언어 ( context sensitive language )
- 프로그래밍언어 - 문맥 자유 언어( context sensitive language )
- 문맥자유언어란 문맥 의존 언어의 특수한 경우이기 때문에, 프로그래밍 언어도 자연언어 범주안에 들어 있음.
형식언어 이론의 정의
G=(N,T,P,S)
N = Nonterminal ( 문법기호)
T = Terminal ( 어휘 )
S = N 의 집합중에 하나. (자연언어에서는 문장을 나타내는 문법기호가 시작 기호 )
P = Production rule ( S 로 시작하여 유도과정을 통한 단말 기호의 열이 얻어지기 까지 적용), 문법규칙
문법
문법기호의 집합, 어휘의 집합, 생성 규칙의 집합,
문법 기호 집합 원소 중 가운데 하나를 시작 기호로 정의한다면, 하나의 문법이 정의됨
문법의 네가지 등급
- 무제약 문법 ( unrestricted grammar )
- 문맥 의존 문법 ( context sensitive grammar ) - 문법 기회의 앞뒤에 위치하는 구절의 내용, 문맥에 영향을 받고 있음
- 문맥 자유 문법 ( context free grammar ) - 문맥 의존 문법의 특수한 경우, 표현력은 약화되지만, 처리하기에 용이
- 정규 문법 ( regular grammar)
- 프로그래밍 언어 - 처리 용이성이 중시하여, 문맥 자유 문법으로 설계, 문법의 모호함이 없도록 개발.
- 자연언어 - 세심한 설계 없이 자연 발생됨. 처리가 어렵고. 형식언어이론에서는 문맥 의존 문법에 해당된다고 좀. 처리가 어려운 이유로, 일단 문맥 자유 문법을 기본으로 하고, 문맥 의존 요소를 처리하는 방법으로 처리 방향이 가고 있음.
문맥 자유 문법의 예 ( 프로그래밍 언어의 산술문 수식 )
<expression> -> <expression> + <term> | <expression> -<term> | <term>
<term> -> <term> * <factor> | <term> / <factor> | <factor>
<factor> -> id | number | <expression>
모두 아홉개의 생성 규칙 존재
- N 집합 = { <expression>, <term>, <factor> }
- T 집합 = { + , - , * , / , ( , ) , id , number }
- S = <expression>
- P = 생성 규칙들의 집합
이 문법에 의한 생성 가능한 문장 : id * (id + number )
<expression> -> <term>
-> <term> * <factor>
-> <factor> * <factor>
-> id * <factor>
-> id * ( <expression> )
-> id * ( <expression> + <term> )
-> id * ( <term> + <term> )
-> id * ( <factor> + <term> )
-> id * ( id + <term> )
-> id * ( id + <factor>)
-> id * ( id + number )
이러한 고정을 유도과정 이라 함
유도과정을 통해 시작 기호로 부터 생성될 수 있는 단말 기호열을 그 문법의 문장이라 함.
프로그래밍 언어 처리
- 프로그램 : 구문(syntax), 의미(semantics) 에 맞게 프로그램을 작성
- 고급언어의 경우 번역기에 의하여 기계어 프로그램(목적코드)으로 번역
- 목적코드에 의해 처리가 됨.
- 프로그램 -> [번역기]->목적코드
- 데이터-> [목적코드] -> 처리 결과
컴파일러 : 번역기 , 컴파일러의 구성은 자연언어 처리 시스템인 기계 번역 시스템과 유사성이 있음.
컴파일러 구조
원시 프로그램 -> (1)렉시칼 분석 -> 구문 분석 -> 의미 분석 -> 코드 생성 -> 목적 프로그램
(1) 렉시칼 분석 : 프로그램을 토큰(token) 들로 분리. 각종 키워드, 연산자, 특수 문자. 기호(symbol) , 수치들 ==> 모두 동일한 기호 토큰 또는 수치 토큰으로 표현하고, 값들은 기호 테이블(symbol table) 로 저장하고, 인덱스 부여함.
의미 분석 단계
- 구문 분석 파싱 트리가 갖는 의미를 분석
- 파싱 트리의 각 노드를 찾아 다니며 분기된 형태 및 내용에 따라 상응하는 약속된 의미 부여
- 의미의 일관성을 확인 및 오류 발생 시킴 => 문맥 의존적인 측면도 일부 반영한다고 본다.
언어 처리 기술
- 자연언어와 프로그래밍 언어의 처리과정은 유사한 성격이 많음.
- 컴파일러 번역과정은 매우 흡사함.
- 렉시칼 분석 단계에서 변수나 연산자를 식별하는 과정 = 어휘 분석 단계에서 형태소들을 분리하고, 품사를 결정하는 과정
- 컴파일러 구문 (syntax) 이용한 파싱 = 자연언어의 문법 규칙 (grammar rule) 을 이용한 파싱
- 자연언어는 문맥 의존 언어로 간주되나, 처리의 어려움을 고려하여 문맥 자유 문법을 기본틀로 삼아 처리. + 부가적으로 문맥 의존적 요소
- 컴파일러의 인덱스 테이블 역활은 , 자연어 처리에서는 사전의 역활이 큼.
- 크게 다른 것은 인위적인 설계가 아니기 때문에 두 가지 이상의 유효한 분석 결과를 내게 되는 모호성 현상이 있음.
- '착한 영희의 친구' : 영희가 착한 건지 , 영희의 친구가 착한 건지 모호함.
이런 모호성을 처리하는데 역점을 둠,
** 자연언어처리 (김영택) 생능 출판사 책으로 공부중입니다.
'Study' 카테고리의 다른 글
GCP 우분투에서 csh, tcsh 설치하기 (0) | 2019.04.11 |
---|---|
Word Embeddngs 사용 사례 캡쳐 (0) | 2017.09.05 |
Word2Vec 트레이닝 방식 이해 (0) | 2017.09.05 |
공부하기 좋은 자료 #2 (0) | 2017.08.31 |
공부하기 좋은 사이트 #1 (0) | 2017.06.16 |