5

문장을 분석하여 예측을 구현하려고합니다. 나는 다음과 같이 위의 문장에 대한 데이터 구조를 가지고 다음 [오히려 지루한] 문장단어 연결을 저장하기위한 데이터 구조

Call ABC 
Call ABC again 
Call DEF 

싶습니다 고려해보십시오, 일반적으로

Call: (ABC, 2), (again, 1), (DEF, 1) 
ABC: (Call, 2), (again, 1) 
again: (Call, 1), (ABC, 1) 
DEF: (Call, 1) 

것은 Word: (Word_it_appears_with, Frequency), ....

고유 유의하시기 바랍니다 이 유형의 데이터에서 중복성. 명백하게, ABC의 주파수가 Call에서 2라면, Call의 주파수는 ABC에서 2이다. 어떻게 최적화합니까?

아이디어는 새로운 문장을 입력 할 때이 데이터를 사용하는 것입니다. 예를 들어 Call을 입력 한 경우 데이터에서 ABC이 문장에 표시 될 가능성이 높고 첫 번째 제안으로 제안한 다음 다시 입력하고 DEF이라고 말하기 쉽습니다.

나는 이것이 예측을 구현하는 백만 가지 방법 중 하나임을 알고 있으며, 나는 그것을 수행하는 다른 방법에 대한 제안을 간절히 고대합니다.

감사합니다.

+0

나는 당신의 목표가 충분히 실제적이 아니기 때문에 잘 정립 된 대답이 없다고 확신한다. 기본적으로 이것은 AI 문제이며 AI 솔루션은 대개 사람들이 함께 살 수있는 고유 한 단점을 가지고 있습니다. 그러나 정확한 컨텍스트를 알지 못하면 어떤 단점이 받아 들여질 수 있는지 알기가 어렵습니다. 이러한 이유로 귀하의 질문을 끝내기로 동의합니다. (그것은 매우 흥미 롭습니다, 제 견해로 스택 오버 플로우에 적합하지 않습니다.) – zneak

+0

즉, 당신은 당신의 단어에 대한 트리 표현을 사용할 수 있고 트리의 각 가지를 확률로 유지할 수 있습니다. 입력이 반복적이고 구문이 비교적 고정되어 있으면 잘 작동하지만 자연어와 일치하는 문제는 생깁니다. – zneak

+0

나는 나무를 사용할 수있다. 그렇지만 데이터의 중복성을 없애고 싶다. word2와 함께 발생하는 word1의 빈도는 분명히 word1과 함께 발생하는 word2와 같을 것이다. 또한 입력은 연속적이므로 확률은 문제가되지 않습니다. – WeNeigh

답변

1

양방향 그래프를 사용했을 수 있습니다. 노드를 빈도로 가장자리로 저장할 수 있습니다.

0

당신도 다음과 같은 데이터 구조를 사용할 수 있습니다

옵션 1 :

Map<String, Map<String, Long>> 
+0

구아바는 이것을 Table 클래스에서 구현했습니다. http://docs.guava-libraries.googlecode.com/git-history/v10.0.1/javadoc/com/google/common/collect/Table.html –

+0

@JohnB 알아두면 좋을 것 같습니다. 정보 주셔서 감사합니다. –

0

나는 두 가지 옵션 중 하나를 고려할 것

class Freq { 
    String otherWord; 
    int freq; 
} 

Multimap<String, Freq> mymap; 

아니면 테이블을

Table<String, String, int> 

위의 조건을 감안할 때 : 양방향 매핑을 원할 수 있습니다.

class Freq{ 
    String thisWord; 
    int otherFreq; 
    Freq otherWord; 
} 

이렇게하면 데이터 쌍을 매우 빠르게 업데이트 할 수 있습니다.

관련 문제