왜 단어 대신 텍스트 언어 식별에 n-gram이 사용됩니까?


12

널리 사용되는 두 가지 언어 식별 라이브러리 인 C ++ 용 Compact Language Detector 2와 Java 용 언어 탐지기 에서 둘 다 (문자 기반) n-gram을 사용하여 텍스트 기능을 추출했습니다. 단어 백 (한 단어 / 사전)이 사용되지 않는 이유는 무엇입니까? 단어 백과 n- 그램의 장점과 단점은 무엇입니까?

또한 텍스트 분류에서 n-grams 모델의 다른 용도는 무엇입니까?

오 이런 여기에 비슷한 질문이있는 것 같습니다 : bigram (N-gram) 모델을 사용하여 텍스트 문서의 피처 벡터를 작성 하는 것과 관련

그러나 누군가 더 포괄적 인 답변을 줄 수 있습니까? 언어 식별의 경우 어느 것이 더 낫습니까?

(다행스럽게도 n-gram과 bag-of-words의 의미를 알았습니다. 하하, 그렇지 않으면 도와주세요.)

답변:


20

가장 자세한 답변은 Mehryar Mohri의 주제에 대한 광범위한 연구에서 찾을 수 있습니다. 다음은 주제에 대한 강의 슬라이드 중 하나에 대한 링크입니다. http://www.cims.nyu.edu/~mohri/amls/lecture_3.pdf

언어 감지의 문제점은 인간 언어 (단어)가 구조를 가지고 있다는 것입니다. 예를 들어 영어에서는 문자 'u'가 문자 'q'를 따르는 것이 매우 일반적이지만, 음역 된 아랍어에서는 그렇지 않습니다. n- 그램은이 구조를 캡처하여 작동합니다. 따라서 특정 언어 조합은 다른 언어보다 일부 언어에서 더 가능성이 높습니다. 이것이 n- 그램 분류의 기초입니다.

반면에 Bag-of-words는 큰 사전을 통해 검색하고 본질적으로 템플릿 일치를 수행하는 데 달려 있습니다. 여기에는 두 가지 주요 단점이 있습니다. 1) 각 언어에는 파일에 광범위한 단어 사전이 있어야하며, 검색하는 데 시간이 오래 걸리고 2) 단어가 없으면 실패합니다. 훈련 세트는 테스트 세트에 포함됩니다.

bigrams (n = 2)를 사용하고 있고 알파벳에 26 개의 문자가 있다고 가정하면 해당 알파벳에 대해 26 ^ 2 = 676 개의 가능한 bigram 만 있으며 그 중 많은 수가 절대 발생하지 않습니다. 따라서 각 언어에 대한 "프로필"(언어 감지기의 단어를 사용하기 위해)에는 매우 작은 데이터베이스가 필요합니다. 반면에 단어 백 분류기는 주어진 문장에 따라 언어를 감지 할 수 있도록 각 언어에 대한 전체 사전이 필요합니다.

간단히 말해 각 언어 프로파일은 비교적 작은 기능 공간으로 빠르게 생성 될 수 있습니다. 흥미롭게도 n-gram은 문자가 언어로 iid로 그려지지 않기 때문에 작동합니다. 이는 명시 적으로 활용됩니다.

참고 : 단어의 n- 그램 수에 대한 일반적인 방정식은 l ^ n입니다. 여기서 l은 알파벳의 글자 수입니다.


일부 가까운 언어의 경우 n-gram 외에도 단어 목록을 사용하면 도움이 될 것입니다. 때때로 노르웨이어 텍스트가 덴마크어로 분류 된 것을 보았습니다. n- 그램이 두 언어를 구별하는 좋은 방법이라고 생각합니다.
kjetil b halvorsen 12

자세한 답변 감사합니다. 그러나 이것에 관한 몇 가지 질문이 있습니다. 첫째, '훈련 세트의 단어가 테스트 세트에 포함되어 있지 않으면 단어 백이 실패합니다'라고 설명 할 수 있습니까? 둘째, 왜 CLD2가 4 그램을 사용하고 있는데, 사전 방법을 사용할 때 영어로 456976 개의 항목이 생기면 프로필 크기의 절반 ( oxforddictionaries.com/words/… )이 발생할 수 있습니까?
dennis97519

