요약
과거 3가지 문제가 있었음
지금은
미리 말하는 결론
한국어를 위한 아주 좋은 형태소분석기, 구문분석기가 많지 않음
구문분석기 (Language Parser)
“아버지가 식사를 하신다”
“아버지가” ➡️ 주어 / “식사를” ➡️ 목적어 / “하신다” ➡️ 서술어
개체명인식기 (NER, Named Entity Recognition)
개체명: 제품명, 지명, 인명, 기관명, 회사명, 브랜드명, 이메일, URL, 전화번호?
기생충은 스토리 만으로도 훌륭하고 일상 코메디 물과 어찌보면 스릴러가 함께 잘 혼합된 영화라고 볼 수 있습니다.
그러나 이야기를 관통하고 많은 장면에서 보이는 계단을 통해 사회적인 높낮이와 실질적인 장소로서의 높낮이로 이야기를 풀어가고 있습니다.
...
아버지가방에들어가신다
➡️
아버지가 방에 들어가신다
아버지 가방을 고쳐드렸다
➡️
아버지가방을 고쳐드렸다
형태소분석기의 세그멘테이션과 문법상 띄어쓰기는 사실 다름
무궁화_꽃_이_피었_습니다
무궁화꽃이_피었습니다
세그멘테이션은 검색을 위한 인덱서로 많이 사용했던 경향이 있음
개체명(Named Entity)의 예
문제
자연어처리를 위한 기계학습, 전산언어연구를 하기 위한 자료와 지원 부족
워드클라우드 wordcloud
자원소모가 많고 수고가 많이 드는 작업
꿈보다는 해몽
t-SNE는 고차원의 데이터를 저차원으로 줄여서 표현
자연어처리를 위해서 유사문서, 중복문서를 묶는데 클러스터링을 사용
거리측정 (Distance Measure)
Term Frequency Inverse Document Frequency
ibrary(dplyr)
library(janeaustenr)
library(tidytext)
book_words <- austen_books() %>%
unnest_tokens(word, text) %>%
count(book, word, sort = TRUE)
total_words <- book_words %>%
group_by(book) %>%
summarize(total = sum(n))
book_words <- left_join(book_words, total_words)
# ...
# 이하 생략. 코드가 조금 길지만 명료함
# ...
library(superml)
sents <- c('i am going home and home',
'where are you going.? //// ',
'how does it work',
'transform your work and go work again',
'home is where you go from to work')
sents <- rep(sents, 10)
tfv <- TfIdfVectorizer$new(max_features = 10, remove_stopwords = FALSE)
tf_mat <- tfv$fit_transform(sents)
head(tf_mat, 3)
#> work home you where going go and your transform
#> [1,] 0 0.8164966 0.0000000 0.0000000 0.4082483 0 0.4082483 0 0
#> [2,] 0 0.0000000 0.5773503 0.5773503 0.5773503 0 0.0000000 0 0
#> [3,] 1 0.0000000 0.0000000 0.0000000 0.0000000 0 0.0000000 0 0
#> to
#> [1,] 0
#> [2,] 0
#> [3,] 0
원핫인코딩 (One hot encoding)
“무궁화 꽃이 피었습니다”
단어 | 인덱스 | 원핫벡터 |
---|---|---|
무궁화 | 0 | 1 0 0 |
꽃이 | 1 | 0 1 0 |
피었습니다 | 2 | 0 0 1 |
원문: “자율주행 자동차는 기계가 스스로 운행하는 자동차를 말한다.”
워드임베잉 Word Embedding이란?
brary(wordVectors)
library(readr)
model = train_word2vec(train_file = "./word2vec/RecData.txt"
, threads=3
, vectors=100
, force = T
, window = 6
, output_file = "./word2vec/word2vec_model.bin")
model = wordVectors::read.binary.vectors("./word2vec/word2vec_model.bin")
result <- nearest_to(model, model[["마케팅"]], 20)
result
library(text2vec)
text8_file = "~/text8"
if (!file.exists(text8_file)) {
download.file("http://mattmahoney.net/dc/text8.zip", "~/text8.zip")
unzip ("~/text8.zip", files = "text8", exdir = "~/")
}
wiki = readLines(text8_file, n = 1, warn = FALSE)
tokens <- space_tokenizer(wiki)
it = itoken(tokens, progressbar = FALSE)
vocab <- create_vocabulary(it)
vocab <- prune_vocabulary(vocab, term_count_min = 5L)
vectorizer <- vocab_vectorizer(vocab)
tcm <- create_tcm(it, vectorizer, skip_grams_window = 5L)
glove <- GlobalVectors$new(rank = 50, x_max = 10)
wv_main <- glove$fit_transform(tcm, n_iter = 10, convergence_tol = 0.01, n_threads = 8)
wv_context <- glove$components
word_vectors <- wv_main + t(wv_context)
library(fastText)
list_params = list(command = 'cbow', lr = 0.1, dim = 50,
input = "example_text.txt",
output = file.path(tempdir(), 'word_vectors'),
verbose = 2, thread = 1)
res = fasttext_interface(list_params,
path_output = file.path(tempdir(), 'cbow_logs.txt'),
MilliSecs = 5, remove_previous_file = TRUE,
print_process_time = TRUE)
RStudio의 Keras 패키지를 사용하여 BERT를 사용할 수 있음
여전히 과거의 방법과 동일한 방법을 시도
※ 예전에도 하던 것들이지만 더 그럴듯한 쓸만한 결과가 나옴
워드임베딩을 사용해야 하나? TFIDF벡터라이즈를 사용해야 하나?
Question? Answer!