{{위키데이터 속성 추적}}
{{머신 러닝 막대}}

'''조건부 무작위장'''({{llang|en|conditional random field|조건부 랜덤 필드}})이란 [[통계적 모델링 방법]]중에 하나로, [[패턴 인식]]과 [[기계 학습]]과 같은 [[구조적 예측]]에 사용된다. 일반적인 [[분류자]]({{llang|en|classifier}})가 이웃하는 표본을 고려하지 않고 단일 표본의 라벨을 예측하는 반면, 조건부 무작위장은 고려하여 예측한다. [[자연 언어 처리]] 분야에서 자주 사용되는 [[선형 사슬 조건부 무작위장]]({{llang|en|linear chain CRF}})은 일련의 입력된 표본들에 대해 일련의 라벨들을 예측한다.

조건부 무작위장은 판별적 비방향성 [[그래프 모형]]의 한 형태이며, 관찰되는 것들의 알려진 관계를 암호화, 일관된 해석을 구성하는데 사용된다. 또, 자연언어로 된 글 또는 생물학적 서열 정보, 그리고 컴퓨터 비전 분야에서의 일련의 데이터에 대한 라벨 예측, 분석하는 데 사용되기도 한다. 구체적으로, 조건부 무작위장은 부분구문분석, 개체명 인식, [[유전자 검색]] 등의 응용 분야에 사용될 수 있으며, 이러한 분야에서 [[은닉 마르코프 모델]]의 대안이 될 수 있다. 컴퓨터 비전 분야에서는 객체 인식, 이미지 분할에 종종 사용된다.

== 소개 ==
다양한 과학적 분야에서 시퀀스의 분할과 라벨링은 주요한 문제이다. 이러한 문제들의 해결 방법으로 [[은닉 마르코프 모델]]과 통계적 문법들({{llang|en|stochastic grammars}})이 적용되어왔으며 이들은 생물학이나 자연어 처리 등의 분야에서 매우 성공적인 결과를 도출하기도 하였다. 하지만 이들은 상호작용하는 여러 자질이 존재하는 경우, 혹은 관측값에서 긴범위의 의존성이 발견되는 경우, 이들 모델에 대한 추론이 다루기 힘든({{llang|en|intractable}}) 문제가 되어버린다는 단점이 있었다.
이에 반해 조건부 무작위장에서는 관측 값을 모델링 하는데에 걸리는 시간을 고정시킬 뿐 아니라 독립성에 대해서 매우 엄격한 가정을 요구하는 생성모델({{llang|en|generative model}})과 달리 레이블 시퀀스의 조건부 확률은 관측 시퀀스의 임의의 독립적이지 않은 기질들에 의존하는 것이 가능하다. 이런점들은 조건부 무작위장이 분할과 라벨링 문제에 새로이 제안되게 하는 동기로 작용하였다.<ref name="LAFF_CRF">Lafferty, John, Andrew McCallum, and Fernando CN Pereira. "Conditional random fields: Probabilistic models for segmenting and labeling sequence data." (2001).</ref>

조건부 무작위장을 간단하게 설명하면 입력 시퀀스에 대한 출력 시퀀스의 [[조건부 확률]]이라고 할 수 있다. 수학적인 표현을 사용하여 매우 간단하게 표시하면 다음과 같이 할 수 있다.
<blockquote>
<math>p(y|x),</math> 여기서, <math>x , y</math>는 시퀀스이다.<br>
예를 들어, <math>x=(a, b, c), y=(x, y, z),</math><br> <math>x, y</math> 시퀀스에 대하여서는 제약이 없다.
</blockquote>
즉 예를 들면, 조건부 무작위장은 문자 a, b, c 가 연속적으로 나타났을 때, 문자 x, y, z를 연속적으로 부여할(나타날) 확률을 의미한다고 할 수 있다. 여기서 y는 [[마르코프 성질]]을 만족하여야 한다. 그런데 만약 x의 집합과 y의 집합이 한정되어 있다면, 이 구조는 그래프 구조를 형성하게 된다. 일반적으로는 체인({{llang|en|chain}}) 그래프 구조를 형성한다고 한다.
<ref name="LEE_CRF">이호석. "조건부 랜덤 필드와 응용에 대한 고찰." 한국정보과학회 학술발표논문집 36.2C (2009): 184-187.</ref><br><br>

== 수학적 정의 ==

