2012-12-09 3 views
4

제가 말하고자하는 것은 콘크리트 솔루션보다는 오히려 방법론입니다. 나는 도전 한 상황을 묘사하는 것으로 시작하여 질문에 진행할 것입니다. 이런 식으로하는 것이 더 바람직 할 것입니다.대규모 구조화 된 데이터 세트 다루기

자연어에서 추출한 데이터를 다루고 있습니다. 이 데이터는 일종의 "지식 기반"(나중에 지식 기반이 아니기 때문에 인용 됨)에 대해 나중에 분석해야합니다. 지식 기반은 이론적으로는 크지 만 그 양은 크지 만 곧 메모리에 저장할 수있는 것을 능가 할 것입니다.

  • 배 정도 속도 감소를 의미합니다 데이터베이스 서버로 데이터를 이동 ... 음, 내가 어떤 요인 모르겠지만,이 정도의 쉽게 여러 주문 될 수있다 : 내이 문제는 다음이다 . 나는. 메모리에있는 런타임에 고유 한 객체에서 데이터 조각을 찾는 작업이 훨씬 빠르며 데이터베이스를 쿼리합니다.

  • 대용량의 데이터는 한 번에 필요하지 않습니다. 실제로 아주 작은 부분 만 사용되므로 일부 캐싱이 문제를 해결할 수 있습니다. 실제로 누군가가 이미이 문제에 직면하고 캐싱이 올바른 대답 이었으면합니다.

"지식 기반"은 지금까지는 복잡한 데이터 구조로, 일부 쿼리 언어를 사용하여 데이터베이스를 쿼리하는 것과 비슷한 방식으로 쿼리 할 수 ​​있습니다. 나는. 그것은 키 연산에 의한 단순한 룩업 값이 아니며, 주어진 기준에 일치하는 것으로 객체를 식별하기 위해 다수의 서브 - 쿼리를 필요로한다.

내가하려는 일에 대한 구체적인 예를 들어주세요. langutils과는 달리, 나는 파서를 생각해 내고 있는데, 나는 "예측 파서 (predictive parser)"라고 불렀다. 용어가 이미 사용되고 다른 것을 의미한다면 미안하다. 주요 개념은 단어에 POS 태그를 할당하는 대신, 그런 다음 유추 된 정보에 일련의 규칙을 적용하여 원래의 가정을 반복적으로 수정합니다. 나는 어떤 방식으로 그것을하려고 노력하고 있습니다. 특정 접두사가 주어지면 엔진은 "학습 된 지식"에 기초하여 연속을 생성합니다. 나는. 지식 기반에서 접두어 "나는 할 수있다"는 거의 확실하게 동사구가 뒤 따른다는 것을 알았다고 가정 해보십시오. 파서는 오류가 발생하지 않는 한 동사구를 가정하고 구문 분석합니다. 어려운 부분은 올바른 접두사를 찾는 것입니다. 나쁜 것은 "나는 ~ 할 것이다"와 "너는"같은 우선 순위가 동등한 우선 순위를 갖게된다는 것입니다. 즉, 무작위, 알파벳순 등의 순서로 일치 여부를 검사하게됩니다. 아이디어는 지식 습득 중에 지식 기반은 이러한 방식으로 정보를 저장하고 검색하는 방법을 배우게 될 것이며, 가장 가능성있는 정보가 먼저 검색되고 가장 가능성이 적은 정보는 초기에로드되지 않을 것입니다.

이것은 CPU 캐시가 작동하는 것과 다소 비슷한 개념입니다. 그래서, 내가 쓴 것이 너무 길면 : 나는 데이터 구조를 찾고 있는데, CPU 캐시와 같은 기능을한다. 현재 캐시 된 것은 메모리에 있고, 그렇지 않은 것은 데이터베이스 나 파일로 저장된다.

추신. 내 태그 모음에 대해 죄송합니다. 나는 그것이 내 질문을 정말로 설명하지 않는 것처럼 느낀다. 질문이 어디에 속하는지 알면 조정할 수 있습니다.

+1

이것은 어려운 디자인 문제입니다. 성능이 중요하지 않고 유지 보수성 (데이터의 중요성)이 중요하다면 데이터베이스에 대해 말해 보겠습니다. 주요 프로세스가 태깅 인 경우 토큰 당 데이터베이스 왕복이 일반적인 비용이됩니다 (쿼리의 경우 업데이트가 어렵습니다). 실시간 Markov의 경우 데이터 **가 핵심으로 있어야합니다. – wildplasser

+0

두 가지 수준의 구조 - 접두사 및 규칙 사용법 - 접두사는 규칙에 대해 1 : M이고 두 가지 모두 색인되어 도움이 될 수 있습니다. 접두사 색인은 정상이지만 규칙 사용 색인은 동적이며 가중치가 있으며 접두어 내에서 가중치에 따라 정렬됩니다. 학습 과정은 a) 규칙 사용 표 b) 규칙 사용 지수 c) 색인의 가중치 d) 접두사 표 및 접두어 색인을 채울 것이다. 이 구조는 캐시 될 수 있습니다. 두 개의 인덱스와 작은 프리픽스 집합에 적합한 규칙 집합입니다. 그러한 가중치가 적용된 색인 구조가 존재하는지 나는 모른다. –

+0

Datomic과 같은 사운드는 청구서에 잘 어울립니다. 그것은 당신이 묘사하는 것과 매우 유사한 캐싱 모델을 가지고 있으며 데이터 로그에 기반한 쿼리 시스템을 가지고 있습니다. –

답변

1

우리는이 부분을 고려하는 경우 :

생각이다 지식 베이스, 를 저장하고 같은 방법으로 정보를 조회하는 법을 배워야 할 지식 획득 과정이 그 가능성이 가장 높은 prefices는 것이지만 먼저 검색하고, 최소 가능성이있는 프리픽스는 처음에로드되지 않습니다.

내가 올바르게 당신을 이해한다면, 당신은 n 그램을 다루는 작업을 다루고 있습니다. 귀하의 상황에서 접두사에 대한 명시적인 제한을 두지 않으므로 일반적으로 합리적인 한도가 적용되며 4-5 단어 n 그램이라고 가정 할 수 있습니다. 그런 n 그램이 많이 있습니다. 실제 자료에서 쉽게 기가 바이트의 데이터를 얻을 수 있습니다. 그러나 자신을 3-gram으로 제한하더라도, 영리한 전처리를하지 않으면, "좋은"n-gram을 어떻게 든 분리 할 수 ​​있습니다. (적당한 평활화와 결합하면 이것이 실현 가능한 해결책이 될 수있다).

n-gram의 크기 이외에 나쁜 소식은 Zipf's law으로 배포된다는 것입니다. 기본적으로 캐싱은 그다지 유용하지 않습니다.

그래서 데이터를 로컬 컴퓨터의 빠른 데이터베이스에 넣으십시오 (어쩌면 dbm의 일부 변형). 모든 것을 메모리에 넣을 수 있다면 Memcached 또는 Redis가 더 빠를 것입니다.

+0

"the"캐싱의 경우, 하지만 일반적인 문제는 중간 빈도를 갖는 n-gram에 대해 가장 많은 양의 요청을 받게된다는 것입니다. 따라서 가장 빈번한 n 그램의 20 %를 캐쉬하면 요청이 20 %, 어쩌면 30 %가됩니다. 좋은 캐시 유스 케이스는 가장 자주 사용되는 항목의 20 %로 요청의 80 %를 제공 할 수있는 경우입니다. (그러나이 주제에 대한 나의 이해는 정확하고 불완전하지 않을 수있다. –

관련 문제