2.X/3. Dealing with Human Language

3-4-6. Stemming in situ

drscg 2017. 9. 24. 13:10

For the sake of completeness, we will finish this chapter by explaining how to index stemmed words into the same field as unstemmed words. As an example, analyzing the sentence The quick foxes jumped would produce the following terms:

완벽을 기하기 위하여, 형태소 분석을 하지 않은 단어와 형태소 분석을 한 단어를, 동일한 field에 색인하는 방법을 설명하면서, 이 장를 마무리하겠다. 예를 들어, The quick foxes jumped 라는 문장을 분석하면, 아래와 같은 단어를 얻을 수 있다.

Pos 1: (the)
Pos 2: (quick)
Pos 3: (foxes,fox) 
Pos 4: (jumped,jump) 

 

형태소 분석을 한 형태와 하지 않은 형태가 동일한 위치에 있다.

Warning

Read Is Stemming in situ a Good Idea before using this approach.

이 접근 방식을 사용하기 전에, Is Stemming in situ a Good Idea를 읽도록 하자.

To achieve stemming in situ, we will use the keyword_repeat token filter, which, like the keyword_marker token filter (see Preventing Stemming), marks each term as a keyword to prevent the subsequent stemmer from touching it. However, it also repeats the term in the same position, and this repeated term is stemmed.

동일한 field에 형태소 분석하기 위해, keyword_repeat token filter를 사용할 것이다. 이것은 keyword_marker token filter(Preventing Stemming 참조)처럼, 각 단어를 keywords로 표시하는데, 이것은 후속 형태소 분석기가 그것을 변경하는 것을 방지한다. 그러나 동일한 위치에 있는 단어를 반복하고, 이 반복된 단어는 형태소 분석된다.

Using the keyword_repeat token filter alone would result in the following:

keyword_repeat token filter 만을 사용하면, 아래처럼 나타난다.

Pos 1: (the,the) 
Pos 2: (quick,quick) 
Pos 3: (foxes,fox)
Pos 4: (jumped,jump)

 

형태소 분석을 한 것과 하지 않은 것의 형태가 동일하다. 불필요하게 반복되었다.

To prevent the useless repetition of terms that are the same in their stemmed and unstemmed forms, we add the unique token filter into the mix:

형태소 분석을 한 것과 하지 않은 것의 형태에서, 동일한 단어의 불필요한 반복을 피하기 위하여, uniquetoken filter를 추가한다.

PUT /my_index
{
  "settings": {
    "analysis": {
      "filter": {
        "unique_stem": {
          "type": "unique",
          "only_on_same_position": true 
        }
      },
      "analyzer": {
        "in_situ": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "keyword_repeat", 
            "porter_stem",
            "unique_stem" 
          ]
        }
      }
    }
  }
}

unique token filter는 중복 token이 동일한 위치에 나타난 경우에만 제거하도록 설정되었다.

keyword_repeat token filter는 반드시 형태소 분석기 이전에 나타나야 한다.

unique_stem filter는 형태소 분석기가 동작한 후에 중복된 단어를 제거한다.

Is Stemming in situ a Good Ideaedit

People like the idea of stemming in situ: "Why use an unstemmed field and a stemmed field if I can just use one combined field?" But is it a good idea? The answer is almost always no. There are two problems.

사람들은 동일한 field 에 형태소 분석하는 것을 좋아한다. "하나의 조합된 field를 사용할 수 있다면, 왜 형태소 분석을 한 field  형태소 분석을 하지 않은 field를 사용하는가?" 그러나 이것이 좋은 생각인가? 대답은 거의 항상 아니오 이다. 두 가지 문제가 있다.

The first is the inability to separate exact matches from inexact matches. In this chapter, we have seen that words with different meanings are often conflated to the same stem word: organs and organization both stem to organ.

첫 번째는 부정확한 일치와 정확한 일치를 구분하는 것이 불가능하다. 이 장에서, 다른 의미를 가진 단어가 동일한 형태소로 분석되는 것을 본적이 있다. organs 와 organization 은 모두 organs 로 형태소 분석된다.

In Using Language Analyzers, we demonstrated how to combine a query on a stemmed field (to increase recall) with a query on an unstemmed field (to improve relevance). When the stemmed and unstemmed fields are separate, the contribution of each field can be tuned by boosting one field over another (see Prioritizing Clauses). If, instead, the stemmed and unstemmed forms appear in the same field, there is no way to tune your search results.

Using Language Analyzers에서, 형태소 분석된 field에 대한 query(recall을 증가시키기 위하여)와, 형태소 분석되지 않은 field에 대한 query(relevance를 증가시키기 위해)를 조합하는 방법을 설명한 바 있다. 형태소 분석된 field와 그렇지 않은 field를 분리하면, 각 field의 기여도를, 어떤 field를 다른 field보다 강조(boost)하여, 조정할 수 있다. (Prioritizing Clauses 참조). 대신에, 형태소 분석된 형태와 되지 않은 형태가 동일한 field에 나타난다면, 검색 결과를 조정할 방법이 없다.

The second issue has to do with how the relevance score is calculated. In What Is Relevance?, we explained that part of the calculation depends on the inverse document frequency — how often a word appears in all the documents in our index. Using in situ stemming for a document that contains the text jump jumped jumps would result in these terms:

두 번째 문제는 relevance score의 계산 방법과 관련이 있다. What Is Relevance?에서, 계산의 일부는 IDF(Inverse Document Frequency, index에 있는 모든 document에서 단어가 나타나는 횟수)에 달려 있다고 설명했다. jump jumped jumps 라는 텍스트를 가진 document를 동일한 field에 형태소 분석하면, 아래 결과처럼 나타난다.

Pos 1: (jump)
Pos 2: (jumped,jump)
Pos 3: (jumps,jump)

While jumped and jumps appear once each and so would have the correct IDF, jump appears three times, greatly reducing its value as a search term in comparison with the unstemmed forms.

jumps 와 jumped 는 각각 한번씩 나타나, 올바른 IDF를 가지는 반면에, jump 는 세 번 나타난다. 형태소 분석을 하지 않은 단어에 비해서 검색어로서 그 가치가 많이 축소된다.

For these reasons, we recommend against using stemming in situ.

이러한 이유로, 동일한 위치에 형태소 분석하는 것을 추천하지 않는다.


'2.X > 3. Dealing with Human Language' 카테고리의 다른 글

3-4-4. Choosing a Stemmer  (0) 2017.09.24
3-4-5. Controlling Stemming  (0) 2017.09.24
3-5. Stopwords: Performance Versus Precision  (0) 2017.09.24
3-5-1. Pros and Cons of Stopwords  (0) 2017.09.24
3-5-2. Using Stopwords  (0) 2017.09.24