김기도(olaf.kido) / kakao corp.(미래미디어파트)
---
사용자에게 알맞은 뉴스를 전달하기 위해서는 언론사에서 전달해주는 기본 정보 이외에도 컨텐츠의 다양한 특성을 파악하여 이를 사용자와 연결 짓는 것이 중요합니다. 다양한 특성 정보들 중에서 기사의 유형이나 핵심 주제 같은 것들은 컨텐츠 본문을 자연어 처리해서만 얻을 수 있기 때문에 분석하기가 매우 까다롭습니다. 본 발표에서는 Deep Learning 기술을 사용한 '뉴스 메타 태깅 시스템'의 개발 사례를 소개합니다. 이 사례를 통해 분석 모델 학습부터 운영 시스템 개발 과정에서의 고민과 Lessons Learned를 공유하도록 하겠습니다.
김기도(olaf.kido) / kakao corp.(미래미디어파트)
---
사용자에게 알맞은 뉴스를 전달하기 위해서는 언론사에서 전달해주는 기본 정보 이외에도 컨텐츠의 다양한 특성을 파악하여 이를 사용자와 연결 짓는 것이 중요합니다. 다양한 특성 정보들 중에서 기사의 유형이나 핵심 주제 같은 것들은 컨텐츠 본문을 자연어 처리해서만 얻을 수 있기 때문에 분석하기가 매우 까다롭습니다. 본 발표에서는 Deep Learning 기술을 사용한 '뉴스 메타 태깅 시스템'의 개발 사례를 소개합니다. 이 사례를 통해 분석 모델 학습부터 운영 시스템 개발 과정에서의 고민과 Lessons Learned를 공유하도록 하겠습니다.
Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
Obfuscation 101
: 난독화, 프로가드, R8, 트랜스포머 API
김용욱
카카오뱅크
영화와 커피를 좋아하는 은행원. 반지 원정대는 극장에서만 15번을 보았다. 데이터베이스를 전공했지만 급변하는 모바일 환경에 반해 안드로이드에 승선했고 Realm을 통해 모바일과 데이터베이스를 융합했다. 그후 새로운 가능성을 찾아 금융으로 왔다.
링크드인의 Big Data Recommendation Products - 어제의 데이터를 통해 내일을 예측한다Evion Kim
DEVIEW 2013 발표 내용입니다 - http://deview.kr/2013/detail.nhn?topicSeq=36
링크드인 플랫폼 상의 다양한 Recommendation Product들, 이 제품들의 키워드는 바로 'Relevance(연관성)' 입니다. 가장 관련있는 데이터들을 제공함으로써 사용자의 삶을 더 쉽고 편하게 만들어 주는것이 링크드인 데이터 팀의 목표라 할 수 있겠습니다. 그렇다면 어떻게 해야 사용자에게 가장 연관성 높은 데이터를 제공 할 수 있을까요? 이에 대한 답을 한문장으로 요약하자면 '어제의 데이터를 분석하여 내일의 사용자의 행동을 예측한다' 가 될 것 같습니다.
본 발표에서는 이 한 문장을 좀 더 길게 풀어보려 합니다. 링크드인에서는 Hadoop, Key-Value Storage, Machine Learning등의 기술을 어떤 식으로 활용하여 연관성 높은 Recommendation Product를 만들고 있는지에 대해 소개해보겠습니다.
Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
Obfuscation 101
: 난독화, 프로가드, R8, 트랜스포머 API
김용욱
카카오뱅크
영화와 커피를 좋아하는 은행원. 반지 원정대는 극장에서만 15번을 보았다. 데이터베이스를 전공했지만 급변하는 모바일 환경에 반해 안드로이드에 승선했고 Realm을 통해 모바일과 데이터베이스를 융합했다. 그후 새로운 가능성을 찾아 금융으로 왔다.
링크드인의 Big Data Recommendation Products - 어제의 데이터를 통해 내일을 예측한다Evion Kim
DEVIEW 2013 발표 내용입니다 - http://deview.kr/2013/detail.nhn?topicSeq=36
링크드인 플랫폼 상의 다양한 Recommendation Product들, 이 제품들의 키워드는 바로 'Relevance(연관성)' 입니다. 가장 관련있는 데이터들을 제공함으로써 사용자의 삶을 더 쉽고 편하게 만들어 주는것이 링크드인 데이터 팀의 목표라 할 수 있겠습니다. 그렇다면 어떻게 해야 사용자에게 가장 연관성 높은 데이터를 제공 할 수 있을까요? 이에 대한 답을 한문장으로 요약하자면 '어제의 데이터를 분석하여 내일의 사용자의 행동을 예측한다' 가 될 것 같습니다.
본 발표에서는 이 한 문장을 좀 더 길게 풀어보려 합니다. 링크드인에서는 Hadoop, Key-Value Storage, Machine Learning등의 기술을 어떤 식으로 활용하여 연관성 높은 Recommendation Product를 만들고 있는지에 대해 소개해보겠습니다.
3. RTTI (Run Time Type Information )
• 런타임 중 타입에 대한 정보를 제공해주는 기능
실행시간에 타입에 대한 메타데이터를 생성하여 안전한 다운 캐스팅(dynamic_cast)을 지원한다.
안전하지 못한 다운 캐스팅 예시
4. RTTI와 메타 데이터
• 메타데이터
어떤 목적을 위해 만들어진 데이터를 위한 데이터
RTTI 사용 시, 이러한 메타데이터를 생성하고
해당 데이터를 참조해 원하는 정보를 찾아야함으로
속도가 느리고 메모리 사용량이 증가한다
이미지 파일 하나에도 많은 메타데이터가 있다
5. 쓰면 손해인 기능을 왜 만들어놨지?
위의 먹이 문제도 다형성을 활용하면 해결 가능한데?
6. 이처럼 필연적으로 다형성을 활용하기에 애매한 상황이 온다
혹은 코드 자체가 이미 다형성을 활용해 해결할 수 없는 구조가 되어있을 수 있음
8. 이러한 방식을 원시RTTI(primitive RTTI)또는 수동RTTI(manual RTTI) 라고 부르고
해당 방식 외에도 Custom RTTI를 구현해 사용하는 식으로 해결합니다.
이러한 방식 역시 타입 체크를 위한 메타데이터를 만들어 사용하게 되므로
가장 원시적인 RTTI라고 볼 수 있으며.
언리얼 역시 이러한 이유로 언리얼만의 메타데이터를 생성한다.
메타데이터를 만듬으로서 이것저것 유용한 기능들을 구현할 수 있다!
현재 프로젝트에선 아래와 같은 방식을 사용했습니다.
11. 리플렉션
프로그램이 자기 자신을 거울에 비친 것처럼 보고,
거울을 통해 자신의 구조와 성질을 알아내 조작할 수 있는 기능
C#, Java, Python, 등등 다른 언어의 경우,
언어차원에서 리플렉션을 지원하지만
C++은 지원하지 않으므로 직접 구현을 해야한다.
언리얼 역시 자체적으로 구현된 리플렉션을 제공한다.
Parse
12. 언리얼 리플렉션
언리얼에서 새로운 클래스를 만들 땐,
비쥬얼 스튜디오에서 생성하는게 아닌, 언리얼 엔진상에서 생성하도록 권장한다.
13. 언리얼 리플렉션
이렇게 생성된 헤더파일에는
언리얼에서 헤더파일을 파싱하기 위한
추가적인 코드들이 삽입되어있다.
프로젝트의 Intermediate 폴더를 보면 헤더파일을 파싱하여,
리플렉션을 위한 코드 파일이 새로 생성되있다.
14. UHT (Unreal Header Tool)
• 이렇게 사전 작업으로 헤더를 파싱하여, 메타데이터를 생성하는 역할을 담당
1. 빌드 시작 시, 모든 C++ 소스 코드를 스캔하여
UCLASS() , UFUNCTION(), UPROPERTY() 같은
마크업 키워드들을 찾는다.
2. 해당 파일을 파싱하여, 메타데이터를 추출한다.
3. 추출된 메타 데이터로 generated.h와 같은 추가적인 코드
파일을 생성한다.
15. 생성된 파일을 보게되면, 해당 클래스를 언리얼 오브젝트로 등록하고
변수나 함수들을 저장해놓는 코드가 생성되어있음을 볼 수 있다
이렇게 생성된 코드를 토대로 언리얼 시스템에 의해 관리될 수 있는
UObject 객체로 동작하게 된다.
23. Class Default Object (CDO)
• 클래스의 기본 속성과 동작을 정의하는 기본 인스턴스로서
해당 클래스로 생성되는 모든 인스턴스들에 적용된다.
앞서 설명한 UHT이 헤더파일을 파싱하여 생성되는 메타데이터 파일에
CDO를 생성하는 코드가 만들어진다.
24. 언리얼에서 UObject 하나가 초기화 되면
UClass 인스턴스 하나와 CDO인스턴스 하나가 만들어진다
( UClass 인스턴스는 앞서 말한 메타데이터를 담고있는 인스턴스이고
CDO 인스턴스는 static character warrior;같이 전역 변수라고 보면 될 듯?)
Class Default Object (CDO)
25. Class Default Object (CDO)
• 언리얼 오브젝트는 모듈 단위로 관리되고, 언리얼이 사용될 모듈들을 로딩하며,
로딩 시마다 CDO를 생성한다.
언리얼 엔진 실행시, 초기화 로딩 화면이 바로 CDO를 생성하는 시점이다.
26. Class Default Object (CDO)
• 언리얼 오브젝트의 생성자는 CDO를 제작하기 위한 목적으로 사용된다.
CDO는 모듈 로딩 시점에 생성되니,
모듈이 로딩 완료된 이후의 실제 게임플레이 상에서는 생성자가 호출되지 않는다.
대신 BeginPlay() 같은 함수를 제공한다.
생성자는 CDO생성을 위해
모듈 로딩시에만 호출된다.
게임 플레이시에는 BeginPlay를 사용한다.
27. 요약
• C++에서 메타데이터를 만들면 다양한 기능 제공이 가능하다.
그렇기 때문에 언리얼에서는 자체적으로 메타데이터를 구성하여
리플렉션이나 CDO 같은 유용한 기능들을 제공한다.
리플렉션은 거울에 비친 모습을 보면서 자기자신을 관리하는 기
능을 의미한다.
CDO는 비유하자면 ‘원본 레시피‘ 이고 이를 바탕으로 여러 요리
를 만들 수 있다.
28. 참조 사이트
언리얼 리플렉션 공식 문서 https://www.unrealengine.com/ko/blog/unreal-property-
system-reflection
언리얼 CDO 공식 문서
https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP
/UnrealArchitecture/Objects/
이득우님 블로그
https://koreanfoodie.me/912
CDO관련 블로그
https://kyoun.tistory.com/125
+ Chat GPT