2009-02-23 4 views
11

이진화는 분류 자 ​​알고리즘에 대한 좋은 예를 만들기 위해 엔티티의 다채로운 기능을 숫자 벡터, 가장 자주 바이너리 벡터로 변환하는 행위입니다.자연 언어 처리의 이진화

"고양이가 개를 먹었다"라는 문장을 2 진수로 만들려면 모든 단어에 ID (예 : cat-1, ate-2, -3, dog-4)를 할당 한 다음 그것으로 벡터를 부여하는 단어로 바꾸십시오. < 3,1,2,3,4>.

이 ID가 주어지면 각 단어에 4 개의 가능한 슬롯을 지정하고 특정 단어에 해당하는 슬롯을 1로 설정하여 벡터 <001010 , 000100000,1>. 후자의 방법은, 내가 아는 한 일반적으로 bag-of-words-method라고 불립니다. 내 질문에 대한 지금

, 그것은 일반적으로 자연 언어 처리에 대한 기능을 설명하기 위해 제공하고 특히 (Nivres 알고리즘) 구문 분석 의존성을 전환 기반 때 최고의 이진화 방법은 무엇인가?

이 문맥에서 우리는 문장 전체를 인코딩하는 것이 아니라 구문 분석의 현재 상태, 예를 들어 스택의 맨 위 단어와 입력 대기열의 첫 번째 단어를 인코딩하려고합니다. 주문은 관련성이 높기 때문에 bag-of-words-method를 배제합니다.

으로, 나는 불필요한 메모리를 사용하지 않고 분류 자에게 가장 알기 쉬운 데이터를 만드는 방법을 언급하고 있습니다. 예를 들어 bigram이 실제로 존재하는 경우 단어 bigram에 20000 개의 고유 단어에 4 억 개의 기능을 사용하고 싶지 않습니다.

답은 특정 분류 기준에 따라 다르므로 최대 엔트로피 모델 (liblinear), 지원 벡터 시스템 (libsvm) 및 퍼셉트론에 주로 관심이 있지만 다른 모델에도 적용되는 답변도 환영합니다.

+1

이진화 란 무엇인지 모르겠지만 NLP에 익숙하지 않은 사람들에게 당신이 의미하는 바를 설명 할 수 있다면 많은 사람들이 같은 보트에 있다고 확신합니다. (적어도 우리가 대답하는데 도움이되지 않는다면, 그 주제를 이해하는 데 도움이 될 것입니다). –

+0

같음 - 이진화를 정의 할 수 있습니까? –

+0

아마도 '최고', 즉 공간 효율성이 가장 높고 처리 효율이 높고 가장 설명이 정확한 것을 정의 할 수 있습니다. – scotta

답변

4

이것은 실제로 실제로 복잡한 질문입니다. 첫 번째 결정은 입력 토큰 (단어)을 lemmatize으로할지 여부입니다. 이렇게하면 유형 수가 대폭 줄어들고 구문 구문 분석이 훨씬 덜 복잡해집니다. 그러나 토큰을 국소 화하기 위해서는 많은 작업이 필요합니다. 이제 컴퓨터 언어에서는 대부분의 언어가 공백이나 마침표 또는 기타 등의 잘 정의 된 기호 세트로 키워드 또는 변수 이름을 분리하므로이 작업이 크게 줄어 들었습니다.

두 번째로 중요한 결정은 데이터를 사실상 처리하는 것입니다. 당신이 제시 한 바이너리 형태의 "bag-of-words"방법은 단어 순서를 무시합니다. summarization of a text을 쓰거나, Google 스타일의 검색을하면 완전히 괜찮습니다. 단어가 나타나는 한 단어가 나타납니다. 반면에 컴파일러 나 파서 (parser)와 같은 것을 만들면 주문이 매우 중요합니다. 두 번째 단락에서와 같이 토큰 - 벡터 접근 방식을 사용할 수도 있고 bag-of-words 벡터의 각 0이 아닌 항목이 토큰의 선형 인덱스 위치를 포함하도록 bag-of-words 방식을 확장 할 수 있습니다 구절에.

마지막으로, parse trees을 구축하려는 경우 토큰 - 벡터 접근 방식을 사용하려는 이유는 분명한 이유가 있습니다. 토큰 - 벡터 방식의 모든 단어에 대해 하위 구문 ID를 유지하는 것이 번거롭기 때문입니다. bag-of-words 벡터이지만 토큰 벡터에서 "하위 벡터"를 만드는 것은 매우 쉽습니다. 실제로, Eric Brill은 그의 part-of-speech tagger을 위해 토큰 ID 시퀀스를 사용했는데, 이것은 정말로 깔끔합니다.

내가 어떤 특정 작업을하고 있는지 물어봐도 될까요?

+0

답변을 작성해 주셔서 감사합니다! :) 필자는 Brills 토큰 ID 시퀀스의 세부 사항을 확실히 확인할 것입니다. 토큰 선형 인덱스를 나타 내기 위해 정수가있는 BOW 표현을 사용하는 것에 대해 SVM 분류자를 사용하면이 방법이 효과적 일 것이라고 생각하십니까? –

+0

특정 작업은 liblinear의 최대 엔트로피 분류기와 함께 Nivres 선형 시간, 전환 기반 파싱 알고리즘을 구현 한 것입니다. –

+0

@sganslandt : SVM 분류 자의 경우 토큰 대신 n-gram (bigrams, trigrams 등)을 사용하는 것이 좋습니다. 로컬 문맥 순서는 유지되지만 전역 순서는 무시됩니다. 그런 다음 일반 낡은 bag-of-words를 사용하고 컨텍스트 정보를 유지할 수 있습니다. – Mike

0

[직접 대답이 아님] 구문 분석 및 처리하려는 대상에 따라 다르지만 일반적으로 짧은 인간 구문 처리 (예 : IVT)의 경우 신경망을 사용하여 패턴을 학습해야합니다. 이 바이너리는 분류 알고리즘 좋은 사례를 만들 수, 가장 자주 바이너리 벡터의 벡터로 기업의 다채로운 기능을 변환 의 행위입니다 좀 작은 vocubularies

3

매우 애큐 리트 될 수 있습니다.

나는 대부분 0 %와 100 %, 1 사이의 벡터의 특정 기능의 관련성을 (대표, (당신이 설명하는 이진되지 않음)01 사이의 값을 을 숫자 기능을 가로 질러왔다 100 %를 나타냄). 이에 대한 일반적인 예는 tf-idf 벡터입니다. 문서 (또는 문장)를 나타내는 벡터에서 표현 된 문서에 대한 해당 용어의 관련성을 나타내는 전체 어휘의 각 용어에 대한 값을가집니다.

마이크가 이미 his reply에서 말했듯이 이것은 넓은 분야에서 복잡한 문제입니다. 그의 조언 외에도 vector space model, vector space classificationlatent semantic indexing과 같은 기술을 시작 지점으로 사용하는 것이 유용 할 수 있습니다. 또한 word sense disambiguation 필드는 NLP의 표현 문제가 많은 feature과 많이 관련됩니다.

관련 문제