제가 들은 바로는 마르코프 체인 마코프 체인에 대해 더 많이 배우고 간단하고 재미있는 마코프 체인 애플리케이션을 개발할 때가 되었습니다. 마코프 체인의 수학적 세부 사항에 얽매이고 싶지 않으시다면 애플리케이션을 만들면서 배우는 것이 가장 재미있을 것입니다!
이 블로그에서는 애플리케이션을 구축하는 방법을 보여드리겠습니다. "Marky" 마르코프 체인을 사용하여 트위터 기록을 기반으로 무의미한 트윗을 생성합니다. 이러한 트윗을 생성하기 위해 데이터를 저장하고 처리하는 데 Couchbase Server를 사용합니다.
Marky는 Couchbase Server를 사용합니다. 조회수 데이터 처리
마키의 지도 기능은 :
만약(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에게 감사드립니다.