Algorithm 카테고리의 글 목록

마지막 업데이트: 2022년 5월 10일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
그림 3. Word2Vec 예시

자연어 처리의 4가지 단계

이 포스트는 Stanford의 CS224n 강의에서 배운 내용을 바탕으로 인공지능을 이용한 자연어 처리 방법의 개요를 정리해본 내용을 담고 있습니다.

1. 자연어 처리 솔루션

자연어는 사람이 사용하는 언어를 말하는 것으로 프로그래밍 언어 등의 기계언어와 대비됩니다. 자연어 처리는 한국어, 영어, 중국어 등 인간의 언어를 컴퓨터가 분석하고 의미 있는 정보를 추출하여 처리하는 작업을 통칭합니다. 자연어 처리는 문서 분류, 스팸 처리, 검색어 추천, 음성 인식, 질의응답, 번역 등 다양한 분야에 사용되고 있습니다. 예를 들어 구글 번역기는 구글 신경망 번역 시스템 (Google Neural Machine Translation)을 이용해 다양한 언어를 번역합니다. 이 모델은 다양한 사용자들의 새로운 입력(input)을 받아 계속해서 학습하고 더 나은 번역 결과를 도출합니다. 또한 스팸 불리(spam bully)라는 회사에서는 베이지안 스팸 필터를 사용하여 스팸 메일에 자주 사용되는 단어나 문구를 추출하고 이를 통해 스팸 메일을 분류해냅니다.

자연어 처리 솔루션은 간단한 문서 분류에서 더 나아가 교통편 예약, 스마트홈, 헬스케어, 금융 등 다양한 분야에 적용되고 있습니다. 자연어 처리 솔루션을 이용해 자동화된 프로세스는 은행, 금융 서비스 등에서 효율성을 증진하고 오류 발생률을 낮춥니다. 대중의 스마트 기기 사용률과 고객 서비스에 대한 연구 발달이 자연어 처리 솔루션 시장 성공 요인의 큰 부분을 차지하고 있습니다.

그림 1. 자연어 처리 관련 시장 추이

2. 자연어 처리의 4가지 단계

자연어 처리 솔루션을 만들기 위한 방법론은 정말 다양하지만, 대부분의 솔루션은 아래의 4가지 단계로 구성되어 있습니다. 이 포스트에서는 각각의 솔루션에 대해 소개하기보다 각 단계에 활용되는 주요 개념들을 다루어보았습니다.

2.1. Preprocessing

대부분의 자연어 데이터에는 URL과 같은 hypertext 및 특수문자들이 섞여있습니다. 특히 웹크롤링을 통해 데이터를 수집한 경우 각 웹페이지에 있는 텍스트 데이터는 모두 html 태그들과 섞여있을 것입니다. 따라서 자연어 데이터를 머신러닝, 딥러닝과 같은 통계 기법을 이용해 바로 분석하기에 앞서, 우선 분석하고자 하는 데이터에 사람들이 일상적으로 사용하는 언어만 남아있도록 가공해주어야 합니다.

이 뿐 아니라 동일한 의미를 가지지만 축약하여 표현하여 그 형태가 달라보이거나(do not = don’t), 실제 문장의 의미 해석에 있어 크게 중요하지 않은 표현들(for, to, the) 또한 처리해주는 편이 좋습니다. 이 밖에도 정말 다양한 형태의 전처리를 수행할 수 있는데요, MBTI classification 관련 포스트에서 구체적인 예시를 찾아보실 수 있습니다.

2.2. Tokenization

데이터의 전처리가 끝나 마침내 자연어 데이터만 남았다면, 이제 문자열(string)을 다차원 벡터(vector)로 변환해주어야 합니다. 이렇게 변환한 벡터들이 위치한 공간을 임베딩(embedding)이라고 부르는데, 각 단어를 벡터로 변환하는 경우 단어 임베딩(word embedding), 각 문장을 벡터로 변환하는 경우 문장 임베딩(sentence embedding) 등으로 벡터화(vectorization)의 단위를 붙여 지칭하기도 합니다.

단어 임베딩이란 앞서 말씀드린 바와 같이 말뭉치(corpus)에 포함되어 있는 단어들이 각각 하나의 좌표를 가지도록 형성한 벡터공간을 말합니다. 여기서 단어(word)란 일반적으로 띄어쓰기나 줄바꿈과 같은 공백 문자(whitespace)로 나뉘어져 있는 문자열의 일부분을 지칭합니다.

즉 위의 예시에서는 띄어쓰기로 구분되어 있는 Lorem, ipsum, dolor, sit, amet이 각각 하나의 단어가 됩니다. 그러나 띄어쓰기를 활용하지 않는 언어들의 경우, 위와 같은 정의를 통해서는 문자열을 여러 단어로 잘라낼 수 없습니다.

이 경우 공백 문자가 아닌 형태소와 같은 의미론적 단위로 문자열을 구분하거나, 여러 말뭉치(corpus)에서 자주 등장하는 글자(character)들의 순서쌍들을 묶어서 벡터공간을 형성하기도 합니다. 이 임베딩의 단위를 토큰(token)이라고 하고, 주어진 문자열을 토큰들로 나누는 과정을 토큰화(tokenization)이라고 부릅니다. 그리고 이러한 토큰들이 위치한 벡터공간을 토큰 임베딩(token embedding)이라고 합니다.

참고로 한글 문자열의 자연어 처리에는 아래 예시와 같이 형태소(morpheme)를 이용한 임베딩을 자주 활용하고 있습니다.

2.3. Token Embedding