조건부 무작위장 <math>(Y, X)</math>는 방향이 없는({{llang|en|undirected}}) 그래프 <math>G=(V, E)</math> 혹은 [[마르코프 무작위장]]으로 간주할 수 있다. 만약, 입력 시퀀스에서 조건부 독립을 가정할 수 있다면, 이론적으로 그래프의 구조는 여러 가지 형태를 나타낼 수 있다. 하지만 응용에서는 일반적으로 <math>Y</math>에 해당되는 노드는 간단한 체인({{llang|en|chain}})의 형태를 나타내는 경우가 많다<ref name="LAFF_CRF" />. 조건부 무작위장은 [[은닉 마르코프 모델]](HMM, Hidden Markov Model)에 비하여 변수 독립성 조건이 필요 없는 장점이 있다고 한다. 또한 조건부 무작위장은 [[최대 엔트로피 마코르프 모델|최대 엔트로피 마르코프 모델]](MEMM, Maximum Entropy Markov Model)에 비하여 변수 치우침(bias)이 없는 장점이 있다고 한다<ref name="LAFF_CRF" />. 다음은 조건부 무작위장의 정의이다<ref name="LAFF_CRF" />.<ref name="LEE_CRF" />
<br><br>
<blockquote>
<math>G=(V, E)</math>는 그래프 구조 이고, <math> Y=(Y_v)_{v{\in V}}</math>로서, <math>Y</math>는 그래프 <math>G</math>의 정점({{llang|en|vertex}})을 나타낸다고 하고 <math>E</math>는 간선({{llang|en|edge}})이라고 하자. 만약 랜덤 변수 <math>X</math>에 대하여 랜덤 변수 <math>Y_v</math>가 그래프에서 마코프 성질을 나타낸다면, 즉, <math> P(\boldsymbol{Y}_v |\boldsymbol{X}, \{\boldsymbol{Y}_w: w \neq v\}) = P(\boldsymbol{Y}_v |\boldsymbol{X}, \{\boldsymbol{Y}_w: w \sim v\}) </math> 라면 <math>(X, Y)</math>는 조건부 랜덤 필드가 된다. (여기서 <math>w\sim v</math>는 <math>w</math>와 <math>v</math>는 서로 이웃이라는 의미)
</blockquote>
<br>
*  <math>Y</math>의 그래프 <math>G=(V,E)</math>가 [[트리 구조|트리]]({{llang|en|tree}})를 형성한다면, <math>Y</math>의 [[클릭]]({{llang|en|clique}})는 간선({{llang|en|edge}})과 정점({{llang|en|vertex}})이 된다. 따라서 시퀀스 <math>X</math>가 입력되었을 때, 시퀀스 <math>Y</math>에 대한 조인트 확률 분포는 다음과 같이 표현된다.
<br>

:<math> p_\theta (y|x) \propto exp( \sum_{e \in E,k} \lambda_k f_k(e, y|_e, x)+ \sum_{v \in V,k}\mu _k g_k (v, y|_v, x)) </math>
<br>
:여기서 <math>x</math>는 입력 시퀀스이고, <math>y</math>는 출력 레이블 시퀀스이다. <math>y|_s</math>는 <math>y</math> 요소의 집합으로서 그래프 <math>G</math>의 서브그래프 <math>S</math>의 정점({{llang|en|vertex}})과 관계된다. <math>f_k</math>와 <math>g_k</math>는 주어져 있고 고정되어 있다고 가정한다.
:위 수식을 다르게 해석할 수 있다. 수식에서 앞에 위치한 항목은 그래프에서 입력 시퀀스에 의하여 현재의 정점({{llang|en|vertex}})에서 다음 정점({{llang|en|vertex}})으로 이동하는 천이 특징 함수({{llang|en|transition feature function}})로 간주할 수 있고, 뒤 항목은 현재의 정점({{llang|en|vertex}})의 상태 특징 함수({{llang|en|state feature function}})로 간주할 수 있다. 즉, 위 식은 입력되는 시퀀스의 요소들에 의하여 현재의 정점({{llang|en|vertex}})에 그대로 존재하는 경우를 나타내기도 하고, 또는 다음 정점({{llang|en|vertex}})으로 이동하는 것을 나타내기도 한다. 전체적으로는 입력되는 시퀀스에 의하여 그래프의 정점({{llang|en|vertex}}) 상에서 움직이는 상태와 이와 관련된 확률을 나타낸다.
<br>
*  <math>Y</math>가 체인({{llang|en|chain}})을 구성하고 있다고 가정하면, 조건부 무작위장 확률을 다음과 같이 표현할 수도 있다.
<br>

:<math> p_\theta (y|x) = {\prod_{i=1}^{n+1} M_i(y_{i-1} , y_i |x_i) \over \prod_{i=1}^{n+1} M_i (x))_{begin,stop}}</math>

:여기서, <math>y_0=begin</math>, 그리고 <math>y_{n+1}=stop</math>

== 추론 방법 ==
효율적인 추론은 조건부 무작위장의 훈련 시 혹은 새로운 입력에 대한 레이블을 예측할 때 매우 중요하다. 추론에 있어 크게 2가지 문제를 생각할 수 있다.

첫 번째로, 모델을 훈련한 후, 새로운 입력 <math>x</math>에 대한 레이블 <math>y</math>를 예측하려 할 때, 가장 [[가능도]]({{llang|en|likelihood}})를 크게 하는 <math>y</math>를 선택하는 것이다. 즉 다음과 같이 나타낼 수 있다:


