전체 글(113)
-
[NLP] ppmi과 SVD 차원축소
단어발생행렬과 코사인 유사도를 통해 측정한 유사도는 한가지 문제점이 있다. 영어의 경우 a나 the 같은 정관사들은 출현빈도가 매우 높은데, 다른 단어들과의 동시발생확률이 높기때문에 코사인 유사도가 높게 측정될 수 있다. 이러한 이유로 만들어진 것이 PMI(pointwise mutual information)이다. PMI는 전체 corpus에서 단어의 출현빈도가 고려된 유사도 측정 기법이다. 동시발생확률(P(w1, w2))에서 각 w1, w2의 전체 출현빈도가 나누어지기 때문에 단순히 출현빈도가 높은 이유만으로 유사도가 높게 특정되는 일은 없게 된다. 다만 PMI는 log값을 취하기 때문에 동시발생이 일어나지 않았으면(분자가 0) log가 - 무한대이기 때문에 음수는 0으로 처리한 방식이 PPMI이다. ..
2023.02.12 -
[NLP] 동시발생행렬
저번 장에서는 말뭉치의 단어들 하나하나에게 인덱스를 부여하는 법을 배웠다. 컴퓨터를 이 단어-인덱스 쌍을 통해서 단어를 인덱스로 이해할 수 있다. 단어를 벡터화해보자. 단어를 벡터화하면 단어 하나에 컴퓨터가 이해할 수 있도록 의미를 담아낼 수 있다. 컴퓨터는 이 벡터를 통해 단어의 의미를 유추해내고, 단어 간의 관계를 계산해낼 수 있다. 단어를 벡터화하는 기본적인 방법 중 하나는 동시발생행렬을 만드는 것이다. 동시발생행렬은 단어 주변에서 같이 존재하는 단어를 통계화한 결과를 행렬로 나타낸 것이다. 다음의 예를 살펴보자. You say goodbye and i say hello. window를 1로 설정했을 때, you의 경우, You say goodbye and i say hello. say만 동시에 나..
2023.02.12 -
[NLP] 말뭉치 전처리
우리가 사용하는 언어를 컴퓨터가 이해할 수 있는 형태로 변환하기 위한 첫걸음은 말을 단어 단위로 분해한 뒤 이를 숫자로 표현하는 것이다. text = 'I have lived a life of shame.' 위 문장을 단어로 분해하면 I / have / lived / a / life / of / shame. 이다. 이 단어 하나하나를 말뭉치(corpus)로 만들어서 컴퓨터가 이해할 수 있도록 indexing한다. text = text.lower() text = text.replace('.', ' .') words = text.split(' ') 먼저 text 전체를 소문자로 바꾸로 공백 단위로 split 한다. word_to_id = {} id_to_word = {} 그리고 나서 단어를 인덱스로, 거꾸로..
2023.02.12 -
[Topcoder] InterestingParty(흥미로운 파티)
화이트 씨는 매우 다재다능한 사람이다. 그에게는 모든 것이 확실히 흥미롭다. 아마도 이것이 그에게 많은 친구들이 있는 이유일 것이다. 하지만, 꽤 불행하게도, 그의 친구들 중 누구도 다재다능하지 않다. 그들은 각각 두 가지 주제에만 관심이 있고 다른 어떤 것에 대해서도 말하기를 거부한다. 따라서 화이트 씨가 파티를 조직할 때마다 파티가 모두에게 흥미롭게 보이도록 누구를 초대할지 결정하는 것은 큰 문제입니다. 화이트 씨는 파티를 조직한 경험이 많기 때문에 초대받은 친구들 각자에게 흥미로운 주제가 있을 때만 파티가 흥미로울 것이라는 것을 확실히 알고 있습니다. 당신은 first과 second을 받게 될 것입니다. 화이트 씨의 i번째 친구는 first[i] 와 second[i]주제에 관심이 많다. 화이트 씨가..
2023.02.12 -
[Topcoder] Freindscore(친구 점수)
소셜 네트워크에서 가장 인기 있는 사람을 결정하려고 합니다. 이렇게 하기 위해, 여러분은 각각의 사람들이 가지고 있는 "2-친구"의 수를 셀 것입니다. 사람 A는 서로 친구이거나 A와 B의 친구인 사람 C가 존재하는 경우 다른 사람 B의 2-친구라고 불린다. 가장 인기 있는 사람은 2-친구가 가장 많은 사람입니다. (여러 명이 2- 친구가 가장 많은 경우에는 둘 이상일 수 있습니다.) 친구가 주어지는데, i번째 요소의 j번째 문자는 인칭 i와 인칭 j가 친구이면 'Y'이고, 그렇지 않으면 'N'이다. 이 소셜 네트워크에서 가장 인기 있는 사람의 친구 2명의 번호를 반환합니다. Definition Class: FriendScore Method: highestScore Parameters: tuple (st..
2023.02.12 -
[Topcoder] ThePalindrome(회문)
존과 브루스는 대학에서 끈 이론을 공부하고 있다. 브루스는 회문을 매우 좋아한다. 회문은 앞과 뒤를 똑같이 읽는 단어이다. 존은 s를 취하고, 회음을 얻기 위해 s의 끝에 0개 이상의 문자를 추가함으로써 브루스를 놀라게 하고 싶어한다. 그는 회음부가 가능한 한 짧기를 원한다. 존이 생성할 수 있는 가장 짧은 회문 길이를 반환합니다. Definition Class: ThePalindrome Method: find Parameters: string Returns: integer Method signature: def find(self, s): Examples 0) "abab" Returns: 5 "ababa" is the shortest palindrome that John can get. 1) "abaca..
2023.02.12