최근에 데이터를 좀더 쉽게 Crawling 할 수 있는 방법이 있지 않을까 생각하다가 OpenCV의 Face Detection 과 dlib의 Face Align 코드를 합쳐보았습니다.

얼굴관련 연구하시는분들에게는 나름 유용하게 쓰일 수 있지 않을까 생각하여, GUI까지 구현하여 깃헙에 올려놨는데, 혹여나 필요하신분 계실까 싶어 링크 올려드립니다.

Usage 항목과 Installation 항목 참고하여 주시기 바랍니다.

[https://github.com/Jaesung-Jun/Cut-And-Save-Faces](https://github.com/Jaesung-Jun/Cut-And-Save-Faces)

Posted by uniqueone
,

#nlp_news #tokenizers #ner #felix_hill #ai_dungeon

올해의 첫 NLP 뉴스입니다! 최근 자연어 처리 관련 재밌는 소식들이 많아 어떤 소식을 전해드리는게 좋을까 고민을 하다가, 아래 5개 소식을 선정해 소개해드리고자 합니다. 본 글을 읽는 모든 분들께 유익한 글이 되었으면 좋겠습니다 🤗

ㅡㅡㅡㅡㅡㅡㅡㅡㅡ

1. Hugging Face's Tokenizers

자연어 처리 전문 스타트업 Hugging Face 사에서 토크나이저 라이브러리를 오픈소스로 공개하였습니다. 다들 아시다시피 Deep Learning을 연구 및 적용하는 연구자와 개발자들이 늘어남에 따라 많은 모델링 관련 오픈소스들이 공개되어 왔습니다. 그리고 Hugging Face의 transformers, Facebook의 fairseq, Google의 tensor2tensor 등의 오픈소스가 공개됨에 따라 모델 구현은 이전보다 많이 수월해진 면이 있습니다.

그러나 자연어 데이터 전처리에 필수적으로 포함되는 토큰화 작업에서 생기는 성능 이슈로 인해 여전히 전처리 과정에서의 병목은 존재합니다. 이처럼 전처리 과정에서 발생하는 병목 현상을 해소하고, 다른 오픈소스들과 같이 연구자 및 개발자들에게 더 나은 편의를 제공하기 위해 Hugging Face 사가 토크나이저 오픈소스를 새로이 공개하였습니다!

Hugging Face 사의 'tokenizers'는 [그림 1]과 같이 4개의 컴포넌트가 하나의 파이프 라인으로 구성되며, 각 컴포넌트는 다음 역할을 담당합니다.
- Normalizer: 입력된 텍스트 데이터에 정규화를 수행
- PreTokenizer: 공백을 이용한 간단한 문장 Split을 수행
- Model: BPE, WordPiece, SentencePiece 등의 Tokenization 알고리즘이 적용
- PostProcessing: (Optional) Model의 결과 값에 후작업을 수행 (e.g. Language Modeling을 훈련하기 위해 Special tokens를 더해줄 수 있음)

tokenizers 라이브러리는 Rust로 구현되어 단일 CPU 기준 GB 사이즈의 텍스트를 처리하는데 약 20초 미만이 소요되었다고 하며, 현재 Node.js와 Python 바인딩을 제공해주고 있습니다! 앞으로 자연어 처리 관련 연구 및 개발에 있어 많은 도움을 받을 라이브러리가 될 것 같습니다. 역시 갓 Hugging Face !

2. NER Papers repository

어제 소개해드린 CMU CS 11-747 강좌에 Graham Neubig과 함께 Co-instructor로 등록되어 있는 Pengfei Liu가 2013년부터 2020년까지 8년 간 ACL, EMNLP, NAACL, Coling, ICLR, AAAI, IJCAI 등 7개의 최상위 학회에 제출된 NER 논문들을 큐레이팅한 'Named-Entity-Recognition-NER-Papers' 레포지토리를 공개하였습니다.

논문 리스트와 더불어 NER 연구에 주로 사용되는 벤치마크 데이터셋 정보도 함께 제공해주고 있으며, 리스트 뷰어의 경우 검색, 인용 수 기준 정렬 등 부가적인 편의 기능까지 제공합니다. 특히 각 논문에 카테고리 태그를 모두 달아둠으로써 카테고리 별로 논문을 선별해 볼 수 있는 기능이 많은 연구자들에게 요긴하게 사용될 것 같아 소개를 드립니다 🙂

3. Dair's news letter

Medium에서 자연어 처리와 관련한 좋은 아티클를 많이 작성해주는 dair.ai에서 뉴스 레터를 시작하였습니다. 1~2주 간격으로 자연어 처리, 머신러닝과 관련된 최신 소식들을 전해준다고 합니다. 관심 있으신 분들이 생각나실 때 마다 여러 소식들을 캐치업하기 좋을 자료가 될 것 같습니다.

그리고 이번 첫 편에서는 Hugging Face의 tokenizers, TensorFlow 2.1에 새로이 추가된 TextVectorization 레이어, dair.ai가 Medium을 통해 발행했던 NLP Review in 2019 등을 다루었습니다!

4. Felix Hill's Non-Compositional

언어학, 수학 등에는 Compositionality의 원리가 존재한다고 합니다. (정확하지는 않지만 제가 이해한 바에 의하면) 이는 한 Expression의 의미는 해당 Expressoin을 구성하는 성분들의 의미와 그 성분들을 묶어주는 규칙에 의해 결정된다는 원리입니다. 언어학자들은 자연어가 대개 Compositional 하지만, Idiom과 같이 해당 원리가 적용되지 않는 예외도 존재한다고 이야기합니다. 해당 원리에 부합하지 않는 더 간단한 예로는 "I am home"과 같은 문장을 들 수 있겠네요.

DeepMind에서 인공지능을 연구하는 Felix Hill은 언어학자들과 다른 의견을 가지고 있는 것 같습니다. Felix는 자연어가 기본적으로 Non-Compositional 하다고 주장합니다. 아래는 Felix의 블로그 소개 글입니다.

"자연어는 수학이나 논리학 등의 형식 언어와 다르기에 흥미롭다. 사람들은 때때로 자연어가 Compositional하다고 생각하지만, 자연어는 Compositional한 언어가 아니다. 만약 당신이 자연어가 Compositional하다 생각한 바로 그 사람이라면, 내 블로그 Non-Compositional을 한 번 확인해봐라"

제게는 다소 생소한 언어학과 관련된 이야기이지만, Felix Hill의 "Natural Language is Non-Compositional" 주장에 관심이 있으실 분들이 계실 것 같아 소개를 드립니다. 해당 주장에 흥미가 생기신 분들은 아래 링크를 참조해주세요!

P.S Felix Hill은 Yoshua Bengio, 조경현 교수님과 같은 세계적 석학들과 Co-work을 하는 인공지능 관련 권위자이자 인지과학, 전산 언어학을 전공한 학자입니다. 이러한 Felix의 위 주장은 현재 Twitter에서도 꽤나 논쟁이 되고 있으니, 심각하게 받아 들이시기 보다는 다양한 관점의 주장을 접한다 생각하고 참고하시는게 좋을 것 같습니다 🙂

5. AI Dungeon 2

작년 12월 aidungeon.io 사에서 Open AI의 Pre-trained GPT-2 모델을 활용한 텍스트 기반 게임 AI Dungeon 2를 새로이 내놓았는데, 이게 해외에서 반응이 꽤나 좋습니다. 해당 게임은 GPT-2-small을 사용해 구현했던 AI Dungeon 1을 발전시킨 게임으로, 이번에는 OpenAI가 공개한 모델 중 가장 큰 GPT-2-large를 활용해 텍스트를 보다 안정적으로 생성할 수 있는 게임으로 중무장해 돌아왔습니다.

그리고 본 게임을 구현하며 진행했던 GPT-2 관련 여러 실험 + 튜닝 등의 이야기를 담은 메이킹 스토리 아티클이 있는데 해당 글도 상당히 재미있습니다. 먼저 모델 Fine-tuning의 경우, chooseyourstory.com에서 제공하는 모험 시나리오 관련 데이터셋을 활용해 진행했다고 합니다. 그리고 Text generation 모델들이 겪는 고질적인 문제인 '중복 단어의 생성 문제'를 해결하기 위해 Salesforce 팀이 CTRL에서 적용한, 이전에 이미 생성된 단어들의 확률 값을 의도적으로 줄여주는 방식을 본 게임 모델 개발에도 차용했다고 합니다.

또한 컨텍스트를 유지하기 위해 모델이 생성해낸 '상황 텍스트'와 '사용자의 입력'이 함께 다음 입력 값으로 들어가게 되며, 현재 입력 값 뿐만 아니라 최대 10턴 이전의 입력까지 Memory로 함께 가져가며 이전 상황 설정들을 기억하도록 하였습니다 (최적 메모리로는 이전 8턴 까지의 값들을 사용). 모델의 한계로는 상황 생성에 있어 자연스러운 텍스트를 생성해내고 있긴 하나, 대화문 등의 텍스트를 생성할 때 'Who is who?'를 파악하는 면에서 취약점을 보이고 있다고 합니다.

개인적으로 게임을 몇 번 진행해보았는데 꽤나 흥미로운 게임이었으며, Text generation 모델을 이러한 부문에서도 사용할 수 있구나라는 깨달음을 얻을 수 있었습니다. 그리고 메이킹 스토리의 경우, 모델을 적용하며 마주하게 되는 여러 문제들에 대한 대응 방안(apply CTRL tip, Memory network, ...)이 많이 담긴 좋은 글이기에 꼭 읽어보시길 추천드립니다. 시간 되실 때, 게임도 한 번 해보세요! 😆

ㅡㅡㅡㅡㅡㅡㅡㅡㅡ

[References]

Hugging face's tokenizer: https://github.com/huggingface/tokenizers

NER papers: https://github.com/pfliu-nlp/Named-Entity-Recognition-NER-Papers

Dair's NLP newsletter: https://github.com/dair-ai/nlp_newsletter

Felix Hill's Non-Compositional: https://fh295.github.io/noncompositional.html

AI Dungeon 2: https://play.aidungeon.io/
AI Dungeon 2 making story: https://pcc.cs.byu.edu/2019/11/21/ai-dungeon-2-creating-infinitely-generated-text-adventures-with-deep-learning-language-models/

Posted by uniqueone
,