|
2019년 2학기 정보검색 강의 내용 - eCampus(가상대학)
1주차 [9월02일 - 9월08일]
1. 정보검색 분야 소개
1) 최신정보검색론
http://web.skhu.ac.kr/~mckim1/Lecture/IR/contents.htm (B. Yates, 2001)
https://book.naver.com/bookdb/book_detail.nhn?bid=6244992 (C. Manning, 2010)
https://blog.naver.com/mrharu/10140248183 (B. Croft, 2012)
2) 정보검색 관련 분야: NLP, 빅데이터, 머신러닝
Introduction to NLP, bigdata analytics, textmining, and machine learning
3) 텍스트 마이닝 분야 - 주요 내용
Mastering Text Mining with R, A. Kumar and A. Paul, 2016
---
1.Statistical Linguistics with R
2.Processing Text
3.Categorizing and Tagging Text
4.Dimensionality Reduction
5.Text Summarization and Clustering
6.Text Classification
Text Analytics with Python, D. Sarkar, 2016
---
1.Natural Language Basics
2.Python Refresher
3.Processing and Understanding Text
4.Text Classification
5.Text Summarization
6.Text Similarity and Clustering
7.Semantic and Setiment Analysis
2. 한글코드 문제 (KS 완성형, 유니코드, UTF8 인코딩)파일 504.4KB PDF 문서
<참고> EUC-KR = KS완성형 + ASCII, CP949 = EUC-KR + 8822자
- KS C 5601-1987(KS X 1001), EUCKR, CP949
http://cafe.daum.net/sskang-ir/VQRd/1
- 한글코드 관련 기초지식 및 실습
http://cafe.daum.net/sskang-ir2/VHiU/8
http://cafe.daum.net/sskang-ir/SMLj/3
- UTF-8 인코딩 기법
0xxxxxxx // 7 비트 영역
110xxxxx 10xxxxxx // 8~11 비트 영역
1110xxxx 10xxxxxx 10xxxxxx // 12~16 비트 영역
11110zzz 10zzxxxx 10xxxxxx 10xxxxxx // 17~21 비트 영역
<참고> UTF-7은 0x00 을 2바이트로 인코딩
- UTF-16 서러게이트 영역이란?
Surrogate 영역 -- 1024 x 1024 = 100만자 (2바이트 x 2바이트)
[0xD800~DBFF] x [0xDC00~DFFF]
--> 110110ZZ ZZxxxxxx 110111yy yyyyyyyy
<실습> 완성형 <-> 유니코드 코드 변환
iconv 라이브러리 -- https://www.gnu.org/software/libiconv/
kconv.exe, kconv2.exe -- https://cafe.naver.com/nlpkang/6
[과제 1] 한글코드 관련 주제
1) KS 완성형, KSX 1001, CP949, EUC-KR의 차이점은?
2) 유니코드와 UTF 인코딩, UTF16의 LE, BE, surrogate 영역이란?
3) 자바, 파이썬 등의 언어에서 한글코드 변환 방법은?
4) BOM(Byte Order Mark)이란 무엇인지, 필요성을 쓰시오.
<제출방법> 가상강의실에 PDF 파일 업로드
<참고 1> 위키피디아 한글텍스트에는 한글 음절이 11,172자 중에서 몇 자가 사용되고 있을까?
<참고 2> "위키백과 다운로드"로 구글링하면 한글 wiki text를 다운 받을 수 있음. (또는 아래 링크에서)
http://203.246.112.71/BigText/ko_wiki_text_EUCKR.zip
<참고 3> URL에서 흔히 볼 수 있는 "%EC%9B%90%ED%94%BC%EC%8A%A4"의 한글 단어는?
<참고 4> 한글 텍스트 파일이 KS완성형인지, UTF8인지 알 수 있는 방법은?
2주차 [9월09일 - 9월15일]
[공휴일 보강] 동영상 강의 및 pdf 자료 : 한글코드, UTF
- 한글코드 및 코드 체계
- KS 완성형
- 유니코드
- UTF 인코딩
- 빈도계산 : ASCII 문자 빈도, 한글 음절 빈도
NLP와 정보검색, 텍스트마이닝(머신러닝) 관련 주제에 대해
기말과제(term project)를 수행할 예정입니다.
1) 과제발표 및 시연, 2) 중간보고서, 3) 최종보고서 제출
[기말과제] 정보검색, 텍스트마이닝 관련 주제
<주제> 아래 주제 중에서 택일
- 신문기사 3줄 요약
- 문서 유사도(표절 검사 등)
- 언어모델 구현
- 머신러닝 관련 주제
- 기타
<참고> 1~3인 팀 프로젝트로 진행 가능
2인 이상일 경우에 맡은 부분에 대해 중간/최종 보고서를 각자 작성.
[실습] 한글코드 변환
윈도용 iconv.exe 설치 및 사용
1) 아래 사이트에서 Download의 "Setup program"
http://gnuwin32.sourceforge.net/packages/libiconv.htm
2) 아래 경로를 환경변수에 추가
C:\Program Files (x86)\GnuWin32\bin
3) cmd 창에서 iconv.exe 사용
C> iconf.exe -l // list of code names
C> iconv.exe -f utf-8 -t cp949 input.txt > output.txt
<참고> hexa 에디터 또는 od.exe: C> hexa.exe i.txt
while ((ch=getchar()) != EOF) printf(" %x", ch);
한글 관련 이슈 -- 소팅 문제, 자소 분리, 음절빈도, 어절빈도 조사
한글코드(KS 완성형, 유니코드)와 관련된 문제들
1) 소팅 문제 -- KS 완성형 2350자와 8822자 혼합된 경우에
2) UTF-16 인코딩된 string을 C/C++에서 처리하는 문제
3) 음절 합성 및 자소 분리 문제
- 초/중/종성 정수값을 입력하여 완성된 음절 출력
- 완성된 음절을 입력하여 초/중/종성 값을 출력
<참고> 초성: 1~19, 중성: 1~21, 종성: 0~27
4) 음절빈도 조사
KS 완성형, UTF-8 인코딩 문서의 음절빈도 조사 및 출력
5) 어절빈도 조사
https://cafe.naver.com/nlpk/60 -- 한글 말뭉치, wordcount.exe
6) 코드변환 및 BOM 문제
[과제 2] 음절 합성, 자소 분리, 음절빈도 조사
1) 음절 합성 및 자소 분리 문제
초/중/종성 정수값을 입력하여 완성된 음절 출력
완성된 음절을 입력하여 초/중/종성 값을 출력
<참고> 초성: 1~19, 중성: 1~21, 종성: 0~27
2) 음절빈도 조사
한글 대용량 텍스트 파일에 대해 음절빈도 및 출현확률 계산
- 그 텍스트에서 발견된 한글 음절의 개수
- 고빈도 음절 n개에 대해 <빈도, 출현확률, 누적출현확률>을 출력
(n은 입력을 받아서)
- 결과출력 -- 대용량 입력파일의 고빈도 순으로 음절 a,b,c,...
a: freq(a), prob(a), prob(a)
b: freq(b), prob(b), prob(a)+prob(a)
c: freq(c), prob(c), prob(a)+prob(b)+prob(c)
<제출내용> 1) 소스코드, 2) 보고서(pdf) -- 설명 및 실행결과 스샷
<주의사항> 실행파일, 대용량 데이터 첨부시 감점
[퀴즈] KS완성형, 유니코드와 UTF인코딩
1. KS완성형 한글코드에 대하여
2. 유니코드와 UTF인코딩에 대하여
3주차 [9월16일 - 9월22일]
3-1. 문장생성 확률 계산 기법
- Calculate the probability of a sentence : P(s)
- 문장 생성 확률 계산: 음절(문자) 단위
- 문장 생성 확률 계산: 어절(word) 단위
- "Bag Of Words(BOW)” assumption
Word independence assumption
[과제 3] 문장생성 확률 계산
아래 2가지 방법으로 임의의 입력문장에 대해 문장생성 확률 계산
1. 문장 생성 확률 계산: 음절(문자) 단위
2. 문장 생성 확률 계산: 어절(word) 단위
<참고> 문장생성 확률 구하는 프로그램의 입력문장의 예
나는 밥을 먹고 학교에 간다
나는 법을 먹고 학교에 간다
나는 밥을 묵고 학교에 간다
너는 밥을 먹고 학교에 간다
너는 법을 묵고 학교에 산다
<참고 1> 제출할 파일 목록: 보고서 pdf 파일, 소스코드 파일
<참고 2> 빈도계산에 사용된 텍스트 파일 및 빈도계산 결과 파일을 첨부하지 않을 것. 대신에, 보고서에 어떤 텍스트 파일을 사용했는지, 그 파일의 크기(어절수 등) 등에 대해 자세히 설명해야 함.
<참고 3> 실행결과 화면 스샷
10개 이상의 문장에 대해 실행한 결과의 스샷을 보고서 pdf 파일에 포함해야 함.
3-2. 키워드 추출, 워드 클라우드 등
- 한글 문서에서 키워드 추출
Tokenizer, 형태소 분석기 사용
- 워드 클라우드 생성
- 대용량 한국어 원시 말뭉치
3-3. 형태소 분석기 -- KLT2000
KLT2000 형태소 분석기 사용법 예
C> kma.exe test.txt
C> index2018.exe test.txt
C> indexT2018.exe test.txt
C> cnn.exe -x // 복합명사 분해
국민대학교자연어처리연구실
<참고> index.exe, kma.exe 빌드 방법
1) API/index/src/indexS.c을 컴파일하면 index.exe를 만들 수 있음.
2) API/kma/src/*.c 중 아래 .c을 컴파일하면 kma.exe 만들 수 있음.
kma.c out-ham.c out-tok.c err-code.c readsent.c
<주의> 이 때, EXE/KLT2000-TEST.DLL을 링크해야 함.
3-4. indexing, stemmer, tokenizer
Porter stemmer -- 영어
– http://9ol.es/porter_js_demo.html
– https://tartarus.org/martin/PorterStemmer/
Snowball stemmer -- 다국어
– https://snowballstem.org/demo.html
Tokenizer 데모
- https://text-processing.com/demo/tokenize/
<참고> NLTK -- https://text-processing.com/demo/
3-5. 빅데이터 시각화 wordcloud파일 719.9KB PDF 문서 편집
3-6. 형태소 분석기 실행파일 만드는 방법
4주차 [9월23일 - 9월29일]
4-1. ngram 언어모델과 smoothing 기법파일 454.4KB PDF 문서 편집
- Markov assumption
- Shannon game -- next word prediction
- Language model
- Ngram model
4-2. 문서 벡터와 문서 유사도 계산파일 1.3MB PDF 문서 편집
- feature vector -- document vector
- TF-IDF
- Cosine similarity
- feature selection
- Zipf's law : freq -> rank 매핑
4-3. 벡터 유사도 계산 기법파일 293.5KB PDF 문서 편집
Jaccard 계수, Cosine 계수 등
[과제 4] 문서벡터 구성 2019-09-26 00:00:00 ~ 2019-10-08 00:00:00 편집
첨부한 문서집합에 대해 순서대로 아래 작업을 수행하시오.
1) 키워드 추출(주로 명사)
2) wordid 부여 및 DF 계산
3) 문서벡터 구성
<제출물> 소스코드, 문서벡터 파일
<참고> 아래 4), 5)번은 [과제 5]로 부여할 예정임
4) 유사도 행렬 구성
5) 문서 클러스터링
한글 텍스트 파일 -- 특허 1229개
- 신문기사 383개 문서집합과 더불어 아래 텍스트 파일 문서집합을 문서벡터 구성, 유사도 행렬 계산, 클러스터링에 활용.
1) 특허문서 -- patent-1299.txt (한 라인에 특허문서 1개로 되어 있음)
2) 신문기사(IT 분야) 623개 파일
http://nlp.kookmin.ac.kr/down/data/ITnews.zip
5주차 [9월30일 - 10월06일]
5-1. Document Clustering 알고리즘
1. 준비 작업 -- 각 문서들에 대해
- Similarity matrix (upper or lower triangular matrix)
2. 클러스터링 기법
- 계층적(hiearchical) vs. 비계층적(non-hiearchical)
- 방법론: 응집(agglomerative) vs. 분할(divisive)
- Distribution-based vs. density-based
3. 계층적 클러스터링 알고리즘
SLINK, CLINK, Group Average Link, Ward's method
-> 연결기반 클러스터링 알고리즘
4. 비계층적 클러스터링 알고리즘
단일패스(Single pass) vs. 재배치(reallocation)
k-means algorithm
[10/03] 공휴일 보강 - 동영상 강의 및 실습
개천절 공휴일 보강수업은 첨부파일 중에서 아래 내용입니다.
1. 형태소 분석기 사용법, 어절빈도 계산
한국어 형태소 분석기 KMA 사용법
어절빈도 계산 - wordcount 사용법
어절빈도 계산 - 형태소 분석 및 wordcount 사용법
2. 워드클라우드 생성
워드클라우드 1
워드클라우드 2
[데모 사이트] k-means 알고리즘
https://stanford.edu/class/ee103/visualizations/kmeans/kmeans.html
https://home.deib.polimi.it/matteucc/Clustering/tutorial_html/AppletKM.html
--> 자바 설치 필요!
6주차 [10월07일 - 10월13일]
5-2. Term Clustering 알고리즘
[과제 5] 문서 클러스터링
첨부한 문서집합에 대해 순서대로 아래 작업을 수행하시오.
<<과제4>>
1) 키워드 추출(주로 명사)
2) wordid 부여 및 DF 계산
3) 문서벡터 구성
<<과제5>>
4) 유사도 행렬 구성
5) 문서 클러스터링
<참고> 보고서 내용에 SVM 학습데이터 파일 train.dat에 대해 클러스터링을 수행하고 그 실행결과의 스샷을 추가하세요. (첫 칼럼의 레이블 1,-1은 무시하고 문서벡터 f:v 부분만 사용함)
http://download.joachims.org/svm_light/examples/example1.tar.gz
<제출물>
1. 보고서(pdf파일, 실행화면 스샷 포함)
2. 소스
3. 문서벡터 파일 (train.dat 포맷에서 레이블만 없는 것)
4. 유사도 행렬 파일 (텍스트 파일)
5. 클러스터링 결과 파일 (텍스트 파일)
-> 클러스터 개수, 각 클러스터에 대한 문서 id 목록
7주차 [10월14일 - 10월20일]
6-1. Text Classification
6-2. 문서분류기 구현 및 실습
1. 자동 문서 분류 데모
https://dandelion.eu/semantic-text/entity-extraction-demo/
https://developer.aylien.com/text-api-demo -- working?
http://nlp.kookmin.ac.kr/demo/
2. Sentiment analysis on movie reviews
http://nlp.stanford.edu/sentiment/ -- DEMO
[1] Pang and L. Lee. 2005. Seeing stars: Exploiting class relationships for sentiment categorization with respect to rating scales. In ACL, pages 115–124.
[2] Recursive Deep Models for Semantic Compositionality Over a Sentiment Treebank, Richard Socher, Alex Perelygin, Jean Wu, Jason Chuang, Chris Manning, Andrew Ng and Chris Potts. Conference on Empirical Methods in Natural Language Processing (EMNLP 2013).
3. Naver sentiment movie corpus v1.0
https://github.com/e9t/nsmc/
[머신러닝 실습] sklearn -- http://scikit-learn.org
<실습 1> https://scikit-learn.org/stable/user_guide.html
1.4 SVM 실습 예제
https://scikit-learn.org/stable/modules/svm.html
>>> from sklearn import svm
>>> X = [[0, 0], [1, 1]]
>>> y = [0, 1]
>>> clf = svm.SVC(gamma='scale')
>>> clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape='ovr', degree=3, gamma='scale', kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)
>>>
>>> clf.predict([[2., 2.]])
array([1])
1.9 Naive Bayse 실습 예제
https://scikit-learn.org/stable/modules/naive_bayes.html
Iris dataset -- https://en.wikipedia.org/wiki/Iris_flower_data_set
>>> from sklearn import datasets
>>> iris = datasets.load_iris()
>>> from sklearn.naive_bayes import GaussianNB
>>> gnb = GaussianNB()
>>> y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)
>>> print("Number of mislabeled points out of a total %d points : %d"
... % (iris.data.shape[0],(iris.target != y_pred).sum()))
Number of mislabeled points out of a total 150 points : 6
<실습 2> "Intro. to Machine Learning with Python"
"파이썬 라이브러리를 활용한 머신 러닝" (한빛미디어)
https://github.com/amueller/introduction_to_ml_with_python
[참고자료] sklearn-on-practice파일 1.8MB PDF 문서 편집
8주차 [10월21일 - 10월27일]
<중간고사> 10/24(목) 수업시간, 10/22(화) 복습 및 QnA
9주차 [10월28일 - 11월03일]
텍스트 마이닝 : 분류, 클러스터링, 정보추출 등
A Brief Survey of Text Mining
- Classification, Clustering, Extraction
https://arxiv.org/pdf/1707.02919.pdf
딥러닝을 이용한 단어 벡터 구성 -> 워드 임베딩
1. 워드 임베딩 데모 사이트
http://turbomaze.github.io/word2vecjson/
http://bionlp-www.utu.fi/wv_demo/
http://vectors.nlpl.eu/explore/embeddings/en/ -- 시각화 등
2. word2vec 강의 동영상
<참고> 워드 임베딩 기법: Word2Vec, FastText, GLoVe, BERT, XLNet
1. 검색엔진 개요
- 색인, 역색인 : forward indexing, backward indexing
- TF-IDF 가중치 계산
- 문서벡터 구성
- Term table, posting file
- 검색 모델
10주차 [11월04일 - 11월10일]
2. 웹 검색 엔진
- 검색대상의 차이 -- 일반문서 vs. 웹문서
- html 태그 부착 여부 차이
- 중복 문서 제거 문제
- 웹문서 crawling 문제 -- 크롤러 성능(분산처리 등)
- 상위 ranking의 중요성 -- PageRank 알고리즘
3. 구글 검색엔진의 구조
Sergey Brin and Lawrence Page, "The Anantomy of a Large-Scale Hypertextual Web Search Engine", 7th World-wide Web Conference(WWW 1998), 1998.
4. PageRank 알고리즘
- "The PageRank Citation Ranking: Bringing Order to the Web"
- Rank sink 문제와 random surfer model
<참고> https://www.cs.princeton.edu/~chazelle/courses/BIB/pagerank.htm
5. Page rank 알고리즘 실습 - C언어 소스
- C 소스코드
문서 개수를 1만, 10만, 100만개 등으로 확장하는 방법은?
Most Popular Search Engines 1994 - 2019
Most Popular Websites 1996 - 2019
11주차 [11월11일 - 11월17일]
1. 검색 모델 - 확장 불린 모델
2. 검색 모델 - 벡터 모델, 확률 모델
3. 오픈소스 검색엔진 - Lucene 설치 및 실습
https://lucene.apache.org/
Lucene download: https://lucene.apache.org/core/downloads.html
Solr download: https://lucene.apache.org/solr/downloads.html
- Lucene Core
Java-based indexing and search technology, as well as spellchecking, hit highlighting and advanced analysis/tokenization capabilities.
- Solr
a high performance search server built using Lucene Core, with XML/HTTP and JSON/Python/Ruby APIs, hit highlighting, faceted search, caching, replication, and a web admin interface.
- PyLucene is a Python wrapper around the Core project.
<참고> https://cafe.naver.com/korlucene -- 루신 쏠라 커뮤니티
Elasticsearch - 분산형 검색엔진(distributed IR)
- https://www.elastic.co/kr/products/elasticsearch
설명서, tutorial: getting started
- https://www.elastic.co/guide/kr/elasticsearch/reference/current/getting-started.html
- https://logz.io/blog/elasticsearch-tutorial/
4. 정보 검색 시스템의 평가 방법
정보 검색 시스템의 평가 방법
- Recall and precision
- R-precision
- F-measure
- False Positives and False Negatives
- BLEU and ROUGE
- TREC and test collections
12주차 [11월18일 - 11월24일]
SQuAD(Stanford Question Answering Dataset)
MRC(Machine Reading Comprehension) 경진대회
NLTK 소개 -- http://www.nltk.org/
NLTK 실습
- http://www.datascienceassn.org/sites/default/files/Natural%20Language%20Processing%20with%20Python.pdf
- http://www.nltk.org/book/ch01.html
- http://www.nltk.org/book/ch03.html
13주차 [11월25일 - 12월01일]
[최종 과제] 검색엔진 구현 (중간보고서)
아래 신문기사 문서집합에 대한 검색엔진 구현
- 문서집합: 신문기사 383개 및 IT 분야 뉴스 1,000개 파일
- 구현방법: 아래 3가지 방법 중에서 한 가지를 선택
1) 아래와 같이 검색엔진 구현 과정으로 직접 구현
- 각 문서에 대해 Doc. ID 부여 -- DocID table
- forward indexing, backward indexing
- term table과 posting file로 분리하여 저장
- 키워드 검색
2) Lucene & Solr 로 구현
3) Elasticsearch 엔진으로 구현
<제출물> 보고서 pdf 파일(구현과정 설명, 실행화면 스샷 등), 소스파일(직접 구현한 경우)
머신러닝 실습
https://scikit-learn.org/
https://scikit-learn.org/stable/documentation.html
https://scikit-learn.org/stable/tutorial/index.html
https://scikit-learn.org/stable/user_guide.html
<참고> sk-learn 강의 동영상
https://tacademy.skplanet.com/live/player/onlineLectureDetail.action?seq=158
ImageNet, DNN, and ML datasets
1. ImageNet Challenges(ILSVRC: ImageNet Large Scale Visual Recognition Challenge)
http://www.image-net.org/
2. AlexNet, 2012 : error rate 25% -> 16%
"ImageNet Classification with Deep Convolutional Neural Networks", 2013.
http://www.image-net.org/challenges/LSVRC/2012/supervision.pdf
3. The 9 Deep Learning Papers You Need To Know About
https://adeshpande3.github.io/adeshpande3.github.io/The-9-Deep-Learning-Papers-You-Need-To-Know-About.html (Part 1, Part 2)
AlexNet(2012), ZF Net(2013), VGG Net(2014), GoogLe Net(2015), MS ResNet(2015), R-CNN(2013), GAN(2014), Generating Image Descriptions(2014), Spatial Transformer Networks(2015)
4. List of datasets for machine learning research :
image, text, sound, signal, physical, biological, anomaly, QA, multivariate
https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research
5. CNN 구조 - stride, padding, pooling 등
https://umbum.tistory.com/223
6. Neural Image Caption Generator
(데모) https://www.captionbot.ai/
https://arxiv.org/pdf/1411.4555.pdf
http://sanghyukchun.github.io/93/
https://arxiv.org/pdf/1502.03044.pdf
Activation functions in DNN - Softmax, ReLU, Sigmoid, Tanh
14주차 [12월02일 - 12월08일]
BPE and WPM, Sentiment Analysis
- Byte Pair Encoding 기법
- Word Piece Model tokenizer
VQA: Visual Question Answering
ChatScript: NLU 대화형 시스템 개발 도구
15주차 [12월09일 - 12월15일]
[최종 과제] 검색엔진 구현 (최종보고서)
16주차 [12월16일 - 12월22일]
WordNet 개요 및 실습
WordNet 참고자료
Collaborative Filtering