커널연구회 영한번역학습 프로그램(TransWorks) 특허출원 및 프로그램 배포
안녕하세요?
커널연구회를 운영하고 있는 정재준 이라합니다.
제가 몇개월 전 KLDP에 "영어사전에서 영어단어 검색속도"와
"영한번역 학습프로그램 TransWorks 개발"에 관한 글들을 올렸었는데,
이제야 프로그램을 배포하게 되었습니다.
프로그램은 누구나 자유롭게 무료로 사용할 수 있으며, 아래 링크에서 다운로드 하시면 됩니다.
http://www.kernel.bz/tw/tw0104.htm
그동안 특허출원 준비 관계로 한달 정도 프로그램 배포가 늦었습니다.
TransWorks는 특허청에 특허출원도 되었고, 아래 링크에 관련내용을 공개했습니다.
http://www.kernel.bz/tw/tw0103.htm
특허출원 내용(명세서)에 대해서 간단히 요약하면,
【명세서】
【발명의 명칭】
맞춤형 문장 자동 번역 시스템 및 이를 위한 데이터베이스 구축방법
(The System For The Customized Automatic Sentence Translation
And Database Construction Method)
【기술분야】
본 발명은 컴퓨터를 사용하여 서로 다른 언어를 번역하는 자동 번역 시스템과
이를 위한 데이터베이스 구축에 관한 것으로, 서로 다른 언어의 원문과 번역 문장을
입력받아 이를 색인화하여 사전 등록하고, 사용자의 번역 요청 시 등록된 번역
문장을 신속하게 검색하여 제공하는 것이다.
【배경기술】
대부분의 상업적인 기계번역 시스템은 기술적으로 변환방식 기계번역 시스템에 해당한다.
이러한 방식에 따르면 기계번역은 구문분석, 변환, 생성의 세단계로 구성된 번역
프로그램을 일반적으로 적용하고 있다.
그런데 원문의 문장 분석에 대한 정확도에 따라 변환한 번역 문장의 품질이
결정되었기 때문에, 두 개이상의 절이 포함된 장문의 번역 문장에 대한 번역 품질은
높지 않고 단문이라 하여도 적절하지 않은 의미로 번역되어 사용자의 불만 사항을
발생시키는 요인이 되고 있다.
또한 번역 품질을 제고하기 위해 많은 단어와 숙어 등 대용량의 사전을 탑재
하기도 하나 이러한 대용량 사전을 검색하는 시간이 늘어남에 따라 최종적으로
사용자에게 번역 문장을 제공하기까지 응답성이 저하되는 문제가 있다.
따라서 서로 다른 언어의 문장을 번역함에 있어 번역 품질에 대한 사용자의
만족도를 높임과 동시에 번역 요청한 사용자가 빠른 시간에 번역 문장을 제공받을
수 있도록 번역에 걸리는 처리 시간을 줄이는 기술이 요구되고 있는 실정이다.
【해결하려는 과제】
상기와 같은 문제를 해결하기 위하여, 본 발명의 일측면은 원문과 번역 문장을
색인화하여 사전 등록한 데이터베이스를 이용하여 사용자에게 번역 문장을 신속하게
제공하는 것이다.
본 발명의 다른 측면은 요청 받은 번역 문장을 신속하게 검색하기 위하여 서로
다른 언어의 색인쌍을 포함한 색인 트리를 이용하여 데이터베이스를 구축하는 것이다.
본 발명의 다른 측면은 사전 등록한 번역 문장을 제공함으로서 기계 번역에서
발생할 수 있는 번역 품질에 대한 사용자 불만을 줄임으로서 고품질의 번역
서비스를 제공하는 것이다.
중간생략...
【요약】
본 발명은 서로 다른 언어의 원문과 번역 문장을 입력받아 이를 색인화하여
사전 등록하고, 사용자의 번역 요청 시 등록된 번역 문장을 신속하게 검색하여 제공한다.
본 발명은 서로 다른 언어의 문장을 대응시킨 색인쌍을 이용하여 번역 시간의
단축을 통해 만족도를 높일 수 있고, 사전 등록한 번역 문장을 제공하여 고품질의
번역 서비스를 제공할 수 있으며, 등록된 원문과 번역 문장에 대한 확장과 삭제가
용이하여 사용자의 취향을 반영함은 물론 시대 흐름과 유행어 및 전문 분야 특성을
반영한 번역 문장을 제공할 수 있다.
좀더 자세한 내용(기술적인 내용 포함)은 아래 링크에서 확인할 수 있습니다.
http://www.kernel.bz/tw/tw0103.htm
앞으로 많은 관심과 성원 바랍니다.
즐거운 하루 되세요~
구글 번역기가 정확하지 않은 이유...
혹시 저의 TransWorks 프로그램을 설치해서 사용해 보신 분이 있으신지요?
아직 피드백이 없어서 제가 몇가지 내용을 덧붙여 봅니다.
구글 번역기에서 아래 영문을 번역해 보세요.
영문1과 영문2는 동일한 문장입니다.
(단지, 영문1에 문장의 끝을 의미하는 마침표가 있다는 것이 다를뿐)
그런데, 구글 번역기에서 번역한 결과는 엄청나게 달라집니다.
심지어 완전히 틀리게 번역합니다. 왜 그럴까요?
아마도 구글 번역기는 문장을 통계적인 패턴으로 분석하기 때문인듯합니다.
이렇게 번역하는 것을 Statistical Machine Translation 이라 합니다.
이러한 번역방식의 단점은 통계 패턴을 벗어나는 문장의 번역이 정확하지 않다는 것입니다.
반면에 제가 TransWorks에서 구현한 번역은 아주 빠른 검색 알고리즘을 사용합니다.
"He was only 35 years old when he died." 라는 문장과
이것을 번역한 "그는 불가 35세의 나이로 사망했습니다."라는 문장을 색인화하여 저장하고
이것을 빠르게 검색하여 번역합니다.
이러한 방식에도 단점이 있습니다.
이미 눈치 채고 계시겠지만, 문장을 사용자가 미리 번역하여 저장해 두어야 한다는 것입니다.
그래서 저는 TransWorks에 사용한 알고리즘을 사용자 번역 학습 및 교육,
번역능력 성장형 솔루션으로 계속 발전시킬 생각입니다.
저의 알고리즘은 다양한 시스템(임베디드, 스마트폰, PC..)에 이식할 수 있습니다.
관심있는 분은 저에게 연락 주시면 알고리즘을 지원해 드립니다.
앞으로 많은 성원 바랍니다.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
어제 낮에 잠깐 테스트 해봤는데요.
i like a girl 이거 빼곤 제대로 번역을 잘 하는 듯 해요.
senetence단위로 exactly matched된
senetence단위로 exactly matched된 결과를 빠르게 검색해서,
결과를 보여주는 것은, 아무런 의미도 없습니다.
본인은 빠르다라고 생각할지모르겠지만, 그걸 빠르게 만드는거는,
너무너무 쉬운일이고, data의 크기나 종류에 따라 다양한 방법이 얼마든지 있습니다.
이런걸로 새로운 특허를 내겠다는 것도 어림없는 일입니다.
번역기술의 핵심은 DB에 없는, 하지만 기존에 있는 것과 유사한 문장을
얼마나 세련되게 번역하느냐 입니다.
구글번역이 우습게 보이는건 구글이 data에 specific한 별도의
customizing을 하지 않아서 그렇지, 기술력이 없어서 그런게 아닙니다.
그럼에도 불구하고 현재 수준의 번역을 보여주는 것은,
전세계의 관련분야 전문가에게 이런 방식의 알고리즘이 현재수준에서 도달할수있는 최고의 상태
state-of-the-art 를 짐작가능하게하는 중요한 역할을 하고 있습니다.
본인의 기술력이 해당분야에서 얼마쯤 되는지 객관적으로 파악하는 것도 능력입니다.
이 글이 단순한 비난으로 받아들여지지 않았으면 좋겠습니다.
저의 보충적인 댓글에서 문장을 빠르게 검색하여
저의 보충적인 댓글에서 문장을 빠르게 검색하여 번역합니다. 라는 설명 때문에,
아래와 같이 지적해 주신듯 합니다.
"senetence단위로 exactly matched된 결과를 빠르게 검색해서,
결과를 보여주는 것은, 아무런 의미도 없습니다."
제가 특허출원한 문서를 일부 공개한 글(아래 링크)을 자세히 보시면
문장단위로 검색하지 않는 다는 것을 아실 수 있습니다.
http://www.kernel.bz/tw/tw0103.htm
즉, 문장을 이루는 단어를 하나씩 분리하여 번역맞춤형 인덱스에 등록하고
인덱스 조합을 빠르게 검색하는 알고리즘을 사용합니다.
여기에 특허출원한 배경기술이 있는 것이구요.
또한 대용량의 인덱스를 처리하기 위해 해싱기법을 사용하는데,
이것이 또한 TransWorks만의 구현기법입니다.
구글번역은 통계패턴 분석방식을 사용하는데,
통계의 정규분포를 벗어나는 것은 올바르게 번역하지 못합니다.
(번역의 오류로 인해 사용자들에게 오히려 혼란을 초래하죠)
그래서, 차라리 사람이 자연어를 학습하여 두뇌에 저장한후
이것을 빠르게 검색하는 기법을 활용하는것에 대한 착안이 저의 TransWorks 번역방식입니다.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
두뇌연구를 하셨나요?
마지막 문장의 근거가 궁금해서... 컴퓨팅을 하다보면 두뇌작동방식이 항상 궁금합니다. 좋은 자료 알려주시면 감사하겠습니다.
제가 대학병원 전산실에서 오래 근무하다보니 컴퓨터
제가 대학병원 전산실에서 오래 근무하다보니
컴퓨터 연산장치와 메모리를 사람의 두뇌와 자주 연관시킵니다.
제가 운영하고 있는 커널연구회(www.kernel.bz)의 CI 로고도
컴퓨터와 사람의 세포를 서로 연관시켜서 제가 직접 그린 것입니다.
KLDP에 계신분들 모두들 잘 알고 계시겠지만,
컴퓨터는 트랜지스터(TTL)가 발명된후 TTL을 논리적으로 조합시키는 기술의 산물입니다.
TTL은 논리적으로 2진수 0과1를 이해하고 우리가 프로그래밍한 것들도 컴파일 및 어셈블되어 0과1로 표현됩니다.
사람도 시작은 0과1과 같은 단세포의 만남에서부터 시작합니다.
이것이 세포분화하며 진화하는 것입니다.
저는 컴퓨터의 TTL 논리회로와 사람의 두노세포가 매우 유사하다고 생각합니다.
문제는 아직 컴퓨터가 사람의 두뇌처럼 창조적인 생각을 못한다는 것인데요,
하지만, 컴퓨터의 자료구조와 알고리즘을 끊임없이 연구하다 보면
사람의 두뇌와 같은 모습으로 닮아가지 않을까 기대하고 있습니다.
20~30년후면 컴퓨터 하드웨어는 사람의 두뇌세포 용량만큼 발전하리라 봅니다.
기술적으로 별로 어렵지 않습니다. TTL 논리회로를 계속 연결시키면 되고,
최근에는 인텔에서 3차원적으로 TTL회로를 구현했다는 소식도 접했습니다.
문제는 자료구조와 알고리즘이고 저는 여기에 큰 의미를 두고 공부하고 있습니다.
PS.요즘 클라우딩 컴퓨팅이 많이 화자되는데,
전세계 PC에 있는 메모리를 네트워크로 묶으면 사람의 두뇌세포 용량만큼 되지 않을까요?
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
비교를 할때 문장을 비교 하느냐, 단어를 비교하느냐,
비교를 할때 문장을 비교 하느냐, 단어를 비교하느냐, 인덱스를 비교하느냐는
전혀 중요한 문제가 아닙니다. 그건 그냥 구현의 문제죠.
I love you 를 123으로 바꾸고,
He loves you 를 42'3으로 바꿔서, 비교를 하더라도
123과 42'3이 각각 별개로 DB에 들어있다면,
문장 단위의 exact matching 이라고 보는겁니다.
문장 단위의 exact matching 이라기
문장 단위의 exact matching 이라기 보다
인덱스 단위의 matching이라고 봐 주셨으면 합니다.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
이름을 어떻게 부르건 간에, 중요한 것은 그런
이름을 어떻게 부르건 간에,
중요한 것은 그런 방법론이 별 의미가 없다는 것을 지적하고 싶은것입니다.
참 안타깝네요. 열심히 하시는 건 보기 좋고
참 안타깝네요. 열심히 하시는 건 보기 좋고 응원해드리고 싶은데..
index를 어떻게 만들던, 결국 원문과 번역문을 1:1 대응하는 방식이지요. 사람의 언어로 조합가능한 문장의 경우의 수는 사실상 무한대인만큼, 이런 방식은 극도로 제한된 유용성 밖에 가질 수가 없습니다.
위에 분도 말씀하셨듯, 어떤 기술이 해당 분야에서 어느 정도 위상을 갖는 것인지 객관적으로 파악하는 건 아주 중요합니다. 먼저 이론적 기반을 다지시길 권해드립니다..
인덱스를 만들어 검색하는 기술을 너무 가볍게 생각하지
인덱스를 만들어 검색하는 기술을 너무 가볍게 생각하지 말아 주십시요.
컴퓨터에 저장된 데이터를 matching 해서 꺼내어 사용하다는 의미를 너무 쉽게 생각하지 마세요.
"비교를 할때 문장을 비교 하느냐, 단어를 비교하느냐, 인덱스를 비교하느냐는
전혀 중요한 문제가 아닙니다." 라는 생각으로 방법론에 별 의미를 부여하지 않으시면서
이론적 기반을 다지라고 권하시면 않됩니다.
컴퓨터 관련하여 전공하신 분은 아시겠지만,
(전공하지 않으셔도 교양과목으로 컴퓨터구조와 원리를 수강하신분도 아실겁니다)
폰노이만(1903~1957, 수학/컴퓨터과학자)이 "전자계산기의 이론 설계 서론" 논문에
프로그램 내장 방식 컴퓨터의 아이디어를 처음으로 제시하면서 컴퓨터 구조가 확립됩니다.
그래서 현재의 컴퓨터를 폰노이만형 컴퓨터 라고도 합니다.
프로그램은 명령코드와 데이터가 같이 있고 이것을 메모리에 적재(내장)하여 실행하는 것입니다.
알고리즘은 명령코드를 실행하고자 하는 계산절차이고
자료구조는 데이터를 메모리에 적재시키는 방식입니다.
현대의 모든 프로그램(게임,웹,앱,구글번역기,TansWorks...)은 폰노이만형 컴퓨터에
자료구조와 알고리즘을 구현한 것입니다.
이런 구조에서는 컴퓨터 메모리에 데이터를 어떻게 저장하여 꺼내어 사용하는가가 중요합니다.
구글번역기도 무수한 문장번역패턴을 통계적으로 분석한 데이터를 저장시켜두고
이것을 상호비교하여 꺼내어 사용합니다.
제가 구현한 영어번역학습 프로그램 TransWorks도 번역문장을 단어단위로 나누고
여기에 인덱스를 부여한 데이터를 저장한후 이것을 꺼내어 사용합니다.
사람도 경험적으로 학습한 데이터를 두뇌에 저장시킨후 이것을 효율적으로
아주 빠르게 꺼내어 사용합니다.
사람이 창조적인 생각을 한다고들 하는데, 저는 아니라고 봅니다.
창조적인 생각을 하는게 아니라, 두뇌의 기억용량이 엄청 크고 여기에
수많은 경험 데이터들이 효율적인 자료구조 방식으로 저장되어 있고
이것들을 상황에 맞게(논리적으로) 아주 빠르게 조합하여 꺼내어 쓸수 있는 알고리즘이 있어서
마치 창조적인 생각을 하는것처럼 보이는 것입니다.
제가 TransWorks에 C언어로 일일히 코딩하여 구현한 자료구조와 알고리즘을
결코 쉽게 생각하지 말아 주세요.
PS.한가지 덧붙이면, 구글번역에서 사용하는 통계패턴은 통계의 정규분포가 벗어나는 데이터를
올바르게 처리하지 못하므로 오역이 있을 수 있다는 것이고, 저의 TransWorks는
이러한 통계패턴을 사용하지 않고 인덱스를 통한 빠른 검색방식을 사용한다는 것이고,
이것을 구현하기 위해서 어떠한 자료구조와 알고리즘을 적용한 것인지에 대해서
생각해 주셨으면 합니다. 너무 맹목적으로 폄하 하지는 말아 주세요.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
> 인덱스를 만들어 검색하는 기술을 너무 가볍게
> 인덱스를 만들어 검색하는 기술을 너무 가볍게 생각하지 말아 주십시요.
> 컴퓨터에 저장된 데이터를 matching 해서 꺼내어 사용하다는 의미를 너무 쉽게 생각하지 마세요.
그게 너무 가벼운 기술이라는 것을 모르시는 것 같아서
최대한 정중하게 알려드리려고 답글을 쓴 것입니다.
이런 경우에 단어를 string으로 계속 가지고 다니면서 matching한다는 생각이 오히려 이상한 생각입니다.
누구나 실제 구현을 하려고 하면 당연히 단어 symbol의 index를 가지고 search 할 생각을 할 것입니다.
상식적인 수준이고, 실제로 그렇게들 많이 하고 있습니다.
그 아래부분은 일부는 너무 당연한 이야기를 어려운 이야기처럼 적어놓으셨거나,
검증되지 않은 본인의 생각을 사실처럼 적어놓으셨네요.
본인이 어렵게 구현했다고 해서, 그 기술이 난이도가 높은 기술이 되는것은 아닙니다.
그래서 관련 연구 동향을 파악해야하는거고, 본인의 위치에 대해서 객관적으로 알고 있어야하는 것입니다.
현 수준에서 구글과의 비교는 정말 어림없는 시도입니다.
아래 제시한 구글의 학술용 코퍼스에만 해도
천삼백만개의 uniq 단어가 있고, 95G개의 uniq한 문장이 있습니다.
이걸 다 DB에 넣고 그때그때 찾는게 과연 가능할까요?
그 전에 이걸 번역해서 1:1 matching되는 DB를 구축하는것부터가 불가능합니다.
검색기술은 가벼운 기술이고, 상식적인 수준이고,
검색기술은 가벼운 기술이고, 상식적인 수준이고, 실제로 그렇게들 많이 하고 있습니다.
구글에서 그렇게 하고 있고 오라클에서도 그렇게 하고 있습니다.
그러나, 이들 업체에서 제공해 주는 검색엔진과 오라클 DBMS, 혹은 기타 업체에서 제공하는
검색 라이브러리로는 제가 문장번역하기 위해 맞춤형으로 TransWorks에 구현한
자료구조와 알고리즘과 같은 효과를 내지 못합니다.
한번 구현해 보세요. 이게 얼마나 힘든지 아실겁니다.
이게 쉽다면, 우리나라에서도 구글, 오라클과 같은 세계적인 IT업체가 여러개 있었을 겁니다.
그리고 아래에 제시한 구글의 학술용 코퍼스를 저도 잠깐 확인해 봤는데,
전세계 웹페이지에 있는 문장들을 통계낸듯합니다.
저의 TransWorks에서는 문장들을 이렇게 통계내지 않습니다.
TransWorks에서 저장하는 것은 문장이 아니라 단어입니다.
영한사전에 등재되어 있는 단어수는 30만개 정도인데 이것이 데이터 파일로 저장되어 있습니다.
(TransWorks 배포 파일들에서 twd0.twd, twd1.twd가 이것입니다)
이 단어들을 숫자 조합한 인덱스는 지속적으로 늘어 납니다.
(TransWorks 배포 파일들에서 twd#.twi 파일들입니다)
번역한 문장들을 저장할때마다 숫자 조합의 인덱스가 저장되기 때문에
저장 공간은 지속적으로 필요하게 됩니다만, 검색속도는 결코 떨어지지 않습니다.
왜냐하면, 인덱스들을 또다시 해싱하여 인덱스 트리에 고르게 분산시키는
알고리즘으로 구현했기 때문입니다. 제가 특허 출원한 대표도1에 이 내용이 들어 있습니다.
그동안 한달내내 특허심사관에게 발표하고 설명했습니다.
같이 참관한 한국IBM의 엔지니어가 IBM의 DB2에서도 이렇게 구현하는 방법은 몰랐다고 하더군요.
제가 배포한 TransWorks 파일들에서 데이터 파일들을 한번 분석해 보세요.
분석해 보신후, 자료구조와 알고리즘 혹은 기술적인 문제들을 지적해 주시길...
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
제가
우둔한 탓인지 잘 이해가 안되는데요, 통계에서 벗어나는 특이점에 대한 번역을 중시하신다고 하면서 key-value pair 방식으로 나아가는건 뭔가 핀트가 안 맞는거 같은데요? 오히려 통계적으로 처리하는게 훨씬 진보된 알고리즘처럼 보이는데요... 인덱싱할거면 그 데이터를 차라리 구글 번역 데이터베이스에 추가시켜주면 방대한 양의 기존 데이터를 통해 훨씬 더 정확한 번역이 가능하겠죠.
잠깐 써봤는데 잘 모르겠네요.
우선 자료 loading 이 필요한데 program 보다는 service 방식이 좋을 것 같네요. Program 방식이 좋다고 보신다면 실행 image를 저장했다가 복원하는 형식을 취하는게 좋지 않을까 하네요.
몇가지 해봤는데 DB에 없어서 그런지 잘 안 되는군요. 그리고 유사문장, 단어가 없으면 DB를 전체 조회하는 것인지 대기시간이 조금 걸립니다.
부분검색은 prefix 검색만 가능한 것 같네요. 물론 이것은 일반적인 기술로 볼 때 당연할 수도 있지만 그렇기 때문에 매력적인 기술이 적용된 것은 아니다라는 생각이 듭니다.
일단 자료 loading을 하면 검색할 때 IO를 안하는군요. 올려주신 자료만으로 75MB의 memory를 사용하는데 대용량으로 발전해갈 때 효용성이 어떨지 궁금하네요.
자세한 사용후기에 감사드립니다.
역시 엔지니어적인 시각으로 맞게 사용해보신듯 합니다.
정말 감사합니다.
지적해 주신 내용들에 대해서도 많이 공감합니다.
번역문장입력이 많아질수록 용량이 늘어 나지만,
검색속도는 별로 떨어지지 않는다는 것을 자신있게 말씀드립니다.
최대용량은.. 문장이 단어 단위로 저장되기 때문에 단어사전(30만개) 정도의 용량이 될듯합니다.
문제는.. 번역을 위한 인덱스는 꾸준히 늘어날듯 합니다만,
숫자들의 조합이기 때문에 늘어나는 기울기가 매우 낮습니다.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
문장의 용량을 기울기가 낫다고 무시할 수는 없을텐데요.
문장을 표현하는데 압축된 index 조합을 쓴다고 해도 문장하나의 용량은 단어이상의 용량이 될겁니다. 그리고 그렇게 해서 만들어진 문장의 갯수는 최소 단어갯수만큼 나올겁니다. 문장이 사람이 표현하는 단위일텐데 문장을 이루는 단어와 문장의 갯수가 같다면 사람은 단어로 문장을 대체할 겁니다. 어디까지나 이건 최소치일뿐입입니다. 사람이 단어의 조합으로 문장을 만드는 것은 폭발적인 갯수의 조합표현을 얻기 위해서이니까요.
실용적 활용을 위한 문장갯수가 어느정도의 수준에서 나올지는 모르겠습니다만 현재의 기술만으로 Google 번역 이상의 효율을 얻기는 어려울 거라고 봅니다.
남에게 주기 위해서 앞으로도 많이 연구해주시기 바랍니다. 기대하고 있겠습니다.
기울기가 매우 낮은건 맞습니다만, 그래도 님이
기울기가 매우 낮은건 맞습니다만,
그래도 님이 상상하시는것보다는 훨씬 방대할겁니다..
구글에서 연구목적으로 아주 싸게 제공하는 코퍼스입니다.
http://www.ldc.upenn.edu/Catalog/CatalogEntry.jsp?catalogId=LDC2006T13
저 정도 규모의 데이터도 이미 아주 빠르게 처리되고 있습니다
공유해 주신 구글의 코퍼스는 고맙게 잘 확인했습니다.
전세계 웹페이지에 있는 문장들을 통계낸듯합니다.
통계적인 측면에서 충분히 가치가 있다고 생각합니다.
그러나, 저의 TransWorks에서는 문장들을 이렇게 통계내지 않습니다.
감사합니다.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
질문입니다.
단어 사전에 영어단어 word1, word2, word3, word4, word5와, 이에 각각 대응하는 한글 단어가 저장되어있습니다.
또한 번역 DB에는 "word1 word2 word3"에 해당하는 문장의 번역이 저장되어 있지만, "word1 word2 word4"에 해당하는 문장의 번역은 저장되어있지 않습니다.
이때 "word1 word2 word4"를 입력하면, 번역이 가능합니까?
번역하지 못합니다. "word1 word2
번역하지 못합니다.
"word1 word2 word4"가 미리 번역된 문장으로 입력되어 있지 않으면 번역하지 못합니다.
다만, word1 / word2 / word4 가 각각 단어사전에는 있으므로 각각의 단어 뜻은 출력해 줍니다.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
그러니까
i love apples를 번역해봤는데 DB에 없어서, 해당하는 번역을 사용자가 입력했습니다.
그 다음에 i love abstractions를 번역해보면 역시 번역이 안되겠네요. 사용자가 입력했습니다.
그 다음에 i love python을 번역해보면 또 번역이 안되겠네요. 사용자가 입력했습니다.
그 다음에 i love (....)을 번역해보면 또..
단순한 "i love (명사)"의 패턴만 해도, 미리 번역을 입력해줘야 할 문장의 숫자는 영어사전의 명사 숫자 만큼이겠네요.
"i love to (동사)"의 패턴에 대해서도 마찬가지겠지요.
그런데 문장의 패턴이란 게, 저런 무수한 조합에 의해 사실상 무한대의 패턴을 갖지요.
위에 어느 분이 "그 전에 이걸 번역해서 1:1 matching되는 DB를 구축하는것부터가 불가능합니다."라고 하셨지요. 이 뜻을 잘 생각해보셨으면 좋겠네요.
네 맞는 지적이십니다. 그러나, "그 전에 이걸
네 맞는 지적이십니다.
그러나,
"그 전에 이걸 번역해서 1:1 matching되는 DB를 구축하는것부터가 불가능합니다." 라는 것은
제가 TransWorks로 구현한 것이 있음에도 이것을 완전히 부정하시는듯 해서
제가 좀 반박하는 글들을 올렸습니다.
TransWorks는 장단점을 가지고 있습니다. 아래내용을 참조해 주셨으면 합니다.
(장점)
1.사용자가 미리 문장 번역하여 저장한 것은 정확하게 번역합니다.
2.초중고 교재에 있는 학습용(교육용) 문장정도는 등록하여 오역없이 번역할 수 있습니다.
3.임베디드나 스마트폰에 영어학습 교육용 검색DB로 충분히 활용할 수 있습니다.
(단점)
1.문장을 번역해서 저장해야 하는 번거러움이 있습니다.
2.문장 번역용 인덱스를 위한 메모리 공간이 비례하여 증가합니다.
구글 번역도 장단점이 있습니다.
이미 번역된 문장이 있어야 하고 이것을 분석하여 통계적인 패턴으로 잡아야 할겁니다.
가장 큰 문제는, 통계라는 것은 정규분포를 활용하는데
이 정규분포를 벗어나는 것은 제대로 번역하지 못하고 오역을 함으로써 오히려 득보다 실이 많습니다.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
네
네 이 기술의 정확한 이름은 "사람이 해놓은 번역을 빠르게 찾아주는 알고리즘" 쯤이 되지 않을까 싶네요. 번역 자체는 사람이 해야 하는 일이고요.
반면 구글 번역은 기계가 하는 번역이지요.
정확도를 비교하자면, 이 기술에 의한 번역의 정확도는, 사람이 미리 해놓은 문장 단위 번역의 정확도에 전적으로 의지하겠네요. 그 사람이 정확하게 번역했으면 정확할 것이고, 완전 틀리게 번역했으면 완전히 틀릴 것이고요. 또한 번역이 문장 단위로 이루어지기 때문에 문맥에 따른 번역은 불가능할 것이고요.
구글 번역의 정확도는 통계적 분석에 따라 달라질 것이고요.
90GB개의 sentence에 해당하는 DB를
90GB개의 sentence에 해당하는 DB를 구축하는 것이 불가능하다는 뜻이었습니다.
다른분이 지적해주셨듯이,
님이 개발하신것은 "번역기"가 아니라 "번역한문장을 빠르게 찾는 기술"이고,
hash table을 이렇게 design했고,
hash key로 어떤 걸 썼다 정도 밖에 다를게 없습니다.
그방법조차도 novel한 방법은 아니고요..
님의 노력을 공격해서 얻을 것은 아무것도 없습니다.
다만 열심히 노력하시는데 비하여 방향이 잘 못된 것 같아,
몇가지 조언을 드린 것 뿐입니다.
제 의도는 어느정도 이해하셨으리라고 보고,
이걸 선의로 받아들이시든, 아니든 그것또한 님의 역량이라고 생각합니다.
저는 여기까지만 하겠습니다.
몇가지점에서 불쾌하게 해드린것 같아 죄송합니다.
급하게 쓰다보니 몇군데 오류가 있어서
급하게 쓰다보니 몇군데 오류가 있어서 재작성합니다.
90G개의 sentence에 해당하는 번역된 DB를 구축하는 것이 불가능하다는 뜻이었습니다.
다른분이 지적해주셨듯이,
님이 개발하신것은 "번역기"가 아니라 "번역한문장을 빠르게 찾는 기술"이고,
이것은 번역과는 전혀 다른 영역입니다.
님이 하신건 문장 검색을 위해서,
hash table을 이렇게 design했고,
hash key로 어떤 걸 썼다 정도 밖에 다를게 없습니다.
그방법조차도 novel한 방법은 아니고요..
님의 노력을 공격해서 제가 얻을 것은 아무것도 없습니다.
다만 열심히 노력하시는데 비하여 방향이 잘못된 것 같아,
몇가지 조언을 드린 것 뿐입니다.
제 의도는 어느정도 이해하셨으리라고 보고,
이걸 선의로 받아들이시든, 아니든 그것또한 님의 역량이라고 생각합니다.
저는 여기까지만 하겠습니다.
몇가지점에서 불쾌하게 해드린것 같아 죄송합니다.
Transworks 라는 프로그램을 구현했다는걸
Transworks 라는 프로그램을 구현했다는걸 부정하시는게 아니고 무한한 데이타를 DB로 구축하는게 불가능하다는 말씀이지 않습니까?
다른 예로
I think that that that that used in that sentence used should be A (나는 그 문장에서 사용된 그 that은 A가 되어야 한다.) 라는 문장을 번역해서 저장하면
I think that that that that used in that sentence used should be B
I think that that that that used in that sentence used should be C ... Z
I think that that that that used in that sentence used should be AA .. ZZ
...
...
9천억번 반복
이런 모든 문장이 전부 사람에 의해 입력되어야만 하는 것 아닌가요?
그리고 30!과 100!이 언제부터 아래의 값으로 바뀌었는지요? (http://www.kernel.bz/tw/tw0103.htm)
265252859812191032188804700045312
933262154439441021883256061085752672409442548549605715091669104004
079950642429371486326940304505128980429892969444748982587372043112
36641477561877016501813248
이런 곳에 글을 올릴때는 정확한 개념의 이해화 표현이 중요한데 글을 읽다보면 좀 안타까울 때가 있습니다.
구글 translate를 개발하 이용하는 사람들은 이런 자연어 번역이 아직은 답이 존재하지 않는 영역임을 알기 때문에 오류의 가능성을 인정하고
혹시 자기가 생각하지 못한 좋은 표현을 얻을 수 있는 가능성을 생각하고 사용하는 거지요.
제 생각에는 Transworks라는 프로그램이 rgbi3307님께서 공을 들여서 잘 만드신 프로그램임에는 틀림없지만
이 프로그램의 본질은 아래에서도 지적되었 듯이 "사람이 번역"한 것을 "빨리 검색"하는 시스템입니다.
"맞춤형 문장 자동 번역 시스템 및 이를 위한 데이터베이스 구축" 이라는 문제를 푸는 방법, 방향이 틀린 듯 합니다.
http://translate.google.com/#
http://translate.google.com/#ko|en|%EB%82%98%EB%8A%94%20%EB%88%88%EC%9D%B4%20%EB%A9%80%EC%96%B4%EC%84%9C%2C%20%ED%95%98%EC%96%80%20%EB%88%88%EC%9D%B4%20%EC%95%88%EB%B3%B4%EC%97%AC%EC%9A%94. (나는 눈이 멀어서, 하얀 눈이 안보여요. 의 번역)
이거 됩니까? 만약에 되면 앞에 눈이랑 뒤에 눈을 어떻게 구별하나요?
아래와 같이 문장을 이루는 단어마다 인덱스 번호를
아래와 같이 문장을 이루는 단어마다 인덱스 번호를 붙여서 조합니다.
A문장에 있는 "눈이"는 동일한 색인번호 2을 가지지만,
A문장 전체를 색인번호 조합한 "1_2_3_4_5_2_6_7"는 고유한(unique) 색인이 됩니다.
이 색인번호와 B문장의 고유 색인번호 "10_20_30_40_50_60_70_80_90_100_7"를 검색하여 번역합니다.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
특허가 출원된 상태인지 여부는 잘 모르겠지만,
특허가 출원된 상태인지 여부는 잘 모르겠지만,
만약 소프트웨어 특허라면 kldp 는 소프트웨어 특허에 반대하는 사이트입니다.
( 과거 소프트웨어 특허 반대의 배너를 메인페이지에 건적도 있습니다. )
굳이 여기에 소프트웨어 특허 설명을 올리신 저의가 궁금해집니다.
Neogeo - Future is Now.
특허를 무작정 반대하는 것은 아닐텐데요? 오히려
특허를 무작정 반대하는 것은 아닐텐데요?
오히려 특허 관련된 소송을 미리 막기 위해 특허를 내는 경우도 많습니다.
그리고 비슷한 방식으로 보일지라도 구현 방식이 전혀 다르다면 또 다른 특허도 될 수 있죠.
아이디어를 공유한다는 것 자체만으로도 가치있어 보이네요.
소프트웨어 특허는 무조건 반대합니다. 하드웨어 특허가
소프트웨어 특허는 무조건 반대합니다. 하드웨어 특허가 아니라 "소프트웨어" 특허 입니다.
더불어 앞으로 이 쓰레드의 익명분 의견은 무시하겠습니다.
원글을 올리신 분이 굳이 이사이트에 소프트웨어 특허 관련 글을 올리신 저의가 궁금할뿐이라서요.
Neogeo - Future is Now.
네 저 역시 소프트웨어 특허를 말합니다. 저는
네 저 역시 소프트웨어 특허를 말합니다.
저는 소프트웨어 특허를 무조건 반대하는 입장은 아닙니다. 어짜피 FSF에서 벌리는 운동은 일종의 운동의 성격일 뿐이지,
소프트웨어 특허를 인정하고 있는 곳도 많고,
기업에서 이것저것 가릴것 없이 막무가내식 특허를 내고 공격해댄다면 개인이나 중소업체는 버틸수 없게 되겠죠.
그래서 개인이 방어적인 입장에서 특허를 내는 것은 현 상황에서 어쩔 수 없는 선택, 혹은 개인에게는 필수가 될 수도 있다는 것입니다.
네 소프트웨어 특허가 정말 없었으면 좋겠습니다만, 그게 현 상황에서 완전히 해결가능한 상황이 아니니 유보적이라는 것이 제 생각입니다.
그리고 답변하실 필요 없습니다. 저역시 아직 정리되지 않은 생각을 자유롭게 쓰는것은 익명성 덕분이니까요.
특허에 대해 익명 댓글을 다신분을 저도
특허에 대해 익명 댓글을 다신분을 저도 모릅니다.
단지, 특허에 대해서 긍정적으로 폭넓은 시각으로 보시는듯 하여 저도 기분이 좋습니다.
저도 리눅서로서 자유 소프트웨어를 좋아합니다.
그런데 이분야의 연구를 하면 할수록 뭔가 문서형태로 남겨두고 싶은 것들이 생기더군요.
제가 대학원이나 학계에 몸담고 있었다면, 굳이 특허를 내지 않고 학회지 같은 곳에 논문으로 내고 싶었는데,
현재 직장생활하고 있는 몸이라 특허를 내기로 결심했습니다.
특허는 일종의 안전장치라고 보는것이 좋을듯 합니다.
공격용이 아닌 방어용입니다.
내가 연구한 것을 가지고 좀더 가능성 있는 분야를 개척하고자 할때, 방어가 될만한 안전장치가 필요합니다.
또한, 문서 형태로 남겨 두면 다른 분들과 공유도 쉽게 되고
특허출원된 것은 인정받기 쉬어진다는 일종의 관습때문이기도 합니다.
나이가 들수록 이런 관습이라는 것을 무시하지 못하겠더라구요.
긍정적으로 이해해 주셨으면 합니다.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
http://wiki.kldp.org/wiki.php
http://wiki.kldp.org/wiki.php/SoftwarePatent
다시 말씀드리지만 저역시 소프트웨어 특허가 문제다 라기 보단
왜 굳이 소프트웨어 특허 자체를 공식적으로 반대하는 kldp 에 이런글을 올리셨냐는겁니다.
좀 과장일지도 모르지만, 이런 행동은 얼마전 기독교 신자들이 봉은사가서 무슨 절 밟기 하는거랑 비슷한 처사라는 것입니다.
특허가 방어권으로 쓰일수도 있고 얼마든지 좋은 목적으로 쓰일 수 있다는것은 잘 알고 있습니다.
다만 kldp는 공식적으로 소프트웨어 특허 자체에 반대하는 곳이라는것을 다시 한번 상기해주시면 감사하겠습니다.
Neogeo - Future is Now.
특허에 대해 딴지를 걸려면 다른 곳에 글을 새로
특허에 대해 딴지를 걸려면 다른 곳에 글을 새로 열어서 하시는게 어떨까요?
KLDP가 공식적으로 지지를 하는 것과 각 유저가 그것을 지지하느냐 안하느냐는 별개문제일 것입니다.
kldp.net는 공개소프트웨어에 관한 이야기만 하는 폐쇄된 공간이 아닙니다. 지금까지 그러지도 않았구요.
글 쓰신 분은 이것과 관련된 토론(?)을 여기서 했던바 있고 그 결과물을 지금 여기서 이야기하려고 하는 것입니다.
도저히 댓글을 안달수가 없군요. 특허에 대해 딴지가
도저히 댓글을 안달수가 없군요.
특허에 대해 딴지가 아니라, 특허 낸걸 왜 하필 여기에 올리냐 이소리입니다.
전 소프트웨어 특허에 반대하는게 아닙니다.
소프트웨어 특허를 반대하는곳에 왜 소프트웨어 특허 낸 내용을 올리냐는거죠.
도대체 어떻게 글을 써야 이 익명 사용자 들이 제대로 이해를 할까요. 정말 그냥 트롤들일까요?
차라리 소프트웨어 특허는 필요하다라고 주장하는 글이면 이해라도 갑니다. 그건 토론을 위한 거니까요.
지금 이건 토론을 위한것도 아니고 특허 내용을 공개 하겠다라고 하는 겁니다. 소프트웨어 특허를 반대하는 사이트에서.
지금 kldp 에 소프트웨어 특허 내용을 올리는건, 다시 말하지만
예수쟁이가 ( 기독교 신자의 자격이 없는 사람 ) 봉은사에서 예배,미사 드리고 있는 거랑 마찬가지입니다.
Neogeo - Future is Now.
저 역시 심정적으로 소프트웨어를 찬성하지 않습니다.
저 역시 심정적으로 소프트웨어를 찬성하지 않습니다. 원래 이 처음에 글을 쓰신 분의 의도도 사실 저는 잘 모르겠습니다만,
일단 이곳은 누구에게나 열려있고 무슨 말을 하더라도 그것에 대해 특별히 제재를 가해야할,
혹은 하지 말아야 해서는 안되는 이야기가 kldp에 정해진 것은 전혀 없다는 것입니다.
자꾸 이상한 식으로 오해하지 마시기 바랍니다.
오히려 님께서 제가 익명으로 글 썼다는 이유만으로 자꾸 이상한 말씀을 하시는 것으로 보이네요.
객관적으로
저 역시 누구나 kldp에 특별한 위해를 가할 광고들 혹은 음란게시글 등의 아닌 자신의 생각을 올리는데에 어떠한
제제를 가한다는 것은 좀 다르다고 봅니다.
비판할 권리도 자신의 생각을 올릴 권리도 있어야 하고 이 글을 악성글이라 생각하지 않지만 필요악이라는 것도 어쩔 수 없이
현세계에서 인정할 수 밖에 없는 부분이 믿고 싶지 않지만 존재합니다.
ㅡㅡ 이거 머 그냥 저는 간단히 말하자면 윗글 분에 동의 합니다.
피해가 안가면 누구나 자신의 생각을 올릴 수 있다고 생각합니다.
특허 글을 올리는데에 딱히 kldp를 흐리다고 생각도 안하구요
소프트웨어 특허에 반대하는 이유 중 하나.
특허라는 게, 사회의 기술 발전을 위해 국가기관이 독창적인 기술을 심사해서 배타적 권리를 부여하는 것이지요.
하지만 현대 사회의 기술이란 건, 이미 국가 기관의 심사 능력을 벗어나는 것으로 보입니다. 가령 이 쓰레드의 기술이 대표적인 예지요. 단지 일개 리눅스 동호회에서도 이 기술의 유의미 여부, 상용 여부를 판단할 수 있는데, 특허청은 그럴 능력이 없어 보입니다.
이것은 특허청에 있는 사람들이 무능해서라기보다는, 애초에 국가(특허청)-특허-기술개발이라는 모델 자체가, 기술 수준이 낮은 사회에서 국가가 기술 개발을 촉진하려 했던 산업 혁명 시기 - 또는 한국 같은 후발 주자의 경우 산업화 시기 - 에나 의미있는 모델이라고 생각합니다. 현대처럼 기술이 너무 복잡해진 시대에, 일개 국가 기관이 수많은 기술의 독창성이나 유의미함을 일일히 판단하는 것 자체가 불가능해진 것이죠. 혹은, 길고 지리한 법정 공방을 수년씩 해야만 가능하거나요.
상황이 이렇다면, 애초에 특허제도의 의의 자체를 재고할 수 밖에 없다고 생각합니다.
덧붙여, 소프트웨어 특허는, 소프트웨어의 추상적 성격 때문에 더더욱 그렇다고 봅니다.
언어가 가지는 문맥의
중요성을 간과한 방식이 아닐까 싶은데요. 구글이 통계를 내어 번역하는 방식으로 나아가는 것도 사람의 언어로 이루어진 문장은 무한한 의미의 확장이 가능함으로 인해 사용하신 key-value 방식이 무의미해지는 것을 깨닫고 시도하는 것 아닌가요. 제가 이 분야의 전문가는 아닙니다만 위에서 한 분이 말씀하신 것처럼 이러한 방식은 극도의 제한적인 용도로 밖에 사용할 수 없을 것 같습니다.
TransWorks는 결코 제한된 용도가
TransWorks는 결코 제한된 용도가 아닙니다.
생업때문에 바쁘시겠지만,
시간이 되시면 제가 처음 발제글에서 공개한 특허출원 기술문서를 다시한번 정독해 보세요.
링크를 다시 알려드립니다.
http://www.kernel.bz/tw/tw0103.htm
기술문서를 보시면, TransWorks에 구현한 인덱스 자료구조(TWI: TransWorks Index)에서
문장을 번역(검색)하는 시간은 아래와 같은 수식으로 도출되었습니다.
(TWI는 B+Tree 자료구조를 문장번역을 위한 인덱싱에 맞도록 제가 C언어로 코딩한 것입니다.)
단어들에 색인번호를 부여한 인덱스수 n는 TransWorks에서 최대 42억개까지 저장할 수 있습니다.
계산하기 쉽도록, n = 10억(1,000,000,000) = 10의9승 으로 하겠습니다.
10억개의 인덱스에서 하나의 단어를 검색하기 위한 비교회수 M은 아래와 같이 산출됩니다.
M = (log(n) x 10) / 2 = (log(10의9승) x 10) / 2 = (9 x 10) / 2 = 45
한개단어 검색시간 T = M x c = 45 x 1마이크로초 = 45마이크로초
문장이 10개의 단어(w=10)로 구성되어 있다면,
문장안의 단어들 검색시간 TS = 10 x 45마이크로초 = 450마이크로초
문장을 번역하기위한 전체시간(TWS) = 영어문장검색시간 + 한글문장검색시간 + 색인쌍검색시간
즉, TWS = TS + TS + T = 2TS + T = 2 x 450마이크로초 + 45마이크로초 = 945마이크로초
따라서, TWS는 945마이크로초 = 0.945미리초 = 약1미리초 입니다.
이 시간은 평균값입니다. 알고리즘시간평가 기호에서 세타(n)에 해당하는 시간입니다.
결론적으로,
n=10억개의 문장들을 세타(n)=평균1미리초로 검색하여 번역한다는 것입니다.
제가 배포한 TransWorks을 실제적으로 한번 실행해서 확인해 보세요.
대부분 1미리초 내외로 검색하여 번역합니다.
(프로그램에서 번역시간도 계산하여 표시해 주고 있습니다.)
그렇다면, TransWorks는 최대 10억개의 문장만 검색하여 번역할까요? 아닙니다.
인덱스를 다시 해싱합니다.
현재 배포한 TransWorks 버전1.2011.05에서는 해시 사이즈를 10으로 하여
10 x 10억개 = 100억개의 문장을 검색하여 번역합니다.
그럼 문장이 100억개로 늘어 났으니 검색시간도 비례해서 증가할까요? 아닙니다.
해싱을 위한 O(1) 시간만 필요합니다.(이시간은 CPU가 한번 연산하는 시간이므로 1마이크로초 정도입니다)
즉, 100억개의 문장을 1미리초 내외로 검색하여 번역합니다.
그렇다면 해시 사이즈를 n개로 무한개 늘이면 어떻게 될까요?
검색 시간 TWS는 여전히 1미리초 내외 입니다.
즉, n x 10억개의 문장을 1미리초 내외로 검색하여 번역한다는 것입니다.
이론적으로 세상에 존재하는 모든 문장을 1미리초 내외로 검색하여 번역할 수 있습니다.
TransWorks에 제가 구현한 TWI 인덱스로 세상의 모든 문장들을 1미리초 내외로 검색하여 번역합니다.
믿을 수 없으신가요?
단, 전제 조건이 있습니다.
n x 10억개의 문장을 인덱스(TWI)로 저장할 메모리가 필요합니다.
이런 천문학적인 메모리가 현재 하나의 컴퓨터에는 없습니다.
그럼 보조기억장치(하드디스크)를 사용하면 I/O가 많이 발행하므로 실행시간이 많이 떨어집니다.
그래서 저는 20~30년후 천문학적인 용량의 메모리가 나오길 기대하고 있습니다.
그럼 TWI에 구현된 알고리즘으로 세상의 모든 문장을 번역할 수 있습니다.
이론적으로는 현재에도 가능합니다.
바로, 전세계에 분포되어 있는 컴퓨터의 모든 메모리를 클라우딩 환경에서 묶어서 사용하는 겁니다.
이것도 전제조건이 필요합니다.
이것을 실현할 수 있는 운영체제가 있어야 하고 사용자 동의가 필요합니다.
저는 다음세대에는 가능하리라 봅니다.
그래서 지금 준비하고 있습니다.
TransWorks는 결코 제한된 용도가 아닙니다.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
ㅉㅉ
I/O를 쓰면 느려지니까 모든 데이터를 메모리 상에 다 올려놓고 쓰는 알고리즘, 데이터 크기가 커질수록 그에 비례해서 필요한 메모리가 늘어나는 알고리즘, 몇 십 억 개의 데이터를 처리하기 위해선 천문학적인 메모리가 필요로 하는 시스템을 누가 필요로 하겠습니까.
메모리에 다 올리면 빠르다는 걸 몰라서 사람들이 파일 시스템, DB를 연구하겠습니까.
클라우드로 연결한다고요? 네트웍 I/O는 안느린가요.
참 안타깝네요.
전제부터 성립하기 어려운 기술(?)을, 그것도 자유소프트웨어/오픈소스에 가장 큰 위협이 되는 "소프트웨어 특허"의 형태로 공개하신다면, 여기서 별로 좋은 소리 듣긴 어렵지요. 그래서 자존심도 상하고 기분도 나쁘실 수 있겠지만, 곰곰히 따져보시면 앞으로의 연구에 다 도움 되는 말씀들일 겁니다. 열심히 연구하신 것 같고 그런 만큼 애착이 큰 것도 이해가 갑니다만, 비판에 열린 자세를 갖지 않으면 자기만의 세계에 갇힌 채 귀중한 시간과 노력을 삽질로 낭비하기 십상일거라 생각합니다.
안녕하세요?
익명글이라 누구신지 모르겠지만, 제가 열린 자세로 지적해 주신 내용들을 잘 보고 있습니다. 위의 제 글들을 보시면 지적해 주신 글들을 비판하지는 않았습니다. 단지 장단점이 있다라는 것을 말씀드렸구요. 저의 TransWorks는 분명히 쓰임새가 있습니다. 특히, 상용 DBMS을 올릴 수 없는 임베디드에서 영어학습용으로 충분히 활용가치가 있습니다. 그동안 이것을 주제로 월간임베디드월드 잡지에 기고글도 11개월 동안 연재를 했구요. 앞으로 이쪽분야에서 아주 유용한 솔루션을 만들기 위해 계속 노력할 예정입니다. 많은 성원 바라며 논쟁은 이쯤에서 마무리 했으면 좋겠습니다. 저도 여러명의 익명성 댓글에 답글하다보니 좀 힘드네요. 감사합니다.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
실행시켜보니 처음에 로딩이 꽤 오래 걸리던데..
실행시켜보니 처음에 로딩이 꽤 오래 걸리던데.. 인덱스 전체를 메모리에 올리는 것인가요?
임베디드 장비는 보통 메모리가 귀하지 않은가요?
sqlite 위에, 원문sentence에 대한 hash값을 키로 하여 번역문을 매칭하는 방식에 비해 어떤 장점이 있나요?
저의 TransWorks을 사용해 보셨다니
저의 TransWorks을 사용해 보셨다니 감사합니다.
보조기억장치에 있는 영한단어와 인덱스를 모두 메모리에 올리기 때문에
처음에 로딩(I/O)시간이 걸림니다.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
미래의 hardware를 고려한 연구는 많이 있습니다.
10억이라고 하면 사실 1G 밖에(?) 안됩니다. 이 프로그램에 쓰인 기술들에 세밀하게 따져보지 않았고, 또한 저도 의문이 많이 남습니다만 일단 제시된 숫자를 다루겠다면 터무니없는 것은 아닙니다.
어떤 기술들이 처음 등장할 때 대부분 성능, 용량을 이야기하면서 비천한 기술 취급을 받았지만 강력한 hardware의 발전과 함께 부상한 예는 많습니다.
이론적으로 존재 가능한 영어 문장의 개수가 몇 개나
이론적으로 존재 가능한 영어 문장의 개수가 몇 개나 된다고 생각하십니까? 사전에 들어 있는 단어만 해도 기본형만 수십만개에 달하는데 주어 + 동사 + 목적어 단순한 문장만 따져도 명사x동사x명사 조합만 해도 간단히 수조 가지가 넘어갑니다. 그 데이터를 누가 어떻게 만들어 입력하느냐가 더 심각한 문제이지만 그건 넘어가고 가지수 얘기만 해 보면..
그만큼 저장할 수 있다고 칩시다. 뒤에 'which is a xxx' 절 하나만 붙이면 종류가 그 수십만배로 늘어나죠. 수백만경 가지가 됩니다. 이 정도로도 벌써 지구상 컴퓨팅 파워를 합쳐도 처리하기 어려운 수준입니다. 그걸 다 처리한다면 xxx 앞에 형용사를 붙여주면 또 몇만배로 늘어나죠. 경 다음이 단위가 뭐죠? 그것도 처리한다? 그러면 이번엔 앞쪽에 명사절 하나 붙여 볼까요? 이 정도 복잡도의 문장이 굉장히 특이한 문장도 아닙니다. 영어 교과서에서 인사말 수준만 벗어나도 가지수는 이렇게 늘어납니다.
다음 세대에는 가능할거라구요? 지구상의 원자 하나하나에 정보를 저장한다고 해도 모자랍니다.
짧게 지적하고 싶은 것은, 1. n*10억개의 이미
짧게 지적하고 싶은 것은,
1. n*10억개의 이미 번역된 문장 pair를 만드는 것 자체가 불가능하다
2. 실제 문장의 개수는 n*10억개보다 훨씬 많다.
3. 따라서 이 프로그램은 "번역기" 가 될 수 없다.
이 프로그램을 "검색기"라고 보더라도
1. 원글자가밝혔듯이 이 프로그램에서 검색의 시간복잡도가 O(log(n)) 이다.
2. 인덱싱된 데이터에 대해서 O(log(n))의 시간복잡도를 갖는 검색 알고리즘은 널리고 널렸다.
3. 따라서 이 검색기술은 다른 검색방법과 비교해서 더 낫다고 말할 수 없다.
좀 다른 이야기로,
20-30년 후에 천문학적 용량의 메모리가 나온다쳐도,
그 천문학적 메모리를 억세스하려면 필연적으로 시간지연이 생기고,
결국 데이터 용량을 캐쉬에 올라올만큼으로 줄이면서
얼마나 효율적으로 검색을 하느냐가 이슈가 됩니다.
이미 대용량의 데이터를 다루는 분야는 이런 것으로 고민하지,
새로운 검색 알고리즘 이런거 안합니다.
획기적으로 새로운 검색 알고리즘을 개발했다고 생각하시겠지만,
99.9999999999999999999%의 확률로 이미 있는 겁니다.
아침에 님의 글을 읽고 기분이 좋아졌습니다. 그냥
아침에 님의 글을 읽고 기분이 좋아졌습니다.
그냥 님이라고 호칭해서 죄송합니다.
익명글이 아닌 아이디가 있었다면 아이디를 기억해서 앞으로 좀 친해지고 싶습니다.
검색 알고리즘의 시간 복잡도 O(log(n))에 대해서 언급해 주실 정도면
알고리즘에 대해서 많이 공부해 보신듯합니다.
일단, 저의 TransWorks을 "번역을 위한 검색" 알고리즘으로 이해해 주셨으면 합니다.
이것의 활용 가치에 대해서는 윗글에서 제가 수식으로 보여 드렸구요.
문제는 바로 님께서 지적해 주신 알고리즘 시간복잡도를 표현한 log 수식입니다.
그리고 세상에서 가장 효율적인 알고리즘도 이미 있습니다.
바로, 해싱 알고리즘의 O(1) 입니다. 검색을 단 한번(CPU 연산 한번)으로 해낸다는 것이지요.
그런데 해싱의 문제점은 인덱스 n이 대용량일때 collision으로 인한 chaining 문제를
해결해야 한다는 것이고 이것을 해결하기 위해서 많이들 고민합니다.
이분야에서 알고리즘을 지속적으로 연구하는 이유는 바로 이런 고민을 풀기 위함입니다.
n이 대용량으로 갈때 시간복잡도가 log(n)으로 나타나는 알고리즘이 널리고 널렸지만
아주 중요한 차이점이 있습니다. 바로 log의 밑수가 어떻게 되는가? 입니다.
일반적인 사용로그 log 는 밑수가 10이고, lg는 밑수가 2이고, ln은 밑수가 e입니다.
log 밑수가 2로 표현되는 자료구조을 Binary Tree라하고, 정렬된 순서로 노드가 저장되면
Binary Search Tree라 하고, 트리의 높이가 균형잡히면 AVL Tree, Red-Black Tree라 합니다.
log 밑수가 3이면 Tri, 밑수가 m이면 m-way multi Tree 이면서 높이가 균형 잡히면 BTree라 합니다.
BTree도 노드의 기억장소 사용율이 50% 발생하는 문제점을 해결한 것을 B*Tree라 하고,
노드의 포인터는 internal 노드에 데이터는 leaves에 저장하면 B+Tree라 합니다.
B+Tree는 자료의 탐색효율은 좋아지지만 B*Tree와 같이 기억장소 문제는 해결못합니다.
이들은 모두 알고리즘 시간 복잡도가 수학수식 log 함수로 표현됩니다.
모두 log 함수로 표현되면서 왜 이렇게 알고리즘들을 분류하는 걸까요?
일단, log(n)은 n이 무한히 커져도 기울기가 매우 낮게 나타납니다.
이런 좋은 효율성을 가지면서 입력되는 자료수 n에 따라서
알고리즘의 내부 구현방식이 조금씩 다 다르기 때문입니다.
제가 TransWorks에 구현한 자료구조와 알고리즘은
입력되는 자료수 n이 영한 단어라는 것에 착안하여 이것에 맞도록 맞춤형으로 최적화 시킨것입니다.
여기에 의미가 있습니다.
B+Tree 자료구조 이론을 활용했지만 C언어로 코딩하면서 자료수 n이 영한단어 사전이라는
특성을 고려하여 B+Tree의 단점인 노드의 기억장소 낭비율 50%을 없애고,
인덱스가 32비트 머신에서 최대 42억개 저장될 수 있다는 문제점을 Hashing으로 해결하여
n x 42억개의 인덱스가 생성되어도 검색 시간 복잡도 O(log(n))에 변함이 없도록
구현했다는 것에 의미가 있는 것입니다.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
> 바로, 해싱 알고리즘의 O(1) 입니다. 검색을
> 바로, 해싱 알고리즘의 O(1) 입니다. 검색을 단 한번(CPU 연산 한번)으로 해낸다는 것이지요.
Algorithm의 order가 O(1)이라는게 CPU 연산 한 번을 의미하는 게 아니죠
Hashing 함수를 수행하는데 CPU 연산 한 번으로 어떻게 가능한가요?
> 그런데 해싱의 문제점은 인덱스 n이 대용량일때 collision으로 인한 chaining 문제를
> 해결해야 한다는 것이고 이것을 해결하기 위해서 많이들 고민합니다.
N의 크기와 상관없이 collision은 발생합니다. Hash function에 dependent하죠.
Collision을 해결하는 방법이 Chaining 밖에 없는게 아닙니다. Open addressing, Rehashing도 있습니다.
'chaining 문제'라고 말씀하시면 마치 Chaining에 문제가 있는 것처럼 보입니다.
이것을 해결하기 위해서 고민하지 않고 해결하려는 문제에 맞게 그냥 선택합니다.
> 노드의 포인터는 internal 노드에 데이터는 leaves에 저장하면 B+Tree라 합니다.
Leaf Node가 포인터로 연결되어 있지 않아도 B+Tree인가요. B+Tree가 무엇이라고 말씀을 하고싶으면
정확하게 표현을 하셔야 이것을 처음 접하는 사람들이 헤깔리지 않을겁니다.
쓰레드상의 글들을 읽어가면서 드는 생각이 있어서
쓰레드상의 글들을 읽어가면서 드는 생각이 있어서 적어봅니다.
부디 악의로 공격하시는 분은 없으시길 바라면서...
TransWorks 는 여기까지 읽어보신 분들은 아시겠지만, 제약사항이 분명 있습니다.
그래서 구글 번역같은 기계번역을 대체할 수는 없을 것 같아요. 20,30년 후에 상황이 어떻게 변할지 모르지만요..
하지만 구글 번역같은 기계번역이 번역 품질이 낮다고 판단되는 경우 혹은 기계 번역을 시도하기 전에 인덱스 매칭 기법을 써볼 수는 있을 것 같아요.
고전 문학이나 유명한 글들을 저장하고 있었는데 사용자가 그중 한 문장 혹은 한 단락을 번역 시도하는 경우 정확한 결과를 줄 수 있겠죠.
기계 번역이 물론 주가 되겠지만 그 번역 결과가 말씀하시는 정규분포를 벗어나서 신뢰하기 힘든 경우 TransWorks 가 보조적 수단으로 번역 품질을 좀 더 높이는데 기여할 수 있지 않을까..
생각해봤습니다.
그런 상황이라면 이 솔루션은 기계 번역 분야 뿐만 아니라 다양한 DB 응용분야에 활용할 수 있지 않을까...
심플한 기술이 오히려 더 강력할 경우가 종종있죠.
심플한 기술이 오히려 더 강력할 경우가 종종있죠. 그걸 자주 간과하고 복잡한 기술을 너무 추구한 나머지 그 본 목적에 부합하지 못하는 결과를 내는 경우가 많습니다.
영한학습 프로그램에 말하려고하는 부분이 그런 부분인 것 같습니다. 기술은 더 뛰어난데 왜 번역 품질이 엉망일까? 그것에 대한 한가지 간단한 해결책을 제시한다고 볼 수 있을듯.
예를들어 이런거죠. 구글 검색에서 원하는 결과가 잘
예를들어 이런거죠.
구글 검색에서 원하는 결과가 잘 안 나온다고,
내가 찾고자 하는 키워드와 이에 해당하는 올바른 검색 결과를 미리 DB 에 넣어놓고,
입력된 키워드에 정확히 일치하는 DB 안의 데이터만 보여주면서,
구글보다 뛰어난 사용자 맞춤형 검색 엔진을 만들었다고 주장하는 것과 비슷한거죠.
이런 심플한 접근 방식이 검색 엔진 기술의 새로운 해결책이 될 수 있을까요?
그래서 북마크 서비스와 stackoverflow류의
그래서 북마크 서비스와 stackoverflow류의 서비스가 성공했던 요인도 바로 이런 것이겠죠. 검색엔진류의 서비스가 절대로 만족해시켜주지 못하는 틈새가 있을수밖에 없습니다. 새로운 기술이라는게 사실 별거 없습니다. 정확히 어떤 부분이 부족한지 인식하고 그 부분을 공략할줄 알면 그게 새로운기술이 됩니다.
기술자 혹은 프로그래머는 만능의 신기술및 기능이 많은 그 무엇을 만들려고 하지만, 사용자의 관점은 그런 것 보다는 그것이 자신이 생각하는 의미에서 정확히 작동하는지 안하는지에 주로 관심을 가지죠.
그리고 구글이나 기타 검색서비스는 DBMS뿐만 아니라 key/val pair의 캐싱도 내부적으로 적극 사용할 수밖에 없습니다.
그게 바로 입력키워드에 정확히 일치하는 데이터를 보여주는 방식인것이고
음... 써보진 않았습니다. 일단 나름 데로 쓸 곳은
음... 써보진 않았습니다. 일단 나름 데로 쓸 곳은 있을 거 같습니다. 하지만, 데이터 생성이 문제가 될 거라고 보구요.
음... rainbowcrack이랑 비슷한 원리라고 생각되는 군요. 실제로 헤쉬화된 데이터를 크랙하는게 아니라 미리 만들어진 인덱스 사전을 이용해서 헤쉬 데이터를 크랙하는 프로그램인데... 목적은 다르지만, 큰 틀에서의 구현은 비슷한 거 같네요. 근데... 이 프로그램도 문제가 데이터 생성입니다. 같은 문제점이 있군요. 저같은 사람에겐 별 도움이 안 될 거 같네요. 그렇지만, 누군가에겐 분명히 쓸모가 있을 것 처럼 생각됩니다.
사람천사
글세요 각기 상황이 있는 법입니다.
구글 역시도 일단 이것은 약간 스토리성이니 편하게 들어주세요..
구글은 빠르게 성장했습니다. 글로벌하게 구글의 위대함을 펼치기 위해서..머든지 빠르게 개발해야 하고
오픈소스도 강력히 권장하면서 그것을 적극 이용해왔습니다.
번역은 오픈소스가 별로 없죠.. 알고리즘은 몇가지 기초적인 것이 돌아다니겠지만...
어찌됫든 구글은 번역을 전세계로 마수를 펼쳤고 이 전세계 상대로 번역기를 돌린다 함은 =_= 어머어마한 자금과 인력이
투입되해야 했겠지요..
그래서 패턴 매칭 기법을 만들게 됩니다.
자 이 글은 그냥 스토리입니다. 실제로 그렇다는 것은 아니고 역시 제 개인적인 생각입니다
.
위에 메모리에 올리는 것 단점으로 지적하셔도 좋긴 합니다.
저도 단점이라고 생각합니다. 그런데 메모리에 올리는 것은 머랄까 부차적 문제 입니다. 개발자가 어느정도 상용화
수준에 도달하기 위해 목표를 설정하고 상용화 목표에 맞는 개발 프로세스에 들어가면 충분히 변경할 수 있는 부분 입니다.
여기서 우리가 눈여겨봐야 할 것은 번역 프로그램의 가치와 실제 번역 알고리즘이지..
메모리에 올린다고 그걸 엄청나게 비판할 =_= 그런것은 그렇게 없다고 봅니다. 이것은 사실 수고해 만든 개발자 기분만 상하게 하지요
아예 하지 말라는게 아니라 글을 읽어보니 메모리에 다 올린다는 문제를 지적하신 분이 있는데 글을 읽었을 때 제가 개발자였다면
좀 ㅡㅡ 그렇더라는 생각이 드는 겁니다.
제 갠적인 생각입니다.
비판은 좀 더 위대한 가치를 위해 생산되어야 한다고 생각합니다.
장점도 있고 단점도 있을 것으로 보이는(?) 프로그램
장점도 있고 단점도 있을 것으로 보이는(?) 프로그램 입니다만... 이걸 좀 더 개선할 수 있는 방법이 있을 거 같습니다.
1. 사용자가 입력하는 번역 데이터를 받을 서버를 만든다.
2. 번역 데이터를 공유할 수 있게 서버로 보낸다.
3. 이 데이터들을 일정한 형태로 업데이트 할 수 있게 일정 기간마다 데이터 팩 업데이트를 지원한다.
4. 남이 번역한걸 고칠 수 있게 한다.(위키 처럼.)
결론적으로 데이터의 오픈소스화... ㅎㅎㅎ. 이렇게 되면 좀 더 좋을 겁니다. 뭐 어쩌면 이건 ... 구글 번역이랑 다를게 없을려나 싶기도 하지만...
그리고 임베디드에서 메모리에 다 올린다는건 좀 ... 그럴 거 같네요 제가 생각하기에도. 뭐, 요즘 처럼 메모리가 많이 올라간 상태의 임베디드나 모바일 장치에서는 그나마 효율적일 수 있겠지만, 아직도 그렇지 않은(메모리가 부족한) 임베디드 장치는 많은 걸로 알고 있습니다.
더해서 ... 알고리듬 이란 것이... 제가 전산 전공이 아니라서 대충 밖에 배우지 못했지만, 어쨌든 간에 뭐든 하나는 희생할 수 밖에 없기에... 가능하면 이 희생상의 균형을 마추거나 한 쪽으로 특화하거나 하는게 필요한데... 실질적으로 한쪽으로 너무 치우치면 실무에서 큰 효과를 보기가 어렵지 않을까 싶습니다. 물론 이 프로그램을 제작하신 분은 저보다 알고리듬이나 자료 구조에 대해 훨씬 많이 아시는 분인 거 같습니다만.(저는 솔직히 알고리듬의 개념, 자료 구조의 개념과 기초적인 알고리듬, 자료 구조 몇 개를 아는 수준입니다. 큐, 스택, 리스트, 헤쉬, 간단한 트리, 버블/선택/삽입/병합 정열 등...)
훌륭한 알고리듬/자료 구조를 구현하신 것은 맞는 거 같지만 CPU 실행 시간의 절략에 초점이 마춰 지고 이것의 일관성을 유지하는데 핵심이 가다 보니 기타 자원 낭비가 불가피하게(메모리나 차후에는 다른 자원...) 된 거 같습니다. 데이터가 늘어나면 메모리 용량이 많이 필요해 지고 실제로 많은 메모리가 있다고 해도 메모리 용량이 많아 지고 할당이 많아 지게 되면... 나중에 가서 이걸 갱신하거나 추가적인 관리를 할 때 오버헤드가 발생할 수 밖에 없습니다. 메모리 관리나 접근하는 것도 대용량이 되면 오버헤드가 발생할 수 밖에 없는 부분이니까요.
제가 전산 전공은 아니지만... 서버 다루는 짓을 하다 보니(요즘엔 서버 보단 프로그래밍 하고 있습니다만...) 서버에 깔린 OS에 걸리는 오버헤드.. 이런 것에 관심이 많아서 요정도는 알고 있습니다.
아무튼, 제 생각이었습니다. 감사합니다.
사람천사
안녕하세요? 제가 그동안 고민해 오던 것을 자세히
안녕하세요?
제가 그동안 고민해 오던 것을 자세히 속시원히 기술해 주셔서 너무나 감사합니다.
특히, 사랑천사님이 서두에 1,2,3,4 순번을 붙여 나열해 주신것에 대해서 많이 공감합니다.
나머지 지적해 주신 문제들도 서로 고민하고 연구하다 보면 좋은 방향이 잡힐듯 합니다.
제가 그동안 온라인 상에서 좀 소극적으로 활동해 왔는데,
앞으로 오프라인에서도 이런 기술적인 부분들을 서로 토론할 수 있는 장을 마련할까 합니다.
대부분 직장을 다니실듯해서 주말(토요일)에 자율적으로 모여서 의견교환할까 합니다.
저도 이분야에서 일하며 느끼는 것은... 서로 소통할 수 있는 사람이 두세명만 있어도
엄청난 시너지 효과가 생김을 많이 느낌니다. 즐거운 하루 되세요(^^) 감사합니다~
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
아 참. 데이터의 공유를 P2P 나 클라우드 방식으로
아 참. 데이터의 공유를 P2P 나 클라우드 방식으로 하는 것도 나쁘지 않을 거는 같습니다. 근데... 클라우드로 가는게 제가 말한거랑 비슷하군요 위에.(요즘 클라우드 기반 데이터 저장 서비스가 이런 식이조 아마?) P2P는 생각해 보니까 이것도 사용중인 컴퓨터나 장비들 목록을 관리할 서버가 필요하거나... 어쨌든 서버는 어쩔 수 없이 필요할 거 같군요.
사람천사