문자열을 단어, 형태소 등의 토큰으로 분해하는 데 성공했다면 우선 one-hot encoding을 통해 곧바로 각각의 토큰들을 벡터로 변환할 수 있습니다. One-hot encoding이란 말뭉치에 들어있는 단어들을 중복없이 순서대로 나열한 뒤, 아래 이미지에서와 같이 영벡터(zero-vector)에 해당하는 순서(index)의 요소에만 1의 값을 부여하는 방법을 말합니다. 나열한 단어들에 중복이 없으므로 각각의 단어들은 모두 고유한 벡터값을 가지게 됩니다.

그림 2. One-hot encoding 예시 1

그러나 one-hot encoding을 통해 얻은 임베딩에서는 각각의 토큰들이 서로 같은 거리에 위치합니다. 즉 두 토큰이 다르다는 사실만 알려줄 뿐 두 토큰이 서로 어떠한 관계를 가지는지는 알려주지 못하는 것이죠. 토큰화 과정(tokenization)과 one-hot encoding을 통해 토큰의 순서를 정했다면 이제 유사한 의미를 가지는 토큰끼리는 서로 가까이 당기고, 관련 없는 토큰끼리는 밀어냄으로써 보다 유의미한 임베딩을 얻을 수 있습니다.

그림 3. Word2Vec 예시

두 토큰의 유사도를 정하는 방법에는 여러가지가 있는데요, Word2Vec 2 , SentencePiece 3 를 비롯한 대부분의 임베딩 알고리즘들이 분포가설(distributional hypothesis)을 기반으로 토큰의 유사도를 결정합니다. 분포가설이란 같은 문맥에 등장하는 단어들은 서로 유사한 의미를 가진다는 주장입니다. 여기서 문맥의 정의 또한 다양하게 있겠으나 앞서 말씀드린 두 알고리즘에서는 특정 단어를(center word) 중심으로 특정 단어 수 이내로 위치한 다른 단어들이 곧 같은 문맥 안에 등장하는 단어들(context words)이라 정의합니다.

그림 4. center word와 context words

위 이미지에서 파란색 상자가 center word, 흰색 상자들이 context words들을 나타냅니다. 분포가설을 활용하는 알고리즘들은 크게 2가지 방식으로 학습하는데요, center word를 보고 context words들을 맞추도록 학습하는 방식을 Skip-Gram, context words들을 통해 center word 자리에 어떤 단어가 올지를 맞추도록 학습하는 방식을 Continuous Bag-of-Words라고 부릅니다.

2.4. Document Embedding

말뭉치의 토큰들을 벡터로 만들었다면 이제 머신러닝, 딥러닝 알고리즘을 사용할 준비가 거의 다 끝났습니다. 예를 들어 한 영화에 대한 평론이 전반적으로 긍정적인 내용을 담고 있는지, 부정적인 내용을 담고 있는지 알고 싶다면 해당 평론 안에 포함되어 있는 토큰들의 임베딩을 모두 더해 평균치를 구해볼 수 있겠습니다. 분포가설에 따르면 긍정적 의미를 가진 토큰들은 마찬가지로 긍정적 의미를 가진 토큰들 근처에 위치할 것이고, 부정적 의미를 가진 토큰들은 긍정적 의미를 가진 토큰들과는 멀리 분포할 것이기에 평균치가 이들 중 어느쪽에 더 가까운지 계산해보면 됩니다.

그러나 개별 토큰들의 임베딩을 종합하는 것만으로는 해결할 수 없는 문제들도 있습니다. 한가지 예시로는 동음이의어와 다의어가 있습니다.

1에서의 ‘배’와 2에서의 ‘배’ 모두 동일한 형태를 가지지만 서로 다른 의미를 가지고 있습니다. 1번에서의 ‘배’가 과일이 아닌 신체 부위를 뜻한다는 것을 알기 위해서는 ‘밥’, ‘먹-‘ 등의 형태소가 같은 문장 내에 위치한다는 것을 알아야 합니다.

두번째 예시로는 단어의 사전적 의미와 문맥적 의미가 다른 경우가 있겠습니다. 너무나 잘 알려진 내용이니 이미지로 설명을 대신하도록 하겠습니다.

그림 5. 사전적 의미 vs. 문맥적 의미

위와 같은 문제들이 발생하는 경우 자연어의 의미 해석은 토큰 단위에서가 아닌 문장, 문서 전체에서 이루어져야 할 것입니다. 이에 token embedding들을 모아 sentence embedding 또는 document embedding을 한번 더 학습시키곤 하는데요, 이때 주로 사용하는 것이 언어모델(language model)입니다.

언어모델이란 특정한 문자열, 즉 특정 토큰들의 배열이 등장할 확률을 알려주는 확률모형을 말합니다. 즉 토큰의 개수가 $L$인 문자열 $W = (w_1, w_2, \ldots, w_L)$가 주어지면 $P(W)$를 알려주는 함수라 볼 수 있겠습니다. 그러나 이 확률 $P(W)$를 가능한 모든 $W$에 대해서 다 기록해두는 일은 너무 어려우니 대부분의 언어모델들은 이를 여러 조건부확률로 쪼개어 학습합니다. 예를 들어 GPT의 초기버전 4 의 경우 문맥이 주어졌을 때 다음 토큰을 예측하는 방식으로 학습하였습니다. 즉 $n \leq L$에 대해 $P(w_n | w_1, \ldots, w_)$를 각각 학습한 뒤 이들을 전부 곱함으로써 $P(W)$를 계산하는 것이죠.

수식 1. 언어모델과 조건부확률

한편 BERT 5 는 문장의 일부를 다른 단어로 대체하거나 제거한 뒤(mask) 원래의 문장을 복원하는 방식으로 학습합니다. 즉 $i$번째 토큰이 라는 토큰으로 대체되었다고 하면 $P(w_i | w_1, \ldots, w_, w_, \ldots, w_)$의 값이 가장 높은 토큰을 찾아 $i$번째 토큰 자리에 다시 넣어줄 수 있도록 해당 조건부 확률을 학습하는 것입니다.

