분류

카우치베이스와 마르코프 체인의 재미

제가 들은 바로는 마르코프 체인 마코프 체인에 대해 더 많이 배우고 간단하고 재미있는 마코프 체인 애플리케이션을 개발할 때가 되었습니다. 마코프 체인의 수학적 세부 사항에 얽매이고 싶지 않으시다면 애플리케이션을 만들면서 배우는 것이 가장 재미있을 것입니다!

이 블로그에서는 애플리케이션을 구축하는 방법을 보여드리겠습니다. "Marky" 마르코프 체인을 사용하여 트위터 기록을 기반으로 무의미한 트윗을 생성합니다. 이러한 트윗을 생성하기 위해 데이터를 저장하고 처리하는 데 Couchbase Server를 사용합니다.

Marky는 Couchbase Server를 사용합니다. 조회수 데이터 처리
마키의 지도 기능은 :

함수 (doc, 메타) {
   만약(doc.body) {
       var 단어 = doc.body.분할(/s+/);
       만약 (단어.길이 >= 1) {
           emit([null, 단어[0]], 1);
       }
       에 대한(var i = 0; i < (단어.길이 - 1); i++) {
           var pair = [단어[i], 단어[i+1]];
           emit(pair, 1);
       }
   }
}

간단히 설명하자면, 2개의 연속된 단어에 대해 슬라이딩 창을 사용하여 텍스트를 작은 덩어리로 분할하고 통계적 가중치를 기반으로 문장을 형성하기 위해 이러한 덩어리를 올바른 순서로 재그룹화하려고 시도합니다. 결국에는 재미있게 읽을 수 있는 무의미한 텍스트를 얻게 됩니다.

예: "이 블로그에서는 애플리케이션을 빌드하는 방법을 보여 드리겠습니다."라는 입력 텍스트가 주어지면 Key,Value 쌍을 출력합니다.

키 값

[null,"In"] 1
["In","this"] 1
["this","blog","] 1
["blog","we"] 1
["we","will"] 1
["will","show"] 1
["show","you"] 1
["you","how"] 1
["how","to"] 1
["to","build"] 1
["build","an"] 1
["an","application"] 1

단어를 생성하려면 마지막으로 출력한 단어를 사용하여 뷰를 쿼리합니다. 예를 들어, "the" 다음에 오는 단어의 후보를 얻으려면 쿼리 매개 변수 startkey=["the"]&endkey=["the",{}]&group_level=2&reduce=true를 사용합니다.

이렇게 하면 "the"로 시작하는 모든 단어 쌍을 출력하고, 동일한 쌍을 그룹화한 다음 각 그룹에 대해 뷰의 reduce 함수를 실행합니다. Marky는 기본 제공된 reduce _sum 함수를 사용하여 주어진 값을 합산합니다. dkatz_ebooks를 뒷받침하는 데이터베이스에서 이 함수를 실행하면 다음과 같은 결과가 나옵니다:

키 값
["the","#1″] 1
["the","100″] 1
["the","2″] 1
["the","ability"] 3
["the","absolute"] 1
["the","answer"] 1
["the","app"] 1
["the","application"] 1
["the","area,"] 1
["the","background."] 1

"the" 뒤에 출력할 단어를 선택하려면 그 뒤에 오는 단어를 무작위로 선택하되, 입력에 나타나는 단어 쌍의 빈도에 따라 선택에 가중치를 부여합니다. 즉, 여기서 '능력'은 3/12 또는 25%의 선택 확률을 가지며, 나머지 단어는 각각 1/12 또는 8.3%의 선택 확률을 갖습니다.

문장의 시작 부분에서 첫 번째 단어는 null과 짝을 이루므로(예: 앞의 예에서 [null, "In"]), 동일한 쿼리를 null로 수행하여 새 출력을 시작하고 생각이나 트윗 또는 입력이 무엇이든 시작될 가능성이 있는 단어를 가져올 수 있습니다. 운이 나빠서 첫 번째 보기 쿼리에서 후보 단어를 얻지 못한 경우에도 이 작업을 수행해야 합니다. 쿼리의 단어가 우리가 처리한 입력 텍스트의 끝에만 표시된 경우 이런 일이 발생할 수 있습니다.

마키 애플리케이션

Marky는 간단한 클로저 래퍼 커뮤니티에서 구축했습니다. marky를 설정하려면 marky-config.clj 파일을 만들어 Couchbase Server 클러스터와 트위터 계정을 가리키면 됩니다. 시드 데이터, 트위터 사용자 계정 또는 아톰 피드를 추가하면 앱을 실행할 준비가 완료됩니다.

{:버킷 "기본값"
pass ""
:cburl "https://localhost:8091/"
트위터 {:앱키 "XXXXXXXXX"
          :앱-비밀 "XXXXXXXXXX"
          :사용자-토큰 "XXXXXXXX"
          :사용자-비밀 "XXXXXXXX"}
일자리
[; :기간, :after는 초 단위, :ttl은 일 단위입니다.
 {:유형 :트위터 :사용자 "user-handle1" :기간 3600 :TTL 60}
 {:유형 :트위터 :사용자 "user-handle2" :기간 3600 :TTL 60}
 {:유형 :보내기 트윗 :기간 3600 :이후 600}
 {:type :atom :url "https://some-domain/rssfeed.php" :period 86400 :ttl 60}]}

다음은 재미있는 마키의 트윗입니다.

마키를 얻고 싶으신가요?

Marky 소스 코드를 다운로드할 수 있습니다. 여기
클로저 래퍼 프로젝트에 기여할 수도 있습니다. 여기

즐거운 시간 보내세요!

--

클로저로 코드를 작성해준 Aaron에게 감사드립니다.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 제니퍼 가르시아

의 선임 웹 관리자입니다. 웹 사이트 관리자로서 디자인, 구현, 콘텐츠 및 성능을 포함한 웹 사이트 자산에 대한 전반적인 책임을 맡고 있습니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.