<math>\hat{y} = \operatorname{argmax_y}\ p(y|x)</math>


두 번째로, 파라미터를 추정할 때 각각의 간선({{llang|en|edge}}) <math>p(y_t, y_{t-1}|x)</math>와 정규화 함수 <math>Z(x)</math>에 대한 [[주변분포]]({{llang|en|marginal distribution}})을 계산하는 것이다. 이 두 추론 문제는 근본적으로 같다고 볼 수 있다.<ref name="ICRF">Sutton, C., & McCallum, A. (2011). An introduction to conditional random fields. Machine Learning, 4(4), 267-373.</ref>

=== 정확한 추론 방법 ===

불행히도 앞에서 언급된 두 추론 문제는 일반 그래프에 대해서는 다루기 힘든({{llang|en|intractable}}) 문제이다. 추론을 정확하고 빠르게 할 수 있는 경우는 다음과 같은 경우만 가능하다:

* 그래프가 선형 체인이거나 트리일 때, 추론 작업은 [[은닉 마르코프 모델]]을 위한 다양한 동적 계획법 알고리즘을 이용해 효율적으로 정확하게 수행 가능하다. 그런 알고리즘의 예로는 [[전향-후향 알고리즘]]({{llang|en|forward-backward algorithm}})과 [[비터비 알고리즘]]({{llang|en|Viterbi algorithm}})이 있다. 이 알고리즘들은 트리 구조의 그래프 모델을 위한 일반적 [[신뢰전파|신뢰전파 알고리즘]]({{llang|en|belief propagation algorithm}})의 특수한 경우라고 할 수 있다<ref name="ICRF" />.
* 만약 조건부 무작위장이 오직 쌍별 포텐셜({{llang|en|pairwise potential}})만을 포함하며, 에너지가 서브모듈러({{llang|en|submodular}})일 경우, 조합적 [[최소 컷/최대 흐름 알고리즘]]({{llang|en|combinatorial min cut/max flow algorithm}})을 이용해 정확한 결과를 구할 수 있다.

=== 근사적 추론 방법 ===

위 두 경우 외에 보다 복잡한 모델, 즉 일반 그래프에서도 일부 상황에서는 정확한 추론이 효율적으로 될 수 있다. 이는 [[접합 트리 알고리즘]]({{llang|en|junction tree algorithm}})을 이용해 그래프 상에서 변수들을 군집화 하여 트리 형태로 만든 후, 트리 구조에서 작동하는 정확한 추론 알고리즘을 작동시킴으로써 가능하다. 하지만, 일부 복잡한 그래프에서는 접합 트리 알고리즘이 거대한 변수 클러스터를 생성하여 효율적인 추론을 불가능하게 한다. 즉 일반 그래프에서는 최악의 경우 정확한 추론 알고리즘을 이용하면 지수적 시간({{llang|en|exponential time}})이 소요된다.<ref name="ICRF" />

이런 이유 때문에, 효율적 추론을 위해 일반적 그래프에서는 정확한 추론 알고리즘 보다는 근사적 추론 알고리즘이 필요하다. 주로 다음과 같이 두 종류의 근사 추론 알고리즘이 사용된다<ref name="ICRF" />:

* [[몬테 카를로 방법|몬테 카를로 알고리즘]]({{llang|en|Monte Carlo algorithm}}): 확률적 알고리즘으로, 관심이 있는 분포의 샘플을 근사적으로 생성해낸다. 대표적인 예로는 [[기브스 표집]] 알고리즘({{llang|en|Gibbs sampling algorithm}})이 있다.<ref name="ICRF" />
* [[변분 알고리즘]]({{llang|en|variational algorithm}}): 다루기 힘든 분포와 가장 근사하며 간단한 분포를 찾아내어 푸는 방법으로, 추론 문제를 최적화 문제로 바꾸어 푼다. 대표적인 예로는 [[신뢰전파]] 알고리즘이 있다.<ref name="ICRF" />
몬테 카를로 방법은 치우침이 없는({{llang|en|unbiased}}) 대신 계산 시간이 언제 끝날지 알 수 없다는 단점이 있다. 변분 방법은 이에 비해 상당히 빠르지만 치우침이 있어({{llang|en|biased}}) 에러를 포함하며, 계산 시간을 늘리더라도 에러가 줄지 않는 단점이 있다. 파라미터 추정 과정에서 추론이 많은 회수 반복되기 때문에, 조건부 무작위장의 효율적인 학습을 위해서는 변분 방법이 더욱 선호된다.<ref name="ICRF" />