1
@ dennis97519 re : "bag-of-words ..."사전이 영어 용 { "dog", "cat", "turtle", "animal"} 및 { "perro", "gato"단어만으로 구성되어 있다고 가정합니다. , "tortuga", "animal"} 스페인어 사전은 다음 문장을 분류 할 수 없습니다. "동물"이라는 단어가 두 사전에 모두 나타나지만 다른 단어는 존재하지 않기 때문에 "당나귀는 동물"입니다. 이것은 극단적 인 예입니다. 다시 4 그램 : 1) 각 언어에 대한 사전이 필요하다는 것을 기억하십시오. 2) n 그램은 희박한 (더 빠른 검색) 경향이 있으며 3) Dougal이 말했듯이 몇 바이트만으로도 표현 될 수 있습니다.
justanotherbrain

1
@loretoparisi-두 가지 장단점이 있습니다. 첫 번째는 모델 복잡성 (대형 N = 더 복잡함)과 일반화 오류 (일부 테스트 세트에서 얼마나 잘 수행하는지)입니다-과적 합을 원하지 않습니다. 두 번째 절충은 계산 복잡성입니다. 메모리 복잡도는 N과 함께 기하 급수적으로 증가합니다. 훈련은 일반적으로 텍스트의 단어 수와 선형이므로 매우 긴 텍스트를 갖는 것은 일반적으로 문제가되지 않습니다. 즉, 큰 텍스트는 종종 사전 D에서 더 많은 단어를 의미합니다. 따라서 메모리 복잡도는 O (D ^ N)입니다. 실제로는 계산에 가능한 한 큰 N을 사용하는 것이 가장 좋습니다.
justanotherbrain

1
@loretoparisi-앞서 언급했듯이 N 그램은 드문 경향이 있지만 항상 그런 것은 아닙니다. 특정 텍스트에 대해 드문 경우 다른 N을 사용하여 교차 유효성 검사하는 것이 최적의 N을 찾는 가장 좋은 방법입니다 (다시 계산 제약 조건 사용).
justanotherbrain

3

여러 가지 이유로 단어 대신 문자 N- 그램이 사용됩니다.

1) 주어진 언어에 필요한 단어의 목록은 매우 큽니다. 빠르고 빠르거나 빠르거나 금식하고 금식과 금식 등 모든 다른 단어로 간주하면 아마도 100,000 일 것입니다. 80 개 언어의 경우 약 80 배 많은 단어가 필요하며 50MB 이상의 공간을 차지합니다.

2) 26 글자 알파벳의 문자 트리 그램 수는 26 ** 3 또는 약 17,000이며, 해당 알파벳을 사용하는 모든 언어를 포함하는 약 450,000의 쿼드 그램 (N = 4)입니다. 30-100 자의 더 큰 알파벳에서 N- 그램에 대해 비슷하지만 다소 큰 숫자입니다. Han 스크립트에서 4000 개 이상의 문자가 포함 된 CJK 언어의 경우 유니 그램 (N = 1)이면 충분합니다. 일부 유니 코드 스크립트의 경우 스크립트 당 하나의 언어 (그리스어, 아르메니아어) 만 있으므로 문자 조합이 필요하지 않습니다 (일명 nil-grams N = 0).

3) 단어를 사용하면 사전에없는 단어가 주어지면 정보가 전혀 없으며 문자 N 그램을 사용하면 해당 단어 내에 적어도 몇 가지 유용한 문자 조합이 있습니다.

CLD2는 라틴어, 키릴 자모 및 아랍어를 포함한 대부분의 유니 코드 스크립트 (알파벳)에 대해 쿼드 그램을 사용하고, CJK 스크립트에 대한 유니 그램, 다른 스크립트에 대해서는 닐 그램을 포함하며, 구별하기 위해 상당히 명확하고 일반적으로 완전한 완전한 단어와 단어 쌍을 포함합니다. 인도네시아어 및 말레이어와 같은 통계적으로 유사한 언어의 어려운 그룹 내에서. 문자 bigram 및 trigram은 소수의 언어를 구별하는 데 유용 할 수 있습니다 (약 8 개, https://docs.google.com/document/d/1NtErs467Ub4yklEfK0C9AYef06G_1_9NHL5dPuKIH7k/edit 참조))이지만 수십 개의 언어를 구별하는 데는 쓸모가 없습니다. 따라서 CLD2는 쿼드 그램을 사용하여 각 문자 조합과 해당 조합을 사용하는 가장 가능성이 높은 3 가지 언어를 연결합니다. 이를 통해 약 1.5MB의 테이블로 약 80 개의 언어를, 약 5MB의 테이블로 160 개의 언어를 더 자세하게 다룰 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.