그림 6. Token Masking in BERT 6

언어모델을 학습시켰다면 이를 분해한 뒤 그 속에 있는 잠재 변수를(latent variable) 꺼내어 문장 또는 문서의 임베딩으로써 활용할 수 있습니다. 만약 학습한 언어모델이 multilayer perceptron과 softmax 함수를 이용해 문자열을 확률공간으로 사영했다면 softmax의 바로 이전 layer(penultimate layer)의 출력값을 임베딩으로 사용할 수 있습니다. 또한 Transformer 7 와 같이 각 layer별로 latent variable이 특별한 의미를 가지는 경우 (e.g. word pair, trigram) 각 layer의 Algorithm 카테고리의 글 목록 출력값을 모두 합쳐 하나의 임베딩으로 활용하기도 합니다.

그림 10. BERT의 다양한 임베딩 6

이렇게 임베딩을 얻었다면 이제 마침내 풀고자 하는 문제(downstream task)에 맞추어 머신러닝 또는 딥러닝 알고리즘을 적용하면 됩니다. GPT, BERT와 같이 큰 용량의 언어모델을 활용하는 경우 언어모델의 학습 과정에서부터 딥러닝 알고리즘을 사용하므로, 임베딩을 얻은 후에도 동일한 딥러닝 알고리즘을 이용해 downstream task를 학습시키곤 합니다. 이 경우 임베딩을 얻기 위한 학습과정을 pretraining, 임베딩 이후의 추가적인 학습과정을 fine-tuning이라고 부릅니다.

3. 정리 및 요약

앞서 설명한 4가지 단계를 “영화 리뷰 감정 분석”이라는 downstream task를 예시로 들어 다시 정리해보도록 하겠습니다.

영화 리뷰에 포함되어 있는 특수문자, html tag 등을 제거해 자연어 데이터만 남겨줍니다.

자연어 데이터를 토큰(token)으로 나누어줍니다. 한국어 데이터인 경우 띄어쓰기와 형태소를 활용하여 나누어주면 좋습니다.

동일한 tokenization을 통해 pretraining이 된 token embedding을 찾아서 다운로드하거나, Word2Vec 등을 이용해 직접 token embedding을 학습시켜줍니다.

동일한 token embedding을 통해 pretraining이 된 언어모델(language model)을 찾아서 다운로드하거나, BERT 등의 언어모델을 직접 학습시켜줍니다.

언어모델의 마지막 레이어를 제거한 뒤, 감정 분석을 위해 0 ~ 1의 값을 출력하는 classifier를 마지막 레이어가 있던 자리에 넣어줍니다. sigmoid 함수를 활성화함수(activation function)으로 가지는 linear layer를 붙여주면 됩니다.

각 리뷰의 텍스트 데이터와 리뷰 점수를 각각 input data, label로 사용하는 지도학습(supervised learning)을 통해 감정 분석을 학습시켜줍니다. 언어모델도 함께 fine-tuning 해주는 것이 일반적입니다.

지도학습이 끝났다면 token embedding, 언어모델, 그리고 마지막 classifier까지 함께 저장해줍니다. 이제 새로운 리뷰 텍스트에 대해 학습과정과 동일한 토큰화, token embedding, 언어모델을 이용한 추론(inference)을 수행해주면 해당 리뷰의 예상 점수를 얻을 수 있습니다.

이상으로 자연어 처리의 개괄적인 과정을 한번 다루어보았습니다. 간결한 설명을 위해 인공지능 관련 알고리즘들에 대한 내용은 많이 생략해보았는데요, 자연어 처리를 위한 각종 딥러닝 방법론에 관심이 있으신 분들께선 저희 DIYA의 다른 포스트들에 좀 더 자세히 나와있으니 한번 읽어봐주세요 :)

관광이 블로그

감자코딩입니다. 이번에 살펴볼 내용은 C++ STL중 하나인 forward_list 입니다. single linked list(단일 연결 리스트) 자료구조를 이용하여 만든 시퀀스 컨테이너이며, std:list기준으로 작성된 컨테이너다. std::forward_list 특징 std:list는 양방향 std::forward_list 단방향 Flow std::list보다 삽입/삭제 속도가 빠름 std::list 양방향인 std::list에 비해 메모리를 적게 사용 삽입과 삭제는 지정한 요소의 다음 요소만 가능 구현의 복잡성과 성능 문제 때문에 std::list에서 제공하는 insert와 erase를 제공하지 않음. Single Linked List는 STL로 forward_list 로 구현되어있고, C+11 ..

안녕하세요 감자코딩에 감자개발자입니다. 이번에 살펴볼 주제는 해싱에 대한 소개입니다. 간략히 요약하여 공부용으로 작성하였습니다. 해싱 개념 설명 데이터 관리/유지 자료구조 리소스 해시 함수(hash function) ————> 해시값(hash value) [이름] [해싱 과정] [index(hash value) : data ] 해시 테이블의 장점 해시충돌이라는 발생 가능성이..

안녕하세요 감자 코딩에 감자개발자입니다. 이번에 살펴볼 문제는 대표적인 플러드필 알고리즘중 하나인 단지번호붙이기를 BFS로 풀어보도록하겠습니다. 이전에 강의에서 DFS로 풀어보았었는데요, 이번에는 BFS로 다시 풀어보려고 포스팅을 하겠습니다. 단지번호붙이기 성공 시간 제한메모리 제한제출정답맞은 사람정답 비율 1 초 128 MB 34947 13452 8944 38.168% 문제 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집들의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을..