== 파라미터 학습 방법 ==
=== 트리 구조에서의 학습 ===
만약 트리 기반 조건부 무작위장이라면, 파라미터 <math>\theta</math>는 보통 <math>p(Y_i | X_i;\theta)</math>에 대한 [[최대가능도방법|최대 가능도 학습]]({{llang|en|maximum likelihood estimation}})을 통해 얻어진다. 이를 통해, 학습 데이터의 확률값을 최대로 하는 <math>\theta</math>를 구해낸다. 만약 모든 정점이 [[지수족|지수족 분포]]를 가지면서, 트레이닝 과정에서 관측({{llang|en|observed}})되었다면 가능도 함수는 [[볼록 함수|볼록]]({{llang|en|convex}}) 모양이다. 즉 이 최적화 문제는 [[경사 하강법]]({{llang|en|gradient descent algorithm}}) 혹은  [[L-BFGS 알고리즘]] 같은 [[쿼시-뉴턴 방법]]({{llang|en|Quasi-Newton method}})를 이용하여 풀 수 있다. 이와 반대로 어떤 변수가 관측되지 않았을 경우, 이 변수들에 대한 추론 문제를 먼저 해결해야 한다.<ref name="ICRF" />.

만약 동등하게 독립적으로 분포된({{llang|en|identically independently distributed}}) 학습 데이터 <math>\mathcal{D}=\{\mathbf{x}^{(i)}, \mathbf{y}^{(i)}\}_{i=1}^N</math> (여기서 <math>\mathbf{x}^{(i)}=\{\mathbf{x}_1^{(i)},\mathbf{x}_2^{(i)}, ...\mathbf{x}_T^{(i)}\}</math>는 입력 시퀀스를, <math>\mathbf{y}^{(i)}=\{y_1^{(i)},y_2^{(i)}, ...y_T^{(i)}\}</math>는 입력에 대한 바람직한 예측 시퀀스를 나타낸다)가 주어졌을 때, [[경사 하강법]]({{llang|en|gradient descent}})으로 구할 경우 다음과 같은 가능도 함수를 이용할 수 있다<ref name="ICRF" />:

:<math>\ell (\theta) = \sum_{i=1}^N \sum_{t=1}^T \sum_{k=1}^K {\theta}_k f_k (y_t^{(i)}, y_{t-1}^{(i)}, \mathbf{x}_t^{(i)}) - \sum_{i=1}^N \log Z(\mathbf{x}^{(i)})</math>

여기서 <math>Z(\mathbf{x})</math>는 정규화 상수({{llang|en|normalization constant}})이다.

[[과적합]]({{llang|en|overfitting}})을 피하기 위해  [[정칙화]]({{llang|en|regularization}})를 실시해 줄 수 있으며, 이 때 <math>\theta</math>에 대한 [[유클리드 노름]]({{llang|en|Euclidean norm}})값을 페널티로 갖는 정칙화된 가능도 함수는 다음과 같다<ref name="ICRF" />:

:<math>\ell (\theta) = \sum_{i=1}^N \sum_{t=1}^T \sum_{k=1}^K {\theta}_k f_k (y_t^{(i)}, y_{t-1}^{(i)}, \mathbf{x}_t^{(i)}) - \sum_{i=1}^N \log Z(\mathbf{x}^{(i)}) - \sum_{k=1}^K {\theta_k^2 \over 2\sigma^2}</math>

여기서 <math>\sigma^2</math>는 자유매개변수({{llang|en|free parameter}})로 가중치가 클수록 얼마나 페널티를 줄 것인지 결정한다.

유클리드 노름 대신에 [[L1 노름|<math>L_1</math> 노름]]을 페널티로 갖도록 정칙화를 실시해 줄 수 있으며, 그에 대한 가능도 함수는 다음과 같다<ref name="ICRF" />:

:<math>\ell (\theta) = \sum_{i=1}^N \sum_{t=1}^T \sum_{k=1}^K {\theta}_k f_k (y_t^{(i)}, y_{t-1}^{(i)}, \mathbf{x}_t^{(i)}) - \sum_{i=1}^N \log Z(\mathbf{x}^{(i)}) - \alpha \sum_{i=1}^N |\theta_k|</math>

유클리드 노름을 이용한 가능도 함수에 편미분을 하여 기울기를 구하면 다음과 같다<ref name="ICRF" />:

