문제

N-Grams (바람직하게는 PHP)로 일부 응용 프로그램을 구현하고 싶습니다.


대부분의 목적에 대해 어떤 유형의 N- 그램이 더 적합합니까? 단어 레벨 또는 캐릭터 레벨 N- 그램? PHP에서 N-Gram-Tokenizer를 어떻게 구현할 수 있습니까?


첫째, 나는 N-Grams가 정확히 무엇인지 알고 싶습니다. 이 올바른지? 내가 N-Grams를 이해하는 방법입니다.

문장 : "나는 뉴욕에 산다."

Word Level bigrams (2 for n) : " # i ',"i live ","live in ","in ny ",'ny # '

캐릭터 레벨 bigrams (2 for n) : "#i", "i#", "#l", "li", "iv", "ve", "e#", "#i", "in", " n#","#n ","ny ","y#"

이 N- 그램 파트가있는이 배열이 있으면 중복 배열을 떨어 뜨리고 주파수를 제공하는 각 부품에 카운터를 추가합니다.

Word Level bigrams : [1, 1, 1, 1, 1

캐릭터 레벨 bigrams : [2, 1, 1, ...

이 올바른지?


또한 N-Grams로 할 수있는 일에 대해 자세히 알고 싶습니다.

  • n- 그램을 사용하여 텍스트 언어를 어떻게 식별 할 수 있습니까?
  • 이중 언어 코퍼스가 없어도 N- 그램을 사용하여 기계 번역을 할 수 있습니까?
  • 스팸 필터 (스팸, 햄)를 어떻게 구축 할 수 있습니까? N- 그램을 베이지안 필터와 결합 하시겠습니까?
  • 주제 스포팅을 어떻게 할 수 있습니까? 예를 들어 : 농구 나 개에 대한 텍스트입니까? 내 접근 방식 ( "개"및 "농구"에 대한 위키 백과 기사를 사용하여 다음을 수행) : 두 문서에 대한 N- 그램 벡터를 구축하고 정상화하고 맨해튼/유클리드 거리를 계산하면 결과는 1에 가까워집니다. 유사성

내 응용 프로그램 접근법, 특히 마지막 응용 프로그램에 대해 어떻게 생각하십니까?


나는 당신이 나를 도울 수 있기를 바랍니다. 미리 감사드립니다!

도움이 되었습니까?

해결책

Word N-Grams는 일반적으로 언어 탐지를 제외하고 언급 한 대부분의 텍스트 분석 응용 프로그램에 더 유용합니다. 문자 트리 그램과 같은 것이 더 나은 결과를 제공 할 수 있습니다. 효과적으로, 당신은 각 언어에서 텍스트 코퍼스에 대한 n 그램 벡터를 만들고, 각 코퍼스의 트리 그램 주파수를 분류하는 문서의 트리 그램과 비교할 수 있습니다. 예를 들어, 트리 그램 the 아마도 독일어보다 영어로 훨씬 더 자주 나타나며 어느 정도의 통계적 상관 관계를 제공 할 것입니다. N-Gram 형식의 문서가 있으면 추가 분석, Baysian 필터, N- 가장 가까운 이웃, 지원 벡터 머신 등 많은 알고리즘을 선택할 수 있습니다.

당신이 언급 한 응용 프로그램 중에서, 기계 번역은 아마도 가장 멀리 떨어져있을 것입니다. 입력 파일을 N-Gram 표현으로 변환하는 것은 추가 기능 분석을 위해 데이터를 형식으로 배치하는 방법 일뿐 만 아니라 많은 상황 정보를 잃어 버릴 때 번역에 유용하지 않을 수 있습니다.

조심해야 할 한 가지는 하나의 문서와 다른 문서의 경우 벡터 [1,1,1,2,1]를 만드는 것만으로는 충분하지 않다는 것입니다. 치수는 일치하지 않습니다. 즉, 벡터의 첫 번째 항목은 the 하나의 문서와 is 다른 사람에서는 알고리즘이 작동하지 않습니다. 대부분의 문서에는 관심이있는 대부분의 N- 그램이 포함되어 있지 않기 때문에 [0,0,0,1,1,0,0,0,0,0,1]과 같은 벡터가 있습니다. 기능의 업이 필수적이며 분석에 포함 할 NGRAM을 '미리'결정해야합니다. 종종 이것은 두 가지 패스 알고리즘으로 구현되어 먼저 무엇을 유지 해야하는지 결정하기 위해 다양한 N- 그램의 통계적 유의성을 결정합니다. 자세한 내용은 Google '기능 선택'입니다.

Word 기반 N- 그램 플러스 벡터 머신은 주제 스포팅을 수행하는 훌륭한 방법으로 벡터 머신을 지원하지만, 분류기를 훈련시키기 위해 '주제'및 '오프 주제'로 분류 된 큰 텍스트 코퍼스가 필요합니다. 당신은 같은 사이트 에서이 문제에 대한 다양한 접근법을 설명하는 많은 수의 연구 논문을 찾을 수 있습니다. Citeseerx. 통계적 유의성에 따라 개별 N- 그램을 가중치하지 않기 때문에이 문제에 대한 유클리드 거리 접근법을 권장하지 않으므로 둘 다 포함하는 두 문서 the, a, is, 그리고 of 둘 다 포함 된 두 문서보다 더 나은 일치로 간주됩니다. Baysian. N-Grams에서 스톱워드를 제거하면 이것을 다소 향상시킬 수 있습니다.

다른 팁

당신은 n 그램의 정의에 대해 맞습니다.

검색 유형 애플리케이션에 Word Level N-Grams를 사용할 수 있습니다. 문자 수준 N- 그램은 텍스트 자체를 분석하는 데 더 많이 사용할 수 있습니다. 예를 들어, 텍스트의 언어를 식별하기 위해 언어의 확립 된 주파수와 비교하여 문자의 빈도를 사용합니다. 즉, 텍스트는 그 언어로 문자의 발생 빈도와 대략 일치해야합니다.

PHP에서 단어에 대한 N- 그램 토큰 화기는 strtok을 사용하여 수행 할 수 있습니다.

http://us2.php.net/manual/en/function.strtok.php

문자의 경우 분할을 사용합니다.

http://us2.php.net/manual/en/function.str-split.php

그런 다음 N- 그램으로 원하는대로 배열을 분할 할 수 있습니다.

베이지안 필터는 스팸 필터로 사용하도록 훈련되어야하며 N- 그램과 함께 사용할 수 있습니다. 그러나 배우려면 많은 정보를 제공해야합니다.

마지막 접근 방식은 페이지의 맥락을 배우는 한 괜찮은 것처럼 들립니다. 그러나 이것은 여전히하기가 어렵지만 N-Grams는 그렇게하기에 좋은 출발점처럼 들립니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top