안녕하세요 오랜만에 포스팅하는 감자코딩입니다. 기말고사 기간때문에 포스팅을 요새 자주 못하였는데요, 방학을 맞이하여 알고리즘을 꾸준히 시작하려고합니다. 그러면 바로 들어가겠습니다. 이번에 알아볼 문제는 프로그래머스 문제중 하나인 "스킬트리" 라는 문제입니다. 문제 Algorithm 카테고리의 글 목록 설명 선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다. 위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 Algorithm 카테고리의 글 목록 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → ..

DP안녕하십니까 감자 코딩에 감자 개발자입니다. 이번에 살펴볼 문제는 백준 알고리즘 DP문제인 쉬운계단수 문제 입니다. 처음에 DP를 접근하시는 분이라면 조금 어려우실 수 도 있으십니다만, 천천히 같이 풀어보도록하죠. 문제 쉬운 계단 수 성공 시간 제한메모리 제한제출정답맞은 사람정답 비율 1 초 256 MB 35683 10788 7812 28.467% 문제 45656이란 수를 보자. 이 수는 인접한 모든 자리수의 차이가 1이 난다. 이런 수를 계단 수라고 한다. 세준이는 수의 길이가 N인 계단 수가 몇 개 있는지 궁금해졌다. N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구하는 프로그램을 작성하시오. (0으로 시작하는 수는 없다.) 입력 첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, ..

안녕하세요 감자코딩에 감자 개발자 입니다. 이번에 살펴볼 문제는 DP 문제인 이친수 문제입니다. 문제 이친수 성공 시간 제한메모리 제한제출정답맞은 사람정답 비율 2 초 128 MB 34368 13003 9725 36.158% 문제 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않는다. 이친수에서는 1이 두 번 연속으로 나타나지 Algorithm 카테고리의 글 목록 않는다. 즉, 11을 부분 문자열로 갖지 않는다. 예를 들면 1, 10, 100, 101, 1000, 1001 등이 이친수가 된다. 하지만 0010101이나 101101은 각각 1, 2번 규칙에 위배되므로 이친수가 아니다. ..

안녕하세요, 감자코딩에 감자개발자입니다. 이번에 살펴볼 알고리즘 문제는 백준알고리즘 11052번 카드 구매하기 문제입니다.이 역시도 DP관련 문제인데요, 하지만 다른점이 하나 있습니다.이번 문제에서는 카드의 최대값을 구하는 문제입니다. 지금 까지 포스팅한 DP문제들은 해당하는 경우의 수들을 구하는 문제였지만, 이번 문제는 한번 더 생각해야할 요소가 있습니다. 바로 들어가겠습니다 :) 1. 문제 카드 구매하기 성공시간 제한메모리 제한제출정답맞은 사람정답 비율1 초256 MB161619472702059.036%문제요즘 민규네 동네에서는 스타트링크에서 만든 PS카드를 모으는 것이 유행이다. PS카드는 PS(Problem Solving)분야에서 유명한 사람들의 아이디와 얼굴이 적혀있는 카드이다. 각각의 카드에는..

안녕하세요, 감자코딩에 감자개발자입니다. 이번에 살펴볼 알고리즘 문제는 백준알고리즘 9095번 1,2,3 더하기 문제입니다.2*n 타일링 문제에 이어서 저희가 공부해왔던 DP를 활용하여 풀면 아주 쉽게 풀 수 있습니다. 문제를 바로 살펴보죠. 1. 문제1, 2, 3 더하기 성공시간 제한메모리 제한제출정답맞은 사람정답 비율1 초128 MB27599174891193562.006%문제정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+11+1+21+2+12+1+12+21+33+1정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력첫째 줄에 테스트 케이스의 개수 T가 주어진다.

안녕하세요, 감자코딩에 감자개발자입니다. 이번에 살펴볼 알고리즘 문제는 백준 알고리즘 2*n 타일링 1에 이어서 11726번 2*n 타일링2 문제입니다.저번에 2*n 타일링문제를 잘 풀어보셨다면, 이 문제 또한 수월하게 푸실 수 있을것입니다. 문제부터 살펴보죠. 문제 링크 https://www.acmicpc.net/problem/11727 1. 문제 2×n 타일링 2 성공시간 제한메모리 제한제출정답맞은 사람정답 비율1 초256 MB155599176745859.436%문제2×n 직사각형을 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. 입력첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력첫째 줄에 2×n 크기의 직사각..

안녕하세요, 감자코딩에 감자개발자입니다. 대학생분들은 중간고사 시즌이실텐데요. 저 또한 그렇지만 이번에 중간고사 시험을 하나만 치르게됩니다 : ) 이번에 살펴볼 알고리즘 문제는 백준알고리즘 11726번 2*n 타일링 문제입니다.저번에 살펴봤던 문제는 1로 만들기 문제였었는데요, 이번엔 재미가 아주 있는 타일링 문제입니다. DP적인 사고를 만들기에 충분한 문제인데요.바로 들어가겠습니다 :) 1. 문제 2×n 타일링 성공시간 제한메모리 제한제출정답맞은 사람정답 비율1 초256 MB3599713221995434.803%문제2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. 입력첫째 줄에 n이 주어..

안녕하세요, 감자코딩에 감자개발자입니다.제가 이번에 포스팅할 내용은 DP의 대표적인 문제인 1로만들기 문제인데요.이번에 복습겸 다시 공부를 하게 되면서 시간복잡도 부분에 대해서 조금 더 포스팅 해보려고해요. 전에 Bottom-up 방식과 Top-Down방식으로 매우 세세하게 포스팅하였지만, 시간복잡도 부분에 대해서는 제가 설명을 제대로 하지 못한 부분이 있었다고 판단이 들어 추가 포스팅을 하겠습니다. 전에 올렸던 포스팅입니다. 처음이신분들은 한번 보시고 오시면 도움이 되실겁니다. [알고리즘] 백준 알고리즘 1463 1로 만들기(Top-Down/Bottom-Up, 피보나치수열) C++https://kgh940525.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6..

