전통문화대전망 - 전통 미덕 - 수학노트의 미학 자연어처리편(1).md
수학노트의 미학 자연어처리편(1).md
숫자, 문자, 자연어는 모두 정보의 전달체이며 모두 정보를 기록하고 전파하기 위해 생산됩니다.
하지만 수학은 오랫동안 언어학과는 거의 관련이 없는 것 같습니다. 수학은 천문학과 역학에서 주로 사용되었습니다.
이 장에서는 정보화 시대의 발전 과정을 검토하고 언어학과 수학이 어떻게 서서히 연결되는지 살펴보겠습니다.
태초에 인간은 정보를 전파하기 위해 소리를 사용했습니다.
여기서 정보의 생성, 전파, 수신 및 피드백은 원칙적으로 오늘날 가장 발전된 커뮤니케이션과 다르지 않습니다.
초기 인류는 전파하는 데 많은 정보가 필요하지 않았기 때문에 언어가 필요하지 않았습니다.
하지만 인간이 어느 정도 발전하면 언어가 필요해진다.
따라서 우리 조상들은 사물, 양, 행위 등 언어로 표현되는 것과 동일한 요소들을 추상화하여 오늘날의 어휘를 형성하였다.
인류가 발달하면서 뇌가 다 기억할 수 없을 정도로 언어와 어휘가 너무 많아졌다. 이때 정보를 기록하기 위해서는 일종의 텍스트가 필요하다.
텍스트를 활용하는 장점은 두 사람이 같은 시간, 장소에서 만나지 않고도 시간과 공간을 넘나들며 정보를 주고받을 수 있다는 점이다.
그렇다면 텍스트를 만드는 방법은 무엇입니까? 가장 직접적인 방법은 묘사하고자 하는 사물의 모양을 모방하는 것인데, 이를 상형문자라고 한다.
초기에는 상형문자의 수는 문명에 기록된 정보의 양과 관련이 있었습니다. 즉, 상형문자가 많을수록 그 문명이 많은 정보를 가지고 있다는 의미였습니다.
하지만 정보의 양이 늘어남에 따라 이렇게 많은 단어를 학습하고 기억할 수 있는 사람은 아무도 없기 때문에 이를 요약하고 분류하는 작업이 필요합니다. 즉, 하나의 단어를 사용하여 동일하고 유사한 의미를 표현하는 것입니다.
예를 들어 '日'은 원래 태양을 뜻하지만, 우리가 말하는 날이 될 수도 있습니다.
이 개념의 클러스터링은 현재의 자연어 처리나 기계 학습의 클러스터링과 매우 유사합니다. 하지만 고대에는 수천 년이 걸렸을지 모르지만 지금은 몇 시간 밖에 걸리지 않습니다.
그러나 단어가 의미에 따라 군집화되면 항상 모호성이 존재하게 됩니다. 즉, 특정 환경에서 다의어 단어가 어떤 의미를 나타내는지 명확하지 않습니다.
이 문제를 해결하기 위해 우리 모두는 상황에 의존합니다. 대부분의 명확화는 가능하지만 항상 그렇지 못할 때가 있습니다. 상황에 맞는 확률 모델이 아무리 훌륭하더라도 때로는 실패할 수 있습니다.
일반적으로 서로 다른 문명은 지리적인 이유로 인해 서로 다른 문자와 언어를 사용합니다. 두 문명이 합쳐지면 번역이 필요합니다.
번역이 가능한 이유: 다양한 문자 체계는 정보를 기록하는 능력 면에서 동일합니다. 텍스트는 정보 자체가 아니라 정보의 전달자일 뿐이며 숫자와 함께 전달될 수도 있습니다.
오늘날 우리는 이집트인들이 인생에서 가장 중요한 정보를 글을 통해 기록한 덕분에 마야 문명보다 이집트에 대해 더 많이 알고 있습니다.
글쓰기가 나타납니다. 마음 속에 더 이상 담아둘 정보가 없을 때, 그리고 그것을 이해하기 위해 소유물을 세어야 할 때 숫자가 나타날 때.
초기 숫자에는 문자 형식이 없었고 손가락으로만 세었기 때문에 십진법을 사용합니다.
점차적으로 우리 조상들은 열 개의 손가락으로는 충분하지 않다는 것을 알게 되었습니다. 가장 간단한 방법은 발가락 수를 세는 것이었지만 이것만으로는 근본적인 문제를 해결할 수 없었습니다. 그래서 그들은 10을 1에 더하는 것을 의미하는 십진법을 발명했습니다.
그렇다면 기존 문명은 왜 16진법 대신 10진법을 주로 사용하는 걸까요?
십진법은 십진법에 비해 불편한 점이 많습니다. 예를 들어 십진법은 구구단만 외우면 되는데, 십진법이라면 19*19 바둑판만 외우면 됩니다. .
숫자를 다른 자릿수로 표현하기 위해 중국과 로마인 모두 명확한 단위를 사용하여 서로 다른 크기를 표현했습니다.
중국인은 수십만 조를 사용하고, 로마인은 I를 사용하여 1을 나타내고 V를 사용하여 5를 나타냅니다.
이 두 표현 모두 무의식적으로 순진한 인코딩 개념을 도입합니다.
고대 인도인들은 숫자를 기술하는 데 가장 효과적이었습니다. 그들은 중국이나 로마보다 더 추상적인 10개의 아라비아 숫자를 발명했습니다. 이는 숫자와 단어의 분리를 의미하기도 했습니다. 객관적으로 말하면 자연어와 수학은 수천 년 동안 그 궤도를 반복하지 않았습니다.
상형문자에서 병음으로의 전환은 비약적인 일입니다. 왜냐하면 인간은 외관부터 추상적 개념에 이르기까지 물체를 설명하는 방식으로 무의식적으로 정보를 인코딩하기 때문입니다.
뿐만 아니라 로마자 표기법에서는 일반 문자는 획이 더 짧고, 일반 문자는 획이 더 깁니다. 일반 문자는 획이 적고, 일반 문자는 획이 많습니다. 정보 이론의 최단 용어에 부합합니다.
로마어 체계:
종이가 발명되기 전에는 글쓰기가 쉽지 않았습니다. 그러므로 먹을 금처럼 소중히 여겨야 하므로 고대 한문 등의 문자는 매우 간결하지만 이해하기가 매우 어렵습니다. 하지만 구어는 지금과 크게 다르지 않습니다. 이는 현행 정보과학의 몇 가지 원칙과 유사하다.
이는 현재 인터넷과 모바일 인터넷의 웹 디자인이 완전히 일치한다는 것이다.
광대역을 사용하는 경우에는 페이지를 더 크게 디자인해야 하지만 모바일 단말기의 공중 채널 대역폭 제한으로 인해 전송 속도가 느리고 해상도가 낮습니다.
성경은 창세 이후부터 유대인 조상들의 이야기를 기록하고 있으며 여러 사람에 의해 완성되었습니다.
복사 오류를 피하기 위해 유대인들은 체크 숫자와 유사한 방법을 고안했습니다. 그들은 히브리어 문자를 숫자에 대응시켰고, 각 줄을 합하면 이 숫자가 체크 숫자가 되었습니다.
페이지를 복사한 후 각 줄의 텍스트를 합산하여 확인 코드가 원본 텍스트와 동일한지 확인해야 합니다.
문자에서 단어로의 단어 형성 방식은 단어의 부호화 규칙이고, 문법은 언어의 부호화 및 해독 규칙입니다.
이에 비해 단어는 유한하고 닫힌 집합인 반면, 언어는 무한하고 열린 집합입니다. 수학적으로 말하면 전자는 완전한 인코딩 및 디코딩 규칙을 가지고 있지만 언어는 그렇지 않습니다. 즉, 언어에는 문법 규칙으로 다룰 수 없는 영역이 있습니다.
따라서 언어쌍인가요, 아니면 문법인가요? 어떤 사람들은 실제 말뭉치에서 시작해야 한다고 주장하는 반면, 다른 사람들은 규칙에서 시작해야 한다고 주장합니다.
이 장에서는 단어, 숫자, 언어의 역사를 이야기하며 독자가 언어와 수학의 본질적인 연관성을 느낄 수 있도록 돕습니다. 다음과 같은 개념이 언급되었습니다.
이전 장에서 언어의 목적은 인간의 의사소통을 위한 것이며 문자, 단어, 숫자는 실제로 정보 인코딩의 서로 다른 단위라고 언급했습니다.
모든 언어는 코딩 방법이며 언어의 문법 규칙은 인코딩 및 디코딩 알고리즘입니다. 예를 들어 우리가 표현하고 싶은 것을 언어로 정리하는데, 그것이 바로 인코딩이다. 상대방이 언어를 이해할 수 있다면 이 언어의 디코딩 방식을 이용해 디코딩할 수 있다.
그렇다면 기계가 자연어를 이해할 수 있을까요? 물론 그럴 수도 있죠
자연어 처리의 발전 과정은 두 단계로 나눌 수 있습니다.
1950년대 학계의 인공지능과 자연어 이해에 대한 이해는 다음과 같았습니다. : 기계가 완전해지도록 합니다. 음성 인식을 위해서는 컴퓨터가 자연어를 이해해야 합니다. 그게 인간이 하는 일이니까요. 이 방법론을 '새 비행 학교'라고 하는데, 새가 나는 모습을 보고 비행기를 만드는 것입니다. 사실 사람들은 생체 공학이 아닌 공기 역학을 기반으로 비행기를 발명했습니다.
그렇다면 자연어를 어떻게 이해할 수 있을까요?
일반적으로 필수 사항:
간단한 문장으로 보면 됩니다.
이 문장은 주어, 술어, 마침표 세 부분으로 나눌 수 있습니다. 더 자세히 분석하면 다음과 같은 구문 트리(Parse Tree)가 얻어집니다.
이를 분석하는 데 사용되는 문법 규칙을 다시 작성 규칙이라고 합니다.
그러나 이 방법은 금방 문제에 부딪혔습니다. . 위 그림에서 볼 수 있듯이 실제로 짧은 문장으로 이렇게 복잡한 2차원 트리 구조를 분석할 수 있는데, 실제 문장을 처리하는 것은 매우 번거로운 작업입니다.
두 가지 주요 장애물이 있습니다.
실제로 문법 관점에서 문장을 분석하는 것은 신뢰할 수 없습니다.
위에서 언급했듯이 규칙 기반 구문 분석은 의미 처리에 더 까다롭습니다. 왜냐하면 자연어 단어의 모호함은 규칙으로 설명하기 어렵지만 문맥에 따라 달라지기 때문입니다.
예를 들어 "상자는 펜 안에 있습니다." 여기서 펜은 울타리를 의미하기 때문입니다. 중국어로 번역된 전체 문장은 "The box is in the Fence"입니다. 펜이 펜인지 울타리인지는 맥락을 통해 해결할 수 없습니다.
1970년 이후 통계 언어학은 자연어 처리에 새로운 활력을 불어넣었습니다. 주요 작업은 Giallini와 그의 주도로 이루어졌습니다. 동료 IBM Watson 연구소.
처음에는 통계적 방법을 사용하여 음성 인식률을 70%에서 90%로 높였으며, 동시에 음성 인식 규모도 수백 단어에서 수만 단어로 증가했습니다.
통계에 기초한 자연어 처리방법, 수학적 모델, 의사소통은 서로 연결되어 있다. 따라서 수학적 의미에서 자연어 처리는 언어의 본래 의도인 의사소통과 연결된다.
이전 장에서 우리는 자연어가 생성된 이후 정보를 표현하고 전달하는 상황에 맞는 방식으로 점차 진화했다는 점을 항상 강조했습니다.
따라서 기계가 자연어를 처리하기 위해서는 자연어의 맥락 관련 특성에 대한 수학적 모델을 구축하는 것이 핵심이다. 이것이 통계적 언어 모델(Statistical Language Model)이다. p>
이 모델은 기계 번역, 음성 인식, 활자 인식, 철자 교정, 한자 입력, 문헌 질의 등에 널리 사용됩니다.
음성 인식에서 해결해야 할 중요한 문제는 컴퓨터가 제공하는 텍스트 시퀀스는 인간이 이해할 수 있습니다. 1970년대 이전에는 사람들이 이 문제를 해결하기 위해 의미 분석을 사용했습니다.
Jarik은 이 문제를 다른 각도에서 바라보았고 간단한 통계 모델로 문제를 해결했습니다.
즉, 문장이 합리적인지 확인하려면 그 가능성을 살펴보세요.
예를 들어 매끄러운 문장이 나타날 확률은 $10{-20}$이고, 왜곡된 문장이 나타날 확률은 $10{-70}$이므로 매끄러운 문장이 나타날 확률이 더 높습니다.
$S$가 특정 순서로 단어 ${\omega _1},{\omega _2}, \cdots ,{\omega _n}$의 문자열로 구성된 의미 있는 문장을 나타낸다고 가정합니다. $n$은 문장의 길이입니다. 이제 우리는 이 문장의 확률을 알아야 합니다
$$P\left( S \right) = P\left( {{w_1},{w_2}, \cdots ,{w_n}} \right )$ $
조건부 확률 공식을 사용하면 이 시퀀스 $S$의 발생 확률은 각 단어의 발생 확률을 곱한 것과 같습니다.
$$P\left ( {{w_1},{w_2 }, \cdots ,{w_n}} \right) = P\left( {{w_1}} \right)P\left( {{w_2}|{w_1}} \right) \ cdots P\left( {{w_n }|{w_1},{w_2}, \cdots ,{w_{n - 1}}} \right)$$
이를 계산하는 방법에 대한 질문이 생깁니다. 조건부 확률?
20세기 초 러시아 수학자 마르코프는 이런 상황에 직면했을 때 어떤 단어가 나올 확률은 이전 단어와 똑같을 뿐이라는 효과적인 방법을 제시했다. $w_{i-1}$는 관련이 있으며 다른 단어와 아무 관련이 없습니다. 이것을 마르코프 가설이라고 합니다.
따라서 공식은 다음과 같습니다.
$$P\left( { { w_1},{w_2}, \cdots ,{w_n}} \right) = P\left( {{w_1}} \right)P\left( {{w_2}|{w_1}} \right) \cdots P \ left( {{w_n}|{w_{n - 1}}} \right)$$
이를 이진 모델(Bigram Model)이라고 합니다
가정하면 첫 번째 $N-1$ 단어로 구성되어 있는지 확인하고 해당 모델을 $N
$element 모델이라고 부르는데 이는 더욱 복잡해집니다.
마찬가지로 조건부 확률 $P\left( {{w_i}|{w_{i - 1}}} \right)$를 추정하는 방법은 먼저 해당 정의를 살펴볼 수 있습니다
$$P\left( {{w_i}|{w_{i - 1}}} \right) = \frac{{P\left( {{w_{i - 1}},{w_i}} \ right) }}{{P\left( {{w_{i - 1}}} \right)}}$$
해야 할 일은 추정이다
그럼 어쩌지 두 가지 확률이 있습니까?
큰 자료를 얻은 후 ${{w_{i - 1}},{w_i}}$가 통계 텍스트 ${ # \left(에서 서로 인접하여 나타나는 횟수를 세어보세요. {{w_{i - 1}},{w_i}} \right)}$. 그런 다음 빈도를 사용하여 확률을 추정할 수 있도록 말뭉치의 크기로 나눕니다.
대수의 정리에 따르면 통계가 충분하다면 상대 빈도는 확률과 같습니다.
$$P\left( {{w_i}|{w_{i - 1}}} \right) = \frac{{# \left( {{w_{i - 1}},{ w_i}} \right)}}{{# \left( {{w_{i - 1}}} \right)}}$$
이렇게 복잡한 모델이 복잡한 음성을 해결할 수 있다는 사실이 놀랍습니다. 문제 인식 및 기계 번역 문제.
이진 모델의 가장 큰 특징은 각 단어가 이전 단어와만 관련되어 있다는 점이며, 이는 너무 단순화되어 특정 단어가 여러 이전 단어와 관련되는 경우가 더 많습니다.
따라서 $N$ 요소 모델은 현재 단어 $w_i$가 첫 번째 $N-1$ 단어에만 의존한다는 것을 의미합니다. 이것이 N-1 순서 마르코프 가설입니다.
실제로는 삼항 모델이 더 자주 사용되므로 $N=3$이고, 고차 모델은 덜 사용됩니다. 왜냐하면
언어 모델을 사용하려면 모델의 모든 조건부 확률을 알아야 하기 때문입니다. 모델의 매개변수라고 부릅니다.
코퍼스의 통계를 통해 이러한 매개변수를 얻는 과정을 모델 학습이라고 합니다.
앞서 말했듯이 인접한 두 문자가 동시에 나타나는 횟수와 ${w_{i - 1}}$가 단독으로 나타나는 횟수만 세어 계산하면 됩니다. 비율.
하지만 고려하지 못한 상황이 있는데, 인접한 두 단어가 동시에 나오지 않는 경우는 $# \left( {{w_{i - 1}},{w_i} } \right ) = 0$, 확률이 0이라는 뜻인가요?
물론 그렇지 않습니다. 여기에는 통계적 신뢰성이 포함됩니다.
수학적 통계에서 확률을 예측하기 위해 감히 데이터를 사용하는 이유는 충분한 관찰값이 필요한 대수의 정리 때문입니다. 즉, 표본이 너무 작으면 확률을 예측하기 위해 횟수를 사용하는 것은 확실히 신뢰할 수 없습니다.
그렇다면 언어 모델을 올바르게 훈련하는 방법은 무엇입니까?
사전에 나오는 각 단어의 확률을 세어보며 자세히 이야기해 볼까요?
말뭉치에 $r$ 번 나타나는 $N_r$ 단어가 있고 $N$은 말뭉치의 크기를 나타낸다고 가정합니다.
$$N = \sum\limits_{r = 1}^\infty {r{N_r}} $$
즉, 나타나는 $r$ 단어는 각 단어에서 단어 수에 해당 단어가 나타나는 횟수를 곱한 값입니다.
$r$가 상대적으로 작으면 발생 횟수가 충분하지 않다는 의미이므로 $d_r$과 같이 확률을 계산할 때 더 적은 횟수를 사용해야 합니다.
$ ${d_r} = \left( {r + 1} \right)\frac{{{N_{r + 1}}}}{{{N_r}}}$$
그리고
$$\sum\limits_r {{d_r}{N_r}} = N$$
일반적으로 한 번 나타나는 단어의 개수는 한 번 나타나는 단어의 개수보다 많습니다. 두 번 이상 나타납니다.
즉, $r$의 발생 횟수가 많을수록 $N_r$의 단어 수가 적어지므로 ${N_{r + 1}} < {N_r}$이라고 볼 수 있습니다. ${d_r} < r$인 경우, 이 추정치는 $d_r$이 $r$보다 작은 숫자이고, 0회만 나타날 경우 ${d_0}>0$
이와 같이
바이너리 모델의 경우
그 중
이 스무딩 방법은 IBM의 Katz가 처음 제안했기 때문에 Katz의 백오프 방법이라고 합니다.
또 다른 방법으로는 차분법을 삭제하는 방법이 있는데, 이는 선형 보간을 위해 저차 모델과 고차 모델을 사용하여 프로세스를 원활하게 하는 것인데, 그 효과가 Katz 백오프보다 나쁘기 때문입니다. , 거의 사용되지 않습니다.
모델 훈련에서 또 다른 중요한 문제는 훈련 데이터, 즉 코퍼스를 선택하는 것입니다. 훈련 기대치가 모델 적용 분야와 맞지 않으면 모델의 효과가 크게 감소합니다.
예를 들어, 언어 모델을 구축하려면 애플리케이션이 웹 검색인 경우 훈련 데이터는 기존의 표준화된 보도 자료가 아닌 지저분한 웹 페이지 데이터와 사용자가 입력한 검색 문자열이어야 합니다. 이전에는 소음과 오류가 섞여 있습니다. 훈련 데이터가 애플리케이션과 일치하기 때문에 실제로 검색 품질이 더 좋습니다.
훈련 데이터가 많을수록 좋습니다. 불행히도, 모든 애플리케이션이 기계 번역의 이중 언어 말뭉치와 같이 충분한 훈련 데이터를 가질 수는 없습니다. 이번에는 고급형 대형 모델을 추구하는 것이 의미가 없습니다.
훈련 데이터가 애플리케이션 데이터와 일치하고 훈련 볼륨이 충분히 큰 경우 훈련 중 예상되는 노이즈 수준도 모델에 영향을 미칩니다. 따라서 훈련 전 전처리가 필요하며, 탭 문자 등 정기적으로 발견되고 노이즈가 많은 노이즈를 처리해야 합니다.
서양병음의 경우 단어 사이에 명확한 구분 기호(구분 기호)가 있습니다. ). 그러나 중국어의 경우 단어 사이에 명확한 구분 기호가 없습니다. 그러므로 먼저 문장을 분할해야 합니다.
가장 쉽게 생각하는 방법은 사전을 찾아보는 것입니다. 즉, 단어를 만나면 왼쪽에서 오른쪽으로 스캔하여 사전에 표시하는 것입니다.
하지만 복잡한 문제가 발생하면 이 방법이 작동하지 않습니다. 예를 들어, 모호한 분할이 발생하는 경우입니다. "개발도상국"과 마찬가지로 올바른 분할은 "개발도상국-중국-국가"이며 사전을 왼쪽에서 오른쪽으로 검색하면 "개발도상국-중국-본국"으로 분할됩니다.
마찬가지로 다음을 사용할 수 있습니다. 통계적 언어 모델 단어 분할 모호성 문제를 해결합니다.
$S$ 문장에 여러 단어 분할 방법이 있다고 가정합니다.
$$\begin{array}{l}
{A_1},{A_2 } ,{A_3}, \cdots ,{A_k}\
{B_1},{B_2},{B_3}, \cdots ,{B_m}\
{C_1}, { C_2},{C_3}, \cdots ,{C_n}
\end{array}$$
가장 좋은 단어 분할 방법은 이 문장이 나타날 확률을 결정하는 것입니다. 최대 단어를 분할한 후.
물론 단어 분할 방법을 모두 동원해 각각의 가능성에 따른 문장의 확률을 계산해 보면 계산량이 꽤 많을 것이다.
동적 프로그래밍(Dynamic 프로그래밍) 문제로 볼 수 있는데, 최적의 단어 분할을 빠르게 찾기 위해 비터비(Viterbi) 알고리즘을 사용합니다
언어학자들의 단어 정의는 불완전합니다. 예를 들어 "Peking University"는 한 단어라고 생각하는 사람도 있고 두 단어라고 생각하는 사람도 있습니다. 절충 방법은 먼저 4자 단어로 처리한 후, 추가로 'Beijing'과 'University'라는 세분 단어를 찾는 것입니다.
인위적인 단어 분할이 불일치하는 주된 이유는 사람들의 이해에 있습니다. 단어 질문의 세분성.
예를 들어 어떤 사람들은 '칭화대학교'가 전체라고 생각하는 반면, 다른 사람들은 '칭화대'가 '대학'을 수식한다고 생각합니다. 누구의 관점이 올바른지 강조할 필요는 없지만 다양한 애플리케이션에서는 한 종류의 세분성이 다른 것보다 낫다는 점을 알아야 합니다.
예를 들어 기계 번역에서는 세분성이 클수록 번역 효과가 더 좋습니다. 예를 들어 "Lenovo Company"를 두 부분으로 분할하면 "Lenovo"로 번역하기가 어렵습니다. 그러나 웹 검색에서는 큰 세분화보다 작은 세분화가 더 좋습니다. 예를 들어 "Tsinghua University" 대신 "Tsinghua"를 검색하는 사용자는 여전히 Tsinghua University의 홈페이지를 찾을 수 있습니다.
다양한 애플리케이션에 대해 서로 다른 토크나이저를 구축하는 것은 너무 낭비입니다. 단어 분할기를 사용하면 동시에 다양한 수준의 단어 분할을 지원할 수 있습니다.
즉, 먼저 기본 단어에 따라 문장을 구분한 다음, 복합어 모델에 따라 기본 단어 문자열을 구분합니다.