:<math>{{\partial \ell} \over {\partial \theta_k}} = \sum_{i=1}^N \sum_{t=1}^T f_k(y_t^{(i)}, y_{t-1}^{(t)}, \mathbf{x}_t^{(t)}) - \sum_{i=1}^N \sum_{t=1}^T \sum_{y,y'} f_k(y, y', \mathbf{x}_t^{(i)}) p(y,y' | \mathbf{x}^{(i)}) - {{\theta_k} \over {\sigma^2}} </math>

앞에서 세운 가능도 함수와 기울기 식을 이용해 가능도 함수를 극대화 시키는 <math>\theta</math>를 찾아내면 된다. 가능도 함수를 최적화 시키는 간단한 방법으로는 기울기에 대한 [[최대 경사법]]({{llang|en|steepest ascent}})를 사용하는 방법이 있다. 하지만 이 방법은 많은 반복({{llang|en|iteration}})을 요구하기 때문에 실용적이지 못하다. [[뉴턴의 방법]]({{llang|en|Newton's method}})은 속도가 더 빠르지만 파라미터에 대한 [[헤세 행렬]]({{llang|en|Hessian}}: 모든 이차 미분값에 대한 행렬)을 계산해야하기 때문에 많은 저장 공간을 요구함으로써 실용적이지 못하다. 주로 [[BFGS]]와 같은 [[쿼시-뉴턴 방법]] 혹은 [[켤레기울기법]]({{llang|en|conjugate gradient method}})을 이용해 근사치를 계산하는 방법이 주로 사용된다.<ref name="ICRF" />

=== 일반 그래프에서의 학습 ===

만약 조건부 무작위장이 일반적 그래프일 경우, 최대 가능도 학습으로는 <math>\theta</math>를 구하기 쉽지 않다({{llang|en|intractable}}). 이 문제를 다루기 위해서는 근사적 추론 방법을 이용하거나, 혹은 최대 가능도 방법 외에 다른 학습 기준을 선택해야 한다.

== 예제 ==
[[시퀀스 모델링]]({{llang|en|sequence modelling}})은 보통 [[연쇄 그래프]]({{llang|en|chain graph}}: 방향성이 있거나 없는 간선({{llang|en|edge}})을 모두 가질 수 있으며 방향성 순환이 없는 그래프)를 이용해 모델링된다. 관측된 변수들의 벡터 <math>X</math>의 입력 시퀀스는 일련의 관측을 표현하며, <math>Y</math>는 관측된 값이 주어졌을 때 추론되어야 할 숨겨진 변수({{llang|en|hidden state variable}} or {{llang|en|unknown state variable}})들을 나타낸다. <math>Y_i</math>는 <math>Y_{i-1}</math>과 <math>Y_i</math> 사이에 간선({{llang|en|edge}})이 연결되는 연쇄적인 구조로 조직된다. 이러한 구조는 <math>Y_i</math>를 입력 시퀀스의 각 입력에 대한 레이블({{llang|en|label}})로써 해석할 수 있는 간편함이 있으며,이 외에도 이러한 구조를 사용함으로써 다음과 같은 작업들을 효율적으로 처리할 수 있는 장점이 있다:
* 모델 훈련({{llang|en|model training}}): 트레이닝 데이터 뭉치({{llang|en|corpus}})에서부터 추출한 [[자질 함수]]({{llang|en|feature function}})들과 <math>Y_i</math> 사이에 조건부 확률 분포를 학습
* 디코딩({{llang|en|decoding}}): <math>X</math>가 주어졌을 때, 각 <math>Y</math>의 값에 대한 확률을 결정
* 추론({{llang|en|inference}}): <math>X</math>가 주어졌을 때, 가장 가능성이 높은 <math>Y</math>의 값을 결정

<math>X</math>에 대한 각 <math>Y_i</math>의 [[조건부 의존성]]({{llang|en|conditional dependency}})은 <math>f(i, Y_{i-1}, Y_i, X)</math>의 형태를 갖는 자질 함수들의 고정된 집합을 통해 정의된다. 이 함수는 입력 시퀀스에 대해 각 <math>Y_i</math> 값에 대한 [[가능도]]({{llang|en|likelihood}})를 어느 정도 결정할 수 있는 측정치로 간주될 수 있다. 이 모델은 각 자질에 대해 수치적 가중치를 부여하고 이를 조합함으로써 <math>Y_i</math>의 값에 대한 확률을 결정한다.

선형 체인 조건부 무작위장({{llang|en|linear-chain CRFs}})은 개념적으로 보다 단순한 [[은닉 마르코프 모델]]과 응용되는 문제가 비슷하다. 단, 입력, 출력 시퀀스의 분포에 대한 가정을 어느 정도 완화하였다. 은닉 마르코프 모델은 상태 전이({{llang|en|state transition}})와 방출({{llang|en|emission}})을 모델링하기 위해 고정된 확률({{llang|en|constant probability}})을 사용하는 자질 함수만을 갖는 조건부 무작위장으로 생각될 수 있다. 반면, 조건부 무작위장은 은닉 마르코프 모델의 일반화된 모델로 생각될 수 있으며, 고정된 전이 확률({{llang|en|transition probability}}) 대신에 일련의 숨겨진 상태({{llang|en|hidden state}})들의 조직에 따라 달라지는 임의의 함수를 입력 시퀀스에 맞추어 사용한다.

은닉 마르코프 모델과는 대조적으로 주목할 점은, 조건부 무작위장은 임의의 개수의 자질 함수를 포함할 수 있으며, 이 자질 함수는 추론 중 어느 시점에서라도 전체 입력 시퀀스 <math>X</math>를 조사할 수 있고, 자질 함수의 [[범위]]({{llang|en|range}})는 확률적으로 해석될 필요가 없다.

== 데이터 시퀀스 라벨링 모델 비교 ==
=== 데이터 시퀀스 라벨링을 위한 대표적 그래프 모델 3가지 ===
{| cellpadding="10" cellspacing="0" border="1" class="wikitable"
|-
!
! [[은닉 마르코프 모델]]<br>({{llang|en|Hidden Markov Model, HMM}})
! [[최대 엔트로피 마르코프 모델]]<br>({{llang|en|Maximum Entropy Markov Model, MEMM}})
! 조건부 무작위장
|-
! 그래프 모델
| [[파일:Graphical model for HMM.PNG|400px|가운데|프레임없음|은닉 마르코프 모델]]
| [[파일:Graphical model for MEMM.PNG|400px|가운데|프레임없음|최대 엔트로피 마르코프 모델]]
| [[파일:Graphical model for CRF.PNG|400px|가운데|프레임없음|조건부 무작위장]]
|-
! 모델 방식
|align="center"|생성 모델({{llang|en|generative model}})
|align="center"|판별 모델({{llang|en|discriminative model}})
|align="center"|판별 모델({{llang|en|discriminative model}})
|-
! 간선({{llang|en|edge}}) 방식
|align="center"|방향성 그래프({{llang|en|directed graph}})
|align="center"|방향성 그래프({{llang|en|directed graph}})
|align="center"|비방향성 그래프({{llang|en|undirected graph}})
|}

=== 다른 방법에 비한 장점 ===
====특정 위치에서 입력에 대한 측정값 확신====
:은닉 마르코프 모델과는 달리, 조건부 무작위장은 특정 위치에서의 측정값을 확신할 수 있다. 이는 은닉 마르코프 모델은 생성 모델, 조건부 무작위장은 판별 모델에서 기인한 것에서 생겨난 차이다.<ref>"What Are Conditional Random Fields?", Perpetual Enigma, http://prateekvjoshi.com/2013/02/23/what-are-conditional-random-fields</ref>
====라벨 편향 문제 해결====
:최대 엔트로피 마르코프 모델이나 다른 마르코프 무작위장 모델, 즉, 방향성 그래프 모델로부터 발견될 수 있는 약점인 라벨 편향 문제를 피할 수 있다. 이는 조건부 무작위장이 비방향성 그래프 모델로 정의되기 때문이다.
====일련 데이터 라벨링====
:[[생물정보학]], [[전산언어학]], [[음성 인식]] 분야에서 일련된 데이터의 라벨링시, 은닉 마르코프 모델, 최대 엔트로피 마르코프 모델보다 좋은 성능을 기대할 수 있다.

=== 다른 방법에 비한 한계점 ===
==== 라벨링된 트레이닝 데이터의 필요성 ====
:다른 방법들과 달리, 조건부 무작위장은 라벨링된 트레이닝 데이터가 필요하다.
==== 느린 트레이닝 알고리즘 ====
:[[마르코프 네트워크]]({{llang|en|Markov Random Field, MRF}})보다 트레이닝 알고리즘의 [[시간 복잡도]]가 더 크다.
==== 보편적 사용의 어려움 ====
:일반적으로 규모에 제대로 적응하지 못한다. 특히, 내부 상태가 매우 많이 필요한 응용이거나 간선({{llang|en|edge}}) 연결이 매우 많은 그래프 구조일 때 더욱 그렇다<ref>Cohn, Trevor. "Efficient inference in large conditional random fields." Machine Learning: ECML 2006. Springer Berlin Heidelberg, 2006. 606-613.</ref>

== 활용 연구 사례<ref>Murphy, Kevin P. Machine learning: a probabilistic perspective. MIT press, 2012.</ref> ==

=== 자연언어 처리 ===
*  화자 의도 예측: 대화에서 화자의 의도를 통계적으로 예측하기 위한 모델로서 활용되기도 하는 한편, 문서의 범주화, 절인식 등의 구문분석에 이용되는 등 다양한 활용의 예를 찾아볼 수 있다.<ref>김동현, 김학수, and 서정연. "목적지향 대화에서 화자 의도의 통계적 예측 모델." 정보과학회논문지: 소프트웨어 및 응용 35.9 (2008): 554-561.</ref><ref>김학수. "능동학습법을 이용한 한국어 대화체 문장의 효율적 의미 구조 분석." 정보과학회논문지: 소프트웨어 및 응용 35.5 (2008): 306-312.</ref><ref>임석향, et al. "언어 모델을 이용한 유해 문서 분류." 한국정보과학회 학술발표논문집 36.1C (2009): 301-304.</ref><ref>배원식, and 차정원. "TextRank 알고리즘을 이용한 문서 범주화." 정보과학회논문지: 컴퓨팅의 실제 및 레터 16.1 (2010): 110-114.</ref><ref>정헌영, et al. "의견의 주체를 찾기 위한 후보어휘의 의견주체점수 부여 방법과 Self-training." 한국정보과학회 학술발표논문집 36.1C (2009): 341-345.</ref>
*  정보 추출: 제목, 저자, 참고 문헌과 같은 데이터를 추출한다.<ref>Peng, Fuchun, and Andrew McCallum. "Information extraction from research papers using conditional random fields." Information processing & management 42.4 (2006): 963-979.</ref>
*  단어 분리: 중국어 말뭉치를 분할하여 단어 리스트를 얻는다.<ref>Peng, Fuchun, Fangfang Feng, and Andrew McCallum. "Chinese segmentation and new word detection using conditional random fields." Proceedings of the 20th international conference on Computational Linguistics. Association for Computational Linguistics, 2004.</ref>
*  단어 정렬: 언어 간의 단어 정렬 순서 모델의 오차율을 줄인다.<ref>Blunsom, Phil, and Trevor Cohn. "Discriminative word alignment with conditional random fields." Proceedings of the 21st International Conference on Computational Linguistics and the 44th annual meeting of the Association for Computational Linguistics. Association for Computational Linguistics, 2006.</ref>
*  명사구 청킹(덩이짓기): CoNLL-2000 shared tast<ref>E. F. Tjong Kim Sang and S. Buchholz. "Introduction to the CoNLL-2000 shared task: Chunking". In Proc. CoNLL-2000, pages 127–132, 2000.</ref>에서 제시한 명사구 청킹을 얼마나 정확하게 수행하는지 알아본다.<ref>Sha, Fei, and Fernando Pereira. "Shallow parsing with conditional random fields." Proceedings of the 2003 Conference of the North American Chapter of the Association for Computational Linguistics on Human Language Technology-Volume 1. Association for Computational Linguistics, 2003.</ref>

=== HCI ===
*  동작 모델 제작: 특징 변환을 이용하여 제스체 인식 시스템을 제작하였다.<ref>허세경, et al. "특징 변환과 은닉 마코프 모델을 이용한 팔 제스처 인식 시스템의 설계." 정보처리학회논문지. 소프트웨어 및 데이터 공학 2.10 (2013): 723-730.</ref>
*  동작 인식: 인간의 팔, 머리의 움직임을 보다 정확히 분석하는 방법을 제시한다.<ref>Wang, Sy Bor, et al. "Hidden conditional random fields for gesture recognition." Computer Vision and Pattern Recognition, 2006 IEEE Computer Society Conference on. Vol. 2. IEEE, 2006.</ref><ref>김혜숙, and 김인철. "시점 불변인 특징과 확률 그래프 모델을 이용한 인간 행위 인식." 정보과학회논문지 41.11 (2014): 927-934.</ref>

=== 컴퓨터 비전 ===
*  3D 동영상 변환: 객체 분할로 2D 동영상을 3D 동영상으로 변환한다.<ref>이상학. "학습기반의 객체분할과 Optical Flow를 활용한 2D 동영상의 3D 변환." 한국인터넷방송통신학회 논문지 11.3 (2011): 129-135.</ref>
*  필기 인식: 웹 상에서 표기되는 일본어 문장 인식을 하는 방법을 제시한다.<ref>Zhou, Xiang-Dong, Cheng-Lin Liu, and Masaki Nakagawa. "Online handwritten Japanese character string recognition using conditional random fields." Document Analysis and Recognition, 2009. ICDAR'09. 10th International Conference on. IEEE, 2009.</ref>
*  스테레오 비전: 파라미터 최적화에 필요한 추론을 극도로 가속화하여 효율적으로 희소 메시지를 전달한다.<ref>Weinman, Jerod J., Lam Tran, and Christopher J. Pal. "Efficiently learning random fields for stereo vision with sparse message passing." Computer Vision–ECCV 2008. Springer Berlin Heidelberg, 2008. 617-630.</ref>
*  영상 분할: 영상의 분할, 라벨링 문제에서 조건부 무작위장을 이용하는 것이 효율적이라 알려져 있다. 특히 이들을 PET 영상에서 뇌의 각 영역들을 분할하거나, 암 세포 등의 병변을 분할해내는데에 활용한 연구들이 있다.<ref>김선월, and 조완현. "의료영상분할을 위한 조건부 랜덤 필드 모델링." 한국멀티미디어학회 학술발표논문집 (2009): 641-642.</ref><ref>Lee, Chi-Hoon, et al. "Segmenting brain tumors with conditional random fields and support vector machines." Computer vision for biomedical image applications. Springer Berlin Heidelberg, 2005. 469-478.</ref>

=== 생물정보학 ===
*  단백질 곁사슬 예측: 학습을 통해 트리 가중치 조정하는 분할 알고리즘이 전역적으로 최적화할 수 있도록 돕는다.<ref>Yanover, Chen, Ora Schueler-Furman, and Yair Weiss. "Minimizing and learning energy functions for side-chain prediction." Journal of Computational Biology 15.7 (2008): 899-911.</ref>

== 소프트웨어 ==
아래는 일반적인 조건부 무작위장 도구로 알려진 목록이다.
* [http://rnnsharp.codeplex.com/ RNNSharp] {{웨이백|url=http://rnnsharp.codeplex.com/ |date=20160625074258 }} CRFs based on recurrent neural networks ([[C 샤프|C#]], [[닷넷 프레임워크|.NET]])
* [https://web.archive.org/web/20131224113826/http://klcl.pku.edu.cn/member/sunxu/code.htm CRF-ADF] Linear-chain CRFs with fast online ADF training ([[C 샤프|C#]], [[닷넷 프레임워크|.NET]])
* [http://github.com/zhongkaifu/CRFSharp CRFSharp] Linear-chain CRFs ([[C 샤프|C#]], [[닷넷 프레임워크|.NET]])
* [http://vision.csd.uwo.ca/code/ GCO] CRFs with submodular energy functions ([[C++]], [[Matlab]])
* [http://mallet.cs.umass.edu/grmm/index.php GRMM] General CRFs ([[자바 (프로그래밍 언어)|자바]])
* [http://factorie.cs.umass.edu/ factorie] General CRFs ([[Scala (programming language)|Scala]])
* [http://www.cs.ubc.ca/~murphyk/Software/CRFall.zip CRFall] General CRFs ([[MATLAB|Matlab]])
* [http://crf.sourceforge.net/ Sarawagi's CRF] Linear-chain CRFs ([[자바 (프로그래밍 언어)|자바]])
* [http://sourceforge.net/projects/hcrf/ HCRF library] Hidden-state CRFs ([[C++]], [[MATLAB|Matlab]])
* [http://accord-framework.net Accord.NET] Linear-chain CRF, HCRF and HMMs ([[C 샤프|C#]], [[닷넷 프레임워크|.NET]])
* [http://wapiti.limsi.fr/ Wapiti] Fast linear-chain CRFs ([[C (프로그래밍 언어)|C]])<ref>T. Lavergne, O. Cappé and F. Yvon (2010). [http://acl.eldoc.ub.rug.nl/mirror/P/P10/P10-1052.pdf Practical very large scale CRFs] {{웨이백|url=http://acl.eldoc.ub.rug.nl/mirror/P/P10/P10-1052.pdf |date=20130718001211 }}. Proc. 48th Annual Meeting of the [[Association for Computational Linguistics|ACL]], pp. 504-513.</ref>
* [http://www.chokkan.org/software/crfsuite/ CRFSuite] Fast restricted linear-chain CRFs ([[C (프로그래밍 언어)|C]])
* [https://web.archive.org/web/20100421020327/http://crfpp.sourceforge.net/ CRF++] Linear-chain CRFs ([[C++]])
* [http://flexcrfs.sourceforge.net/ FlexCRFs] First-order and second-order Markov CRFs ([[C++]])
* [http://hackage.haskell.org/package/crf-chain1 crf-chain1] First-order, linear-chain CRFs ([[하스켈]])
* [https://web.archive.org/web/20150426025839/http://www.chetanbhole.com/code/crf/ imageCRF] CRF for segmenting images and image volumes ([[C++]])
* [http://mallet.cs.umass.edu/ MALLET] Linear-chain for sequence tagging ([[자바 (프로그래밍 언어)|자바]])
* [https://pystruct.github.io/ PyStruct] Structured Learning in Python ([[파이썬]])

아래는 조건부 무작위장과 관련된 도구로 알려진 목록이다.
* [https://web.archive.org/web/20100112222803/http://www.broadinstitute.org/annotation/conrad/ Conrad] CRF based gene predictor ([[자바 (프로그래밍 언어)|자바]])
* [http://nlp.stanford.edu/software/CRF-NER.shtml Stanford NER] Named Entity Recognizer ([[자바 (프로그래밍 언어)|자바]])
* [https://web.archive.org/web/20100707042144/http://cbioc.eas.asu.edu/banner/ BANNER] Named Entity Recognizer ([[자바 (프로그래밍 언어)|자바]])

== 같이 보기 ==
* [[인공지능]]
* [[기계학습]]
* [[그래프 모형]]
* [[무작위장]]
* [[마르코프 네트워크]]
* [[은닉 마르코프 모델]]

== 각주 ==
{{각주|40em}}

== 외부 링크 ==
* [https://class.coursera.org/pgm-003/lecture/33 조건부 무작위장에 대한 강의: Conditional Random Fields- Probabilistic Graphical Models by D. Koller] {{웨이백|url=https://class.coursera.org/pgm-003/lecture/33 |date=20150908025546 }}
* [http://www.inference.phy.cam.ac.uk/hmw26/crf 조건부 무작위장에 대한 소개, 연구: Conditional Random Fields Materials Written by Hanna M. Wallach]
* [http://blog.shurain.net/2013/04/crf.html 조건부 무작위장의 활용 방법: Conditional Random Field by Sungjoo Ha]

[[분류:그래프 모형]]
[[분류:기계 학습]]