안녕하세요, 감자코딩의 감자입니다. 이번시간에 살펴볼 문제는 백준 알고리즘의 11724번 문제인데요. 이 문제는 그래프의 연결요소를 찾아보는 문제입니다. ♣ 1. 문제연결 요소의 개수 성공시간 제한메모리 제한제출정답맞은 사람정답 비율3 초256 MB155697734510847.318%문제방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.입력첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.출력첫째 줄에 Algorithm 카테고리의 글 목록 연결 요소의 개수를 출력한다.예제..

성공 알고리즘 EA

이 쇼는 박스오피스에서 성공을 거두었습니다. 예를 들어 경로 표현값은 수락합니다 . 모든 세부 사항은 순서대로 복제됩니다. 이 법은 적법한 절차를 제공합니다. 업캐스팅 및 다운캐스팅에 대한 이전 예제에서 직원은 바람직하지 않은 메서드 코딩()을 가져옵니다c++ 예제 rtti. 이제 프로젝트가 중단되었습니다. 예약금은 무료 입장이 가능합니다. 아래 표시된 예제 (http://www.aptilink.com/c-%ea%b0%84%eb%8b%a8%ed%95%9c-%ec%98%88%ec%a0%9c/)를 통해 이를 구현하는 방법을 살펴보겠습니다. 이 과정은 주로 남성에게 영향을 미칩니다.

그런 다음 마을 시장은 폐기되었습니다. 예를 들어 4 x 5 행렬이 있는 경우 5 x 4 행렬(행렬 예제)으로 전환합니다. 큐레이터 선정 과정이 심사됩니다. 하부 레지스터의 탐색. 인코더 – 인코더는 입력에 대한 N 비트 코드를 나타내는 N 출력 라인으로 2N 입력 라인의 형태로 이진 정보를 변환하는 조합 회로입니다 “예제”. 이 대학은 자율 연구소입니다. 당시에는 아무것도 발견되지 않았습니다. 가장 간단한 이진 유전자 알고리즘 예제 보기를 사용하여 이러한 알고리즘의 개념을 설명하는 것으로 시작해 보겠습니다.

당시 낙태는 불법이었습니다. 해군은 전쟁 노력을 지원 합니다. 예를 들어 Acunetix 검사를 사용하는 SQL 주입 취약점을 발견한 경우 즉시 수정하지 못할 수 있습니다“공격 예제 injection sql”. 그러나 테스트는 이제 자발적입니다. 시간이 페이지 아래로 실행됩니다. tapply 함수는 사용이 간편합니다예제 tapply r. 말은 주로 수송을 위해 길러져 있습니다. 이 법안은 부결되었다. 문자열 json = gson http://www.teamchongi.com/java-gson-%ec%98%88%ec%a0%9c/.

추가 결과가 있습니다. 집주인의 라벨은 위험합니다. 설명: 시스템이 잠금이 사용 중인 동안 스핀 잠금을 초기화하거나 파괴하려는 시도를 감지했습니다(예: pthread_spin_lock() 호출에서 다른 스레드스핀락 예제에 의해 사용 중입니다. 중요한 결함은 발견되지 않았습니다. 세포는 모양이 난형으로 구형.

EA는 어렵고 복잡함을 단순화한 것이다

과연 IT투자에 대한 효과가 있을까 필자를 비롯한 많 은 연구자들이 오래 전부터 이 질문에 대한 연구를 해왔 으나 아직까지도 그 효과에 대해 명확한 답변을 내놓는 연구자들은 보기 힘들다. 기업들은 일반적으로 경쟁우위 를 가지기 위해 다양한 전략들을 전개해왔다. 그 중 하나 의 전략이 IT을 이용한 경쟁우위 확보일 것이다. 이에 따 라 대부분의 기업들이 새로운 신기술과 IT에 주목하고 있으며 많은 투자를 해 왔다. 아래의 은 1980년 대부터 2000년 중반까지 미국에서 얼마나 많은 금액을 IT에 투자 하였는지 보여주고 있다.

IT 투자 효과에 대해서는 많은 논란이 있었다. 2000년 초반 IT와 닷컴 버블이 사라지면서 IT투자에 대한 효과 는 많은 논쟁을 불러왔다. 이에 따라 관련 연구자들은 IT 투자와 기업의 성과 관계에서 정보화 투자는 생산성과 비례하지 않거나 역의 관계를 가질 수 있다는 부정적인 의견을 보이기도 했다. 특히 Erik Brynjolfsson이라는 MIT 교수는‘정보기술 생산성 패러독스(IT productivi ty paradox)’라는 개념을 제시하기도 했다.

이처럼 정보화 투자 효과의 불확실성은 많은 경영자들 이 자본 회수의 위험성에 대한 인식을 갖게 하여 정보화 투자를 주저하는 요인이 됐다. 그림1에서 볼 수 있듯 총 투자에 차지하는 IT투자 비율은 점차적으로 줄어들었다. 또 많은 통계 수치들이 IT프로젝트는 대부분 실패하고 있다고 나타내고 있다. 예컨대 2003년 미국에서 실시한 설문에서 약 75% 이상의 기업들이 IT프로젝트와 IT투자 는 그 효과를 보지 못하고 실패했다고 답했다. IT기업들 로 인해 미국 주식 시장의 총 시가총액이 약 2조(Tera) 달러 정도 손해 본 것으로 알려졌다. 특히, 1995년부터 2009년까지 살아 남은 닷컴(Dot.com)기업은 10%도 되 지 않는다는 통계도 널리 알려진 사실이다.

column_img_268.jpg

IT투자에 대한 회의감이 팽배했던 2000년대 초반 니 콜라스 카(Nicholas Carr)는‘IT doesn’t matter(IT는 중요하지 않다)’라는 글을 하버드 비즈니스 리뷰 (Harvard Business Review)에 발표하면서 IT 무용론, 즉 IT에 대한 투자는 더 이상 경쟁 우위를 확보할 수 없 다는 주장을 했다. 니콜라스 카는 이 글을 통해‘IT는 과 거 산업화 시대의 선로, 전기와 비슷한 자산’이라고 주 장했다. 즉, 과거 산업화 시대에 소수의 기업만이 선로와 전기를 안정적으로 이용해 비즈니스를 할 수 있었으며, 이에 따라 다른 경쟁 업체에 비해 큰 우위를 누렸었다. 하지만 20세기에 들어 모든 기업들과 사람들이 선로와 전기를 이용할 수 있게 됨에 따라 선로와 전기를 이용한 다는 것이 기업들에게 너무나 일상화된 일이 되면서 더 이상 경쟁 우위를 창출 할 수 없게 됐던 것이다.

IT도 마찬가지로 1990년대 초 중반에는 일부 기업들 만 새로운 IT를 접목하여 비즈니스를 수행했고 이에 따 라 경쟁우위를 창출할 수 있었다. 하지만, 현재는 모든 기업들이 모든 IT 기술을 이용할 수 있다. 예를 들어 현 재는 어떤 특정 기업만이 ERP 라는 IT기술을 도입 하거 나 확보 할 수 있는 상황이 아닌 것이다. 다시 말해 모든 기업들이 동일한 IT 를 접목하여 비즈니스를 수행하고 있는 것이다. 에서 보는 것처럼 선로와 전기의 발전 및 배포 상황이 IT의 발전 및 배포 상황과 비슷하다 고 예시를 들면서 어떠한 IT도 경쟁 우위를 창출 할 수 없게 되었다고 니콜라스 카는 주장했다.

하지만 이러한 주장은 큰 오류가 있다. 먼저 니콜라스 카의 주장은 IT(Information Technology) 에서 Tech nology(기술) 측면만 강조하고 반면에 Information(정 보) 측면은 아예 무시했다는 점에서 학계와 현업에서 많 은 질타를 받았다. 즉, 모든 기업들이 동일한 기술 (Technology)을 이용한다고 하더라도 새로운 기술 (technology)을 통해 생성되고, 정제하고, 사용하게 되 는 정보(Information)는 개별 기업마다 각각 다를 수밖 에 없다. 또 이러한 정보들은 기업의 목표와 비전에 맞추 어 사용하기 때문에 개별 기업마다 정보의 활용가치는 모두 다를 수밖에 없다. 결국 사용되는 기술 자체 (techno logy)는 기업마다 동일할 수 있어도, 그 기술을 어떻게 사용하여 어떠한 결과를 얻어내는지는 기업마다 모두 다른 것이다.

column_img_269.jpg

이 말은 2가지 의미를 내포하고 있다. 첫째, IT를 통한 기업의 경쟁우위 확보가 더 이상 힘들다는 니콜라스 카의 주장은 틀린 것이다. IT를 사용하여 기업들은 얼마든지 경 쟁우위를 확보 할 수 있으며 지금까지 보여준 기업들의 IT 에 대한 투자는 잘못된 것이 아니다. 둘째, IT를 이용하여 기업이 경쟁우위를 확보하기 위해서는 기업 미션과 목표 를 고려하여 IT 투자를 결정해야 한다. IT를 기업 실정에 맞게 도입해야 하며, 이에 따라 그 기업만이 가질 수 있는 정보가 생성되고 이를 통해 기업들은 경쟁 우위를 확보 할 수 있는 기반을 마련하는 것이다. 단순히 경쟁사를 따라 무분별하게 IT 투자를 한다면 IT에 대한 효과는 기대할 수 없는 것이다. 더 나아가 기업의 미션, 목표뿐만 아니라, 기 업의 서비스와 업무에 적절한 IT를 적용하고 사용해야만 한다.

기업들 고유의 서비스와 개별 업무들은 경쟁사와 조금 씩 혹은 크게 차이가 있다. 이에 따라 기업의 CIO가 IT 투 자를 고려 할 경우에는 개별 기업의 목표와 비전, 그리고 고유 업무 및 서비스에 반영할 수 있는 IT를 선택하여 투 자하고 사용해야만 한다.

기업의 비전과 목표, 그리고 업무와 서비스를 IT와 연 계하는 것은 최근에 우리가 자주 하고 듣는 말과 일맥 상 통하다. 바로 Enterprise Architecture(EA)이다. EA가 어떻게 IT를 기업 비전과 목표 맞게 투자하고 사용하는지, 그리고 해당 기업의 업무와 서비스를 위해 어떤 IT를 사용 해야 하는지 보여주는 청사진이다. 결국 EA는 IT와 기업 의 비전, 목표, 그리고 업무와 서비스를 서로 연계하고 경 쟁우위를 창출 할 수 있게 만들어 주는 가이드라인이자 청 사진인 것이다. 앞서 언급했듯이 필자는 IT투자 효과에 대 한 연구를 오랫동안 해 왔지만 실제로 IT투자 효과를 EA 와 연계 시켜서 분석을 시도한 연구는 거의 찾아 볼 수가 없었다. IT에 대한 효과를 EA로 풀어서 연구해 본다면 훨 씬 더 좋은 연구 결과가 나오지 않았을까 EA라는 청사진 을 통해 전략적으로 IT에 투자하고 전략적으로 IT를 사용 한다면 IT 생산성 패러독스(IT productivity paradox)와 같은 말은 생겨나지 않았으리라 생각해 본다.

IT와 기업 비즈니스 환경의 Complexity 증가

IT 투자 효과에 대한 논쟁 가운데 어떤 연구자들은 IT 투자에 따른 기업의 성과가 없었음을 보였으며(Morrison & Berndt 1991, Solow 1987, Gordon 2000), 반대로 어 떤 연구자들은 IT 투자에 대한 기업 성과는 반드시 존재한 다는 연구결과를 발표했다(Diewert & Smith 1994, Hitt & Brynjolfsson 1995, Dewan & Min 1997, David 1990). 연구자들은 다양한 방법으로 원인을 밝혀내려고 노력했으나, 아직까지 명확하게 결론이 나지 않고 있다.

IT투자 효과에 대한 명확한 연구조직의 복잡성 때문일 것이다. 현재 기업조직의 복잡성은 기하급수적으로 더 복잡해지 고 있다고 해도 과언이 아닐 것이다. 이러한 복잡성은 기 업의 성과가 IT투자에 따른 효과인지 혹은 다른 요소에 의 한 효과 인지 더욱 불투명하게 만들었다. 예를 들어 IT를 기업에 적용한다면 기업 내부의 프로세스와 조직이 변화 될 것이고 이에 따라 기업내의 모든 부분에 변화가 발생할 것이다. 기업 내부 환경이 IT에 따라 변화되기 때문에 추 후에 발생되는 기업 성과가 IT Algorithm 카테고리의 글 목록 때문인지 기업 내부의 변화 때문인지 정확하게 이야기하기 힘들다. 이에 따라 IT투자 에 대한 성과를 측정하기에 너무 복잡한 연계 상황들이 많 이 발생하고, 결국 정확한 IT 투자 효과를 파악 할 수 없게 되는 것이다.

몇몇 연구자들은 IT 투자에 대한 효과를 블랙박스 (black box) 모형으로 설명하기도 했다. 블랙박스 모형이 란 실제 IT 투자와 같은 입력(Input)이 블랙박스화되어 있 는 로직과 알고리즘에 의해서 계산되어 출력(Output, 예: 기업의 성과) 등이 결정되는 모형을 말한다. 블랙박스 안 에 계산 알고리즘은 너무 복잡해서 일반 사용자들은 알 수 도 없고 볼 수도 없다는 것이다. 하지만, 이 블랙박스와 같 은 복잡한 과정을 EA로 대체할 수 있다고 생각한다. 우리 는 EA를 통해 IT투자와 관련된 업무, 서비스, 인프라, 생 성되는 정보와 데이터, 그리고 평가기준을 미리 정의하고 관리할 수 있을 것이다. 따라서 EA는 어떻게 IT투자 의사 결정이 이루어 지는지 가이드라인이 되어 줄 수 있으며 IT 투자에 대한 효과를 보다 더 명확하게 나타나게 해 줄 수 있을 것이다.

기업의 복잡성이 증가함에 따라 EA가 관리해야 할 업무 프로세스, 시스템 등도 복잡해 질 것이다. 아무리 EA가 블 랙박스 모형을 대체 할 수 있는 청사진이라고 해도 청사진 자체도 복잡해 질 수 있다는 것이다. EA환경 하에서 복잡 성을 관리하는 방법론 중 하나인 SIP(Simple Iterative Partitions, Objectwatch 사의 Roger Sessions에 의해 제 안)을 소개하고자 한다.

column_img_270.jpg

Controlling Complexity in Enterprise Architectures

현대 기업들의 복잡한 IT시스템 환경과 업무 환경을 빠 르고 탄력적으로 처리하기 위해서는 EA가 반드시 필요하 다. 기업의 IT시스템 환경이 복잡하고 빠르게 변화하는 비 즈니스 환경을 지원하기 위해서는 기업의 비전과 목표, 그 리고 업무 프로세스 등을 IT 시스템과 함께 연계해 주는 EA가 필요한 것이다. 하지만 기존 EA방법론들은 복잡성 관리에 크게 관심을 두지 않았다. 기업 내에서 IT 복잡성 관리가 해당 IT의 투자 성공여부를 결정 지을 수 있을 것 이다. 이에 Objectwatch는 EA의 기반 하의 복잡성 관리 를 위한 SIP를 제시하고 있다.

SIP 방법론의 기본 개념은 수리 모델을 기반으로 하고 있으나 상당히 간단하고 명료하다. SIP의 주 목적은 EA에 서‘어떻게 복잡한 IT 시스템을 관리하는가’에 초점을 맞 추고 있다. 즉, SIP는 기존의 EA를 대체하는 개념이 아니 다. 오히려 복잡성을 해결해 주기 위해 EA 방법론과 함께 제공되는 방법론이다. SIP는 파티션(Partitions)과 ABC(Autonomous Business Capability)라는 주요한 2가 지 개념을 가지고 설명할 수 있다.

먼저 SIP의 기본 개념인 파티션은 다음과 같은 예제에 의해 쉽게 설명된다. 시스템 상의 상황 변수를 V라 하고, S를 각 변수가 나타낼 수 있는 상황(State)의 수라고 하자. 그러면 전체 프로그램에서 발생할 수 있는 state수는 T=Sv 로 표현 할 수 있다. 예를 들어 하나의 프로그램이 2 개의 변수를 가지고 있고, 각 변수가 6개의 state를 가지고 있다면 총 발생 가능한 state의 수는 36 = 62 이다. 은 하나의 프로그램에 변수가 하나씩 추가 될 때 마다 발 생 가능한 state의 숫자를 보여주고 있다.

하나의 프로그램이 12개의 변수를 가질 경우 발생 가능 한 상황은 기하급수적으로 늘어나게 되고 결국 관리가 힘 든 복잡한 프로그램과 시스템이 될 것이다. 하지만 이 상 황은 변수들이 모두 하나의 프로그램에 있을 때 그렇다는 것이다. 예를 들어 이 변수들을 파티션을 통해 2개의 프로 그램으로 나눈다고 가정해 보자. 그러면 12개 변수를 가지 는 하나의 프로그램 대신에 6개의 변수를 가지는 2개의 프 로그램으로 만들 수 있다. 즉, 변수의 삭제 없이 파티션을 통해 복잡성을 줄일 수 있게 되는 것이다. 이 파티션 작업 은(partitioning)은 복잡성을 관리하는 SIP 방법론의 중요 개념 중 하나이다.

column_img_271.jpg

위의 예제처럼 우리는 파티션을 통해 시스템의 복잡성 을 줄일 수 있다는 것을 알았다. 그렇다면 어떤 방식으로 파티션을 나눌 수 있는 것일까 SIP 방법론 중 또 하나의 중요한 개념인 ABC(Autonomous Business Capability) 를 통해 나눌 수 있다. ABC는 자율경영능력이라고 해석 될 수 있는데 스스로 업무를 수행할 수 있는 단위를 말한 다. SIP방법론은 자율적으로 업무를 수행할 수 있는 최소 단위의 파티션 작업을 권장하고 있다. 에서 보듯 이 ABC는 일반적으로 비즈니스 프로세스 요소(Process Component)와 기술적 구성요소(Technology Compo nent)를 포함한다.

SIP 방법론은 ABC를 서로 연계함으로써 비즈니스 프 로세스를 구성하게 된다. 예를 들어 그림5는 소매운영 (Retail Operation) 이 ABC개념으로 어떻게 모델링 되는 지 도식화하여 보여준다.

SIP방법론은 ABC단위로 복잡한 시스템을 파티션 하는 것이 주요 개념이다. 이렇게 ABC단위로 나누어진 파티션 들을 확인, 중복되는 파티션을 제거하고, 덜 중요한 파티 션은 통합하고, 외부 업체가 운영 가능한 파티션은 아웃소 싱한다. 이렇게 ABC단위로 파티션을 함으로써 복잡한 시 스템과 업무 프로세스를 간소화하는 것이 SIP 방법론의 주요 프로세스이다.

끝으로 기존의 EA 방법론을 이용하여 개별 파티션들을 구축하고 수행함으로써 EA를 통한 시스템의 복잡성 관리 가 가능하다고 이야기 하고 있다. 즉, SIP방법론은 기존의 EA프레임워크를 통하여 시스템의 복잡성을 관리한다는 것을 의미한다.

어떻게 SIP방법론이 기존의 EA와 연계되는지를 좀 더 구체적으로 설명하기 위해 필자는 간단하게 FEA 의 EA 전환 전략을 예로 들어 살펴보고자 한다. FEA의 EA 전환 전략이란 현행 아키텍처에서 목표 아키텍처로 전환하기 위한 계획과 방법을 의미한다. 을 보면 현행 아키 텍처를 구성하고 있는 다양한 프로그램들과 프로젝트들 Algorithm 카테고리의 글 목록 이 존재하고 있다. 전환 전략을 통해 프로그램과 프로젝트 들이 결정되고 목표 아키텍처로 전환이 되는 것이다. 하지 만, 복잡한 시스템 환경하에서는 어떤 식으로 프로그램과 프로젝트를 나누어 수행해야 하는지 불확실한 경우가 많 다. SIP 방법론을 통해 복잡한 프로그램과 프로젝트를 단 순화하여 나누고 관리 할 수 있을 것이다. SIP방법론에 따 라 단순화된 각각의 프로그램과 프로젝트들을 기존의 EA 프레임워크를 통해 구축하고 수행하여 목표 아키텍처로 전환이 가능하게 될 것이다. 이에 따라 IT 투자에 대한 가 이드라인도 개별 프로젝트와 프로그램 별로 보다 명확하 게 제시하여 줄 수 있을 것이다.

column_img_272.jpg

경영환경이 점차 복잡해 짐에 따라 EA 프레임워크에는 다양하고 복잡한 시스템과 프로그램들로 구성되기 마련이 다. 이에 따라 EA도 복잡해 보이고 어려워 보이게 된다.

많은 사람들이 현재 EA라는 단어를 떠올리면 어렵고 복잡 하게 생각하는 이유 중 하나가 바로 여기에 있다. 여기서 간략하게 소개한 SIP 방법론은 복잡한 시스템을 관리해 주는 좋은 사례라고 생각한다. 복잡한 시스템과 업무를 단 순화하여 EA프레임워크 안에 반영한다면 그 누구도 어렵 게 생각하지 않을 것이다.

또한 IT투자에 대한 효과를 보다 더 정확히 파악하기 위 해서는 EA라는 가이드라인이 반드시 선결되어야 한다. 단 순화 되고 복잡하지 않은 EA 프레임워크를 구축할 수 있 다면, IT투자 관리에 대한 투명성을 높여줄 것이다. 이에 따라 IT 투자에 대한 정확한 의사결정을 내릴 수 있을 것 이며, IT투자 효과를 좀 더 쉽게 파악 할 수 있을 것이다. 결국 복잡한 비즈니스와 시스템 환경을 단순화하고, 그 단 순화된 업무와 시스템을 EA를 통해 전사적으로 관리한다 면 IT 투자에 대한 효과는 기업성과에 제대로 반영될 것이 다. 복잡성 관리 개념을 포함한 EA는 IT투자를 명확하게 해주는 가이드라인이 될 것이며 IT투자 효과는 더 이상 블 랙박스 모형이 아닐 것이다.

어렵고 복잡한 현대의 정보시스템 체계를 단순 명료하 게 관리해 주는 것이 결국 EA가 된다면 EA는 어려운 대상 이 아닌 어려움을 극복하고 해결해 주는 다가가기 쉽고 좋 은 대상이 될 것이다.


0 개 댓글

답장을 남겨주세요